The Manual

nixarchy’s plugins

Omarchy’s desktop is a Quickshell shell, and a shell plugin is a panel, a bar widget or a menu that lives inside it. Most of what nixarchy adds to Omarchy is a NixOS answer to an Arch habit, and for a while each answer was a floating terminal: an fzf picker for packages, distrobox commands for boxes, nixarchy vm for sandboxes. These plugins put those jobs back where the rest of the desktop already is: a chord and a list, keyboard-first, in the shell’s own look.

Some are on by default: installed with nixarchy and turned on at your first login. Some stay opt-in on purpose. Each entry below says which. Turning one on happens once, so a plugin you switch off in Setup → Plugins stays off. Configuring nixarchy covers how to stop nixarchy installing one at all.

The keys below (Super+Alt+…) are seeded into ~/.config/hypr/bindings.lua on new installs. nixarchy never edits that file afterwards, so on an existing machine use the menu row, or copy the line from a fresh install.

Plugin What it’s for Status Open it
Package manager apps, services, packages and options on by default Install ▸ Packages · Super+Alt+N
Flatpak and Snap apps nixpkgs does not carry, from Flathub or the Snap Store on by default Install ▸ Flatpak & Snap
Podman containers, images, volumes, networks on wherever podman is Apps ▸ Podman · Super+Alt+O
GitLab pipelines CI for every project you belong to on by default Apps ▸ GitLab Pipelines · Super+Alt+P
Herdr sessions your herdr sessions and their agents on by default bar (right) · Apps ▸ Herdr · Super+Alt+H
MicroVMs disposable and permanent VMs, one list on by default Trigger ▸ Sandbox · Super+Alt+V
Distrobox boxes, created from nixarchy’s templates on wherever Boxes are Trigger ▸ Boxes · Super+Alt+D
Dev environments the per-project environments on this machine on wherever devenv is Apps ▸ Dev environments · Super+Alt+E
GitHub Actions workflow runs, jobs and steps on by default Apps ▸ GitHub Actions · Super+Alt+A
Plugin Browser the plugin marketplace, audited before you install on by default Setup ▸ Plugins ▸ Add Plugin · Super+Alt+U
Rebuild the rebuild running now, and its log on by default Install ▸ Apply changes
ai-mirror let an agent use your real desktop, and stop it on by default bar (right) · Super+Shift+Escape stops it
Runtime themes switch the active palette across supported applications without a rebuild on by default Setup ▸ Themes
Menu a Raycast-style palette in place of the Omarchy menu installed, off by default Setup ▸ Defaults ▸ Menu ▸ Nixarchy
Hyprforge every Hyprland setting, previewed live on your real windows on by default Super+Space ▸ Hyprforge
Gliff-Manager your gliff machines: ready or not, headless or mirror, connect on wherever nixarchy installs gliff the bar, or Setup ▸ Remote desktop ▸ Manage gliff machines
Voice operate the desktop by talking to it opt-in —

Package manager

nixarchy-pkg · its own site

What it solves. On NixOS you don’t pacman -S a package; it goes into your configuration and a rebuild builds it. Before this panel, that meant a floating terminal and an fzf picker, or opening ~/.config/nixarchy/apps.nix and finding the right commented-out line. Every other surface on the desktop is a chord and a list, and now so is this.

What it does. Search nixpkgs, turn curated apps and services on, add any package, and set NixOS options through a form. Everything is written to the same files nixarchy’s own commands write, then applied with one key. The rebuild asks for your password through the Omarchy dialog.

The package manager: across its tabs, then one app ticked and the line that writes

The Services tab: podman ticked, the footer saying it was enabled in services.nix and is queued but never applied, and the key sheet opened and closed over it

The package manager's Apps tab: curated apps and services, with what each one turns on

Searching nixpkgs for a package

Searching NixOS options, then setting one through a form

Flatpak and Snap

nixarchy-flatsnap · its own site

Paste a Flathub or Snapcraft link, an app ID, or an install line, check what the app can reach, and queue it. Apply installs it declaratively: Flatpaks through nix-flatpak, and Snaps through nix-snapd plus a small reconciler that removes only what it installed. snapd runs only while a Snap is declared or still being removed. See Flatpak and Snap for the keys, the security notes and removal.

