IXNAY is a pragmatic TUI-style wrapper around the Nix toolchain. It focuses on the day-to-day workflows that are still awkward while Nix transitions between the legacy nix-* utilities and the newer nix CLI. IXNAY standardises the commands you run, keeps declarative package blocks in sync, and explains exactly what it is doing so you always know the underlying Nix invocation.
- Consistent UX – single entry point for both legacy and modern Nix subcommands, with the executed command echoed in yellow unless muted.
- Declarative package management –
ixnay add/removekeep per-system or per-user marker blocks alphabetised, channel-aware, and annotated with upstream descriptions. - Safe automation – duplicate adds are idempotent, channel changes require explicit removal, and marker insertion tolerates both
environment.systemPackages = [ … ]and nestedenvironment = { systemPackages = …; };layouts. - Test-friendly –
ixnay testruns the full shell-based suite, whileixnay --testruns it silently.IXNAY_TEST_RUNNERcan point at any compatible runner binary. - Quick metadata –
ixnay describe <pkg>fetches thenixpkgsdescription without digging through search results. - Transparent diagnostics – helper routines parse common
nixevaluation/build failures and print actionable hints.
- A POSIX shell environment with Bash 5+
- GNU coreutils,
gawk,rg, and Nix installed with flakes enabled luajit(preferred) orluaavailable for marker management scripts
| Command | Purpose |
|---|---|
| `ixnay add <user | system> <stable |
| `ixnay remove <user | system> <stable |
ixnay describe <pkg> |
Prints the nixpkgs description via nix eval --raw. |
ixnay test [args…] |
Runs the full test suite (default ./test) with live output. |
ixnay --test [args…] |
Runs the same suite quietly and exits with the failure count. |
ixnay -a / ixnay --about |
Prints the one-line project description. |
All commands honour IXNAY_MUTE_CMD_ECHO (suppress underlying command output) and DRY_RUN (show what would happen without executing it). Declarative operations additionally use IXNAY_ADD_PLATFORM, IXNAY_DARWIN_FLAKE, and IXNAY_NIXOS_CONFIG to override target files during testing.
# Verbose run
./test
# Silence output but preserve exit status (e.g. for CI)
IXNAY_TEST_RUNNER=./test ixnay --testEach individual suite exits with the number of failed assertions, so the aggregated runner returns the total failure count.
- Enable flakes and ensure
luajit,gawk,rg, andshellcheckare available. - Make changes and add focused regression tests under
tests/. - Run
./test(orixnay test) and confirm a zero exit code. - Mention any new files in
FILES.mdto keep the tracking table current.
Issues and PRs that simplify UX, improve diagnostics, or broaden platform coverage are welcome.