# Switching from EndeavourOS to NixOS: Need Guidance for Smooth Transition

Greetings,

After watching No Boilerplate’s analysis of NixOS, I’m interested in its approach to system management.
The balance of stability and cutting-edge features seems promising for improving my Linux desktop experience.
I’d appreciate guidance on testing and potentially adopting NixOS.

Current Setup

  • Hardware: AMD Ryzen 5 7600X, RX 7900 XT, 32GB RAM
  • DE: KDE Plasma with Krohnkite tiling
  • Current OS: EndeavourOS (Arch-based)

Essential Software & Configurations

I need to maintain these applications and their configurations:

  • Blender (3D design work)
  • Steam (primarily for Warframe)
  • Floorp browser (a Firefox fork with multi-line tabs) with profile migration
  • Vesktop/Legcord for communication
  • KDE-specific configs:
    • Konsole settings
    • Window Rules (transparency settings)
    • Krohnkite tiling configuration

Questions

  1. What’s the best approach to preserve my KDE Plasma setup, particularly the Krohnkite tiling and window rules?
  2. How can I set up dual-boot with my existing EndeavourOS installation? (I’d like to keep it as a fallback)
  3. What’s the recommended way to handle my existing configurations? Should I try to convert them to Nix configurations, or is there a better approach?
  4. Are there any specific considerations for my hardware, particularly for the RX 7900 XT?
  5. What’s the best practice for managing proprietary software like Steam and some browser extensions?

Goals

  • Experience NixOS’s unique approach to system management
  • Keep my current desktop environment setup
  • Ensure smooth gaming experience
  • Make a full transition if everything works well and I enjoy the NixOS way :robot: :nerd_face: (This nerd emoji is purely as a nerd myself, hope you like it too!)

I’d appreciate any tips, guides, or configuration examples that could help me get started. Thanks in advance!
P.S. I used AI to help me write the post, I hope that isn’t a dealbreaker to the community!

Should work OOTB, you could use the Zen Kernel as an optimization simmilar to arch (boot.kernelPackages = pkgs.linuxKernel.packages.linux_zen;). You might also take a look at GitHub - NixOS/nixos-hardware: A collection of NixOS modules covering hardware quirks. if you want further optimization (for a normal desktop look at the modules under common), ignore for now though as you just want to get going.

services.desktopManager.plasma6.enable=true; should get Plasma 6 up and running. I’m not familiar how plasma is configured though. For now you could just set it up imperatively as you did on EndoavourOS (if its dotfiles you could just copy them over) and transition to declarative management once your ready (take a look at GitHub - nix-community/home-manager: Manage a user environment using Nix [maintainer=@rycee] for user-config, though it is not the only game in town, just the most popular)

   environment.systemPackages = with pkgs; [blender vesktop floorp];
   programs={
      steam.enable = true;
      gamescop.enable = true;
   }

For warframe i needed to use gamescope due to weird mouse behaviour and it being horrible with exotic keyboard layouts (dvorak). But that might have been caused by sway YMMV.

Answers to your questions:

  1. i’m not fammiliar so take it with a grain of salt, but as i said before you can do it imperatively for now and home-manager has you probably covered.
  2. Do you have a secondary drive? if yes just install nixos to that (easiest and hardest to fuck up). If not you need to shrink your root partition (i recommend a usb-stick with GParted) to make space for the root partition. You can use the same boot partiton if im no mistaken, but you should use the same bootloader as EndeavorOS in that case (citation needed)
  3. Most keep their nix config in a git repo. You don’t need to convert everything to nix and can gradually migrate as you see fit. I for example keep a few config-files in my config repo and just have home-manager symlink them to the correct position (like my nushell scripts and functions). The best approach is the one your comfortable with IMHO.
  4. Probably not as the LTS kernel (6.6.x) should have the driver, if thats not the case use the latest kernel (see boot.kernelPackages). For anything else see my earlier statement about hardware.
  5. Steam is self-contained so i don’t see what could be managed there apart from defining the library location inside of the steam application. I install my browser extensions imperatively at the moment though i want to transition to a declarative way (i’m using librewolf a firefox fork so i can use programs.firefox) but i don’t know the floorp browser you use.

Tips

  1. Get familiar with the Nix language. (Really important IMHO) It’s the most hated part by new-comers (probably, apart from bad doc), but it makes more sense the more you learn about it. I really liked Preface - Nix Pills
  2. If you want to embrace Immutability even more read Erase your darlings: immutable infrastructure for mutable systems - Graham Christensen , NixOS ❄: tmpfs as home - Elis Hirwing and take a look at GitHub - nix-community/impermanence: Modules to help you handle persistent state on systems with ephemeral root storage [maintainer=@talyz] (you can transition to this after your somewhat comfortable with nix)
  3. For secret management in your config see GitHub - Mic92/sops-nix: Atomic secret provisioning for NixOS based on sops or GitHub - ryantm/agenix: age-encrypted secrets for NixOS and Home manager
  4. Keep calm and configure on!
Tips on some cultural things
  1. Ignore the drama on Reddit and elsewhere. Taking a step back and keeping a cool head on some of the disagreements in the community here on Discourse and elsewhere is best in the long run. We are all humans with different opinions and make mistakes. There are some people that just want drama and hype it up for their own amusement, which is why there are some hardcore nix (and rust for that matter) haters without concrete reasons.
  2. Don’t be shy to ask Questions here on discourse or in the NixOS matrix channel
  3. If you encounter bugs or crashes of software either ask for help or open an issue on github if your reasonably confident that it’s not just a config error.

