# NixOS Configuration Repository This repository contains my personal NixOS configurations for multiple systems, managed using [Snowfall Lib](https://github.com/snowfallorg/lib) and the Nix Flakes system. ## Overview This repository provides a centralized, declarative configuration for all my systems, including: - Desktop PC (AMD) - NAS server - Steam Deck - Intel NUC - Raspberry Pi 4 - Raspberry Pi 5 - MacBook Pro (NixOS on Apple Silicon) - MacBook Pro (Darwin/macOS) ## Repository Structure ``` . ├── checks/ # Pre-commit hooks and other checks ├── flake.nix # Main flake configuration ├── homes/ # Home-manager configurations for users │ ├── aarch64-darwin/ # macOS home configurations │ ├── aarch64-linux/ # ARM Linux home configurations │ └── x86_64-linux/ # x86 Linux home configurations ├── modules/ # Reusable configuration modules │ ├── home/ # Home-manager modules │ └── nixos/ # NixOS system modules ├── overlays/ # Nixpkgs overlays ├── packages/ # Custom package definitions ├── secrets/ # Encrypted secrets (managed with sops-nix) └── systems/ # System-specific configurations ├── aarch64-darwin/ # macOS system configurations ├── aarch64-linux/ # ARM Linux system configurations └── x86_64-linux/ # x86 Linux system configurations ``` ## Key Features - **Modular Design**: Reusable modules for various system components - **Multi-System Support**: Configurations for different hardware platforms - **Home Manager Integration**: User environment management - **Secret Management**: Encrypted secrets with sops-nix - **Disk Management**: Declarative disk partitioning with disko - **State Management**: Persistent state management with impermanence - **Desktop Environments**: Support for GNOME, Hyprland, and COSMIC - **Hardware-Specific Optimizations**: Tailored configurations for different hardware ## Key Technologies - [Nix](https://nixos.org/) and [NixOS](https://nixos.org/) - [Nix Flakes](https://nixos.wiki/wiki/Flakes) - [Snowfall Lib](https://github.com/snowfallorg/lib) - [Home Manager](https://github.com/nix-community/home-manager) - [sops-nix](https://github.com/Mic92/sops-nix) - [disko](https://github.com/nix-community/disko) - [impermanence](https://github.com/nix-community/impermanence) - [lanzaboote](https://github.com/nix-community/lanzaboote) (Secure Boot) ## Notable System Configurations ### Desktop A powerful AMD-based desktop with gaming capabilities, featuring: - AMD CPU and GPU optimizations - Multiple desktop environment options (GNOME, Hyprland, COSMIC) - Gaming setup with Steam and related tools ### NAS A home server with various self-hosted services: - Media management (Jellyfin, Jellyseerr) - Download automation (Sonarr, Radarr, etc.) - Document management (Paperless) - File sharing (Samba, Nextcloud) - AI services (Ollama) ### Raspberry Pi Configurations for both Pi 4 and Pi 5: - Hardware-specific optimizations - Disk partitioning suitable for ARM devices - Bluetooth and wireless support ### Steam Deck Custom NixOS configuration for the Steam Deck: - Integration with Jovian for Steam Deck compatibility - Gaming optimizations - Steam ROM Manager ### MacBook Pro Configurations for both: - NixOS on Apple Silicon - nix-darwin for macOS ## Usage ### Building a System Configuration ```bash # Build and activate a system configuration sudo nixos-rebuild switch --flake .#hostname ``` ### Building a Home Configuration ```bash # Build and activate a home configuration home-manager switch --flake .#username@hostname ``` ## Documentation Comprehensive documentation is available in the [docs](./docs) directory: - [Getting Started](./docs/getting-started.md) - Instructions for setting up new systems - [Architecture](./docs/architecture.md) - Overview of the repository structure - [System Configurations](./docs/systems/README.md) - Details about each system - [Home Assistant](./docs/home-assistant/README.md) - Home Assistant setup and automations - [Custom Modules](./docs/modules/README.md) - Details about reusable configuration modules - [Troubleshooting](./docs/troubleshooting.md) - Common issues and solutions ## License This project is licensed under the MIT License - see the LICENSE file for details.