NixOS is the best linux back-end ever designed. But it can't become mainstream without a front-end

I know it might be a hot take, especially among Nix veterans. But hear me out. Anybody who invested their time in understanding the differences, will realize that declarative system administration is better than imperative. Nix language looks hideous until you invest enough time into understanding why it’s designed the way it is, and then it makes perfect sense. People might fall under the impression that Nix is the superior way of managing the system for a developer or a professional, but the truth is that Nix is the superior way of managing the system. Period.

However, I can’t recommend it to anybody I know. It’s borderline unusable by normal humans that have stuff to do. It’s discoverability is non-existent. There’s 15 different ways to do any given thing, 13 of them are documented on reddit and 16 of them are experimental but also somehow deprecated.

What does this mean? What this means is that the end user should not have to deal with any of this. NixOS is the perfect back-end. What it needs is a front-end.

The goal of having a front-end UI is to have a tool to represent the contents of configuration.nix and to have a visual and discoverable way of editing it. The tool does not have to be exhaustive. It only needs to make simple things simple. Adding a package should involve a search bar and a button “Add”. Editing options of a package should involve a drop down menu, not a google search for its name. Seeing the list of stored roots/generations should not require a google search for the command line, it requires a UI that invokes the said command line. 90% of things that 90% people need to use 90% of the time will fit on a single UI dialog with about the same complexity as the NixOS visual installer.

I want to be able to recommend NixOS to my mom. And that’s literally one well-designed user-facing dialog away.

17 Likes

I would like to add these links here

I used neither of them.

1 Like

The second project there (nix-gui) can serve as a great illustration to a very important point that I’ll re-iterate: there’s no point in trying to make such a GUI tool generic or comprehensive. It’s hard, it’s expensive and most importantly it makes simple things harder. Here’s an illustration from that repo as an example


All those UI elements are there because it supports booleans/expressions/references that make it much more complicated to manage simple on/off features. At the point where the user wants to edit expressions and references, they probably don’t need a gui anymore anyway. The point of a tool is to make simple things simple. The UI should only present you with a list of things you might actually want to interact with and you should have a clear way of showing the current state of the configuration. No point doing an information dump of everything there is in one list. Emphasis should be put on making the basic operations as visually intuitive as possible.

I guess the closest analog might be the VS Code settings UI:


This UI is simply a front-end for settings.json, but it’s well structured, it has exhaustive tooltips where needed, it does not look overwhelming and contains stuff that users typically need to edit. Even though it’s nowhere near as powerful as editing the json manually, it does not have to be. It is absolutely not a generic json editor – its goal is not editing json files, its goal is to help users configure vs code.

4 Likes

Did you have a look at https://mynixos.com/

I don’t believe NixOS is, or should be, a mom’s operating system. The strengths of NixOS are its configuration-as-code attributes. To the extent moms care about that, excellent, but otherwise I think it is the wrong direction.

16 Likes

I think that it’s exactly the poisonous attitude that has always limited NixOS’s widespread adoption. Configuration-as-code does not mean that the said configuration has to be written manually. VS Code is configured by declarative config as well, yet anybody can interact with it using the GUI with zero entrance barrier. Its target audience is literally programmers, yet anybody can configure it via the GUI and then share their declarative configuration-as-code.

I’d argue that the target audience of VS Code is actually more technical people (literally programmers) than what the target audience of NixOS could be (literally everyone). There is no fundamental design limitations that should make NixOS unapproachable to non-technical people.

15 Likes

In fact, I would argue that most other distros are fundamentally more limited in the audience they can potentially reach. All imperative distributions have inherent problems associated with their statefullness: a user might always get their system into a broken state without an obvious way of fixing it. This is a fundamentally limiting design factor. It’s no wonder why immutable user-facing systems are taking off (SteamOS 3.0) – simply because they’re more user-friendly, but they’re fundamentally more limited.

NixOS has none of these limitations, yet over and over I see people excusing its terrible UX with “they’re just not our target audience”. The first rule of UX: it’s never the user’s fault. Whenever the user faces any problem with your design, it’s always a flaw of the design.

10 Likes

I don’t understand why you call my opinion a “poisonous attitude”. I simply don’t agreee with you, and there is nothing poisonous with that. Operating systems are like any other product, they all have have different purposes and different target audiences. A race car is not an off road vehicle, is not a tractor nor a truck. Any product design need to take its target audience into account, nothing fits everyone.

12 Likes

[…] over and over I see people excusing its terrible UX with “they’re just not our target audience”. The first rule of UX: it’s never the user’s fault. Whenever the user faces any problem with your design, it’s always a flaw of the design.

While I agree with that assessment in general, it still is an open question whether the general Linux desktop and it’s user base is what Nix and NixOS should optimize their UX for. And I am part of that user base. Yet I am not convinced that is the ideal target audience.

1 Like

Configuration-as-code does not mean that the said configuration has to be written manually. VS Code is configured by declarative config as well, yet anybody can interact with it using the GUI with zero entrance barrier. Its target audience is literally programmers, yet anybody can configure it via the GUI and then share their declarative configuration-as-code.

I think that when you mix handwritten and autogenerated code your “configuration as code” starts to revert back to “configuration as state”, at least in the long run.

Besides, when there are multiple frontends to the same backend they always tend to not play very well together. A simple example of this situation is /etc/resolv.conf, where multiple networking frontends, VPN software and more are always overwriting the file, sometimes causing DNS failures and the user can’t do much about it.

Other examples are declarative systems for networking equipment OSes (OpenWRT, VyOS, etc.). They do have a GUI, CLI and configuration files you can edit, as you propose, but it’s quite a mess: essentially it works well enough only if you always stick to just one front-end.

