I recently tried switching from Arch to NixOS and the experience I had can best be described as apalling. I have not had a new user experience this bad since my first dip into Ubuntu dependency hell back in 2016. I’d like to preface this by saying I’ve been a Linux user in one form or another for almost half my life at this point, and in that time this may well be the most I’ve struggled to get things to work.

Apparently they have this thing called home-manager which looks pretty cool. I’d like to give that a shot. Apparently I have to enable a new Nix channel before I can install it. I’m guessing that’s the equivalent of a PPA? Well, alright. nix-channel --add ..., nix-channel --update (oh, so it waits until now to tell me I typo’d the URL. Alright), and now to run the installation command and… couldn’t find home-manager? Huh?? I just installed it. I google the error message and apparently you have to reboot after adding a new nix-channel and doing nix-channel --update before it will actually take effect, and the home-manager guide didn’t tell me that. Ah well, at least it works now.

I didn’t want to wait for KDE and its 6 morbillion dependencies to download, so I opted for Weston. It wasn’t a thing in configuration.nix (programs.weston.enable=true; threw an error and there was no page for it on the NixOS wiki), but it was available in nix-env (side note: why does nix-env -i take upwards of 30 seconds just to locate a package?), so I installed it, tried to run it, and promptly got an inscrutable “Permission denied” error with one Google result that had gone unresolved. Oh well, that’s alright, I guess that’s not supported just yet – I’ll install Sway instead. Great, now I have a GUI and all I need is a browser. nix-env -i firefox gave me the firefox-beta binary which displayed the crash reporter before even opening a browser window. Okay, note to self: always use configuration.nix. One programs.firefox.enable=true; and one nixos-rebuild switch later, I’m off to the races. Browser is up and running. Success! Now I’d like to install a Rust development environment so I can get back to work. According to NixOS wiki, I can copy paste this incantation into a shell.nix file and have rustup in there. Cool. After resolving a few minor hangups regarding compiler version, manually telling rustc where the linker is, and telling nix-shell that I also need cmake (which was thankfully pretty easy), I’m met with a “missing pkg-config file for openssl” error that I have absolutely no idea how to begin to resolve.

I’m trying to stick with it, I really am – I love the idea that I can just copy my entire configuration to a brand new install by copying one file and the contents of my home directory and have it be effectively the same machine – but I’m really struggling here. Surely people wouldn’t rave about NixOS as much as they do if it was really this bad? What am I doing wrong?