Turn it off with programs.nixarchy.defaultPlugins.flatsnap = false;.

The Flatpak and Snap panel: a Flathub link for GNOME Calculator typed in, its card showing publisher, license and sandbox permissions, and Enter queueing it

hello-world's card from the Snap Store: channel, strict confinement, and the red line saying Snap confinement on NixOS is weaker than on Ubuntu

The Declared list after apply, with GNOME Calculator and hello-world both installed

Recorded on a nixarchy laptop in Tokyo Night, applying into its real configuration; the build log is shortened.

Podman

nixarchy-podman · its own site

What it solves. Looking after rootless containers otherwise means a terminal, podman ps, and remembering the flags. This keeps the everyday work on the keyboard, without opening a shell.

What it does. Containers, images, volumes and networks on four tabs. Start, stop and restart; follow logs; open a shell in a container; remove and prune, with a confirmation. The bar glyph shows when something needs attention.

When it’s there. It follows podman, not nixarchy. It comes on with the podman row in the Services catalogue, or with Boxes, and is absent where podman is off. nixarchy’s container engine is still rootless Docker, so docker keeps meaning Docker.

The Podman panel: containers, images and volumes, then a container stopping

The Podman panel's Containers tab: three of four running, one needing attention

GitLab pipelines

nixarchy-gltui

What it solves. Checking CI across many projects means a browser tab per project. This is one popup: every project you are a member of, nested groups included, with running pipelines first.

What it does. Projects → pipelines → stages → jobs, with no buttons, no background daemon and no stored token. It uses glab, which nixarchy installs with it. Run glab auth login once; until you do, the panel says so and stops polling.

Not shown moving: until glab is authenticated the panel is one unchanging “authenticate first” message, which cannot honestly clear the recorder’s frame-diversity gate.

Herdr sessions

nixarchy-herdr

What it solves. Coding agents run inside herdr sessions, and without this you find out that one is waiting for you only by switching to its terminal. The bar tells you instead.

What it does. Your herdr sessions and the agents inside them, across machines, not just this one. You see who is working, who is done, and who needs you. Open a session, start a new one, or send an agent a prompt from the popup. herdr itself comes with it from nixpkgs, so update it through nixpkgs (herdr update cannot write to the Nix store), or put your own build ahead of it on PATH.

The herdr popup: workspaces with one agent needing you and two done

The herdr popup, still: three sessions, one agent needing you, two done

MicroVMs

nixarchy-microvm · its own site

What it solves. nixarchy has two kinds of VM: disposable sandboxes from nixarchy vm, and permanent machines you declare in your configuration. They lived in two places. This puts both in one list.

What it does. Create a VM from a template, run it in the background and attach to its console later, stop it, or remove it. There’s optional help from your AI agent to fill in the create form. It is Trigger ▸ Sandbox now, and nixarchy vm is still there in a terminal.

A MicroVM started from the bar popup, its build streaming into the panel until it runs in the background

The create form's Template field emptied to list six templates by name (agent, agent-claude, hyprland, k3s, node, persistent), the cursor moving down the list, then narrowed to the agent templates and to node, and widened again

The MicroVMs menu: two disposable VMs running and a permanent one pending apply, in one list

Distrobox

nixarchy-distrobox · its own site

What it solves. Boxes are for software NixOS will not run, and looking after them meant remembering distrobox subcommands. A multi-minute image pull or upgrade also tied up a terminal.

What it does. Every box with its image and home directory. Enter one in a terminal; start, stop, restart, upgrade or delete it. Create a box from a form, and watch create and upgrade stream into the panel. It is Trigger ▸ Boxes wherever Boxes are on, and its templates are nixarchy’s own, from /etc/nixarchy/box-templates.ini.

A box created from a template and entered, to a prompt inside it

The Distrobox panel: one box running, one exited, one created

The nixarchy-distrobox tour: a 90-second walk through the panel

Dev environments

nixarchy-devenv · its own site

What it solves. Per-project environments were a command and nothing else: nixarchy dev init scaffolded a project, and after that every environment on the machine was invisible. Which folders have one, which activate on cd, which have a database running — all of it lived in your head or in ls.

