145 lines
2.9 KiB
Markdown
145 lines
2.9 KiB
Markdown
# 🧬 LPKG – Lightweight Package Manager
|
||
|
||
LPKG is a minimalistic package manager written in Rust, designed for fast and simple software management on Unix-like systems. It emphasizes reproducibility and declarative configuration, leveraging **Nix Flakes** for development and deployment.
|
||
|
||
---
|
||
|
||
## 🚀 Features
|
||
|
||
* **Fast & Lightweight** – Minimal resource usage and quick operations.
|
||
* **Rust-Powered** – Safe and concurrent code with Rust.
|
||
* **Cross-Platform** – Works on Linux and macOS.
|
||
* **Declarative Builds** – Fully reproducible with Nix Flakes.
|
||
* **Simple CLI** – Intuitive commands for managing packages.
|
||
|
||
---
|
||
|
||
## ⚙️ Installation
|
||
|
||
### Using Cargo
|
||
|
||
```bash
|
||
cargo install lpkg
|
||
```
|
||
|
||
### Using Nix Flakes
|
||
|
||
If you have Nix with flakes enabled:
|
||
|
||
```bash
|
||
nix profile install github:lesbiannix/lpkg
|
||
```
|
||
|
||
Or to run without installing:
|
||
|
||
```bash
|
||
nix run github:lesbiannix/lpkg
|
||
```
|
||
|
||
---
|
||
|
||
## 🧰 Usage
|
||
|
||
Basic command structure:
|
||
|
||
```bash
|
||
lpkg [command] [package]
|
||
```
|
||
|
||
Common commands:
|
||
|
||
* `install` – Install a package
|
||
* `remove` – Remove a package
|
||
* `update` – Update the package list
|
||
* `upgrade` – Upgrade all installed packages
|
||
|
||
For detailed usage:
|
||
|
||
```bash
|
||
lpkg --help
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Development with Flakes
|
||
|
||
Clone the repository:
|
||
|
||
```bash
|
||
git clone https://github.com/lesbiannix/lpkg.git
|
||
cd lpkg
|
||
```
|
||
|
||
Enter the flake development shell:
|
||
|
||
```bash
|
||
nix develop
|
||
```
|
||
|
||
Build the project:
|
||
|
||
```bash
|
||
cargo build
|
||
```
|
||
|
||
Run tests:
|
||
|
||
```bash
|
||
cargo test
|
||
```
|
||
|
||
You can also run the project directly in the flake shell:
|
||
|
||
```bash
|
||
nix run
|
||
```
|
||
|
||
### AI metadata tooling
|
||
|
||
The AI metadata store under `ai/metadata/` comes with a helper CLI to
|
||
validate package records against the JSON schema and regenerate
|
||
`index.json` after adding new entries:
|
||
|
||
```bash
|
||
cargo run --bin metadata_indexer -- --base-dir . validate
|
||
cargo run --bin metadata_indexer -- --base-dir . index
|
||
```
|
||
|
||
Use `--compact` with `index` if you prefer single-line JSON output.
|
||
|
||
To draft metadata for a specific book page, you can run the harvest mode.
|
||
It fetches the XHTML, scrapes the build commands, and emits a schema-
|
||
compliant JSON skeleton (pass `--dry-run` to inspect the result without
|
||
writing to disk):
|
||
|
||
```bash
|
||
cargo run --bin metadata_indexer -- \
|
||
--base-dir . harvest \
|
||
--book mlfs \
|
||
--page chapter05/binutils-pass1 \
|
||
--dry-run
|
||
```
|
||
|
||
Keep the jhalfs manifests current with:
|
||
|
||
```bash
|
||
cargo run --bin metadata_indexer -- --base-dir . refresh
|
||
```
|
||
|
||
Passing `--books mlfs,blfs` restricts the refresh to specific books, and
|
||
`--force` bypasses the local cache.
|
||
|
||
## 📚 Documentation
|
||
|
||
- [Architecture Overview](docs/ARCHITECTURE.md) – high-level tour of the crate
|
||
layout, binaries, and supporting modules.
|
||
- [Metadata Harvesting Pipeline](docs/METADATA_PIPELINE.md) – how the metadata
|
||
indexer produces and validates the JSON records under `ai/metadata/`.
|
||
- `ai/notes.md` – scratchpad for ongoing research tasks (e.g., deeper jhalfs
|
||
integration).
|
||
|
||
---
|
||
|
||
## 📄 License
|
||
|
||
LPKG is licensed under the [MIT License](LICENSE).
|