Also unrelated but am I correct in assuming that I cannot install KDE without also installing the X server?

  • aleph@lemm.ee
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 month ago

    I’ve only tinkered with Nix in a VM so I’m no expert, but I will say this: for every person that raves about it, it seems there’s someone else who decided that the hassle of learning an entirely new way to do pretty much everything on a Linux system, often with sparse documentation, wasn’t worth the time investment.

    Your experience sounds pretty much par for the course, to me. People who think Arch is hard have obviously never tried Nix.

  • gramgan@lemmy.ml
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 month ago

    Hey friend,

    My recommendation is to keep things dead simple as you start out—no fancy channels or flake inputs and such, at least not where not necessary. I’ve found a lot of success in going slow, and not feeling rushed to do everything the NixOS way at first (for example, I still manage my dotfiles with GNU stow instead of home-manager). I started off with a very simple flake and basically just using my configuration.nix to declare packages, gradually learning more from there. The Nix ecosystem is as extremely powerful as it is poorly documented—it unfortunately sometimes takes a while to (as you’ve noted) even just find information.

    I’ve linked below two sites I found unbelievably helpful in my journey—the first one helps you get up and running with a very simple flake (and, yes, you will want to use a flake, even if it isn’t obvious right now why), and the second one is a huge search engine of all NixOS options, the first place I check when I’m putting something new on my system.

    Good luck!

    https://nixos-and-flakes.thiscute.world/

    https://mynixos.com/

    • xylazineDream@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      1
      ·
      24 days ago

      This is the one, make it work, then slowly make it fancy

      Besides, the dynamic nature of how many NixOs configurations work, is our only defense against the coming ai menace lol

  • Oinks@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 month ago

    I’m not sure why nix-env is so slow exactly but it’s the wrong tool to use anyways as it just throws away everything NixOS has going for itself in favour of pretending to be a normal package manager. You really just want to use the configuration file.

    The “normal” way to install packages in NixOS would be using environment.systemPackages. The various programs.<name> options are intended for packages requiring additional setup, like shells or desktop environments (e.g. iirc for sway it creates a systemd target and adds the .desktop files for login managers to see it). Weston has a package but not an option, so you’d have to figure that additional stuff out yourself (but running Weston from a tty should just work).

    There are additional ways to install packages for single users or using home-manager but you don’t need those.

    This does kinda demonstrate why (I personally think) NixOS is so hard to learn: There’s a million different ways to do anything and each has it’s own weird gotchas. And critically most of them, even when they are honestly just legacy cruft, are not actually deprecated and may even have users advocating their use, or even if they don’t nobody bothered to remove that part from the wiki (if it was ever there to begin with).

    You can also see this in the flake/channel split: One person in this very thread is telling you to use flakes, while another is telling you to stick with the default (channels).

    And in some (fortunately relatively rare) cases even things that everyone agrees are bad ideas still get promoted in official documentation or other prominent places, like using nix-env -i under any circumstances, ever.

    And it is definitely a learning problem you are having. You are facing the same problems as a new Linux user who just installed Manjaro with KDE 6 on Wayland and is wondering why apt-get and xrandr are not working even though those are accepted answers on Stackoverflow posts from 2012. Of course as experienced Linux users we know why, but a new one has to learn a lot of stuff before “getting it” and will probably stumble onto poor advice more than once in their journey. (And learning Nix is arguably worse than learning Linux for the first time, but that depends a bit on your exact experience and background.)

    If you stick to learning NixOS there will be a point when these things seem trivial, but it will be a lot of effort to get there. Is that effort worth it? Well, if the term “declarative package management” doesn’t mean anything to you, maybe not. You do sacrifice a lot of things “just” to declare your entire system state in one configuration file (or more likely, directory). But I do think the things Nix does are really cool, if you can get over the, uh, everything.

    • Oinks@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 month ago

      Also coming from Arch will induce a bit of a culture shock regarding documentation as the NixOS wiki is just… not very good. It’s neither complete nor reliably accurate for the current release. And some wiki pages are actually just snippets with no explanation for either what they do or why they do it.

  • kyleraykbs@lemmy.ml
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 month ago

    Hello! Made a Lemmy account to comment on this, I’ve been a long time lurker. As someone who also went into Nix blind, its always gonna be a hard time a first, its a super different paradigm then anything else out there. Few recommendations,

    1. Use flakes, nix channel is legacy and is imperative meaning nix channel changes won’t be copied per system
    2. Try to purify everything, you may not succeed but if you try to nixify everything then you’ll get a much better understanding of the underlying systems of nix and of course your is.
    3. Fuck the wiki read the code and other peoples configs. The wiki and the docs have largely been misleading and the nixpkgs code is usually super easy to read, the source is also linked to on search.nixos.org
    4. Use home manager early. Working with NixOS gets better at a rate exponential to the amount NixOS has control over and your home environment is a huge part of that.
    5. Learn modules, all of nixpkgs is made of modules and your system should be as well, if you throw everything into one file you’ll have a really hard time generalizing later on, check out vimjoyers channel for this seriously he’s great.
    6. Understand that Nix, NixOS and NixLang all are huge upfront investments of time for a time save later on, its absolutely worth it in my opinion but you need to be aware its gonna be very difficult and you should focus on putting your energy towards the parts most important to you. If you have multiple systems you want nix to seamlessly deploy on focus on system relationships like roles, users, flake parts, etc.

    And full disclosure once you get over the learning curve it gets easier to write and understand nix, but you realize you did everything poorly and you’ll restart.

    • lord_admiral@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      28 days ago

      I have a few questions. If your opinion is correct and nix-channels are rotten outdated crap, why aren’t they removed from use? Why hasn’t any of the nix developers decided to make flakes an integral part of the system yet? I can answer these questions. Any operating system is a complete piece of software only when it follows the developers’ backbone logic. At the moment when NixOS becomes a collection of flakes of varying degrees of stupidity, NixOS will cease to exist. Everyone knows and keeps silent that Dolstra started all this nonsense with flakes and home manager only to attract more defectors from other systems. There is no other reason. When a person has worked 30 years in production, he will hardly want to retrain for a new architecture and learn a rather stupid language. The home manager is a crutch written by a third-party developer and its only task is to make the /home folder look familiar to the Arch Linux user. There are no other functions. In the end, all flakes end up in configuration.nix overcomplicating and confusing the configuration. So it’s much better to stop chasing other people’s hyprland configs and install the recommended ISO, switch to an unstable branch and…read the Wiki.

      • kyleraykbs@lemmy.ml
        link
        fedilink
        English
        arrow-up
        0
        ·
        26 days ago

        Dude what are you on about? Channels are just imperative and that kinda goes against the purpose of nix same deal with why I recommend home manager, if you’re gonna do NixOS imo you should do it pure and it sounds like op wants that. The rest of your rant is absolutely unhinged.

        • lord_admiral@lemmy.world
          link
          fedilink
          English
          arrow-up
          0
          ·
          26 days ago

          When dudes use flakes config, they usually disable channels by lock their setup to their/anyone’s github. This is kind of how it works.

          • kyleraykbs@lemmy.ml
            link
            fedilink
            English
            arrow-up
            1
            ·
            22 days ago

            I use flakes and I do disable channels yeah but that wasn’t what the other 90% of your post was about

            • lord_admiral@lemmy.world
              link
              fedilink
              English
              arrow-up
              1
              ·
              22 days ago

              Can you please tell me how you managed to measure the percentage of “about this” and “not about that” in my comment? In any NixOS community, there are always a bunch of people ready to cut the throat of anyone who says “flakes is dogshit”. These are the same people who are always crying “I downloaded flake from some crappy github and now my beloved hyprland doesn’t want to work”. Is this a coincidence?

              • kyleraykbs@lemmy.ml
                link
                fedilink
                English
                arrow-up
                1
                ·
                12 days ago

                Never seen anyone do that?? But dude if everyone is telling you that your doing it wrong, you might be doing it wrong.

                • lord_admiral@lemmy.world
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  12 days ago

                  Your problem is that you are drawing the wrong logical conclusions. The crowd can be wrong.Especially if the crowd relies on collective intelligence.