TODO: expand on this general outline
Components:
- Form Generator
- State Manager
- API
- Parser
- convert options “tree” and type spec into option selection heirarchy
- create the appropriate forms for editing value based on type
- Connect user actions to form / data model changes
- Record state changes to memory
- read data from parser, convert into sensible data structures
- write data
- Language Server Protocol Client
rnix-parser
handler andunsafeGetAttrPos
evaluator
(TODO: update)
load.sh
: Buildrelease.nix
and store as parsable json.api.py
: Retrieve release option tree and query.tree.py
: Data structure for storing and querying option tree.gui.py
: Startnix-gui
and load all components including the main functionality - the option tree explorer.heirarchale_widgets.py
: Widgets to recursively navigate the option tree structure via list-views and tab-views.option_widgets.py
: Render widgets for editing configuration based on the type of the option.richtext.py
: Helper to render rich text in QT.icons/
: Icons used in the GUI.
Case: A field is edited
- The field contents change, but nothing happens internally
Case: A field loses focus
- A signal is sent to the status bar to display the change
- A signal is sent to the parent to mark the change with an asterisk
- A signal is sent to the backend to record the history of changes
Case: The type of a field changes
- A signal
- https://github.com/pmiddend/nixos-manager
- https://blog.matejc.com/blogs/myblog/graphical-ui-for-nix
- https://github.com/chriskiehl/Gooey
- https://old.reddit.com/r/NixOS/comments/o6807i/nixgui_work_in_progress_configure_your_system/
- NixOS/nixpkgs#21662
- NixOS/nixpkgs#15573
- https://discourse.nixos.org/t/is-anyone-working-on-a-gui-tool-to-manage-packages/5540/2
- https://discourse.nixos.org/t/user-friendly-nixos-distro/1348/3
- https://old.reddit.com/r/NixOS/comments/jag2k1/do_you_think_nixos_could_be_positioned_as_one_of/
- https://old.reddit.com/r/NixOS/comments/cu4dle/should_nix_have_a_gui/
- Intuitive controls, good search functionality
- Good Widgets and layout
- Good information display
- Pretty layout
- Pretty layout
- Good time(/zone) settings screen
Thanks to the many #qt and #nixos users on libera.chat, and users of the NixOS Matrix server (#community:nixos.org) for answering a a myriad of questions about qt, nix, and nix-eval-lsp’s behavior.
Icons are from https://publicdomainvectors.org/, wikimedia commons, https://svgrepo.com, and https://icon-icons.com/icon/Diff/132439