this post was submitted on 14 Feb 2024
104 points (97.3% liked)

Linux

48363 readers
1556 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

There is a similar question on the site which must not be named.

My question still has a little different spin:

It seems to me that one of the biggest selling points of Nix is basically infrastructure as code. (Of course being immutable etc. is nice by itself.)

I wonder now, how big the delta is for people like me: All my desktops/servers are based on Debian stable with heavy customization, but 100% automated via Ansible. It seems to me, that a lot of the vocal Nix user (fans) switched from a pet desktop and discover IaC via Nix, and that they are in the end raving about IaC (which Nix might or might not be a good vehicle for).

When I gave Silverblue a try, I totally loved it, but then to configure it for my needs, I basically would have needed to configure the host system, some containers and overlays to replicate my Debian setup, so for me it seemed like too much effort to arrive nearly at where I started. (And of course I can use distrobox/podman and have containerized environments on Debian w/o trouble.)

Am I missing something?

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 9 months ago (1 children)

Thanks for the detailed response.

I’d nowadays be able to solve that particular problem with one line of relatively simple code in NixOS

I can't remember the exact details of the whole issue, but that part was for a desktop entry. If I remember correctly, in the end I had to create a system service and there were no readily available examples like for the packages. After days of researching in my spare time, I had to ask in the irc for a snippet from someone's config.

As the person who implemented a variant of this for Nix (buildFHSEnv), it’s rather straight-forward.

Oh, it seems really cool. I'll need to look into it.

I mean, that’s just one particular interface. It’s actually quite flexible to do it this way though as it allows you to dumb it down if you don’t like it with a little refactor:

That's definitely an improvement, but the default config is still far better IMO.

I probably wouldn’t bother with doing that stuff in Nix and would rather just keep the plain i3config text file and set the option glue to just use that file; effectively a glorified stow.

Replacing stow with home-manager has the same issues as replacing a regular distro with nixos. If I can stow all of my dotfiles, why would I use home-manager to handle them instead? In most cases it's just going to be harder to configure anything, and you also need to rebuild your home every time you want to update a config.

This more complex interface is only truly beneficial if there are parts of your config that vary depending on some other conditions. Some users may have the need to only run a set of commands or have certain launch options on one machine but not another. Trivial to do with lib.optionals and the like using this kind of interface but very hard to do if it was just a list of strings or one large string.

What benefits does it have over just using a shell script?

I guess it's also great for programs that aren't following the standards like firefox.

Well, then tell it to not to do that? I don’t know the module in question but any well-designed module has an option for precisely that. If it doesn’t, I’d consider that a bug.

It's probably a skill issue, but that ties into another problem I've had when messing around with home-manager: the only source of options I found was mynixos. So to configure anything I had to first guess potential keywords to search for the option I'm interested in. And that's after learning about it from some video on youtube, because google left me high and dry.

I wholeheartedly disagree. Declarative stateless system configuration a la Nix solves a lot of issues that users face all the time.

Can you give me some examples, what issues will I face running MX + nix that I wouldn't if I ran nixos?

As someone who works with terraform, I understand the benefits of being forced to keep a single source of truth instead of remembering to update my post-installation script and keep things synced across devices. But on the other hand this is everything I need to do to get a fresh install to where I'm currently at:

  • install the single docker dependency that doesn't work with home-manager
  • clone my dotfiles and symlink them
  • set up nix, home-manager, and switch
  • remove the few packages I've replaced with nix ones
  • cp the i3.desktop (home-manager and sddm were not agreeing)
  • clone and install doom

It's definitely not a lot to maintain, and the issues are either obvious and easy to solve, or just a small waste of space. For example if I forget to remove the debian version of git, it's still going to automatically source the nix one first. Home-manager with just a list of packages makes the hardest part of that process a breeze, while still being really easy to set up.

The main problem was getting started from 0, so I'm considering writing a post about it when I get a bit more comfortable. Trying to learn nix declarative package management from the nix manual is a bad idea, and almost all of the resources are on nixos. A quickstart guide with a few commands and examples would've had me up and running in 10 minutes instead of days.

Whether the time investment is worth it at present is debatable but there’s a clear path towards yes IMO because a project focused around proper IaC elevates operating systems onto another level because it abstracts and centralises configuration. It takes one person to figure out how to configure a certain thing in a sensible way and they can publish that work as a NixOS module for everyone’s benefit. Most of the work I put into NixOS is upstream because of this.

Right now, it’s absolutely catered towards nerds and other technologically able people like us but imagine what a further abstracted GUI could do for mere mortals.

Oh for sure, a home-manager gui that let's you customize every package from a single place while automatically updating your config would be a complete game changer. But I'm talking about the current state of things. In that regard, currently every linux user can enjoy simple declarative package management with stable and bleeding edge sources. Yet I never see it mentioned, while even beginner threads are being spammed with nixos recommendations. Imagine if casuals could open their software center or discover and install nix packages instead of flatpaks.

[–] [email protected] 2 points 9 months ago

If I can stow all of my dotfiles, why would I use home-manager to handle them instead? In most cases it's just going to be harder to configure anything, and you also need to rebuild your home every time you want to update a config.

Yes, yes indeed. That's why my dotfiles are still in a git repo (don't get the point of stow), not in home-manager.

If you do in fact need home-manager's features for some of your dotfiles though, it can effectively act as a stow superset for the rest.

What benefits does it have over just using a shell script?

Declarative stateless configuration rather than imperative stateful configuration.

With a bash script, you'd have to meticulously craft together the i3config file using shell script syntax and remember to run that every time you change something. home-manager just does all of that for you with high-level data types and frameworks specifically made for that purpose.

that ties into another problem I've had when messing around with home-manager: the only source of options I found was mynixos. So to configure anything I had to first guess potential keywords to search for the option I'm interested in.

Yeah, it's not great. https://search.nixos.org/options? is really useful for NixOS.

You have to either use your browser's dumb search on https://nix-community.github.io/home-manager/options.xhtml or your pager's dumb search in man home-configuration.nix.

Can you give me some examples, what issues will I face running MX + nix that I wouldn't if I ran nixos?

All the issues which declarative immutable stateless system configuration solves such as atomic updates, configuration rollback in case you messed something up and trivial recovery. I'm sure I'm forgetting some since I'm so used to having them.

The main problem was getting started from 0, so I'm considering writing a post about it when I get a bit more comfortable. Trying to learn nix declarative package management from the nix manual is a bad idea, and almost all of the resources are on nixos. A quickstart guide with a few commands and examples would've had me up and running in 10 minutes instead of days.

Yeah, docs are a pain point. If you think that section is bad (I think so too), everyone will thank you for rewriting it. Feel free to shoot a PR to Nixpkgs and ping a few people from the docs team if you're motivated.

Yet I never see it mentioned, while even beginner threads are being spammed with nixos recommendations.

I don't get it either. NixOS is the best thing since sliced bread for a certain kind of person (experienced hacker who has felt the pain points which NixOS relieves) but I'd never recommend it to an inexperienced user in its current state.