Some other Resources

man configuration.nix and man home-configuration.nix are your friends
https://search.nixos.org/
NixOS Wiki - NixOS Wiki (Some pages are very outdated, but it’s a starting place for me)
Vimjoyer on Youtube

Hiya Zimward, thanks for the quick reply!
To answer some of your questions:

  1. I don’t have a secondary drive, but already shrank my EndeavourOS partition to give myself 600 GBs to work with for NixOS or other distros I might want to try,
  2. Floorp is a Firefox Fork with some features I really like, so I should be able to simply copy my Firefox profile over.

I do have some more questions though:

  1. How do I install stuff exactly? I’ve heard it’s declarative but I have no idea what that means :sweat_smile:

  2. I have several questions about configuration management:

    • Could you explain what “declarative” vs “imperative” configuration means? I’m new to these concepts.
    • What exactly is home-manager, and how does it differ from regular system configuration?
    • For Git configuration management, what’s the typical workflow? I’d like to host my configs on GitLab for remote access.
  3. I’m currently using GRUB3 on EndeavourOS. Should I keep using GRUB for the dual-boot setup, or would you recommend a different bootloader?

  4. Regarding kernels: I see you mentioned the Zen kernel. I’ve heard of Liquorix as well - are there significant differences between these options for gaming and desktop use?

  5. I’m also considering Bazzite (Fedora Atomic-based) as another option. While they’re different approaches to atomic/immutable systems, could anyone compare:

    • The learning curve between NixOS’s declarative config vs Bazzite’s ostree system
    • Gaming experience on both systems
    • How each handles system rollbacks and updates
    • Desktop environment configuration persistence between updates

Thanks for your detailed initial response. I’m trying to understand these concepts before diving in to avoid major pitfalls.

One more thing, I just read your hidden messages, and guess what, a friend of mine is also on Linux, EndeavourOS like me, and he’s the one that recommended Bazzite over NixOS, saying “NixOS is useless, there are other distros that do what you think it does better, and Bazzite has what you need without the useless stuff”, although it was more like a very heated argument with EndeavourOS, Arch, Nix, and Bazzite all thrown into the mix. You’ll have to excuse us on the heat, we’re unfortunately :sparkles: Italian :sparkles:, so discussions are just heated all the time :sweat_smile:

Those are essentially the same question so:

What is imperative?

Taking from the oxford dictonary “imperative (to do something)”. Basically what all mainstream distros out there do, telling the package manager what to do like “pacman install firefox” translates one to one to “pacman -S firefox”

What is declarative?

“late Middle English: from Old French déclaratif, -ive or Latin declarativus, from declarat- ‘made clear’, from the verb declarare ‘make quite clear’”

Basically instead of telling the package manager each step it should perform we instead more or less tell it what the outcome we want should be, in the case of NixOS with our configuration which you can think of as a script written in a turing-complete functional programming language that defines all packages that should be installed (and even how they are build).

In practice installing something on nixos is mostly just adding it to the array environment.systemPackages or in cases where more configuration is needed for the install (like system services or steam) by enabling the modules that perform those actions like programs.steam.

Beginners often just think of the Nix language as a weird take on yaml or json and while it can be used as such it is a fully fledged programming language, so you can automate stuff using it. For example i have base configurations defined for different kinds of computers that get enabled by setting a module option (think variable) to a certain value or i can just write the appid of a steam dedicated server into the config of my gaming-server which will then install it, crate the services, create the backup scripts etc.

home-manager is a community project that lets you define configuration on a per-user basis and link or copy arbitrary files to arbitrary locations in your home directory (though you can also generate config-files automatically using the nix language). Think of it as a sort of library if your familiar with programming. In contrast NixOS itself has currently no good way of putting something in your home directory (or anywhere outside of /etc/ for that matter).

I have mine on my local machines and on a private server via ssh, but there are many ways to do it. Usually for me it’s just a way of keeping track of changes and making it easier to find out where i broke something using git bisect. Basically just: change somethig → test → git commit once it works as intended.

Only if you share the ESP partition, which might not be the best idea (i had a UEFI which didn’t like multiple ESP partitions on one drive for some reason). Try creating all partitions in the free space according to the install guide (if your not using the graphical installer, which i never used so i can’t comment on it). I personally like systemd-boot as it is fast and systemd is already installed anyways so i might as well use it.

I wouldn’t call the differences significant. Latency (repose time of applications) is marginally better, a somewhat lower power consumption and a bit improved performance (i think the memory footprint is a bit lower due to intel options being disabled).
EDIT: See FAQ · zen-kernel/zen-kernel Wiki · GitHub

Can’t comment on 5. as i never used it.

Maybe you’re already trying this, but you could also set up NixOS in a VM first. I did this when I moved from Ubuntu to NixOS. I got the VM about 80% of the way configured to what I wanted and decided I could fix the final 20% as I went. The great thing about NixOS is that moving the configuration from the VM to real hardware is just copying the appropriate .nix files. One rebuild and your exactly where you were with the VM.

1 Like

+1 For that. I can nuke my system and be up and running again in less than 30 min (which would be mostly waiting on my files (documents, projects, media) in the home dir to be copied from my backup)