Packages, services and NixOS options, from the Omarchy menu

A menu for the thing NixOS is good at and awkward about: changing what is installed. Search nixpkgs, switch apps and services on, set options from a form, and rebuild when you are ready. What you get is a NixOS generation, so it rolls back.

Getting lazygit without opening an editor

I want lazygit. I don't know whether it's in nixpkgs, and I don't want to open a .nix file to find out. Every screenshot below is the real menu on a real laptop, driven from the keyboard.

The Selection tab with lazygit typed in the search field; lazygit is the first result, above yaziPlugins.lazygit and vimPlugins.lazygit-nvim
1 · Find it

Search the whole of nixpkgs

SUPER ALT N opens the menu, / searches. On Selection the search covers every package in nixpkgs, ranked so the exact name comes first rather than buried under everything that happens to contain it.

A search for google-chrome: one row, flagged unfree and curated:chrome
2 · Know what you're adding

Flags before you commit to anything

A row says when a package is unfree, when nixpkgs marks it broken, and when the curated app list already covers it. RETURN adds it. Nothing is built yet: adding writes one marked line in a file you own.

The option form for services.tailscale.enable: its type (boolean), its description, its default (false), and a toggle
3 · Set an option

A form built from the option's type

The Options tab searches NixOS options. RETURN opens a form made from the option's declared type: a toggle for a boolean, a list editor for a list, its own example to edit when the type has no one-word answer. An option you have already set opens on its value.

A package just added: the footer reads 'hello, added' and '1 change queued'
4 · See what's waiting

Queued, not installed

The footer and the bar count what differs between your selection and what the system was last built from. It's worked out from the files each time rather than remembered, so an edit you make by hand in an editor shows up here too.

The apply prompt: 'a again to rebuild the system — any other key cancels', with 1 change queued
5 · Apply, asked twice

One key, then the same key again

a says what's about to happen and waits, because this rebuilds the whole system. A second a starts it, and any other key cancels. The build log streams into the menu as plain text, and its last line is the result.

6 · Change your mind

It's a generation

What comes out is an ordinary NixOS generation. If you don't like it, boot the previous one or run nixarchy rollback. Nothing here replaces NixOS's own safety net. More on applying →

Everything else

The rest of the menu, one tab at a time.

The Apps tab: the curated catalogue, each app with its note or the line it writes
Apps: the curated catalogue, on and off.
The Services tab: flatpak, syncthing, graphics32 and openssh, each with a note
Services, with what each one actually does.
The Apps tab filtered by 'term': Alacritty, Foot, Ghostty and Kitty
/ filters what's already listed.
The Flakes tab inspecting github:nix-community/nixvim: two nixosModules, seven packages, and module namespaces that exist but cannot be read
Flakes: what a flake offers, before you add it.
Naming a flake input: the field suggests 'nixvim', and the row reads 'declare github:nix-community/nixvim as inputs.nixvim — RETURN declares, ESC goes back'
The input is named from the repo, and you confirm it.
The Options tab searched for tailscale: services.tailscale options, each with its description
Every NixOS option, searchable.

What it writes

It writes nothing you can’t read: every change is one marked line in a file you own, and every write goes through a script nixarchy already ships.

It manages a selection rather than your machine, which is the one thing worth knowing before you start: why that is, and what it buys you.