Announcing Nix-Gui (v0.1 beta)
A project with the ambitious goal of making NixOS the most user friendly GNU/Linux distro.
(Please see the linked Github readme for a broader overview, the Motive, Functionality, Features, and Shortcomings sections below are quoted from there)
The declarative nature of NixOS provides it the capability of being the most user friendly linux distro. No more editing dotfiles, /etc files, manually writing timers, services, running commands to manage and create users and groups, etc. NixOS integrates all of that into a declarative system, and this project integrates NixOS’ declarative system into a GUI.
Nix-Gui is a tool which loads data including option paths, option types, default values, configured values, descriptions, etc. The option hierarchy is made explorable and the value of individual options are editable. Changes are committed by writing to modules within the configuration path.
This data is retrieved from
<nixos/nixpkgs> and from the configuration path via
- View and edit the state of options using type-specific widgets (e.g. textbox for strings)
- View and edit the actual nix expression defining an option
- View metadata of an option including type and definition
- Save changes to a relevant module in the configuration path
- “Diff” to show option changes not yet committed to disk
- Explore the hierarchy of options
- Utilize color indicators to show which options have been set
- Search options based on options path, type, and description
- Undo changes to options
Currently there are a few major limitations to Nix-Gui, including
- Documentation is entirely incomplete.
- Nix-Gui requires that
configuration.nixbe a function module. It cannot handle set modules. (attempt to call something which is not a function but a set · Issue #54 · nix-gui/nix-gui · GitHub)
- The interface for
- Nix-Gui has yet to be thoroughly vetted, therefore the configuration path is copied to
~/.config/nixgui/configurations/, in which all changes made by Nix-Gui are saved.
- Not all data structures used in this application are optimal, resulting in some configuration paths taking longer than I’d like to load (profile navlist color selection and optimize · Issue #128 · nix-gui/nix-gui · GitHub).
- Some option types aren’t handled yet (e.g.
lambda, and specific types like
ncdns.conf configuration type,
systemd option). These options can only be edited as a nix expression, as they do not have a matching widget.
- The UX hasn’t yet received any comments from the community .
- Ensure nixos is installed
nix.extraOptions = ''experimental-features = nix-command flakes'';is set in
configuration.nix(and you’ve rebuilt) to enable Nix Flakes.
nix run github:nix-gui/nix-gui nix-gui
Print help string
nix run github:nix-gui/nix-gui nix-gui -- --help
Short term goals (v0.2)
- Fix the problems in the “Shortcomings” section.
- Solicit UX feedback
Medium term goals (v1.0)
- Guided configuration (Guided Configuration · Issue #77 · nix-gui/nix-gui · GitHub) - when performing a task requires multiple options to be set, they can be bundled together. Useful for graphical installer.
- Recommended options ("Recommended" Options · Issue #21 · nix-gui/nix-gui · GitHub)
Long Term Goals (v2.0+)
- In addition to the system Nix-Gui is running on, Nix-Gui should also be able to edit, build, and deploy for ISOs, machines via NixOps, and flakes.
- Integrate home-manager (Integrate home-manager · Issue #44 · nix-gui/nix-gui · GitHub)
- Trace side-effects of options (Trace Side Effects of Option · Issue #58 · nix-gui/nix-gui · GitHub)
- Modularize Nix-Gui so its various tools can be utilized by other programs.
Please Help with Testing UX Feedback
Run Nix-Gui and create issues for bugs you encounter here.