It’s not about the destination, it’s about the journey.
…to get a working config, you need to learn a whole new programming language and figure out the tweaks for each package you want to install, so I’d argue the journey is just as long
NixOS sounds like a way to avoid learning Linux by learning an abstraction.
that’s why I only use my computer with raw system calls, shell is bloat
You guys use an OS? I just push the electrons around my motherboard manually with a little magnet on a toothpick.
Systemd sounds like a way to avoid learning Linux by learning an abstraction.
You keep my init system (and resolver, and timekeeper, and task scheduler, and container manager, and …) out your f**king mouth!
Still waiting for systemd-desktopd to drop.
I’m waiting for systemd to join the smart home revolution
systemd-toiletd
journalctl -u systemd-toiletd
Apr 08 20:53:23 shitter01 systemd-toiletd[4294]: massive deuce dropped
deleted by creator
I’d personally advise against NixOS as a first distribution for that matter. It’s a great distribution, but if you want to understand the underlying mechanics, start with something where you interact with them, like Arch or whatever.
Nix is to Linux what Tailwind is to CSS
Ya, sucks when Tailwind goes out of style and now have to learn CSS again.
That’s why I used to use arch btw
it’s an abstraction yeah but understanding what exactly it is abstracting and how is where you’ll get snags, it’s definitely not a newbie distro.
Like everything with Nix, you pay a little more upfront to get a great experience later.
oh yeah, I daily drive NixOS and use it on my homelab as well
That’s why you go for GNU Guix instead, since it’s the same kind of concept but configured using the Guile Scheme you already know.
(You do already know Scheme, right?)
the Guile Scheme you already know.
⬅️➡️👊
But, at least in theory, you’ll only do it once.
Until developers decide to do some changes here and there
Well, I “did it” for an evening once, it was fun. The next day it got annoying REAL fast. But I do keep the config around, so I guess I can just go back to it eventually to keep doing it.
I’m just playing around with it on my home server, and yes, it does get annoying sometimes.
The whole system is far from being perfect, but I’m hoping for a mixture of learning on my side and improvements on the system’s side.
That’s not true.
You have to get PhD in functional programming first.
Wait, are you saying my degree has real world use?
That would make it impure
It comes with a working config.
Adding applications and rebuilding is generally trivial.
The problem becomes if you want to use flakes or home manager, which you probably should. The config for those is complicated and poorly documented.
I don’t know the programming language. I’ve been running it for about a month now. If you’re not doing anything complicated or doing any crazy conditionals or running one config for 27 boxes it’s no different than editing a yaml.
It took me about 2 days to get Nvidia working properly with offloading that was my hardest task so far.
I had no experience in nixOS, just went to the package website, it tells you exactly what to add to each section of the config.
Well not everything is packaged and when they aren’t it Can get more complicated to install since nixos doesn’t use the default file system layout. Another thing is that certain programs have assumptions about being able to do certain things like changing their own config files that don’t work well with the nixos way of doing things. (Looking at you fish(it works but you can’t manage your configuration for it(pretty sure?)with nix))
I haven’t tried that one but besides the package page there is the options pages that gives you the ability to define config info.
Yeah it’s been awhile since I looked at it but when I was managing my config for it with home manager it would straight up refuse to start.
Welcome to Linux; where your hardware and my hardware may act completely different. :)
not to mention how many things they want to go through their system. getting vim set up “their way” while also trying to install python3 support, vimtex, and plug-vim was almost impossible. not to mention finding a way to store the vim configs separately from the rest of nixos. (i use vim on multiple operating systems so switching everything to the nixos wasn’t a viable option.)
maybe there was a better way to do it that i didn’t know about, but boy did i try to find it.
you can just include dotfiles and the like in a nix config, while it’s not the recommended way it usually works
in my experience installing support for most things is way easier on nix, as long as they’re already packaged well. I’m still scared of the eventual time when I’ll have to create my own package for the nix store to install from source
i think i would’ve probably had to package the specific kind of vim that i needed, because i wanted neovim and a gui too or something. this was also like 3-4 years ago so its possible the documentation for this kind of stuff has considerably improved since i tried, or that there are now packages that make this sort of thing easier. and it’s definitely possible everything existed at the time and i just couldn’t figure it out.
but i ended up with a similar feeling to the one you described: stuff is easy when you do it their way, using their tools; but things are very hard to do if you deviate from the path.
i know this is just sort of an inevitable part of the design paradigm they use, and that everything probably works very nicely if you learn their language and the various ins and outs of the operating system, but i just wasn’t willing to commit that much to it.
I really like most of it and started to daily drive NixOS a few months ago, but there’s still some very valid criticisms to be made. Lack of documentation is probably the biggest one
i would like to give it another try at some point because it seems like it will probably feel really nice to use once i get the hang of it. but the lack of documentation is pretty rough.
i also think that for nixos, a lack of documentation is a much more difficult thing to overcome. other distros can piggyback off the arch documentation for most things, but that doesn’t work as well for nixos.
that’s certainly true. I’d like to help improve the documentation, but unfortunately I’m still pretty green at Nix myself, so there’s not much I can do at the moment. But it seems to be picking up speed recently, so there’s hope that with more people better documentation is coming soon
You still need to figure out the tweaks on other systems. Unless you want the Nvidia machine learning to complain that your C compiler is the wrong version and exit. Or maybe you’d prefer to deal with a package calling
ps
and parsing its output (?!) but you haveps
that’s a different version so the output doesn’t parse the sameI mean, when have we ever had a system that is working without any tweaks? Once you install third party packages, there’s so many things that can go wrong
Idk flatpak and docker are pretty easy to set up. If anything gets too complicated it’s easy to go back to old reliable.
The hard part is unlearning last century distro mindset, not this.
nix being 20 years old and still lacking decent documentation on the language it’s what hurts me the most, because the people who do know it works so some amazing things with it
Imagine if NixOS had as good a wiki as Arch. Personally, I wouldn’t bother with another distribution again.
They released their wiki apparently on April 1st.
So now we need just to fill it with the missing content. (which there is a lot). And it will be as good as the arch one… In 20 years.
Or smb made a bad April’s fool and actually their wiki is older.
The NixOS wiki’s been around for a few years at least, it just doesn’t get as much traffic from search engines since NixOS isn’t super popular.
I think what they are referring to is the official wiki at wiki.nixos.org (there also is / was an unofficial wiki)
Didn’t realize that was unofficial lol
Ah this makes sense since I started nixos 3 weeks ago and was sure I already was on a wiki before April. I believe the official one is also mostly copied from the unofficial one for now
Nixos has made me a better software engineer, I hope it takes off
How?
Software engineering is usually distinct from programming in that it isn’t about the logic behind programming, but about the project management that all software projects typically have in common.
Besides agile methodology, a lot of software engineering involves creating reproducible environments. While NixOS doesn’t provide anything that much different from tools like Ansible,
NixOS follows a functional/declarative design paradigm, functional/declarative design paradigms communicate similar logic for solving the same problem. It’s a restrictive paradigm. Consider how javascript is not restrictive, as in, you can code with any design paradigm in javascript, and how it’s ugly for that.
I also think functional paradigms mirror the natural language closer than imperative paradigms. That’s subjective, but I would still argue Math is a logical language that is a subset of the natural language, and since functions in programming represent a process of doing something, functions make for natural verbs. Meaning, understanding the naming convention for the functions, is a natural naming convention for when I communicate with other software engineers, even when I’m not asking about making configurable/reproducible systems in NixOS
Or when I look at how to config things like firewall, ssh, vpn servers, user group permissions… it’s a minimalist description that I could communicate to other people configuring even on a debian server
So, it’s hard because it’s restrictive, but if you’re willing to put up with a learning curve, you get a language agnostic framework for describing computing environments, more or less. Then there’s more advanced stuff with nix flakes, which still doesn’t make sense to me functionally/linguistically, but I’m starting to see the value in parallel package management and the precision in reproducibility they provide by requiring sha256 git commits
nix is 20 years old?!? I thought it was relatively new like maybe 10 years old
the package manager was first released in 2003, so nearly 21!
Get that code a bottle of vodka!
The problem is that it’s all spread out, they do actually have really good documentation for the language, it’s just not easy to find. AND SPREAD OUT!
How often do you reinstall your OS? In practice never, I installed Arch around 8 years ago on one computer and that’s the install I have today still. I copied it twice to a bigger SSD but that’s kind of it.
There is a certain thrill when you nuke your disk to install a distro you never tried before. I actually just nuke one of my laptop last night to try void linux.
I was wondering if Void was still popular. It was kind of feeling like NixOS took all its hype
It is getting traction lately, the last few years. I myself am a Void user. Currently, I either install NetBSD, Debian or Void, depending on the use scenario.
I’m guily of the hopping on the bandwagon from Void to NixOS. But out of curiosity for NixOS not frustration over Void. Void is awesome, it fits the completely subjective picture in my head of what Linux should be.
I’m reporting you to the Ubuntu police!
Yeah, I don’t think that’s the best selling point for desktop use. For me it’s having all my configs for all my devices in a single place, checked in git, with bits of config I can easily share between my different devices.
Hey, man. Some of us just suck at everything but reinstalling.
You clearly don’t have a software hoarding problem
Easy install is not the only benefit. You also get fearless upgrades. When I upgrade my Nvidia driver and it inevitably exposes bugs in one of my apps, I can always jump back to the previous build version without uninstalling anything.
Damn… 8 years? I made it almost two years with tumbleweed on my work laptop.
I like mixing it up, trying different diatros and various programs. After awhile, a fresh install just feels nice…
Every few months or so? There is always that one distro that sounds cool and maybe it’s better than what you are using atm. Yeah, sure. It’s mostly a waste of time and I keep coming back to Arch after a few days, but without this drive I would not have ever tried Arch in the first place. So because of this I found my favorite distro, but I can also never be 100% sure it’s the best distro. Pros and cons, I guess.
No distros are cool. Computers are tools. Is one distro actively better at completing jobs you need to do? There the one you need.
Could I maintain the same OS install for the life of a device? Sure. Can I resist disro hopping? Nope!
I made it, I think, 3 years on a Fedora install once.
I didn’t reinstall my OS because I wanted to. Ubuntu messed up the upgrade from 20 LTS to 22 LTS. There was some message in the console, but an hour later I forgot about it and shut off the computer without checking the message again
When it came back it was a terminal and I had no working WiFi. I googled how to do WiFi on Ubuntu from the terminal, but the answers all told me about the previous WiFi on Ubuntu and I didn’t even have that daemon
Eventually I wiped the drive and installed NixOS because it backs up your previous configs. When an upgrade fails you just undo and go to the previous working version.
Same. Even for Windows…why reinstall so much? I installed W10 1607 and I’ve just been installing updates. Same for my Linux machines. Just upgrade and be done people.
Maybe not useful for yourself alone, but the benefit of being able to share your entire config with others doesn’t sound bad
Main machine was last installed with Ubuntu 14.04 LTS. Running 22.04 now. Gonna celebrate a tin anniversary this year! 🎊
Installed 22.04 few months ago, did my configs, and then subscribed to Ubuntu Pro (free for five devices). Now I can enjoy a stable experience for at least a decade.
Or, they could learn Ansible and get 80% of the way, and be able to reproduce the result on more than one OS. 🥹
Nix is not something exclusive to NixOS, and people are already using it to make reproducible configs that work on more than one OS.
I’m even using Ansible in what I’m currently building with Nix, because it does one thing well that I need to do: distribute files and run commands on a lot of hosts at once.
In my head they’re different use cases. Nix is amazing for a living build. Ansible is more pigeon-holed to production systems where you don’t want (or need) that history baked into every system
That is, until a new Ansible version breaks playbooks again, or an OS is updated in a way that messes with you playbooks, or a package is removed from the playbook but not the installed system…
Ansible is good for ephemeral containers or VMs, but any more permanent system will eventually deviate from the set configuration.
THIS. Or salt. You even learn something generally useful.
I use Salt BTW, but I’d be using Ansible if my previous-previous job didn’t force me into Salt. 🤭
Getting only 80% of the way there is why it never worked before for the whole system
Where’s Ansible OS?
I might just be basic but the only annoying part of reinstalling for me is setting up my browser again.
All hail Firefox Sync!🙌
I’ve used Firefox for over a decade but still wouldn’t trust them to keep all my account info on their servers, Especially not nowadays.
I already started using KeypassXC to locally store my passwords, just importing bookmarks and add-ons I’ve left to do.
I think you can selfhost the sync server.
I only use Sync for extensions, history and bookmarks. I use an alternative pw manager for the same reason.
I use file syncing (Syncthing) and symlinks to keep configs for some apps synced between devices. I don’t for Firefox, but it might work.
I’m still a newbie Linux user so haven’t fully delved into Symlinks…besides bricking a VM trying it once when following a guide.
Can I for instance link a folder where emulators or offline games store save data on my main SSD and have it automatically copied to a folder on my large HDD?
It doesn’t copy data, no. Symlink is short for symbolic link. So it’s a pointer to another location. But it might be useful for you. Taking a guess at your goal, here’s a relevant example.
Say you moved all of your emulation stuff stored under /media/largehdd/retroarch. You could then symlink that directory to ~/.config/retroarch like so:
ln -s /media/largehdd/retroarch ~/.config/retroarch
That data is still stored on the large drive but will now also show under that symlinked directory.
Yes you can, although this might be better done with rsync - and periodically runnind the syncing command.
But syncthing does basically the same thing plus you can sync between multiple devices on the same network.
I sync my laptop config with work pc this way.
Edit: typos, damn mobile
I should really start doing that, not sure why I’ve never thought of that
Mozilla are maybe the only company I’d trust with that
Exactly. I’ve had 0 issues with it. Sadly they stopped development of their own password manager, so now I am using Bitwaren+Vaultwarden. The UI is better, but the app still feels cumbersome and slow, just like Mozilla’s experiment. For some reason Bitwarden is also really inconsistent & slow in when it shows the Autofill Popup on my keyboard.
I didn’t know they tried making their own password manager. I know that on my phone with Gboard I sometimes get an “unlock with Firefox” button in apps’ login screens…
firefox sync misses half my settings
Then you didn’t need them
it’s all in
.mozilla
.Try this, friend
Tap for spoiler
{ config, pkgs, ... }: let lock-false = { Value = false; Status = "locked"; }; lock-true = { Value = true; Status = "locked"; }; in { /* ** ffextid ** Usage: `ffextid [install_url]` ** Description: simple script to find the extension id from an extension's manifest ** using the url found by right clicking the install add-on button and ** selecting "copy link" */ home.packages = with pkgs; [ (pkgs.writeShellScriptBin "ffextid" '' #!/usr/bin/env bash $(curl $1 > /tmp/ffext.xpi) 1> /dev/null $(unzip /tmp/ffext.xpi -d /tmp/ffext) 1> /dev/null # If ripgrep exists, use that. Otherwise default to grep if ! command -v rg &> /dev/null; then rg id /tmp/ffext/manifest.json else grep id /tmp/ffext/manifest.json fi rm -rf /tmp/ffext* '') ]; programs = { firefox = { enable = true; package = pkgs.wrapFirefox pkgs.firefox-unwrapped { extraPolicies = { DisableTelemetry = true; # add policies here... /* ---- EXTENSIONS ---- */ ExtensionSettings = { "*".installation_mode = "blocked"; # blocks all addons except the ones specified below /* Format: "[Manifest id]" = { installation_mode = "force_installed" # will install the extension for you! install_url = "[url]" # found by right clicking the install button on the add-on page }; */ # uBlock Origin: "uBlock0@raymondhill.net" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; }; # Privacy Badger: "jid1-MnnxcxisBPnSXQ@jetpack" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi"; installation_mode = "force_installed"; }; # Bitwarden "{446900e4-71c2-419f-a6a7-df9c091e268b}" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4225453/bitwarden_password_manager-2024.1.1.xpi"; }; # XBrowserSync "{019b606a-6f61-4d01-af2a-cea528f606da}" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/3546070/xbs-1.5.2.xpi"; }; # Decentraleyes "{jid1-BoFifL9Vbdl2zQ@jetpack}" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4158232/decentraleyes-2.0.18.xpi"; }; # Clear URLs "{74145f27-f039-47ce-a470-a662b129930a}" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4064884/clearurls-1.26.1.xpi"; }; #Dark Reader "addon@darkreader.org" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4223104/darkreader-4.9.76.xpi"; }; # Cookie AutoDelete "CookieAutoDelete@kennydo.com" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4040738/cookie_autodelete-3.8.2.xpi"; }; # I don't care about cookies "jid1-KKzOGWgsW3Ao4Q@jetpack" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4202634/i_dont_care_about_cookies-3.5.0.xpi"; }; # Youtube Sponsor Block "sponsorBlocker@ajay.app" = { installation_mode = "force_installed"; install_url = "https://addons.mozilla.org/firefox/downloads/file/4229442/sponsorblock-5.5.4.xpi"; }; # add extensions here... /* "" = { installation_mode = "force_installed"; install_url = ""; }; */ }; /* ---- PREFERENCES ---- */ # Set preferences shared by all profiles. Preferences = { "browser.contentblocking.category" = { Value = "strict"; Status = "locked"; }; ### BOOLEANS "extensions.pocket.enabled" = lock-false; "extensions.screenshots.disabled" = lock-true; "privacy.donottrack.heater.enable" = lock-true; "browser.compactmode.show" = lock-true; # add global preferences here... }; }; }; /* ---- PROFILES ---- */ # Switch profiles via about:profiles page. # For options that are available in Home-Manager see # https://nix-community.github.io/home-manager/options.html#opt-programs.firefox.profiles profiles ={ sunstoned = { # choose a profile name; directory is /home/<user>/.mozilla/firefox/profile_0 id = 0; # 0 is the default profile; see also option "isDefault" name = "sunstoned"; # name as listed in about:profiles isDefault = true; # can be omitted; true if profile ID is 0 settings = { # specify profile-specific preferences here; check about:config for options "browser.newtabpage.activity-stream.feeds.section.highlights" = false; "browser.startup.homepage" = "https://nixos.org"; "browser.newtabpage.pinned" = [{ title = "NixOS"; url = "https://nixos.org"; }]; # add preferences for profile_0 here... }; }; # add profiles here... }; }; }; }
Meanwhile me using Fedora with pretty much everything setup the way I want it out of the box:
Blasphemy! How dare you not tweak your install!
My life is too short to learn zsh 😅
I use Mint, BTW.
Basically why I switched from Arch to Endeavour
Wow, you have sold me on installing Nix next. I’m a programmer and this sounds dreamy!
On most systems, you can install the Nix package manager and try it out before taking the leap :)
nix develop
is going to change your workflow. Don’t fear the flake my friend :)
Stop threatening me with a good time!
I am a Gentoo user and most of that is already a reality on Gentoo systems. Get the stage3 tarball set up, slap your
/etc/portage/make.conf
and/var/lib/portage/world
files in there and build.Obviously, depending on whether it should be a blank system with the same apps installed or a clone of a previous system, configuration in
/etc
and one’s home directory may need to be copied, too.With gentoo and arch you are learning how linux works. Replace nixos with salt or ansible and it can even get you a job.
NixOS is still a Linux system, and the configuration still translates to stuff you have in a very similar way on every other Linux system too (with the exception of what’s needed for the file system layout to work). It’s not some kind of magic. I’ve probably learned as much stuff applicable to general Linux distributions as while using Arch and Gentoo.
Of course, if you only use the high-level options and the graphical installer that may be different, but then comparing it to those distros is very disingenuous.
How many jobs opportunities ask for experience with nixos?
I know of companies like Serokell that specialize in it, and I know that some others use it internally for CI. Generally if you want a Nix job you’ll have to specifically look for that I think
Mhm. The exact same reason why I would recommend them to anyone that actually wants to know how Linux works, the dos and donts (like why having 2 or more package managers is a REALLY REALLY bad idea).
having 2 or more package managers
Are you referring to Bedrock?
No, just a bad experience trying to actually run 2 of them on the same system. One was the main, the other was supposed to “patch” what the first one lacked… and then I realized that compiling from source and packaging with the original (first) package manager is a lot less painful than trying to juggle with both of them.
Oh that’s what you mean. I’m wondering, what did you do to be able to use 2 at the same time?
Well, you just set the second to ignore all inconsistencies regarding libraries and binaries from the first one. It sounds easier than it is to actually put in practice 😂.
I was just experimenting, trying to see if the trouble is worth it… it’s not. Way too many ways to still fuck up your system… and I eventually did 😂. Luckily, I use BTRFS with snapshots, so no harm no foul, I just rolled back everything from the day before I decided to install the second package manager.
Oh I see, well that sounds like it was an experience, maybe not a really good one though XD
Good on you for keeping snapshots, they’re real life savers!
Yep, lifesaver indeed!
If you have time for that, you aren’t making the most of yourself. Goes for any hobby
No, I enjoyed more when my Ubuntu didn’t update in place and I wiped the drive because nothing worked
Depends, you can use Linux in a professional environment. I know people who do.
Edit: also arch installs are able to be semi-automated too. They don’t take that long to do manually either. The image is over exaggerating.
Full time Linux engineer here!
hi
I think Endeavour OS is like that too. I have 2 “unfixable” bugs on my arch installation that can never be removed. I have to manually do 2 annoying workaround tasks every time I turn on my computer before I can use it and this will likely never go away. I’ve been told both these issues can’t be fixed without a complete os reinstall and even then it might not go away. I booted into an Endeavour OS live usb and what do you know, both those bugs were fixed out of the box. Endeavour is based on Arch. The kernel it was running was a kernel number release after my installation developed both of these “forever” bugs.
Arch is great and all but holy fuck I’m sick and tired of this fucking bullshit all the time. One of these times I’m going to type sudo pacman -Syu and it will develop yet a third unfixable forever bug. This is the same shit that drove me away from Windows: uncontrollable degradation over time that can’t be fixed without os reinstall. Even Gentoo isn’t this unforgiving.
Skill issue
I can sympathize, but moments like that are good to test backup solutions. I replace the drive, pretend the first one died, and see how hard it is to start over. Turns out I’m not very good at backups and always miss stuff. :(
The end result is a bug fixed and some lessons learned.
Try Void, stable AF IMO. I have yet to run into “unfixable bugs” (whatever that means). And even if there are, you open an issue on GH and there will be a patch most likely. If it’s a kernel bug, you’ll just have to open an issue on the Linux kernel git repo.
Could you explain what these bugs are? I’m curious.