NixOS is a fully declarative Linux distribution - and this repository contains the files required to make my version of NixOS.
Important
This is my configuration, containing my secrets and requiring my password to install. You are more than welcome to take inspiration from this project, but installing as is probably won't work for you.
- Home Manager - they say not to let them in your home
- Impermanence -
rm -rf --no-preserve-root / - Lanzaboote - an island of security in an ocean of unknown hardware
- Nixpkgs (unstable) - all your packages are belong to us
- Nixvim - who needs lua when you have nix
- SOPS Nix - they built a wall around infinity, separated all the infinite values from all the infinite values nobody should know
- Stylix - one tool to style them all, one file to declare them, one command to apply them all and in dark themes reside
| Component | Desktop | Server |
|---|---|---|
| Boot loader | Lanzaboote | systemd-boot / GRUB |
| Filesystem | btrfs + LUKS | btrfs |
| Networking | NetworkManager | systemd-networkd |
| Shell | ZSH | ZSH |
| Editor | neovim | vim |
| Display manager | greetd | |
| Window manager | Hyprland | |
| Audio server | pipewire | |
| Terminal emulator | kitty | |
| Browser | Firefox | |
| Bar | waybar | |
| Launcher | rofi | |
| Notification daemon | mako | |
| Theme | base16-colors / onedark.nvim | |
| Font | Noto / FiraCode (Nerd Fonts) |
- flake.nix: Entry point
- lib.nix: Helper functions
- machines.json: List of machines
- apps: Scripts exported by flake
- base: Shared configuration
- extra: Additional modules
- machines: Machine-specific configuration
- modules: Custom options
- overlay: Custom packages and overrides
- resources: Resources and non-nix configuration files
- wallpaper.jpg: Background image (source)
- extensions: Custom extension lock files
- scripts: Shell scripts
- secrets: SOPS stores
Here are my reasons, why I think NixOS is awesome:
- NixOS is like dotfiles, only on steroids. As soon as you use more than one device, like a desktop computer at home and a laptop on the go, a non-negligible amount of your sadly very finite time is going to be used to synchronize data and configurations between your devices. Most people use a dotfiles repository to combat this, and NixOS is just an incredibly powerful dotfiles manager.
- NixOS is declarative. I know, this is like the main selling point of NixOS, but having all your system configuration in a single place makes it easy to read through and know what you've changed.
- The NixOS ecosystem. This mainly refers to the impermanence module that allows you to keep your system clean between reboots. This is not directly a feature of NixOS, but is made possible by its unique way of handling packages and system configurations.
- A NixOS system is up and running in no time. Using NixOS you don't have to worry about broken installs. Just reinstall the system and your entire configuration is already there.
- The Nixpkgs repository. According to repology, the nixpkgs repository is by far the largest and most up-to-date Linux package repository. And their way of handling packages makes it incredibly easy to add custom packages or patches for existing ones.
That being said, NixOS is definitely not the solution for everyone. It has a steep learning curve and requires the use of a full-blown programming language to configure. Before trying NixOS, I would definitely recommend you have a solid understanding of the Linux ecosystem and (declarative) programming languages.