What it does. Every devenv project under your project roots, the ones you allowed first. Directories bound to a configuration elsewhere with devenv --from are listed too, reading from <source>; they have nothing of their own to edit or delete, so removal offers only revoke. Enter one in a terminal (devenv shell), edit its devenv.nix, start and stop its processes, update its lock, allow or revoke it, and remove it in steps from revoke to deleting the folder. Create a new project from twenty-seven templates — languages, web frontends and backends, Jupyter, machine learning and AI, Flutter, Android, Omarchy plugins, NixOS configurations, and cloud projects for AWS, Azure, GCP and five more. It is Apps ▸ Dev environments or Super+Alt+E wherever the devenv service is on, and nixarchy dev … is the same tool in a terminal.

The Dev environments menu listing a directory bound with devenv --from, offering only revoke, entering its shell, then revoking it

The Dev environments menu: demo projects, demo-bound first, reading from its source with no edit button

GitHub Actions

nixarchy-ghtui

What it solves. The same as GitLab pipelines, for GitHub: CI across your repositories without a browser tab for each.

What it does. Repositories → workflow runs → jobs → steps, with running workflows first, through gh, which nixarchy installs with it. Run gh auth login once; until you do, the panel says so and stops polling. Its keys are on Super+Ctrl+Alt+A.

If you installed it by hand before, remove your copy before switching: rm -rf ~/.config/omarchy/plugins/olafkfreund.github-actions. nixarchy won’t replace a real directory. It stays enabled, and the managed copy takes over.

The GitHub Actions panel opening on a search for nixarchy, narrowing it, then following a running workflow down to the steps of its install job and back out

Repositories matching nixarchy, the one with two running workflows first

A running install check expanded to its jobs, and the install job to its eight steps with their status and timers

Recorded on an authenticated desktop, in Gruvbox, showing public repositories only.

Plugin Browser

nixarchy-plugin-browser · its own site

What it solves. The Omarchy plugin marketplace is written for Arch. Plenty of its plugins call pacman or yay, or read files that don’t exist on NixOS. They install cleanly and then break, and upstream’s Add Plugin only asks for a Git URL: it can’t tell you any of this before the plugin is on your desktop.

What it does. Setup ▸ Plugins ▸ Add Plugin (or Super+Alt+U) opens a searchable list of the whole marketplace, with each plugin’s preview image. Open one and it is audited first, in a bubblewrap sandbox, at a pinned commit. You get two verdicts:

i installs it disabled, at the commit that was audited. You turn it on in Setup ▸ Plugins when you’re ready. c copies the install command, o opens its repository, and ? lists every key.

Asking your agent about a finding. e (explain) and f (fix) hand the audit to your default agent, the one nixarchy ask uses, in a terminal:

The agent runs with its auto-approve flags on a copy of untrusted code. The terminal says so and asks first (the answer defaults to No). A prompt injection hidden in a plugin could still make the agent run commands as you while it works. If that isn’t a risk you want, don’t use e and f.

Adding by URL. Setup ▸ Plugins ▸ Add Plugin from URL is upstream’s prompt, unchanged. It installs whatever the URL points at, without the audit.

The network. The catalog (plugins.omarchy.org, cached for an hour) and the preview of each plugin you open are fetched when you use the panel, and never otherwise. Previews can be turned off with {"previews": false} in ~/.config/nixarchy-plugin-browser/config.json.

After the switch that brings it in, log out and back in once. Until you do, Add Plugin still opens the old prompt: the menu is read from the tree your session started with.

If you installed it by hand before, remove your copy before switching: rm -rf ~/.config/omarchy/plugins/io.github.olafkfreund.nixarchy-plugin-browser. nixarchy won’t replace a real directory. It stays enabled, and the managed copy takes over.

The Plugin Browser: a search for monitor, hyprmoncfg's preview and its two verdicts, then Display Watcher, which passes both

A search for monitor: 77 of the marketplace's plugins, most-starred first, with each one's verification badge

hyprmoncfg's details: its marketplace preview, then review required, and needs review on NixOS because it installs itself with pacman or yay

Display Watcher's details: security passed, and likely ok on NixOS

Recorded on a real desktop in Tokyo Night, composed onto the default wallpaper. The plugins shown are public marketplace entries.

Rebuild

Shipped with nixarchy itself, in pkgs/rebuild-panel/ – the only panel here whose source is in the nixarchy repository, because it and nixarchy apply --detach are two halves of one thing.

