Thanks to visit codestin.com
Credit goes to github.com

Skip to content

baduhai/nix-config

Repository files navigation

NixOS Configuration

A declarative, modular NixOS/Home Manager flake configuration managing multiple systems with a tag-based architecture for maximum code reuse and flexibility.

Hosts

Host Type System Version Description
rotterdam Desktop x86_64-linux NixOS Unstable Primary workstation with gaming, development
io Laptop x86_64-linux NixOS Unstable Mobile workstation
alexandria Server/NAS x86_64-linux NixOS 25.05 Personal server running Nextcloud, Forgejo, Jellyfin, Vaultwarden
trantor VPS aarch64-linux NixOS 25.05 Oracle Cloud instance

Key Features

Architecture

  • Tag-based module system - Compose configurations using tags instead of traditional inheritance
  • Flake-based - Fully reproducible builds with locked dependencies
  • Multi-platform - Supports both x86_64 and aarch64 architectures
  • Deployment automation - Remote deployment via deploy-rs

Desktop Experience

  • Niri compositor - Custom fork with auto-centering window columns
  • Unified theming - Stylix-based theming
  • Wayland-native - Full Wayland support
  • Ephemeral root - Impermanent filesystem using BTRFS for atomic rollback capability

Self-Hosted Services

  • Nextcloud - Cloud storage with calendar, contacts, and notes
  • Forgejo - Self-hosted Git server
  • Jellyfin - Media streaming
  • Vaultwarden - Password manager backend
  • LibreSpeed - Network speed testing
  • All services behind Nginx and Tailscale with automatic SSL via Let's Encrypt

Security

  • Agenix - Encrypted secrets management
  • Tailscale - Zero-config VPN mesh network
  • Firewall - Configured on all hosts
  • SSH key-based authentication

Repository Structure

.
├── flake.nix                    # Main flake definition
├── utils.nix                    # Tag-based module system utilities
├── nixosConfigurations.nix      # Host definitions with tags
├── homeConfigurations.nix       # User configurations
├── deploy.nix                   # Remote deployment configuration
├── hosts/
│   ├── alexandria/              # Server-specific config
│   ├── io/                      # Laptop-specific config
│   ├── rotterdam/               # Desktop-specific config
│   ├── trantor/                 # VPS-specific config
│   └── modules/
│       ├── common/              # Shared base configuration
│       ├── desktop/             # Desktop environment setup
│       ├── server/              # Server-specific modules
│       └── [tag].nix            # Optional feature modules
├── users/
│   └── modules/                 # Home Manager configurations
│       └── [tag].nix            # Optional feature modules
├── packages/                    # Custom package definitions
└── secrets/                     # Encrypted secrets (agenix)

Tag System

Configurations are composed using tags that map to modules:

Common Tags (all hosts):

  • common - Base system configuration (automatically applied)

General Tags:

  • desktop - Mostly full desktop environment with Niri WM
  • dev - Development tools and environments
  • gaming - Steam, Heroic, gamemode, controller support
  • ephemeral - Impermanent root filesystem
  • networkmanager - WiFi and network management
  • libvirtd - KVM/QEMU virtualization
  • podman - Container runtime
  • bluetooth - Bluetooth support
  • fwupd - Firmware update daemon

Server Tags:

  • server - Server-specific configuration

Usage

Rebuilding a Configuration

# Local rebuild
sudo nixos-rebuild switch --flake .#hostname

# Remote deployment
deploy .#hostname

Updating Dependencies

nix flake update

Adding a New Host

  1. Create host directory in hosts/
  2. Define configuration in nixosConfigurations.nix with appropriate tags
  3. Add deployment profile in deploy.nix if needed

Dependencies

About

All my nix hosts, in a flake

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages