Add pnpm and lazydocker to system packages and normalize Node/Bun entries. Expand filesystem options into multi-line arrays, remove an extra groups comment, update flake.lock (noctalia ref), and tidy README newline/formatting.
🐧 Atlas - NixOS Configuration
A modular, flake-based NixOS configuration for a desktop workstation optimized for gaming, development, and daily use.
✨ Features
- 🎮 Gaming-Ready: Steam with Proton-GE, Lutris, Heroic, Faugus Launcher, Gamemode with AMD GPU optimizations
- 🖥️ Wayland-Native: Niri compositor with Noctalia shell and modern Wayland tooling
- ⚡ Performance: CachyOS kernel (x86_64-v3) with scx_lavd scheduler for low-latency gaming
- 🛠️ Development: Docker, Node.js 22, Rust (rustup), Python 3, Bun, and modern CLI tools
- 🎨 Theming: Adwaita dark theme, Papirus icons, JetBrains Mono & Inter fonts
- 🎵 Media: Navidrome music server, PipeWire audio with JACK support, full Bluetooth codec support
- 🔒 Security: Secure Boot with Limine bootloader
📁 Structure
nixos/
├── flake.nix # Flake definition with inputs
├── flake.lock # Locked dependencies
├── configuration.nix # Main config (boot, networking, user, localization)
├── hardware-configuration.nix # Auto-generated hardware config (don't edit)
└── modules/
├── apps.nix # User applications (media, productivity, communication)
├── audio.nix # PipeWire, Bluetooth codecs, audio controls
├── desktop.nix # Wayland, XDG portals, polkit, Vicinae launcher
├── dev.nix # Docker, languages, build tools, CLI utilities
├── gaming.nix # Steam, Gamemode, launchers, Wine/Proton
├── gpu-amd.nix # AMD drivers, Vulkan, VA-API, CoreCtrl
├── navidrome.nix # Music streaming server
├── power.nix # Power profiles daemon, CPU governor
├── services.nix # System services (fstrim, zram, avahi, psd, earlyoom)
├── shell.nix # Fish shell config with plugins and aliases
├── theming.nix # Fonts, GTK/Qt themes, cursors, dconf
└── virtualization.nix # QEMU, KVM, virt-manager (commented out)
🚀 Flake Inputs
| Input | Description |
|---|---|
nixpkgs |
NixOS unstable channel |
nix-cachyos-kernel |
CachyOS optimized kernel with x86_64-v3 |
noctalia |
Noctalia desktop shell |
zen-browser |
Zen Browser (Firefox-based) |
opencode |
OpenCode AI coding assistant |
📦 Installation
Prerequisites
- NixOS installed with flakes enabled
- AMD CPU and GPU (configuration includes AMD-specific optimizations)
- UEFI system (for Secure Boot support)
Steps
-
Clone this repository:
git clone https://github.com/ragusa-it/nixos.git /etc/nixos -
Generate hardware configuration:
sudo nixos-generate-config --show-hardware-config > /etc/nixos/hardware-configuration.nix -
Update the configuration:
- In
flake.nix: Changeusername = "pinj"to your username - In
configuration.nix:- Update
networking.hostNameif desired - Adjust
time.timeZone(currently "Europe/Berlin") - Review and adjust locale settings
- Update secondary storage mount points or remove them
- Review keyboard layout (currently German)
- Update
- In
-
Rebuild the system:
sudo nixos-rebuild switch --flake .#nixos -
(Optional) Set up Secure Boot:
sudo sbctl create-keys sudo sbctl enroll-keys -m -
Flatpak is auto-configured - Flathub repository is automatically added on system activation
🔧 Usage
Rebuild System
# Test configuration without switching
sudo nixos-rebuild test --flake .#nixos
# Switch to new configuration
sudo nixos-rebuild switch --flake .#nixos
# Build and set as boot default (without switching)
sudo nixos-rebuild boot --flake .#nixos
Update Flake Inputs
# Update all inputs
nix flake update
# Update specific input
nix flake lock --update-input nixpkgs
Search and Install Packages
# Search for packages
nix search nixpkgs <package-name>
# Aliases available in Fish shell
search <package-name> # Same as above
Garbage Collection
Automatic garbage collection is configured weekly, but you can run it manually:
# Collect garbage older than 14 days
sudo nix-collect-garbage --delete-older-than 14d
# Optimize store
nix-store --optimise
🖥️ Desktop Environment
- Compositor: Niri (scrollable tiling Wayland compositor)
- Display Manager: Ly
- Terminal: Ghostty
- Browser: Zen Browser (primary), Firefox
- File Manager: Nautilus (GNOME Files)
- Editors: Zed Editor, Claude Code, OpenCode
🎮 Gaming
The gaming module provides:
- Steam with Proton-GE for enhanced Windows game compatibility
- Gamemode for automatic CPU/GPU performance optimizations
- Game Launchers: Lutris, Heroic (Epic/GOG), Faugus Launcher
- Wine Support: Wine Staging with Winetricks and Protontricks
- Gamescope micro-compositor for fixing problematic games
- Kernel Tweaks: Increased inotify watchers, optimized swap settings
AMD GPU Optimizations
- CoreCtrl for fan curves, overclocking, and GPU monitoring
- Full power management features enabled (
amdgpu.ppfeaturemask=0xffffffff) - RADV (Mesa Vulkan) driver - best for gaming
- VA-API hardware video acceleration (decode/encode)
- Monitoring Tools: radeontop, nvtop (AMD edition)
- Vulkan Tools: vulkan-tools, vulkan-loader for debugging
🛠️ Development
Included tools:
- Languages: Node.js 22, Python 3, Rust (via rustup), Bun
- Containers: Docker with weekly auto-prune, Docker Compose
- Environment Management: direnv with nix-direnv for per-project environments
- Build Tools: gcc, gnumake, cmake, pkg-config
- Version Control: git, gh (GitHub CLI), delta (better diffs), lazygit
- CLI Utilities:
- Search: ripgrep, fd, fzf
- Files: eza, bat, broot
- Data: jq, yq
- System: duf, dust, pv, parallel
- Text: sd (better sed), tealdeer (tldr)
- Editors: Zed Editor, micro, Claude Code, OpenCode
- Nix Tools: nil (LSP), nixd, nixfmt (formatter)
- Package Manager: pnpm (for Node.js)
🎵 Audio & Media
- Audio Stack: PipeWire with ALSA, PulseAudio, and JACK support
- Volume Control: pwvucontrol (Qt/PipeWire), pavucontrol (GTK/fallback)
- Media Control: playerctl for media keys and D-Bus control
- Bluetooth: Full codec support (LDAC, AAC, aptX HD, aptX, SBC-XQ)
- Music Server: Navidrome (localhost:4533) with Last.fm scrobbling
- Music Tools: Feishin (client), Picard (tagger), beets (library manager), cava (visualizer)
- Video Players: MPV, Celluloid (MPV GUI), VLC
- Screen Recording: OBS Studio, GPU Screen Recorder, Swappy (annotation)
⚙️ Key Services
| Service | Description |
|---|---|
| Tailscale | Mesh VPN for secure remote access |
| OpenSSH | Remote shell access |
| Navidrome | Music streaming server (port 4533) |
| Avahi | mDNS for .local network discovery |
| Profile-sync-daemon | Browser profiles in tmpfs for faster performance |
| ZRAM | Compressed swap in RAM (zstd, 100% memory) |
| fstrim | Weekly SSD TRIM for longevity |
| earlyoom | Prevent system freeze on low memory |
| plocate | Fast file search database (daily updates) |
| fwupd | Firmware updates |
| scx_lavd | Low-latency scheduler for gaming |
📦 Package Management
All packages in this configuration are installed as system packages (environment.systemPackages) across different modules. This provides:
- Unified Management: All packages updated together during system rebuild
- Reproducibility: Entire system configuration in one place
- No Profile Conflicts: Avoid nix profile state issues
Package Categories
| Category | Module | Examples |
|---|---|---|
| Desktop Core | configuration.nix, desktop.nix | Nautilus, Ghostty, Zen Browser, Noctalia, Vicinae, wl-clipboard |
| Applications | apps.nix | Vesktop, Thunderbird, Signal, Telegram, Obsidian, OnlyOffice |
| Media | apps.nix | Loupe, Evince, MPV, Celluloid, VLC, Feishin, Picard, OBS |
| Development | dev.nix | Docker, Node.js, Rust, Python, Bun, git, lazygit, CLI tools |
| Gaming | gaming.nix | Steam, Lutris, Heroic, Faugus Launcher, Wine, Gamescope |
| System Tools | apps.nix | btop, Mission Center, Bitwarden, file-roller, disk utility |
| GPU | gpu-amd.nix | CoreCtrl, radeontop, nvtop, Vulkan tools |
| Shell | shell.nix | Fish plugins (pure, autopair, fzf-fish, done, grc) |
| Theming | theming.nix | Fonts (JetBrains Mono, Inter, Noto), themes (adw-gtk3), icons (Papirus) |
Adding Packages
To add a new package:
- Identify the appropriate module (e.g., apps.nix for GUI apps, dev.nix for dev tools)
- Add the package to the
environment.systemPackageslist - Run
sudo nixos-rebuild switch --flake .#nixos
📝 Notes
System Details
- Kernel: CachyOS latest with x86_64-v3 optimizations
- Bootloader: Limine with Secure Boot support
- Scheduler: scx_lavd (low-latency scheduler optimized for gaming)
- Shell: Fish (default), Zsh (available as fallback)
- Display Manager: Ly (TUI)
- Compositor: Niri with Noctalia shell
- User:
pinj(Melvin Ragusa) - Hostname:
nix - Timezone: Europe/Berlin (German locale with English UI)
- Keyboard: German (de-latin1-nodeadkeys)
Configuration Features
- Unfree Packages: Enabled globally
- Flakes: Enabled with nix-command
- Binary Caches: Vicinae, nix-community, lantian (CachyOS)
- Auto-Optimization: Store optimization enabled
- Garbage Collection: Weekly, keeping 14 days
- State Version: 26.05
- Hibernation: Configured with encrypted swap (
/dev/mapper/cryptswap) - Flatpak: Enabled with auto-configured Flathub repository
Secondary Storage
Three additional SSDs mounted at:
/mnt/Intenso-SSD/mnt/Samsung-SSD/mnt/Extern-SSD
Fish Shell Aliases
Common aliases configured in shell.nix:
rebuild,rebuild-boot,rebuild-test- NixOS rebuild commandsupdate- Update flake inputsgc-nix- Run garbage collectionll,ls,la,lt- eza file listingsdc,dps,dl- Docker shortcutsgs,gd,gl,gp- Git shortcuts
📄 License
This configuration is provided as-is for personal use and reference.