diff --git a/CLAUDE.md b/CLAUDE.md index 964b0c6..7799e8e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -47,7 +47,7 @@ All feature configurations live in `modules/` as standalone NixOS modules: - `services.nix` - fstrim, zram, avahi, profile-sync-daemon, earlyoom - `audio.nix`, `theming.nix`, `power.nix`, `virtualization.nix`, `navidrome.nix`, `apps.nix` -Each module follows the pattern: `{ config, pkgs, lib, ... }: { ... }` +Each module follows the pattern: `{ config, pkgs, lib, ... }:` **Package Management Philosophy:** - System packages (`environment.systemPackages`): Services, hardware support, desktop infrastructure, build tools diff --git a/flake.nix b/flake.nix index 74621c5..89d328b 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,9 @@ { description = "atlas - NixOS Config for Desktop"; + # ═══════════════════════════════════════════════════════════════ + # INPUTS + # ═══════════════════════════════════════════════════════════════ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; @@ -46,6 +49,9 @@ ]; }; + # ═══════════════════════════════════════════════════════════════ + # OUTPUTS + # ═══════════════════════════════════════════════════════════════ outputs = inputs@{ self, nixpkgs, ... }: let diff --git a/modules/apps.nix b/modules/apps.nix index 23e585f..2251f4b 100644 --- a/modules/apps.nix +++ b/modules/apps.nix @@ -9,46 +9,46 @@ { environment.systemPackages = with pkgs; [ - # ───────────────────────────────────────────────────────────── - # Media Viewers - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # MEDIA VIEWERS + # ═══════════════════════════════════════════════════════════════ loupe # GNOME image viewer evince # PDF/document viewer celluloid # MPV frontend (GTK video player) mpv # Powerful CLI video player - # ───────────────────────────────────────────────────────────── - # Music - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # MUSIC + # ═══════════════════════════════════════════════════════════════ amberol # Simple music player for local files feishin # Navidrome/Jellyfin client picard # MusicBrainz Picard - music tagger beets # Music library manager cava # Audio visualizer - # ───────────────────────────────────────────────────────────── - # Communication - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # COMMUNICATION + # ═══════════════════════════════════════════════════════════════ vesktop # Discord client (Wayland-native, with Vencord) thunderbird # Email client signal-desktop # Encrypted messaging telegram-desktop # Telegram client - # ───────────────────────────────────────────────────────────── - # Office & Productivity - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # OFFICE & PRODUCTIVITY + # ═══════════════════════════════════════════════════════════════ onlyoffice-desktopeditors # Office suite (latest) obsidian # Note-taking with Markdown - # ───────────────────────────────────────────────────────────── - # System Utilities - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # SYSTEM UTILITIES + # ═══════════════════════════════════════════════════════════════ btop # Modern system monitor (terminal) mission-center # GNOME system monitor (GUI, like Windows Task Manager) - # ───────────────────────────────────────────────────────────── - # File Management (GNOME integration) - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # FILE MANAGEMENT + # ═══════════════════════════════════════════════════════════════ file-roller # Archive manager (GUI) gnome-disk-utility # Disk management @@ -58,9 +58,9 @@ p7zip unrar - # ───────────────────────────────────────────────────────────── - # Screenshots & Screen Recording - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # SCREENSHOTS & RECORDING + # ═══════════════════════════════════════════════════════════════ swappy # Screenshot annotation tool # Screen recording @@ -68,24 +68,24 @@ gpu-screen-recorder # Lightweight GPU-accelerated recorder (AMD/NVIDIA/Intel) kooha # Simple GNOME-style screen recorder - # ───────────────────────────────────────────────────────────── - # Security & Passwords - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # SECURITY & PASSWORDS + # ═══════════════════════════════════════════════════════════════ bitwarden-desktop # Password manager seahorse # GNOME Keyring GUI - # ───────────────────────────────────────────────────────────── - # Utilities - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # UTILITIES + # ═══════════════════════════════════════════════════════════════ gnome-calculator # Calculator gnome-clocks # World clocks, alarms, timers baobab # Disk usage analyzer localsend # AirDrop-like file sharing (cross-platform) meld # Visual diff and merge tool - # ───────────────────────────────────────────────────────────── - # System Tools - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # SYSTEM TOOLS + # ═══════════════════════════════════════════════════════════════ rclone # Cloud storage sync (Google Drive, Dropbox, etc.) ]; diff --git a/modules/audio.nix b/modules/audio.nix index a27ba22..dc19751 100644 --- a/modules/audio.nix +++ b/modules/audio.nix @@ -8,10 +8,15 @@ }: { + # ═══════════════════════════════════════════════════════════════ + # BLUETOOTH + # ═══════════════════════════════════════════════════════════════ # Bluetooth GUI management services.blueman.enable = true; - # Audio packages + # ═══════════════════════════════════════════════════════════════ + # AUDIO PACKAGES + # ═══════════════════════════════════════════════════════════════ environment.systemPackages = with pkgs; [ # PipeWire volume control pwvucontrol # Modern PipeWire volume control (Qt) @@ -28,6 +33,9 @@ # Bluetooth audio codecs are handled by PipeWire automatically ]; + # ═══════════════════════════════════════════════════════════════ + # BLUETOOTH CODECS + # ═══════════════════════════════════════════════════════════════ # Ensure PipeWire has good Bluetooth codec support # This is already configured in your main config, but we ensure AAC/LDAC support services.pipewire.wireplumber.extraConfig = { diff --git a/modules/desktop.nix b/modules/desktop.nix index 0151e13..f9d1cca 100644 --- a/modules/desktop.nix +++ b/modules/desktop.nix @@ -9,14 +9,20 @@ }: { - # XDG Portal - Required for screen sharing, file pickers, etc. + # ═══════════════════════════════════════════════════════════════ + # XDG PORTALS + # ═══════════════════════════════════════════════════════════════ + # Required for screen sharing, file pickers, etc. xdg.portal = { enable = true; extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; config.common.default = "*"; }; - # Polkit - GUI privilege escalation + # ═══════════════════════════════════════════════════════════════ + # POLKIT + # ═══════════════════════════════════════════════════════════════ + # GUI privilege escalation security.polkit.enable = true; # Polkit authentication agent (runs on login) @@ -34,7 +40,9 @@ }; }; - # Desktop packages + # ═══════════════════════════════════════════════════════════════ + # DESKTOP PACKAGES + # ═══════════════════════════════════════════════════════════════ environment.systemPackages = with pkgs; [ # Vicinae launcher inputs.vicinae.packages.${pkgs.system}.default @@ -52,15 +60,16 @@ wlr-randr # Display configuration wayland-utils # Debug utilities - # ───────────────────────────────────────────────────────────── - # Additional desktop utilities (migrated from Arch) - # ───────────────────────────────────────────────────────────── + # ─── Additional Desktop Utilities ─── cliphist # Clipboard history for Wayland wlsunset # Blue light filter / night mode brightnessctl # Brightness control (even for desktop monitors via DDC) wlogout # Logout menu / session manager ]; + # ═══════════════════════════════════════════════════════════════ + # WAYLAND ENVIRONMENT + # ═══════════════════════════════════════════════════════════════ # Environment variables for Wayland compatibility environment.sessionVariables = { # Wayland defaults @@ -81,7 +90,10 @@ XCURSOR_SIZE = "24"; }; - # GNOME services for better desktop integration + # ═══════════════════════════════════════════════════════════════ + # GNOME SERVICES + # ═══════════════════════════════════════════════════════════════ + # Better desktop integration services.gvfs.enable = true; # Virtual filesystem (trash, MTP, SMB) services.udisks2.enable = true; # Disk mounting } diff --git a/modules/dev.nix b/modules/dev.nix index 8caf6e8..4119775 100644 --- a/modules/dev.nix +++ b/modules/dev.nix @@ -9,7 +9,9 @@ }: { - # Docker + # ═══════════════════════════════════════════════════════════════ + # DOCKER + # ═══════════════════════════════════════════════════════════════ virtualisation.docker = { enable = true; @@ -24,53 +26,46 @@ # Add user to docker group users.users.${username}.extraGroups = [ "docker" ]; - # Direnv for per-project environments + # ═══════════════════════════════════════════════════════════════ + # DIRENV + # ═══════════════════════════════════════════════════════════════ + # Per-project environments programs.direnv = { enable = true; nix-direnv.enable = true; # Faster direnv for Nix }; - # Development packages + # ═══════════════════════════════════════════════════════════════ + # DEVELOPMENT PACKAGES + # ═══════════════════════════════════════════════════════════════ # NOTE: GUI tools (dbeaver) and optional TUIs (lazygit, lazydocker) are in `nix profile` environment.systemPackages = with pkgs; [ - # ───────────────────────────────────────────────────────────── - # Containers - # ───────────────────────────────────────────────────────────── + # ─── Containers ─── docker-compose # Docker Compose v2 - # ───────────────────────────────────────────────────────────── - # Languages & Runtimes - # ───────────────────────────────────────────────────────────── + # ─── Languages & Runtimes ─── nodejs_22 # Node.js LTS (for Vicinae extensions, etc.) bun # Fast JavaScript runtime/bundler python3 # Python 3 rustup # Rust toolchain manager - # ───────────────────────────────────────────────────────────── - # Build Tools - # ───────────────────────────────────────────────────────────── + # ─── Build Tools ─── gcc gnumake cmake pkg-config - # ───────────────────────────────────────────────────────────── - # Version Control - # ───────────────────────────────────────────────────────────── + # ─── Version Control ─── git gh # GitHub CLI delta # Better git diff lazygit # Git UI - # ───────────────────────────────────────────────────────────── - # Editors & LSP - # ───────────────────────────────────────────────────────────── + # ─── Editors & LSP ─── # nil already in base config (Nix LSP) nixfmt # Nix formatter - # ───────────────────────────────────────────────────────────── - # CLI Utilities (used by shell aliases) - # ───────────────────────────────────────────────────────────── + # ─── CLI Utilities ─── jq # JSON processor yq # YAML processor ripgrep # Fast grep diff --git a/modules/gaming.nix b/modules/gaming.nix index f33a465..2e4fd67 100644 --- a/modules/gaming.nix +++ b/modules/gaming.nix @@ -9,7 +9,9 @@ }: { - # Steam + # ═══════════════════════════════════════════════════════════════ + # STEAM + # ═══════════════════════════════════════════════════════════════ programs.steam = { enable = true; remotePlay.openFirewall = true; # Steam Remote Play @@ -22,7 +24,13 @@ ]; }; - # Gamemode - Optimize system for gaming + # Steam hardware support (controllers, VR, etc.) + hardware.steam-hardware.enable = true; + + # ═══════════════════════════════════════════════════════════════ + # GAMEMODE + # ═══════════════════════════════════════════════════════════════ + # Optimize system for gaming programs.gamemode = { enable = true; enableRenice = true; # Allow renice for priority boost @@ -40,10 +48,9 @@ }; }; - # Steam hardware support (controllers, VR, etc.) - hardware.steam-hardware.enable = true; - - # Gaming packages + # ═══════════════════════════════════════════════════════════════ + # GAMING PACKAGES + # ═══════════════════════════════════════════════════════════════ # NOTE: Game launchers (lutris, heroic, protonup-qt) are in `nix profile` environment.systemPackages = with pkgs; [ # Wine for non-Steam games @@ -61,7 +68,9 @@ heroic ]; - # Gaming-related kernel tweaks + # ═══════════════════════════════════════════════════════════════ + # KERNEL TWEAKS + # ═══════════════════════════════════════════════════════════════ boot.kernel.sysctl = { # Increase file watchers for large games "fs.inotify.max_user_watches" = 524288; @@ -71,11 +80,17 @@ "vm.vfs_cache_pressure" = 50; }; + # ═══════════════════════════════════════════════════════════════ + # CONTROLLER SUPPORT + # ═══════════════════════════════════════════════════════════════ # Udev rules for game controllers services.udev.packages = with pkgs; [ game-devices-udev-rules # Support for various game controllers ]; + # ═══════════════════════════════════════════════════════════════ + # USER PERMISSIONS + # ═══════════════════════════════════════════════════════════════ # Add user to gamemode group users.users.${username}.extraGroups = [ "gamemode" ]; } diff --git a/modules/gpu-amd.nix b/modules/gpu-amd.nix index d722770..fb69025 100644 --- a/modules/gpu-amd.nix +++ b/modules/gpu-amd.nix @@ -9,6 +9,9 @@ }: { + # ═══════════════════════════════════════════════════════════════ + # AMD GPU DRIVERS + # ═══════════════════════════════════════════════════════════════ # Enable OpenGL/Vulkan hardware.graphics = { enable = true; @@ -33,7 +36,10 @@ # RADV (Mesa Vulkan driver) is enabled by default and is the best choice for gaming # No need for AMD_VULKAN_ICD environment variable anymore - # CoreCtrl for fan curves, overclocking, and GPU monitoring + # ═══════════════════════════════════════════════════════════════ + # CORECTRL + # ═══════════════════════════════════════════════════════════════ + # Fan curves, overclocking, and GPU monitoring programs.corectrl.enable = true; # AMD GPU overdrive/overclocking support @@ -44,17 +50,19 @@ # NOTE: Kernel params (amdgpu.ppfeaturemask) are in configuration.nix - # GPU monitoring tools + # ═══════════════════════════════════════════════════════════════ + # GPU PACKAGES + # ═══════════════════════════════════════════════════════════════ environment.systemPackages = with pkgs; [ - # Monitoring + # ─── Monitoring ─── radeontop # AMD GPU monitoring (like nvidia-smi) nvtopPackages.amd # Modern GPU monitor with AMD support - # Vulkan tools + # ─── Vulkan Tools ─── vulkan-tools # vulkaninfo, etc. vulkan-loader - # Video acceleration verification + # ─── Video Acceleration ─── libva-utils # vainfo - verify VA-API vdpauinfo # Verify VDPAU ]; diff --git a/modules/shell.nix b/modules/shell.nix index 1d8028c..cea37a3 100644 --- a/modules/shell.nix +++ b/modules/shell.nix @@ -8,7 +8,9 @@ }: { - # Enable Fish shell + # ═══════════════════════════════════════════════════════════════ + # FISH SHELL + # ═══════════════════════════════════════════════════════════════ programs.fish = { enable = true; @@ -33,9 +35,11 @@ set -g fish_prompt_pwd_dir_length 3 ''; - # Shell aliases + # ═══════════════════════════════════════════════════════════════ + # ALIASES + # ═══════════════════════════════════════════════════════════════ shellAliases = { - # Modern replacements + # ─── Modern Replacements ─── ll = "eza -la --icons --git"; ls = "eza --icons"; la = "eza -la --icons"; @@ -47,14 +51,14 @@ du = "dust"; sed = "sd"; - # Docker shortcuts + # ─── Docker ─── dc = "docker compose"; dps = "docker ps"; dpa = "docker ps -a"; dl = "docker logs -f"; dex = "docker exec -it"; - # Git shortcuts + # ─── Git ─── gs = "git status"; gd = "git diff"; gds = "git diff --staged"; @@ -68,7 +72,7 @@ gb = "git branch"; gst = "git stash"; - # NixOS shortcuts + # ─── NixOS ─── rebuild = "sudo nixos-rebuild switch --flake ."; rebuild-boot = "sudo nixos-rebuild boot --flake ."; rebuild-test = "sudo nixos-rebuild test --flake ."; @@ -80,20 +84,23 @@ update-apps = "nix profile upgrade '.*'"; list-apps = "nix profile list"; - # System + # ─── System ─── ports = "ss -tulanp"; myip = "curl -s ifconfig.me"; ".." = "cd .."; "..." = "cd ../.."; "...." = "cd ../../.."; - # Safety + # ─── Safety ─── rm = "rm -i"; mv = "mv -i"; cp = "cp -i"; }; - # Shell abbreviations (expand on space, more flexible than aliases) + # ═══════════════════════════════════════════════════════════════ + # ABBREVIATIONS + # ═══════════════════════════════════════════════════════════════ + # Expand on space, more flexible than aliases shellAbbrs = { g = "git"; d = "docker"; @@ -104,6 +111,9 @@ }; }; + # ═══════════════════════════════════════════════════════════════ + # PLUGINS & PACKAGES + # ═══════════════════════════════════════════════════════════════ # Fish plugins (managed by NixOS) environment.systemPackages = with pkgs; [ # Fish plugins diff --git a/modules/theming.nix b/modules/theming.nix index 1109799..9565831 100644 --- a/modules/theming.nix +++ b/modules/theming.nix @@ -8,9 +8,9 @@ }: { - # ───────────────────────────────────────────────────────────── - # Fonts - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # FONTS + # ═══════════════════════════════════════════════════════════════ fonts = { packages = with pkgs; [ # Your existing fonts @@ -57,9 +57,9 @@ }; }; - # ───────────────────────────────────────────────────────────── - # GTK Theme - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # GTK THEME + # ═══════════════════════════════════════════════════════════════ environment.systemPackages = with pkgs; [ # GTK themes adw-gtk3 # GTK3 theme matching libadwaita @@ -79,18 +79,18 @@ nwg-look # GTK settings editor for Wayland ]; - # ───────────────────────────────────────────────────────────── - # Cursor and Icon Paths - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # CURSOR & ICON PATHS + # ═══════════════════════════════════════════════════════════════ # NOTE: Session variables (GTK_THEME, XCURSOR_*, QT_QPA_PLATFORMTHEME) # are consolidated in desktop.nix # Ensure cursor themes are found environment.pathsToLink = [ "/share/icons" ]; - # ───────────────────────────────────────────────────────────── - # GTK Settings via dconf - # ───────────────────────────────────────────────────────────── + # ═══════════════════════════════════════════════════════════════ + # GTK SETTINGS (DCONF) + # ═══════════════════════════════════════════════════════════════ # These can be overridden by the user with nwg-look or dconf-editor # Default theme settings are applied per-user