From be1db27940f3612a0b1a10ca17bfd5be670fd850 Mon Sep 17 00:00:00 2001 From: seraphim <18ycm9tx@anonaddy.me> Date: Tue, 4 Aug 2026 13:28:39 +0700 Subject: , --- doom/.config/doom/themes/noctalia-theme.el | 108 ++++++++++----------- foot/.config/foot/themes/noctalia | 42 ++++---- ghostty/.config/ghostty/themes/noctalia | 44 ++++----- niri/.config/niri/noctalia.kdl | 22 ++--- nixos/docs/ADDING_PACKAGES.md | 7 +- nixos/hosts/opus/default.nix | 17 ++-- nixos/modules/features/appimage/default.nix | 4 +- nixos/modules/features/audio-tools/default.nix | 1 + nixos/modules/features/binary-compat/default.nix | 4 +- nixos/modules/features/cli-tools/default.nix | 5 +- nixos/modules/features/desktop-apps/default.nix | 4 +- nixos/modules/features/dev-tools/default.nix | 1 + nixos/modules/features/drag-n-drop/default.nix | 11 --- nixos/modules/features/editors/default.nix | 2 + nixos/modules/features/file-managers/default.nix | 10 +- nixos/modules/features/fonts/default.nix | 2 + nixos/modules/features/gst-codecs/default.nix | 2 + nixos/modules/features/monitoring/default.nix | 1 + nixos/modules/features/mouse/default.nix | 13 +-- nixos/modules/features/mpd/default.nix | 10 +- nixos/modules/features/niri/default.nix | 5 + .../modules/features/noctalia-greeter/default.nix | 4 +- nixos/modules/features/noctalia-shell/default.nix | 6 +- nixos/modules/features/nvidia/default.nix | 5 +- nixos/modules/features/starship/default.nix | 5 - nixos/modules/features/swingmusic/default.nix | 2 + nixos/modules/features/terminals/default.nix | 2 +- nixos/modules/features/wayland-tools/default.nix | 1 + nixos/modules/features/wireshark/default.nix | 4 +- nixos/modules/system/audio/default.nix | 4 + nixos/modules/system/boot/default.nix | 12 +-- nixos/modules/system/hardware/default.nix | 4 + nixos/modules/system/locale/default.nix | 2 + nixos/modules/system/network/default.nix | 25 +++-- nixos/modules/system/nix/default.nix | 6 +- nixos/modules/system/printing/default.nix | 2 + nixos/modules/system/services/default.nix | 4 + nixos/modules/system/users/default.nix | 9 ++ starship/.config/starship.toml | 60 ++++++------ 39 files changed, 270 insertions(+), 202 deletions(-) delete mode 100644 nixos/modules/features/drag-n-drop/default.nix delete mode 100644 nixos/modules/features/starship/default.nix diff --git a/doom/.config/doom/themes/noctalia-theme.el b/doom/.config/doom/themes/noctalia-theme.el index ed309c1..4f6b512 100644 --- a/doom/.config/doom/themes/noctalia-theme.el +++ b/doom/.config/doom/themes/noctalia-theme.el @@ -21,75 +21,75 @@ (deftheme noctalia "Theme using Template variables with quality of life improvements.") ;; Define all the color variables (replaced by template processor) -(let* ((bg "#13140f") - (err "#ffb4ab") - (err-container "#93000a") - (on-background "#e4e3db") - (on-err "#690005") - (on-err-container "#ffdad6") - (on-primary "#243603") +(let* ((bg "#fbfaf1") + (err "#ba1a1a") + (err-container "#ffdad6") + (on-background "#1b1c17") + (on-err "#ffffff") + (on-err-container "#93000a") + (on-primary "#ffffff") (on-primary-container "#fffff4") - (on-secondary "#2b331c") - (on-secondary-container "#afb999") - (on-surface "#e4e3db") - (on-surface-variant "#c5c8b9") - (on-tertiary "#003826") + (on-secondary "#ffffff") + (on-secondary-container "#5e684d") + (on-surface "#1b1c17") + (on-surface-variant "#45483d") + (on-tertiary "#ffffff") (on-tertiary-container "#ffffff") - (outline-color "#8f9284") - (outline-variant "#45483d") - (primary "#b7cf8b") + (outline-color "#75786b") + (outline-variant "#c5c8b9") + (primary "#4f642c") (primary-container "#677d42") - (secondary "#c1cbaa") - (secondary-container "#414a31") + (secondary "#586247") + (secondary-container "#dde7c5") (shadow "#000000") - (surface "#13140f") - (surface-container "#1f201b") - (surface-container-high "#292a25") - (surface-container-highest "#343530") - (surface-container-low "#1b1c17") - (surface-container-lowest "#0d0f0a") - (surface-variant "#45483d") - (tertiary "#92d4b5") + (surface "#fbfaf1") + (surface-container "#efeee6") + (surface-container-high "#e9e8e0") + (surface-container-highest "#e4e3db") + (surface-container-low "#f5f4ec") + (surface-container-lowest "#ffffff") + (surface-variant "#e1e4d4") + (tertiary "#26694f") (tertiary-container "#418267") ;; Map success colors to tertiary (as used in other templates) - (success "#92d4b5") - (on-success "#003826") + (success "#26694f") + (on-success "#ffffff") (success-container "#418267") (on-success-container "#ffffff") ;; Map fixed colors to regular colors - (primary-fixed "#b7cf8b") + (primary-fixed "#4f642c") (primary-fixed-dim "#677d42") - (secondary-fixed "#c1cbaa") - (secondary-fixed-dim "#414a31") - (tertiary-fixed "#92d4b5") + (secondary-fixed "#586247") + (secondary-fixed-dim "#dde7c5") + (tertiary-fixed "#26694f") (tertiary-fixed-dim "#418267") - (on-primary-fixed "#243603") + (on-primary-fixed "#ffffff") (on-primary-fixed-variant "#fffff4") - (on-secondary-fixed "#2b331c") - (on-secondary-fixed-variant "#afb999") - (on-tertiary-fixed "#003826") + (on-secondary-fixed "#ffffff") + (on-secondary-fixed-variant "#5e684d") + (on-tertiary-fixed "#ffffff") (on-tertiary-fixed-variant "#ffffff") ;; Map inverse colors to surface variants - (inverse-on-surface "#e4e3db") - (inverse-primary "#b7cf8b") - (inverse-surface "#13140f") + (inverse-on-surface "#1b1c17") + (inverse-primary "#4f642c") + (inverse-surface "#fbfaf1") ;; ANSI terminal colors - (term0 "#45483d") - (term1 "#ffb4ab") - (term2 "#b7cf8b") - (term3 "#c1cbaa") - (term4 "#92d4b5") - (term5 "#b7cf8b") - (term6 "#c1cbaa") - (term7 "#e4e3db") - (term8 "#8f9284") - (term9 "#ffb4ab") - (term10 "#b7cf8b") - (term11 "#c1cbaa") - (term12 "#92d4b5") - (term13 "#b7cf8b") - (term14 "#c1cbaa") - (term15 "#e4e3db")) + (term0 "#e1e4d4") + (term1 "#ba1a1a") + (term2 "#4f642c") + (term3 "#586247") + (term4 "#26694f") + (term5 "#667a3a") + (term6 "#6e7759") + (term7 "#1b1c17") + (term8 "#75786b") + (term9 "#ba1a1a") + (term10 "#4f642c") + (term11 "#586247") + (term12 "#26694f") + (term13 "#667a3a") + (term14 "#6e7759") + (term15 "#1b1c17")) (custom-theme-set-faces 'noctalia diff --git a/foot/.config/foot/themes/noctalia b/foot/.config/foot/themes/noctalia index 8917d70..e4d9608 100644 --- a/foot/.config/foot/themes/noctalia +++ b/foot/.config/foot/themes/noctalia @@ -1,22 +1,22 @@ [colors-dark] -foreground=e4e3db -background=13140f -regular0=45483d -regular1=ffb4ab -regular2=b7cf8b -regular3=c1cbaa -regular4=92d4b5 -regular5=b7cf8b -regular6=c1cbaa -regular7=e4e3db -bright0=8f9284 -bright1=ffb4ab -bright2=b7cf8b -bright3=c1cbaa -bright4=92d4b5 -bright5=b7cf8b -bright6=c1cbaa -bright7=e4e3db -selection-foreground=c5c8b9 -selection-background=45483d -cursor=13140f e4e3db +foreground=1b1c17 +background=fbfaf1 +regular0=e1e4d4 +regular1=ba1a1a +regular2=4f642c +regular3=586247 +regular4=26694f +regular5=667a3a +regular6=6e7759 +regular7=1b1c17 +bright0=75786b +bright1=ba1a1a +bright2=4f642c +bright3=586247 +bright4=26694f +bright5=667a3a +bright6=6e7759 +bright7=1b1c17 +selection-foreground=45483d +selection-background=e1e4d4 +cursor=fbfaf1 1b1c17 diff --git a/ghostty/.config/ghostty/themes/noctalia b/ghostty/.config/ghostty/themes/noctalia index 4979304..78e1c33 100644 --- a/ghostty/.config/ghostty/themes/noctalia +++ b/ghostty/.config/ghostty/themes/noctalia @@ -1,22 +1,22 @@ -palette = 0=#45483d -palette = 1=#ffb4ab -palette = 2=#b7cf8b -palette = 3=#c1cbaa -palette = 4=#92d4b5 -palette = 5=#b7cf8b -palette = 6=#c1cbaa -palette = 7=#e4e3db -palette = 8=#8f9284 -palette = 9=#ffb4ab -palette = 10=#b7cf8b -palette = 11=#c1cbaa -palette = 12=#92d4b5 -palette = 13=#b7cf8b -palette = 14=#c1cbaa -palette = 15=#e4e3db -background = #13140f -foreground = #e4e3db -cursor-color = #e4e3db -cursor-text = #13140f -selection-background = #45483d -selection-foreground = #c5c8b9 +palette = 0=#e1e4d4 +palette = 1=#ba1a1a +palette = 2=#4f642c +palette = 3=#586247 +palette = 4=#26694f +palette = 5=#667a3a +palette = 6=#6e7759 +palette = 7=#1b1c17 +palette = 8=#75786b +palette = 9=#ba1a1a +palette = 10=#4f642c +palette = 11=#586247 +palette = 12=#26694f +palette = 13=#667a3a +palette = 14=#6e7759 +palette = 15=#1b1c17 +background = #fbfaf1 +foreground = #1b1c17 +cursor-color = #1b1c17 +cursor-text = #fbfaf1 +selection-background = #e1e4d4 +selection-foreground = #45483d diff --git a/niri/.config/niri/noctalia.kdl b/niri/.config/niri/noctalia.kdl index f818300..29c9247 100644 --- a/niri/.config/niri/noctalia.kdl +++ b/niri/.config/niri/noctalia.kdl @@ -1,15 +1,15 @@ layout { focus-ring { - active-color "#b7cf8b" - inactive-color "#13140f" - urgent-color "#ffb4ab" + active-color "#4f642c" + inactive-color "#fbfaf1" + urgent-color "#ba1a1a" } border { - active-color "#b7cf8b" - inactive-color "#13140f" - urgent-color "#ffb4ab" + active-color "#4f642c" + inactive-color "#fbfaf1" + urgent-color "#ba1a1a" } shadow { @@ -17,19 +17,19 @@ layout { } tab-indicator { - active-color "#b7cf8b" + active-color "#4f642c" inactive-color "#677d42" - urgent-color "#ffb4ab" + urgent-color "#ba1a1a" } insert-hint { - color "#b7cf8b80" + color "#4f642c80" } } recent-windows { highlight { - active-color "#b7cf8b" - urgent-color "#ffb4ab" + active-color "#4f642c" + urgent-color "#ba1a1a" } } diff --git a/nixos/docs/ADDING_PACKAGES.md b/nixos/docs/ADDING_PACKAGES.md index a4c0c5a..fa5ea02 100644 --- a/nixos/docs/ADDING_PACKAGES.md +++ b/nixos/docs/ADDING_PACKAGES.md @@ -1,3 +1,6 @@ +# Dendritic Pattern +Dendritic is the way to organize your packages in NixOS -- around features. https://github.com/mightyiam/dendritic this is a good example! + # Adding Packages This configuration is composed from `hosts/opus/default.nix` and focused modules @@ -8,11 +11,11 @@ under `modules/system/` and `modules/features/`. There is no central package lis | Package type | Module | | --- | --- | | Terminal | `modules/features/terminals/default.nix` | -| CLI tool | `modules/features/cli-tools/default.nix` | +| CLI tool (incl. shell prompts like starship) | `modules/features/cli-tools/default.nix` | | Editor or IDE | `modules/features/editors/default.nix` | | Desktop application | `modules/features/desktop-apps/default.nix` | | Compiler, linter, language tool | `modules/features/dev-tools/default.nix` | -| File manager or archive tool | `modules/features/file-managers/default.nix` | +| File manager or archive tool (incl. drag & drop tools) | `modules/features/file-managers/default.nix` | | Wayland clipboard, screenshot, or input tool | `modules/features/wayland-tools/default.nix` | | Audio application | `modules/features/audio-tools/default.nix` | | System monitor or fetch tool | `modules/features/monitoring/default.nix` | diff --git a/nixos/hosts/opus/default.nix b/nixos/hosts/opus/default.nix index d1d65e0..ef75358 100644 --- a/nixos/hosts/opus/default.nix +++ b/nixos/hosts/opus/default.nix @@ -24,7 +24,6 @@ ../../modules/features/appimage ../../modules/features/mpd ../../modules/features/swingmusic - ../../modules/features/starship ../../modules/features/monitoring ../../modules/features/terminals ../../modules/features/cli-tools @@ -39,24 +38,20 @@ ../../modules/features/dev-tools ../../modules/features/wireshark ../../modules/features/mouse - ../../modules/features/drag-n-drop ]; - # ──────────────────────────────────────────────────────────────────────── - # Shell composition - # ──────────────────────────────────────────────────────────────────────── - # This properly installs ZSH, sets up vendor completions, and configures standard paths. - programs.zsh.enable = true; - # ──────────────────────────────────────────────────────────────────────── # Desktop composition (was attrs/desktop) # Inline because this host is the only one using the full desktop stack. # ──────────────────────────────────────────────────────────────────────── + # Qt styling: use qt5ct to theme Qt apps consistently with the GTK desktop. qt = { enable = true; platformTheme = "qt5ct"; style = "breeze"; }; + # Desktop portals let Wayland clients request screenshots, file dialogs, etc. + # These backends wire the GNOME + GTK portal implementations into the session. xdg.portal = { enable = true; extraPortals = [ @@ -65,6 +60,7 @@ ]; }; + # Qt/HiDPI and GPU renderer hints shared across the desktop. environment.sessionVariables = { XCURSOR_THEME = "Bibata-Modern-Ice"; XCURSOR_SIZE = "20"; @@ -79,18 +75,21 @@ # ──────────────────────────────────────────────────────────────────────── # Gaming composition (was attrs/gaming) + # Host-only desktop apps that don't (yet) deserve their own feature module. # ──────────────────────────────────────────────────────────────────────── + # Steam: remote play and dedicated servers need open firewall ports. programs.steam = { enable = true; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; - + # Throne: privacy-oriented game overlay / microtransactions blocker. programs.throne = { enable = true; tunMode.enable = true; }; + # Wine-based launchers for Windows games & apps. environment.systemPackages = with pkgs; [ pkgs.lutris pkgs.prismlauncher diff --git a/nixos/modules/features/appimage/default.nix b/nixos/modules/features/appimage/default.nix index fba4ed7..e16189b 100644 --- a/nixos/modules/features/appimage/default.nix +++ b/nixos/modules/features/appimage/default.nix @@ -1,6 +1,8 @@ { pkgs, ... }: { + # AppImage support: binfmt registers the interpreter so you can run + # AppImages directly. The override pulls in WebKit for GUI AppImages. programs.appimage = { enable = true; binfmt = true; @@ -10,4 +12,4 @@ ]; }; }; -} +} \ No newline at end of file diff --git a/nixos/modules/features/audio-tools/default.nix b/nixos/modules/features/audio-tools/default.nix index b3013b0..fa550d8 100644 --- a/nixos/modules/features/audio-tools/default.nix +++ b/nixos/modules/features/audio-tools/default.nix @@ -1,6 +1,7 @@ { pkgs, ... }: { + # User-facing audio/media clients (the MPD *server* lives in the `mpd` module) environment.systemPackages = with pkgs; [ mpc mpd diff --git a/nixos/modules/features/binary-compat/default.nix b/nixos/modules/features/binary-compat/default.nix index e88349b..56212e1 100644 --- a/nixos/modules/features/binary-compat/default.nix +++ b/nixos/modules/features/binary-compat/default.nix @@ -1,8 +1,8 @@ { pkgs, ... }: { - # Libraries shipped so non-Nix binaries (AppImages, dynamically linked - # programs via nix-ld) can resolve their runtime deps. + # Runtime libraries so non-Nix binaries (AppImages, dynamically linked + # programs loaded via envfs/nix-ld) can resolve their shared-object deps. environment.systemPackages = with pkgs; [ cacert libGL diff --git a/nixos/modules/features/cli-tools/default.nix b/nixos/modules/features/cli-tools/default.nix index f5baef1..cdd0439 100644 --- a/nixos/modules/features/cli-tools/default.nix +++ b/nixos/modules/features/cli-tools/default.nix @@ -15,4 +15,7 @@ yt-dlp caligula ]; -} + + # Cross-shell prompt; its config lives in the dotfiles repo, not NixOS. + programs.starship.enable = true; +} \ No newline at end of file diff --git a/nixos/modules/features/desktop-apps/default.nix b/nixos/modules/features/desktop-apps/default.nix index 385af11..d1db1d5 100644 --- a/nixos/modules/features/desktop-apps/default.nix +++ b/nixos/modules/features/desktop-apps/default.nix @@ -1,12 +1,13 @@ { pkgs, inputs, ... }: { + # Desktop GUI applications environment.systemPackages = with pkgs; [ + # Packaged from a flake input (see flake.nix) inputs.helium-browser.packages.${pkgs.stdenv.hostPlatform.system}.helium secretspec claude-code cryptomator - ente-desktop keepassxc libreoffice hunspellDicts.ru_RU @@ -18,6 +19,7 @@ obsidian obs-studio pkgs.qbittorrent + evince pkgs.masterpdfeditor mullvad-browser librewolf diff --git a/nixos/modules/features/dev-tools/default.nix b/nixos/modules/features/dev-tools/default.nix index 6b20cf7..7613495 100644 --- a/nixos/modules/features/dev-tools/default.nix +++ b/nixos/modules/features/dev-tools/default.nix @@ -1,6 +1,7 @@ { pkgs, ... }: { + # Compilers, language tooling, and IDEs for development environment.systemPackages = with pkgs; [ black cargo diff --git a/nixos/modules/features/drag-n-drop/default.nix b/nixos/modules/features/drag-n-drop/default.nix deleted file mode 100644 index 7bf65ad..0000000 --- a/nixos/modules/features/drag-n-drop/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ configs, pkgs, ... }: - -{ - environment.systemPackages = with pkgs; [ - yaziPlugins.drag - ripdrag - dragon-drop - ]; - programs.dconf.enable = true; - programs.yazi.enable = true; -} diff --git a/nixos/modules/features/editors/default.nix b/nixos/modules/features/editors/default.nix index 1570aa3..7f1dd9a 100644 --- a/nixos/modules/features/editors/default.nix +++ b/nixos/modules/features/editors/default.nix @@ -1,10 +1,12 @@ { pkgs, ... }: { + # Text editors / IDEs environment.systemPackages = with pkgs; [ micro neovim (emacs.override { withNativeCompilation = true; }) + # IME input method integration for the Vim/Neovim ecosystem. pkgs.vimPlugins.im-select-nvim ]; } \ No newline at end of file diff --git a/nixos/modules/features/file-managers/default.nix b/nixos/modules/features/file-managers/default.nix index 950b34e..f3ad4b3 100644 --- a/nixos/modules/features/file-managers/default.nix +++ b/nixos/modules/features/file-managers/default.nix @@ -9,5 +9,13 @@ nautilus sushi yazi + # Drag & drop file transfer (yazi plugin + standalone helpers) + yaziPlugins.drag + ripdrag + dragon-drop ]; -} + + # yazi (terminal file manager) and its drag-and-drop helpers; the module + # also registers yazi's shell integration. + programs.yazi.enable = true; +} \ No newline at end of file diff --git a/nixos/modules/features/fonts/default.nix b/nixos/modules/features/fonts/default.nix index 322d449..7f2c371 100644 --- a/nixos/modules/features/fonts/default.nix +++ b/nixos/modules/features/fonts/default.nix @@ -1,6 +1,8 @@ { pkgs, ... }: { + # Fonts: installed under fonts.packages (NOT environment.systemPackages) so + # they land in the fontconfig cache instead of just the PATH. fonts.fontconfig.enable = true; fonts.packages = with pkgs; [ diff --git a/nixos/modules/features/gst-codecs/default.nix b/nixos/modules/features/gst-codecs/default.nix index 7a85bf2..eac6777 100644 --- a/nixos/modules/features/gst-codecs/default.nix +++ b/nixos/modules/features/gst-codecs/default.nix @@ -1,6 +1,8 @@ { pkgs, ... }: { + # GStreamer plugin set so apps (e.g. mpv, totem, browsers) can decode media. + # Installed system-wide so anything linking GStreamer picks them up. environment.systemPackages = with pkgs; [ gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-base diff --git a/nixos/modules/features/monitoring/default.nix b/nixos/modules/features/monitoring/default.nix index df0a937..942e95e 100644 --- a/nixos/modules/features/monitoring/default.nix +++ b/nixos/modules/features/monitoring/default.nix @@ -2,6 +2,7 @@ { environment.systemPackages = with pkgs; [ + # System monitors / fetch tools (btop.override { cudaSupport = true; }) duf fastfetch diff --git a/nixos/modules/features/mouse/default.nix b/nixos/modules/features/mouse/default.nix index 3c71537..e0f44a8 100644 --- a/nixos/modules/features/mouse/default.nix +++ b/nixos/modules/features/mouse/default.nix @@ -1,9 +1,10 @@ { config, pkgs, ... }: { - services.input-remapper.enable = true; - environment.systemPackages = with pkgs; [ - piper - input-remapper -]; -} + # Input remapping service (mouse buttons/keys) + its configuration GUI. + services.input-remapper.enable = true; + environment.systemPackages = with pkgs; [ + piper + input-remapper + ]; +} \ No newline at end of file diff --git a/nixos/modules/features/mpd/default.nix b/nixos/modules/features/mpd/default.nix index 383180d..a339622 100644 --- a/nixos/modules/features/mpd/default.nix +++ b/nixos/modules/features/mpd/default.nix @@ -1,7 +1,9 @@ { pkgs, ... }: { - # MPD server + # MPD server (music player daemon). The audio_output points at PipeWire + # through its PulseAudio compatibility layer, since desktop audio is handled + # by modules/system/audio. services.mpd = { enable = true; user = "seraphim"; @@ -21,12 +23,14 @@ }; }; + # MPD runs as a system service, so it needs the per-user runtime dir to + # reach the PipeWire socket. systemd.services.mpd.environment = { XDG_RUNTIME_DIR = "/run/user/1000"; }; - # mpd-mpris is the MPRIS bridge for MPD — only useful when MPD is on, - # so it lives in the same feature. Disable by removing this block. + # mpd-mpris bridges MPD to the MPRIS media control interface (used by + # Waybar/media keys). Lives here because it only matters when MPD is on. systemd.user.services.mpd-mpris = { description = "MPD MPRIS Service for Waybar"; wantedBy = [ "default.target" ]; diff --git a/nixos/modules/features/niri/default.nix b/nixos/modules/features/niri/default.nix index 84f1d15..8f48be7 100644 --- a/nixos/modules/features/niri/default.nix +++ b/nixos/modules/features/niri/default.nix @@ -1,13 +1,18 @@ { pkgs, ... }: { + # niri: scrollable-tiling Wayland compositor. + # enableDefaultPath = false stops the bundled unit pre-setting PATH, so the + # session uses the environment NixOS generates. programs.niri.enable = true; systemd.user.services.niri.enableDefaultPath = false; + # Icon themes + cursors the compositor and its launchers rely on. environment.systemPackages = with pkgs; [ adwaita-icon-theme bibata-cursors hicolor-icon-theme + # Shows polkit authentication dialogs as a layer-shell popup. hyprpolkitagent ]; } \ No newline at end of file diff --git a/nixos/modules/features/noctalia-greeter/default.nix b/nixos/modules/features/noctalia-greeter/default.nix index b80465c..c65f806 100644 --- a/nixos/modules/features/noctalia-greeter/default.nix +++ b/nixos/modules/features/noctalia-greeter/default.nix @@ -1,6 +1,8 @@ { pkgs, inputs, ... }: { + # Noctalia greeter (display manager login screen). + # The module comes from the flake input rather than nixpkgs. imports = [ inputs.noctalia-greeter.nixosModules.default ]; @@ -15,4 +17,4 @@ }; }; }; -} +} \ No newline at end of file diff --git a/nixos/modules/features/noctalia-shell/default.nix b/nixos/modules/features/noctalia-shell/default.nix index a137d32..251ccff 100644 --- a/nixos/modules/features/noctalia-shell/default.nix +++ b/nixos/modules/features/noctalia-shell/default.nix @@ -1,10 +1,12 @@ { pkgs, inputs, ... }: { + # Noctalia shell (the desktop shell this configuration is named after). + # Two copies are installed: + # - inputs.noctalia: the project built straight from the flake input. + # - noctalia-shell: the packaged copy shipped in nixpkgs. environment.systemPackages = with pkgs; [ - # v5 from the flake input inputs.noctalia.packages.${stdenv.hostPlatform.system}.default - # packaged copy from nixpkgs (also installed in the original config) noctalia-shell ]; } \ No newline at end of file diff --git a/nixos/modules/features/nvidia/default.nix b/nixos/modules/features/nvidia/default.nix index 8a83433..f5f4d8f 100644 --- a/nixos/modules/features/nvidia/default.nix +++ b/nixos/modules/features/nvidia/default.nix @@ -1,6 +1,8 @@ { config, pkgs, ... }: { + # NVIDIA GPU driver. `open = false` uses the proprietary blob; modesetting + # enables modeset + nvidia-drm for proper Wayland support. hardware.nvidia = { modesetting.enable = true; powerManagement.enable = false; @@ -10,6 +12,7 @@ }; environment.systemPackages = with pkgs; [ + # VA-API translation layer so NVIDIA can accelerate video decode. nvidia-vaapi-driver ]; @@ -18,4 +21,4 @@ __GLX_VENDOR_LIBRARY_NAME = "nvidia"; NIXOS_OZONE_WL = "1"; }; -} +} \ No newline at end of file diff --git a/nixos/modules/features/starship/default.nix b/nixos/modules/features/starship/default.nix deleted file mode 100644 index b364c5d..0000000 --- a/nixos/modules/features/starship/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ ... }: - -{ - programs.starship.enable = true; -} \ No newline at end of file diff --git a/nixos/modules/features/swingmusic/default.nix b/nixos/modules/features/swingmusic/default.nix index 6c3bc90..e666b72 100644 --- a/nixos/modules/features/swingmusic/default.nix +++ b/nixos/modules/features/swingmusic/default.nix @@ -1,6 +1,8 @@ { ... }: { + # Swing Music: self-hosted local music server. Built separately and placed + # in the user's home; this unit just turns it into a managed session service. systemd.user.services.swingmusic = { description = "Swing Music Local Server"; wantedBy = [ "graphical-session.target" ]; diff --git a/nixos/modules/features/terminals/default.nix b/nixos/modules/features/terminals/default.nix index a290b42..22c5662 100644 --- a/nixos/modules/features/terminals/default.nix +++ b/nixos/modules/features/terminals/default.nix @@ -5,4 +5,4 @@ foot ghostty ]; -} +} \ No newline at end of file diff --git a/nixos/modules/features/wayland-tools/default.nix b/nixos/modules/features/wayland-tools/default.nix index 30253a1..399fcb0 100644 --- a/nixos/modules/features/wayland-tools/default.nix +++ b/nixos/modules/features/wayland-tools/default.nix @@ -1,6 +1,7 @@ { pkgs, ... }: { + # Wayland clipboard, screenshot, launcher and input tooling environment.systemPackages = with pkgs; [ cliphist fuzzel diff --git a/nixos/modules/features/wireshark/default.nix b/nixos/modules/features/wireshark/default.nix index 7b2141e..afebd39 100644 --- a/nixos/modules/features/wireshark/default.nix +++ b/nixos/modules/features/wireshark/default.nix @@ -1,6 +1,8 @@ { pkgs, ... }: { + # Wireshark: packet capture/analysis. The `wireshark` group grants non-root + # capture permissions to the user (programs.wireshark sets up dumpcap). programs.wireshark = { enable = true; package = pkgs.wireshark; @@ -9,4 +11,4 @@ users.users.seraphim = { extraGroups = [ "wireshark" ]; }; -} +} \ No newline at end of file diff --git a/nixos/modules/system/audio/default.nix b/nixos/modules/system/audio/default.nix index 140b08c..66ab087 100644 --- a/nixos/modules/system/audio/default.nix +++ b/nixos/modules/system/audio/default.nix @@ -1,7 +1,11 @@ { pkgs, ... }: { + # Real-time scheduling grants for the audio stack. security.rtkit.enable = true; + + # PipeWire is the desktop audio server; the PulseAudio shim keeps old + # clients (e.g. MPD's "pulse" output) working without a real PulseAudio. services.pipewire = { enable = true; alsa.enable = true; diff --git a/nixos/modules/system/boot/default.nix b/nixos/modules/system/boot/default.nix index df64426..54cb1e6 100644 --- a/nixos/modules/system/boot/default.nix +++ b/nixos/modules/system/boot/default.nix @@ -1,15 +1,15 @@ { pkgs, ... }: { + # systemd-boot on UEFI boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - # EDID firmware loading is kept here because it's a kernel-level boot concern. - # Commented kernel params from the original config are preserved. - # boot.kernelParams = [ - # "drm.edid_firmware=DP-1:edid/mi_edid.bin" - # "video=DP-1:2560x1440@180" - # ]; + # EDID firmware (monitor identity) is exposed to the kernel as firmware so + # the display can be driven at its native resolution; mi_edid.bin lives at + # the repo root next to hardware-configuration.nix. + # NOTE: the matching --kernel-params (drm.edid_firmware / video=) are kept + # commented out because they hard-pin a specific DP output name. hardware.firmware = [ (pkgs.runCommand "custom-edid" {} '' mkdir -p $out/lib/firmware/edid diff --git a/nixos/modules/system/hardware/default.nix b/nixos/modules/system/hardware/default.nix index bad717c..b3f1bbb 100644 --- a/nixos/modules/system/hardware/default.nix +++ b/nixos/modules/system/hardware/default.nix @@ -1,16 +1,20 @@ { config, pkgs, ... }: { + # Secondary data drive, mounted as a regular user (rw, no root needed). fileSystems."/mnt/giga" = { device = "/dev/disk/by-uuid/bfed3a37-05e1-465b-a4b7-d74cd31bf937"; fsType = "ext4"; options = [ "defaults" "user" "rw" ]; }; + # Mesa graphics stack (needed even on NVIDIA for software fallbacks / GL). hardware.graphics = { enable = true; enable32Bit = true; }; + # The actual NVIDIA driver is configured in modules/features/nvidia; this + # just tells the X server legacy path to prefer the nvidia driver name. services.xserver.videoDrivers = [ "nvidia" ]; } \ No newline at end of file diff --git a/nixos/modules/system/locale/default.nix b/nixos/modules/system/locale/default.nix index 4c07d59..f95ba12 100644 --- a/nixos/modules/system/locale/default.nix +++ b/nixos/modules/system/locale/default.nix @@ -1,8 +1,10 @@ { ... }: { + # Etc/GMT-7 is the Posix name for UTC+7 (no DST). time.timeZone = "Etc/GMT-7"; + # Swiss German by default; only LC_TIME uses American English. i18n.defaultLocale = "de_CH.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "de_CH.UTF-8"; diff --git a/nixos/modules/system/network/default.nix b/nixos/modules/system/network/default.nix index a862235..5601ff8 100644 --- a/nixos/modules/system/network/default.nix +++ b/nixos/modules/system/network/default.nix @@ -5,22 +5,29 @@ networking.networkmanager.enable = true; programs.amnezia-vpn.enable = true; - # Primary DNS via Mullvad DoT (Base mode) + # Primary DNS via Mullvad DoT (Base mode). + # When systemd-resolved is enabled, these servers are fed into its + # `Resolve.DNS` list. The `#server` suffix is systemd-resolved's + # DoT (DNS-over-TLS) syntax and is ignored by non-resolved consumers. networking.nameservers = [ "194.242.2.4#base.dns.mullvad.net" "194.242.2.2#dns.mullvad.net" ]; - # systemd-resolved: Mullvad primary, Quad9 fallback + # systemd-resolved: Mullvad primary, Quad9 fallback. + # Options live under `settings.Resolve` (the flat `services.resolved.*` + # aliases were removed upstream — they now emit deprecation warnings). services.resolved = { enable = true; - dnsovertls = "opportunistic"; - dnssec = "false"; - domains = [ "~." ]; - fallbackDns = [ - "9.9.9.9#dns.quad9.net" - "149.112.112.112#dns.quad9.net" - ]; + settings.Resolve = { + DNSOverTLS = "opportunistic"; + DNSSEC = "false"; + Domains = [ "~." ]; + FallbackDNS = [ + "9.9.9.9#dns.quad9.net" + "149.112.112.112#dns.quad9.net" + ]; + }; }; # Avahi (Printer / Network Discovery) diff --git a/nixos/modules/system/nix/default.nix b/nixos/modules/system/nix/default.nix index 8f33990..9cefbf5 100644 --- a/nixos/modules/system/nix/default.nix +++ b/nixos/modules/system/nix/default.nix @@ -1,16 +1,20 @@ { config, pkgs, lib, inputs, ... }: { + # Nix itself: enable the flake + nix-command features this config relies on. nix.settings.experimental-features = [ "nix-command" "flakes" ]; nixpkgs.config.allowUnfree = true; + # Automatic garbage collection — drop builds older than a week. nix.gc = { automatic = true; dates = "weekly"; options = "--delete-older-than 7d"; }; - programs.nix-ld.enable = true; + # envfs is the modern replacement for nix-ld: it mounts a FUSE filesystem + # on /usr/bin and /bin that resolves shebangs (e.g. #!/usr/bin/env) to the + # executables on the caller's PATH. It supersedes programs.nix-ld entirely. services.envfs.enable = true; security.polkit.enable = true; diff --git a/nixos/modules/system/printing/default.nix b/nixos/modules/system/printing/default.nix index 26ceb03..91828b2 100644 --- a/nixos/modules/system/printing/default.nix +++ b/nixos/modules/system/printing/default.nix @@ -1,6 +1,8 @@ { pkgs, ... }: { + # CUPS printing with drivers for common Brother (brlaser) and generic + # printers (gutenprint); cups-filters provides the filter backends. services.printing = { enable = true; drivers = with pkgs; [ diff --git a/nixos/modules/system/services/default.nix b/nixos/modules/system/services/default.nix index 0f06931..74ac531 100644 --- a/nixos/modules/system/services/default.nix +++ b/nixos/modules/system/services/default.nix @@ -1,11 +1,15 @@ { ... }: { + # File indexer (gvfs) + thumbnailer (tumbler) for the desktop shell. services.gvfs.enable = true; services.tumbler.enable = true; + # GNOME Keyring: stores secrets for Chrome/keepassxc seams etc. services.gnome.gnome-keyring.enable = true; + # dconf is the config DB used by GSettings-backed apps (nautilus, etc.). programs.dconf.enable = true; + # Keep the journal bounded so it can't fill the root partition. services.journald.extraConfig = '' SystemMaxUse=50M MaxRetentionSec=1month diff --git a/nixos/modules/system/users/default.nix b/nixos/modules/system/users/default.nix index f43149d..6eafd7c 100644 --- a/nixos/modules/system/users/default.nix +++ b/nixos/modules/system/users/default.nix @@ -1,16 +1,20 @@ { pkgs, ... }: { + # Main desktop user. users.users."seraphim" = { isNormalUser = true; description = "seraphim"; shell = pkgs.zsh; + # wheel for sudo/doas, networkmanager to manage connections itself. extraGroups = [ "networkmanager" "wheel" ]; packages = with pkgs; []; }; + # doas (simpler sudo replacement) security.doas = { enable = true; + # Give seraphim persistent passwordless-ish privileges, keeping the env. extraRules = [ { users = [ "seraphim" ]; @@ -20,12 +24,15 @@ ]; }; + # ZSH + completion, oh-my-zsh, autosuggestions, and fzf key bindings. programs.zsh = { enable = true; enableCompletion = true; + ohMyZsh.enable = true; autosuggestions = { enable = true; highlightStyle = "fg=#6c7086"; + strategy = [ "history" "completion" ]; }; interactiveShellInit = '' source ${pkgs.fzf}/share/fzf/key-bindings.zsh @@ -34,6 +41,8 @@ shellAliases = { ls = "eza -al --icons=auto"; ll = "eza -al --icons=auto"; + sudo = "doas"; + open = "xdg-open"; }; }; } diff --git a/starship/.config/starship.toml b/starship/.config/starship.toml index 009b3fa..8073008 100644 --- a/starship/.config/starship.toml +++ b/starship/.config/starship.toml @@ -52,40 +52,40 @@ deleted = "" [palettes.noctalia] # Standard colors -blue = "#92d4b5" -red = "#ffb4ab" -green = "#b7cf8b" -yellow = "#c1cbaa" -cyan = "#c1cbaa" -magenta = "#b7cf8b" -white = "#e4e3db" -black = "#45483d" +blue = "#26694f" +red = "#ba1a1a" +green = "#4f642c" +yellow = "#586247" +cyan = "#6e7759" +magenta = "#667a3a" +white = "#1b1c17" +black = "#e1e4d4" # Extended palette (Catppuccin-compatible names) -rosewater = "#c1cbaa" -flamingo = "#ffb4ab" -pink = "#b7cf8b" -mauve = "#b7cf8b" -maroon = "#ffb4ab" -peach = "#c1cbaa" -teal = "#c1cbaa" -sky = "#c1cbaa" -sapphire = "#92d4b5" -lavender = "#b7cf8b" +rosewater = "#586247" +flamingo = "#ba1a1a" +pink = "#667a3a" +mauve = "#667a3a" +maroon = "#ba1a1a" +peach = "#586247" +teal = "#6e7759" +sky = "#6e7759" +sapphire = "#26694f" +lavender = "#667a3a" # Text shades -text = "#e4e3db" -subtext1 = "#e4e3db" -subtext0 = "#8f9284" +text = "#1b1c17" +subtext1 = "#1b1c17" +subtext0 = "#75786b" # Surface shades -overlay2 = "#8f9284" -overlay1 = "#8f9284" -overlay0 = "#45483d" -surface2 = "#45483d" -surface1 = "#45483d" -surface0 = "#13140f" -base = "#13140f" -mantle = "#13140f" -crust = "#13140f" +overlay2 = "#75786b" +overlay1 = "#75786b" +overlay0 = "#e1e4d4" +surface2 = "#e1e4d4" +surface1 = "#e1e4d4" +surface0 = "#fbfaf1" +base = "#fbfaf1" +mantle = "#fbfaf1" +crust = "#fbfaf1" # <<< NOCTALIA STARSHIP PALETTE <<< -- cgit v1.2.3