My NixOS Configuration ❄️

This repository contains my personal declarative configuration for NixOS systems and Home Manager profiles. It uses Nix Flakes for reproducibility and dependency management.

🖥️ Hosts

Hostname Type Description Key Features
worklaptop Laptop Personal workstation Hyprland (UWSM), Nvidia Prime, Dev Tools, Gaming
homeserver Server Headless Homelab Podman Containers, Caddy Reverse Proxy, Gitea, Nextcloud
core Profile Generic Home Manager config Base CLI tools, Shell config, Dotfiles (Distro-agnostic)

Features

  • Flakes: Fully flake-enabled configuration.
  • Shell: Nushell configured as the default user shell with carapace and starship integration.
  • Core Profile: A core configuration is available for bootstrapping new machines or for use on non-NixOS Linux distributions, providing a consistent shell and CLI environment without system-level dependencies.
  • Window Manager: Hyprland with uwsm (Universal Wayland Session Manager) on the laptop.
  • Secrets: Sops-nix implementation using Age encryption for managing sensitive data (API keys, database passwords).
  • Containers: Declarative OCI containers using Podman (replacing Docker) for homeserver services.
  • Automation: A justfile is included to simplify system updates and garbage collection.
  • Theming: Centralized TokyoNight theme definition passed as specialArgs to Home Manager modules.
  • Dotfiles: Dotfiles are managed via a git submodule mapped to home-manager/core/dotfiles.

📂 Structure

.
├── .github/ # GitHub Actions (Submodule sync)
├── flake.nix # Entrypoint & Input definitions
├── flake.lock # Pinned dependency versions
├── justfile # Command runner for system maintenance
├── nixos/ # System-level configurations
│ ├── core/ # Shared system modules
│ ├── homeserver/ # Server-specific hardware & services
│ └── worklaptop/ # Laptop-specific hardware & services
├── home-manager/ # User-level configurations
│ ├── core/ # Shared user modules (dotfiles, shell, etc.)
│ ├── homeserver/ # Server user config
│ └── worklaptop/ # Laptop user config (Hyprland, Theming)
└── secrets.yaml # Encrypted secrets (SOPS)

🚀 Bootstrap / Installation

  1. Clone the repository:
    git clone --recursive [https://github.com/Cian-H/my_nixos_config.git](https://github.com/Cian-H/my_nixos_config.git) /home/cianh/my_nixos_config
    cd my_nixos_config

  2. Setup Secrets:
    Place your Age private key in the appropriate location (defined in home-manager/<host>.nix):

    • Target: ~/.config/sops/age/keys.txt
  3. Apply Configuration:

    • NixOS System:
      sudo nixos-rebuild switch --flake .#<hostname>

    • Home Manager (Specific Host):
      home-manager switch --flake .#cianh@<hostname>

    • Home Manager (Core/Generic):
      home-manager switch --flake .#cianh@core

🛠️ Management (Justfile)

I use just to abstract away common nixos-rebuild and home-manager commands.

Command Description
just update Updates both System and Home Manager (pulls git & updates flake).
just update-root Updates only the NixOS system configuration.
just update-home Updates only the Home Manager configuration.
just install-home Installs the generic core Home Manager profile.
just quick-update Rebuilds configuration without pulling git or updating flake inputs.
just cleanup <days> Garbage collects generations older than <days> and optimizes store.
just repl Opens a Nix REPL loaded with the flake context.

Example:

# Full system update
just update

# Quick rebuild after changing a config file
just quick-update

🔒 Secrets Management

Secrets are managed via sops-nix.

  • Config: .sops.yaml
  • Key: keys.txt (Age key)

To edit secrets:

sops home-manager/secrets.yaml

📦 Server Services (Homeserver)

The homeserver runs services via Podman, orchestrated in home-manager/homeserver/containers.nix.

Key services include:

  • Proxy: Caddy
  • Cloud: Nextcloud (with Redis & MariaDB)
  • Code: Gitea
  • Productivity: Vikunja
  • Media: Jellyfin

🔗 Submodules

This repo uses a submodule for raw dotfiles.

If the folder is empty, initialize it:

git submodule update --init --recursive

Description
My personal nix and nixos configurations, to make deployment and migration easier
Readme 1.1 MiB
Languages
Nix 95.2%
Just 4.8%