What it solves. Applying a change used to open a floating terminal: a tty prompt, a progress view drawn in escape codes, and a window you could not close without wondering whether you had just killed the rebuild. Closing it did kill it, before the supervised unit existed.

What it does. Install -> Apply changes opens it instead. It says what it is about to do and starts nothing until you press Rebuild now; then it shows the elapsed time and the tail of the log while the rebuild runs as the nixarchy-rebuild user unit. Close it and the rebuild carries on; open it again and you are back on the same one – including a rebuild you started yourself in a terminal. If it fails, it keeps the exit code and offers Copy log and Open full log in terminal.

No cancel button, deliberately. Stopping a switch part-way can leave the system half-changed, so it is not one keypress away. Once the log reaches “Activating”, let it finish and roll back afterwards if you need to.

Its bar icon appears only while a rebuild is running or has failed, so it costs nothing in the bar the rest of the time.

ai-mirror

ai-mirror · on by default

What it solves. A coding agent can drive a browser or a terminal, but not the dialog, the drag or the unlabelled button on your real desktop. ai-mirror gives an agent eyes and hands on your actual session, and takes them back with one keypress.

What it does. A small MCP server and a mark in the bar (right). It is installed on every nixarchy machine, and no agent is connected to it until you set programs.nixarchy.aiMirror.mcp = true;. Turning that off again takes the connection back out of Claude Code, Codex and opencode (and pi, where it is installed and at least 0.99.2).

The mark says what an agent is doing.

the mark means
dim nothing: agent control is off
the theme’s accent colour, steady an agent is watching: reading the screen, the clipboard or the accessibility tree. It cannot type or click.
red, pulsing an agent controls the keyboard and mouse

An agent asks, and you answer. When an agent wants control, a dialog asks you on screen. Nothing is granted until you press yes, and an unanswered request lapses after 30 seconds. Super+Shift+Escape, or a click on the mark, takes control back at any moment. A grant also ends by itself after ten minutes with no input, and when the agent that asked goes away.

What the yes does not cover. An agent that reaches ai-mirror through the connection above cannot answer its own request. An agent with a shell on your account can. It can run ai-mirror control confirm itself, and no prompt inside your session can stop that. This is a deliberate choice, not an oversight: the agent already runs as you. Run an agent you do not trust in a sandbox or a MicroVM instead, where your desktop is not in reach. Every grant is logged with who asked, so a self-grant shows up afterwards.

If you have turned the mark off and your bindings.lua predates the kill switch, a grant made that way has nothing on screen to stop it. It still ends after ten idle minutes, and ai-mirror control off in any terminal ends it at once.

Watch the nixarchy desktop showcase, recorded by an agent through ai-mirror.

Runtime themes

omatheme keeps the active palette in sync across the supported desktop and terminal targets. On NixOS, Stylix may continue to provide the declarative application template while omatheme switches the generated runtime files immediately.

Turn it off with programs.nixarchy.defaultPlugins.omatheme = false;.

nixarchy-menu · installed, off by default

What it solves. Omarchy’s menu is a tree you walk: Install, then a submenu, then a row. That is fast once you know where a thing lives and slow while you are learning. A palette is the other shape – type what you want and let it find the row.

What it does. Replaces the Omarchy menu with a Raycast-style palette over the same rows. It is a clone of omarchy.menu, so it takes that plugin’s slot rather than adding a second button. When nixarchy turns it on at first login (menu.default = "nixarchy"), it first turns off any other clone of the same menu, because two plugins claiming the menu is a fight the first one alphabetically wins, silently. The Setup row does not: if you have another menu clone on, turn that off first.

