summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseraphim <18ycm9tx@anonaddy.me>2026-08-04 13:28:39 +0700
committerseraphim <18ycm9tx@anonaddy.me>2026-08-04 13:28:39 +0700
commitbe1db27940f3612a0b1a10ca17bfd5be670fd850 (patch)
tree4c179819d89a7d842cd9b78fd54c11e06922c3c8
parent4eba57f4e787bf97fe7dcb0e1702723aa08de01d (diff)
,
-rw-r--r--doom/.config/doom/themes/noctalia-theme.el108
-rw-r--r--foot/.config/foot/themes/noctalia42
-rw-r--r--ghostty/.config/ghostty/themes/noctalia44
-rw-r--r--niri/.config/niri/noctalia.kdl22
-rw-r--r--nixos/docs/ADDING_PACKAGES.md7
-rw-r--r--nixos/hosts/opus/default.nix17
-rw-r--r--nixos/modules/features/appimage/default.nix4
-rw-r--r--nixos/modules/features/audio-tools/default.nix1
-rw-r--r--nixos/modules/features/binary-compat/default.nix4
-rw-r--r--nixos/modules/features/cli-tools/default.nix5
-rw-r--r--nixos/modules/features/desktop-apps/default.nix4
-rw-r--r--nixos/modules/features/dev-tools/default.nix1
-rw-r--r--nixos/modules/features/drag-n-drop/default.nix11
-rw-r--r--nixos/modules/features/editors/default.nix2
-rw-r--r--nixos/modules/features/file-managers/default.nix10
-rw-r--r--nixos/modules/features/fonts/default.nix2
-rw-r--r--nixos/modules/features/gst-codecs/default.nix2
-rw-r--r--nixos/modules/features/monitoring/default.nix1
-rw-r--r--nixos/modules/features/mouse/default.nix13
-rw-r--r--nixos/modules/features/mpd/default.nix10
-rw-r--r--nixos/modules/features/niri/default.nix5
-rw-r--r--nixos/modules/features/noctalia-greeter/default.nix4
-rw-r--r--nixos/modules/features/noctalia-shell/default.nix6
-rw-r--r--nixos/modules/features/nvidia/default.nix5
-rw-r--r--nixos/modules/features/starship/default.nix5
-rw-r--r--nixos/modules/features/swingmusic/default.nix2
-rw-r--r--nixos/modules/features/terminals/default.nix2
-rw-r--r--nixos/modules/features/wayland-tools/default.nix1
-rw-r--r--nixos/modules/features/wireshark/default.nix4
-rw-r--r--nixos/modules/system/audio/default.nix4
-rw-r--r--nixos/modules/system/boot/default.nix12
-rw-r--r--nixos/modules/system/hardware/default.nix4
-rw-r--r--nixos/modules/system/locale/default.nix2
-rw-r--r--nixos/modules/system/network/default.nix25
-rw-r--r--nixos/modules/system/nix/default.nix6
-rw-r--r--nixos/modules/system/printing/default.nix2
-rw-r--r--nixos/modules/system/services/default.nix4
-rw-r--r--nixos/modules/system/users/default.nix9
-rw-r--r--starship/.config/starship.toml60
39 files changed, 270 insertions, 202 deletions
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 <<<