nixman
A Nix-inspired package manager for Arch Linux, designed to make system package management reproducible, auditable, and scriptable—without overstepping into areas you want to control yourself.
Features
- Track and manage installed packages using a simple YAML file (
packages.yml) - Install, remove, and list packages with
pacmanorparufrom the command line - Freeze your current package state to YAML (optionally with versions)
- Apply a YAML configuration to synchronize installed packages
- Update all packages and update the YAML
- Library API: Use as a Rust library to programmatically manipulate pacman packages
Why?
Arch Linux is powerful, but keeping your package list in sync across machines is tedious. nixman lets you:
- Reproduce your package set on a new install by copying your YAML file and running
nixman apply --pacstrap - Track your package state in version control
- Share your package list with others
- Script package management tasks in Rust
Unlike NixOS, nixman does not automate partitioning, timezones, or other system setup—just package management. You keep full control over your install process.
Quickstart
1. Install
You can install nixman using Cargo, either from crates.io or from your local clone:
From crates.io:
From a local clone:
2. Track Your Packages
Freeze your current package list to YAML:
This creates (or updates) ~/.config/nixman/packages.yml.
3. Apply on a New System
Copy your packages.yml to the new system, then run:
This will install all packages listed in the YAML using pacstrap (for initial installs) or pacman/paru.
4. Install/Remove Packages
Install a package and update your YAML:
Remove a package and update your YAML:
5. Update All Packages
YAML Format
The YAML file is simple and versioned:
packages:
- name: htop
version: 3.2.2-1
- name: neovim
version: 0.9.5-2
- git
You can edit this file by hand and/or keep it in git.
Paru and AUR Packages
If you want to use the --paru flag (for installing/removing AUR packages), paru must be installed on your system. If your YAML file contains AUR packages and you do not have paru installed, nixman will fail to install or remove those packages.
Note: Bootstrapping a new system (e.g., with --pacstrap) that includes AUR packages in your YAML is currently unsupported. You can use the --continue flag to ignore failed packages and circumvent this limitation, but you will need to manually install AUR packages or rerun with --paru after the initial bootstrap.
Library Usage
You can use nixman as a Rust library to programmatically manage packages:
use ;
let yml_path = ensure_yml.unwrap;
let pkgs = parse_explicit_packages;
write_package_list_to_yaml.unwrap;
Philosophy
- Reproducibility: Track your package state in a single YAML file
- Transparency: No magic—just a thin wrapper over pacman/paru
- Manual is good: You still handle partitioning, timezones, and dotfiles
- Scriptable: Use as a CLI or as a Rust library
FAQ
Q: Does this replace Nix or NixOS?
A: No. This is for Arch users who want reproducible package management, not full system declarativity.
Q: Can I use this with AUR packages?
A: Yes! Use the --paru flag to install/remove AUR packages with paru. Note: If your YAML contains AUR packages, you must have paru installed, or those packages will not be handled.
Q: What about dotfiles, system config, etc?
A: nixman only manages packages. Use your favorite dotfile manager for the rest, optionally including your packages.yml in version control.
Contributing
PRs and issues welcome! See the issues tab for more.
License
MIT OR Apache-2.0