It is installed but off (#1283): a new machine starts on Omarchy’s own menu. Switch at any time, with no rebuild, in Setup ▸ Defaults ▸ Menu: Nixarchy turns the palette on, and Omarchy turns it off and puts the stock menu back in its place. A machine that already had it on keeps it until you switch.

To start new machines on the palette, in your NixOS configuration:

programs.nixarchy.menu.default = "nixarchy";    # turned on at first login

To stop nixarchy installing it at all, in the user’s Home Manager configuration (home-manager.users.<you>):

programs.nixarchy.defaultPlugins.menu = false;

The search terms the palette matches come from nixarchy’s own menu data (#961), so the Ask topics answer to symptoms – “slow”, “hacked”, “disk full” – rather than only to their labels.

Hyprforge

Hyprforge by Aziz, via nixarchy-hyprsettngs · MIT · on by default

What it solves. Changing how the desktop looks and behaves – gaps, borders, blur, animations, input, a rule for one app – means editing Lua under ~/.config/hypr and reloading to see whether you got it right. Nothing shows a change before you commit to it, and nothing undoes one.

What it does. A Hyprland studio: a live scale model of your screen, theme palette colours that follow omarchy theme set, a bezier and spring curve editor for animations, per-app rules, profiles, history, and every Hyprland option. Everything previews on your real windows and is checked by Hyprland before it is saved. Open it from Super+Space ▸ Hyprforge, or omarchy-shell hyprforge toggle.

Where your settings go. Hyprforge saves to ~/.config/hypr/hyprforge.lua, and nixarchy’s session loads that file (#1059). You never need its Connect button. On a machine installed before Hyprforge arrived, the button still offers itself; clicking it is harmless and changes nothing.

Turning it off – Setup ▸ Plugins, or

programs.nixarchy.defaultPlugins.hyprforge = false;

– removes the panel, but keeps what you saved applied. Delete ~/.config/hypr/hyprforge.lua to go back to Omarchy’s own settings.

Gliff-Manager

Gliff-Manager by Gavin Nugent, via our NixOS-ready fork · MIT · on wherever nixarchy installs gliff (preinstalls, unless gliff is in preinstallsExclude)

What it solves. gliff connects to a machine you name, but nothing tells you beforehand whether that machine is ready: is ssh allowed, is gliff installed there, is anyone logged in to Hyprland, is a screen plugged in.

What it does. A bar widget listing your gliff machines. It checks each one over ssh, picks headless or mirror per machine, explains what is wrong, and connects. Open it from the bar, or Setup ▸ Remote desktop ▸ Manage gliff machines, or omarchy-shell nixarchy.gliff-manager toggle.

What the fork changed. Upstream assumes Arch. The fork reads gliff’s version from gliff, takes the channel from /etc/os-release, finds NixOS’s wrapped process names, runs no package manager, and does not offer the Arch session fix on NixOS.

Turning it off – Setup ▸ Plugins, or

programs.nixarchy.defaultPlugins.gliff-manager = false;

It is also absent when you remove gliff with programs.nixarchy.preinstallsExclude = [ "gliff" ];.

Had upstream’s copy? Remove it with omarchy plugin remove nosignal.gliff-manager; both share ~/.config/gliff-manager/.

Short names. Its short tab names add an Include line to ~/.ssh/config. If ~/.ssh/config is managed by Home Manager (a link into the Nix store), turning short names on refuses with a message and changes nothing; full names keep working.

Voice

nixarchy-voice · its own site

What it solves. Operating the desktop by talking to it. It turns voice into actions, not only text; dictation (Voxtype) stays for typing. Turn that on with dictation and hold F9, or toggle it with Super+Ctrl+X.

What it does. A wake word or toggle key is heard locally, whisper.cpp transcribes it on your CPU, a model you have signed in to decides, and a local voice speaks the reply. What you do often becomes an action: a named recipe you say (“run dev setup”), pick in Voice ▸ Actions in the menu, or run with omarchy-voice action run. The easy way to make one is to do the thing by voice, then say “make that an action called …”. She reads the recipe back and saves it when you confirm. A routine is an action on a schedule, run as a systemd user timer, and its result arrives as a notification. Commands run in her own terminal session, never typed into yours, and a command that fails is reported as a failure.

Why it’s opt-in. It needs a model account, and it sends what you ask about (including screen and clipboard content) to that model. It is 7.2 GiB with the whisper and Piper models, which are in the package. Every step goes through a policy gate: anything risky waits for your yes, a step can be approved once for good, and a deny rule can never be approved. Notification logging, the wake word and desktop control all start off.

Turning it on. Find Voice in Install ▸ Search and apply it, or set programs.nixarchy.voice.enable = true.

Voice ▸ Actions: a saved action run from the menu, ending on git status in Oma's own terminal

The Voice ▸ Actions menu: an action made by asking, and a routine

With sound, speech included: the three-minute recording on the plugin’s own site.