Nina — A helper that makes NixOS a cozier place to live. Search, install, generations, services, flakes, multi-machine management etc

I’m glad to hear that! and also that’s such an obvious thing I overlooked. Will certainly add init. I’ve been trying to make nina comfortable for everyone. Beginners or Power users. I’m seeing some people using her alongside nh for specific things. However people use it I’m just happy it’s helpful.

1 Like

How would I add this to my flake as an input, given that the source is not a git repo?

1 Like

You can use the archive URL directly as a flake input:

inputs.nina.url = "https://kepr.uk/nina/archive/HEAD.tar.gz";
inputs.nina.flake = true;

Or pin to a specific save for reproducibility:

inputs.nina.url = "https://kepr.uk/nina/archive/e4b3b0360ecc.tar.gz";
inputs.nina.flake = true;

The archive list at nina — kepr shows all available saves. Nix handles the hash verification automatically on first fetch.

1 Like

Nina now includes nina home init

Getting started with Home Manager no longer requires remembering the full nix run incantation. Nina handles it:

nina home init              generate ~/.config/home-manager/home.nix + flake.nix
nina home init --switch     generate and activate immediately
nina home init ~/my-config  use a custom directory

Nina picks the right home-manager branch for your nixpkgs version automatically — master for unstable, release-25.05 for stable.

If a config already exists, Nina warns and points you to nina home apply instead of overwriting anything.

1 Like

Nixtamal can support keeping up with the latest:

# nix/tamal/manifest.kdl
version "1.2.0"
inputs {
	nina {
		archive {kV
			url "https://kepr.uk/nina/archive/{{fresh_value}}.tar.gz"
		}
		fresh-cmd {
			$ curl "https://kepr.uk/nina?panel=archives"
			| htmlq -a data-save-id "--" "#thread-container .thread-save"
			| head -n1
		}
	}
}

Then on nixtamal refresh it will get the freshest hash & fetchit for use.

If a fetchkoh is added to Nixpkgs, there’s a good chance Nixtamal could add full fetching/pinning/updating since we offer forge- & VCS-agnostic pinning.


Forge UX needs work tho:

  • it’s very hard to read (don’t do this: body { font-size: 10px; } when we have rems that respect user agent settings, color contrast I very low where I can’t read at 15% brightness)
  • fonts are served thru Google’s servers leaking user info—which they are just as bad as sharing data with Microsoft
  • the noscript experience is missing, so privacy-forward users get a very degraded experience & cURL can’t easily fetch data
1 Like

Great feedback toastal, I agree with you completely. I’m going to address each one of these issues today. Thanks for sharing and for your suggestions.

Great tool, I would like to propose some possible updates, with one being a bit blocking for me :

  • home manager does not handle platform agnostic refs, so most of us have to adapt to have platform specific refs. for me it’s murazaki-x86_64-linux, built from nixos variables like this "${username}-${system}" so on your side maybe something like “{$USER}-$(uname -m)-$(uname -s | tr ‘\[:upper:\]’ ‘\[:lower:\]’)”
  • Would be great to be able to edit the nixos configuration, even if it’s not a simple configuration.nix (open whole folder in VSCodium ? You might need root access which is not commandable by default)
  • Maybe give access to other tools like `nix store optimise` (though it might already exist and I did not realise ?)
1 Like

Thankyou, good suggestions here as well. I shall add these to the todo list. Check back tomorrow and it should be done.

1 Like

Wanted to let you guys know I appreciate the feedback on Kepr in particular. You all have been taking part in a bit of an experiment haha.

I’m working on big improvements for Kepr before it’s own launch and the feedback is greatly helpful. I was admittedly a bit worried about the reception I’d get here and I’m very relieved that you all have been wonderful. Hope everyone is doing well out there.

1 Like

:warning: PSA: nina update silently fails on nix profile installs ≤3.2.6 (fixed in 3.4.2)

If nina update prints :: updated X → Y but nina --version leaves you on the old version, you’ve hit this — our bug, now fixed.

Affected? Run nina update. If you see:

 warning: No packages to upgrade.
 :: updated  3.2.x → 3.4.x
 …the upgrade did nothing; the success line is a lie.

Cause: nina was installed from a raw tarball URL, so your profile element is named the whole URL instead of nina — and 3.2.6 tried to
upgrade by URL, which matches nothing. nix exits 0, nina reports success anyway.

Fix your machine:

  nix profile list                         # find the entry with store path …-nina-<ver>; copy its Name
  nix profile remove '<that Name>'
  nix profile add 'https://kepr.uk/nina/archive/HEAD.tar.gz#nina'   # #nina = clean name

The #nina is the key. On 3.4.2+, nina update self-heals. Install docs are updated.

All of these suggestions have been implemented~

All of these concerns have also been addressed now!

1 Like

Nina v3.4.2 — Community feedback from Murazaki

nina home apply now detects your platform-specific Home Manager flake attribute automatically — username-arch-os (e.g. june-x86_64-linux) — with a graceful fallback chain if your flake uses a simpler naming convention.

nina edit --dir opens your entire config directory instead of just configuration.nix — useful for editors like VSCodium or Helix that work better with a full project folder.

nina store optimise added — deduplicates identical files in the nix store using hard links, freeing space without garbage collecting. optimize also accepted.

nina edit hardware now explains that hardware-configuration.nix is auto-generated and shouldn’t be edited directly, rather than silently opening the wrong file.

v3.4.1 — nina update fixes

nina update was incorrectly reporting success when no update actually occurred. Fixed — nina now correctly detects nix’s exit-0 no-op and reports accurately. Flake and module installs now receive the correct update instructions rather than being told to run nix profile add. The profile element is now consistently named nina for clean identification.

1 Like

Nixtamal+koh might even get you a less hacky way of extracting the fresh snapshot hash if you could do something like koh ls-remote or koh steal followed by koh rev-parse HEAD but I don’t think something like that exists right now

I have an idea with a simpler approach to fix this. Will implement it and update here afterwards. Should be done tonight.

1 Like

Pinning nina with nixtamal

Added a new json endpoint https://kepr.uk/nina/saves.json

Returns the last 50 saves. The latest is always first.
@toastal

  version "1.1.0"
  inputs {
    nina {
      archive {
        url "https://kepr.uk/nina/archive/{{fresh_value}}.tar.gz"
      }
      hash algorithm=SHA-256
      fresh-cmd {
        $ curl -fsS "https://kepr.uk/nina/saves.json"
        | cut -d: -f2
        | cut -d, -f1
        | tr -d "\""
      }
    }
  }
1 Like

Why not jq? It’s bundled as a runtime dep…

5 Likes

haha fair point. even better

curl -fsS "https://kepr.uk/nina/saves.json" | jq -r '.[0].id'

1 Like