I would like to announce nixos-manager, which is my attempt at a GUI to manage your NixOS configuration. The GitHub page contains more information about it, be sure to check it out. I’ve also recorded a short Screencast (link goes to YouTube) which introduces all the features currently present.
The idea was to provide a tool that, once NixOS has been installed, could be used to graphically install packages and configure the system. The cool thing with NixOS is, most service options have a type attached to them. Using these types and the nested set structure of the NixOS configuration, one can transform service definitions into editable GUIs. Service meaning “prefix is
programs., …” and so on.
Aside from that, I included search and installation/removal of packages, as well as a frontend for
nix-collect-garbage, so hopefully, one can finish day-to-day tasks on NixOS without opening a terminal.
Note that the idea is specifically not to offer an alternative to configuring NixOS, but really just a supplement. I cannot fathom an easy-to-use GUI for writing Nix expressions. That’s something for a text editor, really.
Technically, all the tool does is write two
.nix files to your
$HOME, one for services and one for programs. Prior to calling
nixos-rebuild, it copies these files to
/etc/nixos/nixos-manager, so if you include these two files in your
nixos-manager is usable.
Current state, further work
nixos-manager is just a hobby project I’m working on during my time between jobs, and I plan to continue working on it for some time. I encourage contributions from other users, though the project is written in Haskell, so you have to be somewhat proficient with that language, I suppose (not that I am an expert in it).
There are some technical hoops I had to jump through, possibly because I’m not the most experienced Nix user. For example, I couldn’t find a way to enumerate all service definitions in a machine-readable format (relevant Discourse question) — other than to download the JSON file from the nixos.org site. Also, I’d have loved to include more meta information about the packages (and services), like the URL or license.
The service configuration GUI is also pretty basic right now, not a lot of widgets exist. I wanted to gauge interest in this first, and then improve on it further.
Let me know what you think!