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)
Motive
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.
Functionality
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 NIX_PATH
nixos-configuration
.
Features:
- 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
Shortcomings
Currently there are a few major limitations to Nix-Gui, including
- Documentation is entirely incomplete.
- Nix-Gui requires that
configuration.nix
be 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
ListOf
andAttrsOf
is incomplete. - 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.
float
,package
,lambda
, and specific types likencdns.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 .
Running
Prerequisites:
- Ensure nixos is installed
- Ensure
nix.extraOptions = ''experimental-features = nix-command flakes'';
is set inconfiguration.nix
(and youâve rebuilt) to enable Nix Flakes.
Run
nix run github:nix-gui/nix-gui nix-gui
Print help string
nix run github:nix-gui/nix-gui nix-gui -- --help
Roadmap
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.