82
NixOS musings (programming.dev)
submitted 1 year ago by Noodlez@programming.dev to c/linux@lemmy.ml

Hi all,

I've been using NixOS for a while now (About a month now) and I've been loving it, but I've had some thoughts lately.

I understand that Nix(OS)'s claim to fame is the fact that packages are reproducible. All dependencies are versioned and all packages are rollback-able (although not sandboxed). With proper maintenance (nix-collect-garbage mostly), the problem with space is mostly mitigated.

But what if a package's dependencies are out of date? These just stay out of date with their possible security problems as well. Not just that but it's (nearly) impossible to actually do your own manual imperative editing of packages to solve a quick problem since everything is declarative.

Not just this, but Nix uses mostly its own configuration methodology, so isn't this a maintenance nightmare as config files change and options are added/removed? Home manager is a prime example of this potential problem.

Plus more technologies being introduced on top of it to solve problems that seem already solved? (Flakes mostly come to mind).

I have come to the realiziation that, unlike a traditional distro like Arch/Alpine which I used previously, if maintenance dies I cannot feasibly maintain it myself, since it's mostly "magic". The upkeep of all the configurations plus all the dependency packages, and making sure each package compiles and matches the build configuration is a nightmare. I can barely do it with my own personal projects.

Anyways that's kinda it just expressing thoughts about it. I do love Nix(OS) and plan to continue using it. It's amazing, and its capabilities are matched by few to none, and from a user perspective it is an extremely seamless and simple OS. It's mostly from a maintainer perspective that I had.

you are viewing a single comment's thread
view the rest of the comments
[-] Noodlez@programming.dev 1 points 1 year ago

I guess I could've worded this better but my second problem was: I would like to do everything declaratively. What do I do when a package doesn't have its own declarative configuration options? Before it was simple because it was imperative, so I could just change the config file, but not so much in NixOS.

[-] ScreaminOctopus@sh.itjust.works 3 points 1 year ago

You can still imperatively edit configs for packages where you don't have / aren't using the declarative config. You'll just have the same reproducibility issues that you'd have on other systems. In general all the declarative NixOS modules do is generate the config files you'd normally write yourself, sometimes with some extra error checking. I've been doing this for my neovim config because I haven't cared to port it to the module's way and I want it to work on systems without nix.

[-] Noodlez@programming.dev 1 points 1 year ago

Gotcha yeah that makes sense, so I'll start doing this as well.

[-] priapus@sh.itjust.works 2 points 1 year ago

Having a config file means a package can be done declaratively. You can just use a nix option to create the config file.

[-] Noodlez@programming.dev 1 points 1 year ago

I didn't know this before, but a lot of comments said the same! I think I'll start doing this.

[-] Atemu@lemmy.ml 1 points 1 year ago

Any package can be "edited" using its overrideDerivation function. You can pass new configureFlags, buildInputs, a new src, etc. It's all additive too, so when something else about the package changes in Nixpkgs, that'll propagate to your "edited" package too.

Config files for some service at runtime and the packages themselves are two separate domains. The former is handled by NixOS. In order to "modify" the runtime configuration, you set options inside a NixOS module such as your configuration.nix. If you wanted to place a config file somewhere in /etc/ or configure a systemd service, you'd use the environment.etc or systemd.services options. They're a bit like "primitives" as they're rather low-level in NixOS terms but so is editing a config file in an imperative distro. NixOS modules usually use these "primitives" internally to offer more abstract options. services.paperless.enable internally sets up a systemd service via systemd.services which runs paperless with the declared configuration for example.

[-] Noodlez@programming.dev 1 points 1 year ago

So I can use something like systemd.services to make my own services as well? Because I've been wondering how to do this as well.

[-] Atemu@lemmy.ml 1 points 1 year ago

Absolutely. Your NixOS config is also just a NixOS module. You could even have it have options if you'd like to.

this post was submitted on 12 Jul 2023
82 points (97.7% liked)

Linux

48366 readers
494 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