# Nix-Gui: Use NixOS Without Coding

**URL:** https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409
**Category:** Announcements
**Created:** [October 8, 2021, 7:48am UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409 "2021-10-08T07:48:11Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![andrewlapp](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/a/ce73a5/32.png) [@andrewlapp](https://discourse.nixos.org/u/andrewlapp)
#### Post date: [October 8, 2021, 7:48am UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/1 "2021-10-08T07:48:11Z")

</div>

Announcing [Nix-Gui](https://github.com/nix-gui/nix-gui/) (v0.1 beta)

A project with the ambitious goal of making NixOS the most user friendly GNU/Linux distro.

 ![image](https://discourse.nixos.org/uploads/default/original/2X/f/ffd802902ff91df2e1dba0a42a42732c17fe3a21.png)

_(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](https://github.com/nix-gui/nix-gui/issues/54))
- The interface for `ListOf` and `AttrsOf` 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](https://github.com/nix-gui/nix-gui/issues/128)).
- Some option types aren’t handled yet (e.g. `float`, `package`, `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 .

**Running**

Prerequisites:

- Ensure nixos is installed
- Ensure `nix.extraOptions = ''experimental-features = nix-command flakes'';` is set in `configuration.nix` (and you’ve rebuilt) to enable [Nix Flakes](https://nixos.wiki/wiki/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](https://github.com/nix-gui/nix-gui/issues/77)) - 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](https://github.com/nix-gui/nix-gui/issues/21))

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](https://github.com/nix-gui/nix-gui/issues/44))
- Trace side-effects of options ([Trace Side Effects of Option · Issue #58 · nix-gui/nix-gui · GitHub](https://github.com/nix-gui/nix-gui/issues/58))
- 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](https://github.com/nix-gui/nix-gui/issues).

[Please fill out the UX Survey](https://github.com/nix-gui/nix-gui/issues/129)

---

<div class="post-metadata">

### Author: ![emdash](https://discourse.nixos.org/user_avatar/discourse.nixos.org/emdash/32/3345_2.png) [@emdash](https://discourse.nixos.org/u/emdash)
#### Post date: [October 14, 2021, 8:57pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/2 "2021-10-14T20:57:44Z")

</div>

I had an idea to start a similar project, but now it seems as though I don’t have to! Looking forward to learning more!

---

<div class="post-metadata">

### Author: ![emdash](https://discourse.nixos.org/user_avatar/discourse.nixos.org/emdash/32/3345_2.png) [@emdash](https://discourse.nixos.org/u/emdash)
#### Post date: [October 14, 2021, 9:02pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/3 "2021-10-14T21:02:39Z")

</div>

One thing I had considered was looking to see if the `kconfig` tooling could in any way be useful (like, generate `kconfig` syntax from nix derrivations), because there’s a lot of overlap here between nixos options and kernel config options.

The issue I think you run into is that nix, being a programming language, has a tree structure. And I feel like trees and guis are kindof a mixed bag. It’s easy to implement, it’s hard to use. And my experience with auto-generating UIs from property lists is that, for any given set of properties, there’s probably a hand-written layout that would be easier to use.

On the other hand, if you can integrate package / option query / filters with immediate editing into a tight loop, it _would_ make configuring nixos easier.

---

<div class="post-metadata">

### Author: ![Arsleust](https://discourse.nixos.org/user_avatar/discourse.nixos.org/arsleust/32/29224_2.png) [@Arsleust](https://discourse.nixos.org/u/Arsleust)
#### Post date: [October 15, 2021, 10:28am UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/4 "2021-10-15T10:28:55Z")

</div>

Happy to see the birth of such a project!

Good job, really looking forward to it.

---

<div class="post-metadata">

### Author: ![bartatgithub](https://discourse.nixos.org/user_avatar/discourse.nixos.org/bartatgithub/32/3372_2.png) [@bartatgithub](https://discourse.nixos.org/u/bartatgithub)
#### Post date: [October 18, 2021, 8:41am UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/5 "2021-10-18T08:41:54Z")

</div>

Hi

Yes, if that would be possible i could try Nixos. Because a lot off features in NixOs that i really want and miss in other dristro’s, but to difficult to configure.

But still it would be easier that their would be a kind of ‘standard/default normal’ user NixOs installer that works nice out of the box.  
And while using that as a ‘normal’ daily Linux system we can learn more and more the Nix way.

So, this is a nice step in the good direction, i think.

Regards

---

<div class="post-metadata">

### Author: ![Radvendii](https://discourse.nixos.org/user_avatar/discourse.nixos.org/radvendii/32/3919_2.png) [@Radvendii](https://discourse.nixos.org/u/Radvendii)
#### Post date: [October 18, 2021, 12:53pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/6 "2021-10-18T12:53:02Z")

</div>

Apparently something’s in the air! This is something that I’ve been thinking about on and off for years, and I just a couple of weeks ago decided “okay, I’m going to actually do it!” I was asking around, and someone pointed me here!

@andrewlapp I would love to get involved in brainstorming / designing / implementing. If you have time to chat about this, send me a DM. Most days after ~16:00UTC works for me.

If not, I’ll probably start working on the installer side of things, since that’s a mostly separable piece of the puzzle.

---

<div class="post-metadata">

### Author: ![blaggacao](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/b/8edcca/32.png) [@blaggacao](https://discourse.nixos.org/u/blaggacao)
#### Post date: [October 19, 2021, 2:36am UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/7 "2021-10-19T02:36:58Z")

</div>

I just want to throw in the idea seedling of the logseq interface, which mixes markdown with enhaced widgets of the category that we are talking about here.

A good system config would probably read like a book with some notes leading to and documenting the concrete config choice.

In JS there is also a similar precedent with MDX inter-mixing markdown and code elegantly, so that it can be consumed by both humans and machines, equally well.

Lastly, I’d find it really exciting if we could have a gui tool tunning on [nixgui.org](http://nixgui.org) where people can craft their initial config and then safe their flavour directly to a git repo (very similar to logseq web).

---

<div class="post-metadata">

### Author: ![ketzacoatl](https://discourse.nixos.org/user_avatar/discourse.nixos.org/ketzacoatl/32/4314_2.png) [@ketzacoatl](https://discourse.nixos.org/u/ketzacoatl)
#### Post date: [October 21, 2021, 6:52pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/8 "2021-10-21T18:52:20Z")

</div>

Newb question:

Looking at [https://github.com/nix-gui/nix-gui/blob/9490067b25d8fc52795329b9ba072ced570b528b/docs/usage.org#running](https://github.com/nix-gui/nix-gui/blob/9490067b25d8fc52795329b9ba072ced570b528b/docs/usage.org#running), I am seeing nix-flakes. How much does this depend on nix-flakes, and how much of nix-flakes do I need to understand before I can install/use this GUI?

I’m not familiar with nix-flakes, so I cannot easily see what the dependency is for. Or maybe I misunderstand what is needed to install and use the tool?

---

<div class="post-metadata">

### Author: ![andrewlapp](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/a/ce73a5/32.png) [@andrewlapp](https://discourse.nixos.org/u/andrewlapp)
#### Post date: [October 22, 2021, 5:35pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/9 "2021-10-22T17:35:46Z")

</div>

Nix-Gui doesn’t support editing flakes yet, however it is built using a flake ([https://github.com/nix-gui/nix-gui/blob/9490067b25d8fc52795329b9ba072ced570b528b/flake.nix](https://github.com/nix-gui/nix-gui/blob/9490067b25d8fc52795329b9ba072ced570b528b/flake.nix)).

All you need to know about flakes is how to enable it per the instructions in your link so the command `nix run github:nix-gui/nix-gui` works. If you don’t have flakes enabled it will not work.

---

<div class="post-metadata">

### Author: ![andrewlapp](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/a/ce73a5/32.png) [@andrewlapp](https://discourse.nixos.org/u/andrewlapp)
#### Post date: [October 22, 2021, 5:44pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/10 "2021-10-22T17:44:30Z")

</div>

I like parts of the idea a lot. My main concerns are

- feature creep, especially in terms of the ability to publish notes
- noobs not understanding that their notes are public

Perhaps there could be a public repo containing an org file for every nix option that could be populated by contributors and displayed by Nix-Gui, and Nix-Gui could be built with this repo as a dependency. This would remove the need for a note publisher integrated into Nix-Gui and also make sure noobs can’t accidentally publish private notes.

Additionally, scripts could potentially populate files with data from other documentation sources.

This wouldn’t exactly logseq (as I understand it) since it’s not as streamlined.

---

<div class="post-metadata">

### Author: ![blaggacao](https://discourse.nixos.org/letter_avatar_proxy/v4/letter/b/8edcca/32.png) [@blaggacao](https://discourse.nixos.org/u/blaggacao)
#### Post date: [October 22, 2021, 8:49pm UTC](https://discourse.nixos.org/t/nix-gui-use-nixos-without-coding/15409/11 "2021-10-22T20:49:58Z")

</div>

Oh, yeah, by all means no note-_publisher_.

More like: render all markdown as markdown-styled nix source code comments (directly within `configuration.nix`)

That’s it.

By the way, let the DevOS community know what it takes to make `divnix/devos` interoperable