6 Likes

I didn’t think before posting about nix-gui and I apologize for it.
What about SnowflakeOS? I think it is going in the direction you want @Raikiri.

Here’s what I find to be the core of the problem.

I think if you use something long enough you should be able to fix it.

This mindset conflicts with non-technical people’s lifestyle when it comes to their os. Because technology is not a priority for them.
That creates a neccesity for a tech-support position, and I don’t think everyone wants to be dedicated tech-support for their moms.

The barrier for entry into linux and nixos are different by a huge margin. Nixos is magical even to experienced linux users.

From what I observe having good default programs and an app store is the base expectation for any os.
Snowflakeos (currently alpha) is doing exactly that from what I read on their website.

But from where I stand, Snowflakeos is building abstractions (software store) on top of abstractions (nix configuration) on top of linux.

It is a complex pipline to reach the beginner friendly status. And I believe this will always bite us in the future.

2 Likes

It’s poisonous in the literal sense of the word since the adoption of NixOS is partially (majorly IMO) hindered by its steep learning curve which is very much a result of having to learn how to configure the system.

Um, no. Let’s take Kali Linux as an example, its target audience are people interested in cybersecurity; but that doesn’t mean your distribution will drop support for anything that’s not related to cybersecurity et al. What you’ve mentioned applies on smaller things (like applications) but we’re talking about operating systems here, I think any given operating system should have support for most day-to-day things in a manner accessible to “moms” as well.

“Nothing fits everyone” doesn’t mean we don’t try to fit as many people as we can.

By making NixOS easier to use for “moms”, we’re not degrading it for anyone else. I don’t see the downside of doing this.

4 Likes

Thanks for boiling it down for us @phanirithvij. I’m really glad we’re talking about this issue in a constructive manner.

I myself am a “tech support” for my mom ever since I setup NixOS on her system. But I’ve noticed that I didn’t need to help her as much after the initial month where she needed to install stuff and get it working (which is also more of a “I’m used to Windows so what in the world is this” learning curve).

She’s never going to be very involved with configuration and this makes me really like the idea of a non-exhaustive GUI tool that configures your system. And, the way I imagine it, it would be very much like VSCode where you have the GUI option + a JSON where it all boils down to. I imagine a lot of the non-tech-savvy people would be the same way and this could help us get many more users in the long term!

Please

Can we try not using confrontational terms like poisonous, go away, entitled. I don’t think it’s helping the conversation.

I personally am very much interested in making everyone I ever meet to immediately switch to Nixos but I can see it is not practical. But that doesn’t mean it is not an acheivable goal or that any discussion on this topic should be discouraged.

I don’t think this is specifically about snowflakeos so the discussion needs to happen (if it is allowed) on the nixos forum itself.

6 Likes

Not sure what did I say that got you riled up. I haven’t forced NixOS on anyone.

Just re-iterating what I said before:

By making NixOS easier to use for “moms”, we’re not degrading it for anyone else. I don’t see the downside of doing this.

5 Likes

There’s a difference between ‘what we need is…’ and ‘looking for people to help me make…’. The former is an implicit call to the community to change its behavior, which will naturally meet with resistance from people who enjoy the benefits of the status quo. The latter is unobjectionable—you’ll find people to help you or you won’t. Try doing the latter next time.

11 Likes

Everyone in this thread is “enjoying the benefits of the status quo”, it’s just that some people feel entitled to tell others to make it more enjoyable for them.

I am thinking about this too.

NixOS can be a good system for “moms” (but only with tech support - they cant destroy anything and the used programs are mostly the same over the years ). But I think we should be especially open for other groups:

  • Linux gamers. NixOS can be very good for this (but it strongly depends on documentation for Steam, Lutris, HeroicLauncher, steam-run, …)

  • Just office users who most likely would not install new things and never change any dotfiles

  • System administrators who install the systems for a group of office users

  • Linux enthusiasts, who dont code

For all these groups „the code is the documentation“ is not the best approach.

My approach is: Mfake the documentation better.

The manual as of now is a bit too technical and the choice of topics is not good for the groups I mentioned above. Thats why I focus on wiki.nixos.org - and to make it better for people without that much technical knowledge.

In my personal experience: You dont need to understand nix to use NixOS as daily driver (when you belong to one of the groups). You do not need to and you should not use flakes and homemanager.

If you cut these parts of the nix ecosystem its way more approachable. Adding packages in configuration.nix, some configuration, channel updates and rebuilds and garbage collection is probably all you need.

Enhancing the wiki and making it better for the people who dont code is as step in the direction of OP ideas.

2 Likes

This is gonna be my last post in this thread since it’s a rabbit hole into something that’s off topic.

Firstly, having an app or a nixos module or whatever would, by nature, be opt-in, not opt-out. I don’t see how this would change the status quo for seasoned NixOS users. Bettering the experience for some others isn’t ruining it in the slightest for the rest of us in this case.

Secondly, there will be resistance in the former, and rightfully so. But that doesn’t necessarily make the ones calling for change wrong. Everyone has the right to speak up if they feel something is missing to them. Everyone else also has the right to have a different opinion.

This was uncalled for. As I said, doing the former isn’t wrong either (irrespective of which of the two choices is chosen)

Everyone in this thread is discussing the options we have and how we can better those options or create new ones. No one has forced anyone else to do something that they don’t want to.

And why do you think it’s okay to throw shade on others, call them entitled, make personal comments on what their moms use or are “forced” to use on someone trying to have a constructive discussion on whether the topic of this thread is a good idea or not.

3 Likes