1# nina23**the best way to use nixos.**45Nina wraps the full NixOS workflow in plain, memorable verbs — packages, rebuilds, generations, flakes, services, remote machines. Written in Zig. Zero dependencies. One binary.67```8$ nina search ripgrep9$ nina apply10$ nina back11$ nina status --all12```1314---1516## install1718```sh19curl -fsSL kepr.uk/nina/install.sh | sh20```2122On NixOS this installs nina into your **nix profile** — instant, per-user, no23`sudo`, and it never touches `/etc/nixos`. Remove it any time with `nina goodbye`.2425or clone and build:2627```sh28koh steal kepr.uk/nina29cd nina && zig build -Doptimize=ReleaseFast30sudo cp zig-out/bin/nina /usr/local/bin/nina31```3233**linux · nixos 24.05+** — requires `nix-command` and `flakes` experimental features. 34Run `nina setup` on first use to enable them automatically.3536### declarative install (power users)3738Prefer to manage nina alongside the rest of your system? The repo ships a NixOS39module, so you can install her the declarative way instead of the profile.4041Plain `configuration.nix` — add to your `imports`:4243```nix44imports = [45 "${builtins.fetchTarball "https://kepr.uk/nina/archive/HEAD.tar.gz"}/nixos-module.nix"46];47programs.nina.enable = true;48```4950Flake-based config — add nina as an input:5152```nix53inputs.nina.url = "https://kepr.uk/nina/archive/HEAD.tar.gz";54# in your nixosModules list: nina.nixosModules.default55# then set: programs.nina.enable = true;56```5758Then `sudo nixos-rebuild switch`. Pick **one** method — the profile install and59the declarative module both put `nina` on your PATH, so don't run both.6061---6263## the commands you'll actually use6465```66nina apply rebuild and switch to the new configuration67nina apply --dry preview what would change without switching68nina back roll back to the previous generation69nina go <n> jump to any generation by number70nina history list all generations71nina clean remove old generations and free store space7273nina search <q> search nixpkgs inline — browse, install, or try74nina option <q> search NixOS options inline75nina install <p> add a package — profile (instant) or system config76nina remove <p> remove a package from profile or system config77nina try <p> run a package without installing it78nina list show installed packages7980nina status machine health at a glance81nina status --all health across every configured machine82nina doctor diagnose common issues83nina diff what changed between generations84nina log operation history8586nina service list list systemd services and their state87nina service logs <s> journal logs for a service88nina service start/stop/restart <s>8990nina flake show inspect flake outputs91nina flake update update lock files92nina develop enter a dev shell93nina build build a flake output94nina run <p> run a package without installing9596nina edit open configuration.nix in your editor97nina check validate config without switching98nina fmt format nix files99nina info nixos version, kernel, uptime100nina boot boot entries101102nina help all commands103nina --version version info104```105106---107108## multi-machine109110Any command runs on a remote machine with `--on <name>`. Configure machines in `~/.nina.conf`:111112```ini113[machine]114name = kyoshi115config = /etc/nixos116local = true117default = true118119[machine]120name = azula121host = azula122user = june123ssh_key = ~/.ssh/id_ed25519124```125126```127nina apply --on azula128nina service logs ollama -f --on azula129nina status --all130```131132```133:: status134135 kyoshi gen 348 3m ago 42 GB136 azula gen 192 14m ago 18 GB137```138139---140141## search that stays at the prompt142143`nina search` opens an inline widget — no fullscreen takeover. Browse results, see versions and licenses, install to your profile or system config, copy the attr name, or try the package in a temporary shell.144145```146:: search nixpkgs ripgrep 12 results147148 > ripgrep 14.1.1 free fast line-oriented search149 ripgrep-all 0.9.6 free search across file formats150 ugrep 6.0.0 free grep compatible ripgrep alt151152 ripgrep 14.1.1 free153 recursively search directories for a regex pattern154 attr pkgs.ripgrep155156 [i] profile [s] system [t] try [c] copy [esc] exit157```158159---160161## install that actually works162163`nina install` uses `nix search nixpkgs` directly — no external API, no network dependency after your first channel update, no silent failures. Works offline.164165Two install paths, your choice:166167- **profile** — instant. package available immediately. no rebuild.168- **system** — opens your editor at the right line in `configuration.nix`, then offers to apply.169170---171172## config173174`~/.nina.conf` — plain text, no surprises:175176```ini177editor = hx178generations = 5179confirm = true180teach = false181color = true182183[machine]184name = my-machine185config = /etc/nixos186local = true187default = true188```189190`teach = true` prints the underlying nix command after each operation so you learn while you work.191192---193194## what nina outputs195196```197:: rebuilding kyoshi...198199 -> [build output]200201:: generation 14 [42.3s]202```203204```205:: error: 'firefocks' not found in nixpkgs206 -> try: nina search firefox207```208209Pink `::` marks Nina's voice. Green for success. Red for errors. Yellow for warnings. Color auto-disables when stdout is not a TTY. Respects `NO_COLOR`.210211---212213## built by214215[asha software](https://asha.software) — hope in every line of code.216217**[nina.asha.software](https://nina.asha.software)** · [source](https://kepr.uk/nina) · [docs](https://nina.asha.software/docs)