summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseraphim <18ycm9tx@anonaddy.me>2026-08-16 21:55:33 +0700
committerseraphim <18ycm9tx@anonaddy.me>2026-08-16 21:55:33 +0700
commit7dd785b1005aec643004c06eaa7af690b00cb48f (patch)
treebd8700ef4dfb8c0a1315f4eb41784d1d4ba43001
parent100094fe8b9398c083fa6351925a00f5b3a9d36a (diff)
.
-rw-r--r--foot/.config/foot/foot.ini1
-rw-r--r--[-rwxr-xr-x]niri/.config/niri/config.kdl65
-rw-r--r--niri/.config/niri/noctalia.kdl35
-rwxr-xr-xniri/.config/niri/theme-switcher.sh38
-rw-r--r--nixos/docs/ADDING_PACKAGES.md183
-rw-r--r--nixos/flake.lock152
-rw-r--r--nixos/flake.nix29
-rw-r--r--nixos/hardware-configuration.nix33
-rw-r--r--nixos/hosts/opus/default.nix87
-rw-r--r--nixos/mi_edid.binbin384 -> 0 bytes
-rw-r--r--nixos/modules/features/appimage/default.nix15
-rw-r--r--nixos/modules/features/audio-tools/default.nix13
-rw-r--r--nixos/modules/features/binary-compat/default.nix23
-rw-r--r--nixos/modules/features/browsers/default.nix10
-rw-r--r--nixos/modules/features/cli-tools/default.nix26
-rw-r--r--nixos/modules/features/desktop-apps/default.nix6
-rw-r--r--nixos/modules/features/dev-tools/default.nix26
-rw-r--r--nixos/modules/features/editors/default.nix12
-rw-r--r--nixos/modules/features/file-managers/default.nix21
-rw-r--r--nixos/modules/features/fonts/default.nix20
-rw-r--r--nixos/modules/features/gaming/default.nix15
-rw-r--r--nixos/modules/features/gst-codecs/default.nix12
-rw-r--r--nixos/modules/features/language-tools/default.nix7
-rw-r--r--nixos/modules/features/media-tools/default.nix7
-rw-r--r--nixos/modules/features/messaging/default.nix9
-rw-r--r--nixos/modules/features/monitoring/default.nix12
-rw-r--r--nixos/modules/features/mouse/default.nix10
-rw-r--r--nixos/modules/features/mpd/default.nix43
-rw-r--r--nixos/modules/features/niri/default.nix19
-rw-r--r--nixos/modules/features/noctalia-greeter/default.nix20
-rw-r--r--nixos/modules/features/noctalia-shell/default.nix12
-rw-r--r--nixos/modules/features/nvidia/default.nix24
-rw-r--r--nixos/modules/features/p2p/default.nix7
-rw-r--r--nixos/modules/features/productivity/default.nix11
-rw-r--r--nixos/modules/features/security/default.nix8
-rw-r--r--nixos/modules/features/swingmusic/default.nix21
-rw-r--r--nixos/modules/features/terminals/default.nix10
-rw-r--r--nixos/modules/features/vpn-utils/default.nix33
-rw-r--r--nixos/modules/features/wayland-tools/default.nix14
-rw-r--r--nixos/modules/features/wireshark/default.nix14
-rw-r--r--nixos/modules/system/audio/default.nix21
-rw-r--r--nixos/modules/system/boot/default.nix19
-rw-r--r--nixos/modules/system/hardware/default.nix20
-rw-r--r--nixos/modules/system/locale/default.nix20
-rw-r--r--nixos/modules/system/network/default.nix38
-rw-r--r--nixos/modules/system/nix/default.nix30
-rw-r--r--nixos/modules/system/printing/default.nix14
-rw-r--r--nixos/modules/system/services/default.nix24
-rw-r--r--nixos/modules/system/users/default.nix69
-rw-r--r--nvim/.config/nvim/lazy-lock.json19
-rw-r--r--start-niri.sh10
-rw-r--r--waybar/config.jsonc73
-rw-r--r--waybar/style.css49
53 files changed, 193 insertions, 1316 deletions
diff --git a/foot/.config/foot/foot.ini b/foot/.config/foot/foot.ini
index 5e4dce4..ba33ebb 100644
--- a/foot/.config/foot/foot.ini
+++ b/foot/.config/foot/foot.ini
@@ -1,4 +1,5 @@
[main]
+include=~/.cache/wal/colors-foot.ini
font=Jetbrains mono :size=12
pad=2x0
diff --git a/niri/.config/niri/config.kdl b/niri/.config/niri/config.kdl
index 4f5427d..9189458 100755..100644
--- a/niri/.config/niri/config.kdl
+++ b/niri/.config/niri/config.kdl
@@ -1,15 +1,21 @@
-spawn-at-startup "xwayland-satellite"
-spawn-at-startup "noctalia"
+spawn-at-startup "xrdb" "-merge" "/home/seraphim/.Xresources"
spawn-at-startup "vicinae" "server"
spawn-at-startup "gentoo-pipewire-launcher"
spawn-at-startup "telegram-desktop" "-autostart" "--minimized"
-spawn-at-startup "polkit-gnome-authentication-agent-1"
spawn-at-startup "keepassxc" "--minimized"
-spawn-at-startup "systemctl" "--user" "start" "hyprpolkitagent"
+spawn-at-startup "awww-daemon"
+spawn-at-startup "/usr/libexec/hyprpolkitagent"
spawn-at-startup "dbus-update-activation-environment" "WAYLAND_DISPLAY" "DISPLAY" "XDG_CURRENT_DESKTOP"
+spawn-at-startup "/home/seraphim/dotfiles-gentoo/niri/.config/niri/theme-switcher.sh"
+spawn-at-startup "sh" "-c" "NO_AT_BRIDGE=1 waybar"
prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
+environment {
+ OZONE_PLATFORM "wayland"
+ ELECTRON_OZONE_PLATFORM_HINT "auto"
+}
+
input {
// focus-follows-mouse max-scroll-amount="30%"
@@ -73,6 +79,7 @@ layout {
//color "#0007"
}
}
+
animations {
workspace-switch {
duration-ms 275
@@ -100,6 +107,7 @@ animations {
curve "ease-out-quad"
}
}
+
window-rule {
match app-id=r#"^org\.wezfurlong\.wezterm$"#
geometry-corner-radius 12
@@ -108,6 +116,7 @@ window-rule {
xray false
}
}
+
// Helium PiP fix
window-rule {
match app-id=r#"helium$"# title="^Picture-in-Picture$"
@@ -117,7 +126,8 @@ window-rule {
shadow {
off
}
- }
+}
+
// Steam notifs fix
window-rule {
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
@@ -125,19 +135,21 @@ window-rule {
open-focused false
default-floating-position x=16 y=16 relative-to="bottom-right"
}
+
gestures {
hot-corners {
off
}
}
+
cursor {
xcursor-theme "Bibata-Modern-Classic"
xcursor-size 15
}
+
overview {
zoom 0.5
workspace-shadow {
-
off
//softness 15
//spread 3
@@ -145,32 +157,15 @@ overview {
//color "#00000080"
}
}
-layer-rule {
- match namespace="^noctalia-backdrop*"
- place-within-backdrop true
- background-effect {
- xray false
- }
-
- shadow {
- off
- }
-}
-// Allow the stationary backdrop wallpaper to be visible through your layout
binds {
- // Noctalia & Application Launchers
+ // Application Launchers
Mod+Shift+T { spawn "telegram-desktop"; }
- Mod+Shift+B { spawn "helium"; }
- //Mod+D hotkey-overlay-title="App Launcher" { spawn "noctalia" "msg" "panel-toggle" "launcher"; }
+ Mod+Shift+B { spawn "/opt/helium/helium" "--enable-features=UseOzonePlatform" "--ozone-platform=wayland"; }
Mod+D { spawn "vicinae" "toggle"; }
- Ctrl+Mod+V hotkey-overlay-title="Clipboard History" { spawn "noctalia" "msg" "panel-toggle" "clipboard"; }
Mod+T hotkey-overlay-title="File Manager" { spawn "dolphin"; }
- Mod+Alt+R {
- spawn "foot" "-e" "rmpc";
- }
+ Mod+Alt+R { spawn "foot" "-e" "rmpc"; }
Mod+S hotkey-overlay-title="Terminal" { spawn "foot"; }
- //Mod+D hotkey-overlay-title="Application Menu" { spawn "fuzzel"; }
Super+Alt+L hotkey-overlay-title="Lock Screen" { spawn "swaylock"; }
// Audio & Media Controls
@@ -212,6 +207,7 @@ binds {
Mod+L { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-monitor-left; }
Mod+Shift+WheelScrollDown { focus-monitor-right; }
+
// Window Movement
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down; }
@@ -251,15 +247,6 @@ binds {
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
// Workspace Navigation
- //Mod+Page_Down { focus-workspace-down; }
- //Mod+Page_Up { focus-workspace-up; }
- //Mod+U { focus-workspace-down; }
- //Mod+I { focus-workspace-up; }
- //Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
- //Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
- //Mod+Ctrl+U { move-column-to-workspace-down; }
- //Mod+Ctrl+I { move-column-to-workspace-up; }
-
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Shift+U { move-workspace-down; }
@@ -289,8 +276,6 @@ binds {
// Column & Window Sizing
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
- // Mod+Comma { consume-window-into-column; }
- // Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-column-width-back; }
@@ -305,16 +290,12 @@ binds {
// Mouse Wheel Bindings
Mod+WheelScrollUp { focus-column-left; }
Mod+WheelScrollDown { focus-column-right; }
+
// Screenshots
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
// System Control
- // Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+Shift+E { quit; }
- // Ctrl+Alt+Delete { quit; }
- // Mod+Shift+P { power-off-monitors; }
}
-
-include "./noctalia.kdl"
diff --git a/niri/.config/niri/noctalia.kdl b/niri/.config/niri/noctalia.kdl
deleted file mode 100644
index 824e2c8..0000000
--- a/niri/.config/niri/noctalia.kdl
+++ /dev/null
@@ -1,35 +0,0 @@
-layout {
-
- focus-ring {
- active-color "#bbc8d0"
- inactive-color "#131314"
- urgent-color "#ffb4ab"
- }
-
- border {
- active-color "#bbc8d0"
- inactive-color "#131314"
- urgent-color "#ffb4ab"
- }
-
- shadow {
- color "#00000070"
- }
-
- tab-indicator {
- active-color "#bbc8d0"
- inactive-color "#18242a"
- urgent-color "#ffb4ab"
- }
-
- insert-hint {
- color "#bbc8d080"
- }
-}
-
-recent-windows {
- highlight {
- active-color "#bbc8d0"
- urgent-color "#ffb4ab"
- }
-}
diff --git a/niri/.config/niri/theme-switcher.sh b/niri/.config/niri/theme-switcher.sh
new file mode 100755
index 0000000..5c92039
--- /dev/null
+++ b/niri/.config/niri/theme-switcher.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# paths to pics
+LIGHT_WALLPAPER="$HOME/Pictures/wallpapers/day.jpg"
+DARK_WALLPAPER="$HOME/Pictures/wallpapers/night.jpg"
+
+STATE_FILE="/tmp/current_theme_state"
+
+while true; do
+ HOUR=$(date +%H)
+ HOUR=$((10#$HOUR))
+
+ if [ "$HOUR" -ge 9 ] && [ "$HOUR" -lt 18 ]; then
+ TARGET_STATE="light"
+ else
+ TARGET_STATE="dark"
+ fi
+
+ CURRENT_STATE=$(cat "$STATE_FILE" 2>/dev/null)
+
+ if [ "$CURRENT_STATE" != "$TARGET_STATE" ]; then
+ if [ "$TARGET_STATE" = "light" ]; then
+ wal -n -l -i "$LIGHT_WALLPAPER"
+ awww img "$LIGHT_WALLPAPER"
+ else
+ wal -n -i "$DARK_WALLPAPER"
+ awww img "$DARK_WALLPAPER"
+ fi
+
+ killall -SIGUSR2 waybar
+
+ killall -USR1 foot
+
+ echo "$TARGET_STATE" >"$STATE_FILE"
+ fi
+
+ sleep 60
+done
diff --git a/nixos/docs/ADDING_PACKAGES.md b/nixos/docs/ADDING_PACKAGES.md
deleted file mode 100644
index d1b5eba..0000000
--- a/nixos/docs/ADDING_PACKAGES.md
+++ /dev/null
@@ -1,183 +0,0 @@
-# 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
-under `modules/features/`. There is no central package list.
-
-## Where a package belongs
-
-| Package type | Module |
-| --- | --- |
-| Terminal | `modules/features/terminals/default.nix` |
-| CLI tool (incl. shell prompts like starship) | `modules/features/cli-tools/default.nix` |
-| Editor or IDE | `modules/features/editors/default.nix` |
-| Compiler, linter, language tool | `modules/features/dev-tools/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` |
-| Media recording or streaming tool | `modules/features/media-tools/default.nix` |
-| System monitor or fetch tool | `modules/features/monitoring/default.nix` |
-| Font | `modules/features/fonts/default.nix` |
-| GStreamer plugin | `modules/features/gst-codecs/default.nix` |
-| Runtime library for external binaries | `modules/features/binary-compat/default.nix` |
-| Web browser | `modules/features/browsers/default.nix` |
-| Messaging or communication app | `modules/features/messaging/default.nix` |
-| Office suite, note-taking app, or document viewer/editor | `modules/features/productivity/default.nix` |
-| Password manager or encryption tool | `modules/features/security/default.nix` |
-| Gaming app, game launcher, or gaming service (Steam, etc.) | `modules/features/gaming/default.nix` |
-| P2P or torrent client | `modules/features/p2p/default.nix` |
-| Language dictionary or spell-check data | `modules/features/language-tools/default.nix` |
-| Desktop application (catch-all for GUI apps without a fitting category) | `modules/features/desktop-apps/default.nix` |
-
-First use an existing category. Create a new feature module only if the package is
-its own service, subsystem, or a group of related packages without a fitting category.
-
-## Add to an existing module
-
-Add the package to that module's `environment.systemPackages` list:
-
-```nix
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- existing-package
- ripgrep
- ];
-}
-```
-
-Most modules use `with pkgs;`, so use unqualified package names. Use `pkgs.<name>`
-when an explicit path is useful, such as `pkgs.vimPlugins.im-select-nvim`, or when
-applying an override:
-
-```nix
-(emacs.override { withNativeCompilation = true; })
-```
-
-Keep related packages together and follow the local ordering of the file.
-
-## Fonts are different
-
-Fonts belong in `modules/features/fonts/default.nix` under `fonts.packages`, not
-`environment.systemPackages`:
-
-```nix
-fonts.packages = with pkgs; [
- nerd-fonts.jetbrains-mono
- noto-fonts-color-emoji
-];
-```
-
-## Language dictionaries are different
-
-Spell-check dictionaries, transliteration data, and other language data belong in
-`modules/features/language-tools/default.nix` under `environment.systemPackages`, not
-in `fonts.packages` or a general-purpose module:
-
-```nix
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- hunspellDicts.ru_RU
- ];
-}
-```
-
-## Gaming services live in the gaming module
-
-Gaming-related services and packages — Steam configuration, game launchers, Wine-based
-app runners — belong in `modules/features/gaming/default.nix`. This keeps the host file
-lean and makes the gaming stack reusable across hosts:
-
-```nix
-{ pkgs, ... }:
-
-{
- programs.steam = {
- enable = true;
- remotePlay.openFirewall = true;
- };
-
- environment.systemPackages = with pkgs; [
- pkgs.lutris
- pkgs.prismlauncher
- ];
-}
-```
-
-## Create a new feature module
-
-1. Create `modules/features/<category>/default.nix`:
-
- ```nix
- { pkgs, ... }:
-
- {
- environment.systemPackages = with pkgs; [
- package-name
- ];
- }
- ```
-
-2. Add its directory to the `imports` list in `hosts/opus/default.nix`:
-
- ```nix
- ../../modules/features/<category>
- ```
-
-3. Put services and program options in the same module when they belong to that
- feature, as done by `modules/features/mpd/default.nix`.
-
-## Host-only packages
-
-For a package that is truly specific to this desktop, add it to the small
-`environment.systemPackages` list in `hosts/opus/default.nix`. If that list starts to
-represent a reusable category, extract a feature module.
-
-## Packages from flake inputs
-
-Packages provided by a flake input use `inputs` and the host platform, following
-`modules/features/browsers/default.nix`:
-
-```nix
-{ pkgs, inputs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- inputs.helium-browser.packages.${pkgs.stdenv.hostPlatform.system}.helium
- ];
-}
-```
-
-If an input provides a NixOS module, import it in the feature module, following
-`modules/features/noctalia-greeter/default.nix`:
-
-```nix
-imports = [
- inputs.some-input.nixosModules.default
-];
-```
-
-The input itself must first be declared in `flake.nix`.
-
-## Build and switch
-
-From the `nixos/` directory, first test that the configuration evaluates and builds:
-
-```bash
-doas nixos-rebuild build --flake .#opus
-```
-
-Then activate it:
-
-```bash
-doas nixos-rebuild switch --flake .#opus
-```
-
-If a terminal's font icons do not update after adding fonts, restart the terminal or
-log out and back in after the switch.
diff --git a/nixos/flake.lock b/nixos/flake.lock
deleted file mode 100644
index 6c5bb5d..0000000
--- a/nixos/flake.lock
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "nodes": {
- "helium-browser": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ],
- "nixpkgs-darwin": "nixpkgs-darwin",
- "utils": "utils"
- },
- "locked": {
- "lastModified": 1786241105,
- "narHash": "sha256-q/iBiqM4g029hhjsQcNyObWBsPrwAxtQo21bkXjeu0E=",
- "owner": "schembriaiden",
- "repo": "helium-browser-nix-flake",
- "rev": "88eb5c7ee75ef26ebaec8987274102063f34745b",
- "type": "github"
- },
- "original": {
- "owner": "schembriaiden",
- "repo": "helium-browser-nix-flake",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1786247143,
- "narHash": "sha256-8S3Kcxs7D4UtxJxSJZz0m14CGhuW0MxfrIwJxeGWGnQ=",
- "owner": "nixos",
- "repo": "nixpkgs",
- "rev": "279b4a8275f032c566576b3f181fa0f27197f588",
- "type": "github"
- },
- "original": {
- "owner": "nixos",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs-darwin": {
- "locked": {
- "lastModified": 1785067121,
- "narHash": "sha256-rdJdWxAcg5fnntU4DjPivPdVEN4F+VJavw+UWpEMeUI=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "329c3d2af6d1b618705150ea39f72c15eb4e613e",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-26.05-darwin",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_2": {
- "locked": {
- "lastModified": 1786106723,
- "narHash": "sha256-CgKDSHL6rqAAQkkvg1xaZDQXb77+4XW73iGcUMJ+2w0=",
- "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238",
- "type": "tarball",
- "url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1049422.f13ff45afd1b/nixexprs.tar.zst"
- },
- "original": {
- "type": "tarball",
- "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.zst"
- }
- },
- "noctalia": {
- "inputs": {
- "nixpkgs": "nixpkgs_2"
- },
- "locked": {
- "lastModified": 1786438148,
- "narHash": "sha256-ZrNuYbzLEQB1jV5TnVQOryO9DPheLfpmqyMFxiqGVMs=",
- "owner": "noctalia-dev",
- "repo": "noctalia",
- "rev": "8a92b7c24dc9d46e9be73fc7f2702f733b646033",
- "type": "github"
- },
- "original": {
- "owner": "noctalia-dev",
- "repo": "noctalia",
- "type": "github"
- }
- },
- "noctalia-greeter": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1786236850,
- "narHash": "sha256-K1AkQg+pZyI/vuIrz7s8sGxqTsCrVJwOOK/ttOwh+q0=",
- "owner": "noctalia-dev",
- "repo": "noctalia-greeter",
- "rev": "763411f5ebd864adba27db9354a1d5724c15704c",
- "type": "github"
- },
- "original": {
- "owner": "noctalia-dev",
- "repo": "noctalia-greeter",
- "type": "github"
- }
- },
- "root": {
- "inputs": {
- "helium-browser": "helium-browser",
- "nixpkgs": "nixpkgs",
- "noctalia": "noctalia",
- "noctalia-greeter": "noctalia-greeter"
- }
- },
- "systems": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- },
- "utils": {
- "inputs": {
- "systems": "systems"
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/nixos/flake.nix b/nixos/flake.nix
deleted file mode 100644
index ef43174..0000000
--- a/nixos/flake.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- description = "Noctalia shell conf (dendritic layout)";
-
- inputs = {
- # Main tree
- nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
-
- # Noctalia v5
- noctalia.url = "github:noctalia-dev/noctalia";
- noctalia-greeter = {
- url = "github:noctalia-dev/noctalia-greeter";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- helium-browser = {
- url = "github:schembriaiden/helium-browser-nix-flake";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- };
-
- outputs = { self, nixpkgs, noctalia, ... }@inputs: {
- nixosConfigurations.opus = nixpkgs.lib.nixosSystem {
- system = "x86_64-linux";
- specialArgs = { inherit inputs; };
- modules = [
- ./hosts/opus
- ];
- };
- };
-} \ No newline at end of file
diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix
deleted file mode 100644
index 5163270..0000000
--- a/nixos/hardware-configuration.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-# Do not modify this file! It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations. Please make changes
-# to /etc/nixos/configuration.nix instead.
-{ config, lib, pkgs, modulesPath, ... }:
-
-{
- imports =
- [ (modulesPath + "/installer/scan/not-detected.nix")
- ];
-
- boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ "kvm-amd" ];
- boot.extraModulePackages = [ ];
-
- fileSystems."/" =
- { device = "/dev/disk/by-uuid/363e0f04-0494-4bf5-96e7-33326d8b8a5c";
- fsType = "ext4";
- };
-
- fileSystems."/boot" =
- { device = "/dev/disk/by-uuid/DD1F-3DEF";
- fsType = "vfat";
- options = [ "fmask=0077" "dmask=0077" ];
- };
-
- swapDevices =
- [ { device = "/dev/disk/by-uuid/75ef05e5-75fb-4c5c-9a4d-e5e50f4b6438"; }
- ];
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
- hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
-}
diff --git a/nixos/hosts/opus/default.nix b/nixos/hosts/opus/default.nix
deleted file mode 100644
index 1c6a42b..0000000
--- a/nixos/hosts/opus/default.nix
+++ /dev/null
@@ -1,87 +0,0 @@
-{ config, pkgs, inputs, ... }:
-
-{
- imports = [
- # hardware-configuration.nix stays at the repo root for nixos-generate-config compat
- ../../hardware-configuration.nix
-
- # OS-level modules — no binary wrapped, just system concerns
- ../../modules/system/nix
- ../../modules/system/boot
- ../../modules/system/hardware
- ../../modules/system/locale
- ../../modules/system/users
- ../../modules/system/audio
- ../../modules/system/printing
- ../../modules/system/network
- ../../modules/system/services
-
- # Standalone features (apps with their own binaries)
- ../../modules/features/niri
- ../../modules/features/noctalia-greeter
- ../../modules/features/noctalia-shell
- ../../modules/features/nvidia
- ../../modules/features/appimage
- ../../modules/features/mpd
-# ../../modules/features/swingmusic
- ../../modules/features/monitoring
- ../../modules/features/terminals
- ../../modules/features/cli-tools
- ../../modules/features/binary-compat
- ../../modules/features/editors
- ../../modules/features/file-managers
- ../../modules/features/wayland-tools
- ../../modules/features/audio-tools
- ../../modules/features/gst-codecs
- ../../modules/features/fonts
- ../../modules/features/desktop-apps
- ../../modules/features/browsers
- ../../modules/features/messaging
- ../../modules/features/productivity
- ../../modules/features/security
- ../../modules/features/media-tools
- ../../modules/features/p2p
- ../../modules/features/language-tools
- ../../modules/features/gaming
- ../../modules/features/dev-tools
- ../../modules/features/vpn-utils
- ../../modules/features/wireshark
- ../../modules/features/mouse
- ];
-
- # ────────────────────────────────────────────────────────────────────────
- # 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 = [
- pkgs.xdg-desktop-portal-gnome
- pkgs.xdg-desktop-portal-gtk
- ];
- };
- boot.extraModulePackages = [ config.boot.kernelPackages.amneziawg ];
- boot.kernelModules = [ "amneziawg" ];
- # Qt/HiDPI and GPU renderer hints shared across the desktop.
- environment.sessionVariables = {
- XCURSOR_THEME = "Bibata-Modern-Ice";
- XCURSOR_SIZE = "20";
- CC = "clang";
- ELECTRON_OZONE_PLATFORM_HINT = "auto";
- GSK_RENDERER = "ngl";
- QT_QPA_PLATFORM = "wayland;xcb";
- QT_ENABLE_HIGHDPI_SCALING = "1";
- QT_AUTO_SCREEN_SCALE_FACTOR = "1";
- QT_SCREEN_SCALE_FACTORS = "1.5";
- };
-
- system.stateVersion = "26.05";
-}
diff --git a/nixos/mi_edid.bin b/nixos/mi_edid.bin
deleted file mode 100644
index 98a9522..0000000
--- a/nixos/mi_edid.bin
+++ /dev/null
Binary files differ
diff --git a/nixos/modules/features/appimage/default.nix b/nixos/modules/features/appimage/default.nix
deleted file mode 100644
index e16189b..0000000
--- a/nixos/modules/features/appimage/default.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{ 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;
- package = pkgs.appimage-run.override {
- extraPkgs = pkgs: [
- pkgs.webkitgtk_4_1
- ];
- };
- };
-} \ No newline at end of file
diff --git a/nixos/modules/features/audio-tools/default.nix b/nixos/modules/features/audio-tools/default.nix
deleted file mode 100644
index fa550d8..0000000
--- a/nixos/modules/features/audio-tools/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ pkgs, ... }:
-
-{
- # User-facing audio/media clients (the MPD *server* lives in the `mpd` module)
- environment.systemPackages = with pkgs; [
- mpc
- mpd
- mpd-mpris
- mpv
- rmpc
- pavucontrol
- ];
-} \ No newline at end of file
diff --git a/nixos/modules/features/binary-compat/default.nix b/nixos/modules/features/binary-compat/default.nix
deleted file mode 100644
index 56212e1..0000000
--- a/nixos/modules/features/binary-compat/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ pkgs, ... }:
-
-{
- # 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
- nss
- cups
- libdrm
- glib
- pango
- gtk3
- zlib
- expat
- alsa-lib
- libxkbcommon
- atk
- pkg-config
- cmake
- ];
-}
diff --git a/nixos/modules/features/browsers/default.nix b/nixos/modules/features/browsers/default.nix
deleted file mode 100644
index 620734c..0000000
--- a/nixos/modules/features/browsers/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ pkgs, inputs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- inputs.helium-browser.packages.${pkgs.stdenv.hostPlatform.system}.helium
- chromium
- tor-browser
- mullvad-browser
- ];
-}
diff --git a/nixos/modules/features/cli-tools/default.nix b/nixos/modules/features/cli-tools/default.nix
deleted file mode 100644
index 55237c4..0000000
--- a/nixos/modules/features/cli-tools/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- tree
- pkgs.libsixel
- fd
- fzf
- eza
- stow
- util-linux
- nftables
- pkgs.rsync
- cryptsetup
- yt-dlp
- caligula
- fetch
- smartmontools
- secretspec
- claude-code
- opencode
- ];
-
- # Cross-shell prompt; its config lives in the dotfiles repo, not NixOS.
- programs.starship.enable = true;
-}
diff --git a/nixos/modules/features/desktop-apps/default.nix b/nixos/modules/features/desktop-apps/default.nix
deleted file mode 100644
index b74384f..0000000
--- a/nixos/modules/features/desktop-apps/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{ pkgs, inputs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- ];
-}
diff --git a/nixos/modules/features/dev-tools/default.nix b/nixos/modules/features/dev-tools/default.nix
deleted file mode 100644
index 7613495..0000000
--- a/nixos/modules/features/dev-tools/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ pkgs, ... }:
-
-{
- # Compilers, language tooling, and IDEs for development
- environment.systemPackages = with pkgs; [
- black
- cargo
- clang
- clippy
- gcc
- git
- gnumake
- nodejs
- pyright
- (python3.withPackages (ps: with ps; [ pip ]))
- rust-analyzer
- rustc
- lua5_4
- tree-sitter
- jetbrains.rust-rover
- jetbrains.pycharm
- ];
- environment.sessionVariables = {
- RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
- };
-}
diff --git a/nixos/modules/features/editors/default.nix b/nixos/modules/features/editors/default.nix
deleted file mode 100644
index 5cec5da..0000000
--- a/nixos/modules/features/editors/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ 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
- ];
-}
diff --git a/nixos/modules/features/file-managers/default.nix b/nixos/modules/features/file-managers/default.nix
deleted file mode 100644
index f3ad4b3..0000000
--- a/nixos/modules/features/file-managers/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- file-roller
- kdePackages.ark
- kdePackages.qt6ct
- loupe
- 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
deleted file mode 100644
index c49876c..0000000
--- a/nixos/modules/features/fonts/default.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ 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; [
- font-awesome
- nerd-fonts.jetbrains-mono
- nerd-fonts.symbols-only
- jetbrains-mono
- noto-fonts-color-emoji
- adwaita-fonts
- cozette
- roboto
- nerd-fonts.open-dyslexic
- open-dyslexic
- ];
-}
diff --git a/nixos/modules/features/gaming/default.nix b/nixos/modules/features/gaming/default.nix
deleted file mode 100644
index fe3938a..0000000
--- a/nixos/modules/features/gaming/default.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{ pkgs, ... }:
-
-{
- programs.steam = {
- enable = true;
- remotePlay.openFirewall = true;
- dedicatedServer.openFirewall = true;
- };
-
- environment.systemPackages = with pkgs; [
- pkgs.lutris
- pkgs.prismlauncher
- pkgs.bottles
- ];
-}
diff --git a/nixos/modules/features/gst-codecs/default.nix b/nixos/modules/features/gst-codecs/default.nix
deleted file mode 100644
index c3decb8..0000000
--- a/nixos/modules/features/gst-codecs/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ 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
- gst_all_1.gst-plugins-good
- gst_all_1.gst-plugins-ugly
- ];
-}
diff --git a/nixos/modules/features/language-tools/default.nix b/nixos/modules/features/language-tools/default.nix
deleted file mode 100644
index 338d26b..0000000
--- a/nixos/modules/features/language-tools/default.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- hunspellDicts.ru_RU
- ];
-}
diff --git a/nixos/modules/features/media-tools/default.nix b/nixos/modules/features/media-tools/default.nix
deleted file mode 100644
index 00a16da..0000000
--- a/nixos/modules/features/media-tools/default.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- obs-studio
- ];
-}
diff --git a/nixos/modules/features/messaging/default.nix b/nixos/modules/features/messaging/default.nix
deleted file mode 100644
index 55354c2..0000000
--- a/nixos/modules/features/messaging/default.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- pkgs.ayugram-desktop
- pkgs.legcord
- pkgs.vesktop
- ];
-}
diff --git a/nixos/modules/features/monitoring/default.nix b/nixos/modules/features/monitoring/default.nix
deleted file mode 100644
index 942e95e..0000000
--- a/nixos/modules/features/monitoring/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- # System monitors / fetch tools
- (btop.override { cudaSupport = true; })
- duf
- fastfetch
- ghfetch
- hyfetch
- ];
-} \ No newline at end of file
diff --git a/nixos/modules/features/mouse/default.nix b/nixos/modules/features/mouse/default.nix
deleted file mode 100644
index c984fbb..0000000
--- a/nixos/modules/features/mouse/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ config, pkgs, ... }:
-
-{
- # Input remapping service (mouse buttons/keys) + its configuration GUI.
- services.input-remapper.enable = true;
- environment.systemPackages = with pkgs; [
- piper
- input-remapper
- ];
-}
diff --git a/nixos/modules/features/mpd/default.nix b/nixos/modules/features/mpd/default.nix
deleted file mode 100644
index a339622..0000000
--- a/nixos/modules/features/mpd/default.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-{ pkgs, ... }:
-
-{
- # 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";
- openFirewall = false;
- settings = {
- music_directory = "/mnt/giga/music";
- bind_to_address = "any";
- port = 6600;
- auto_update = "yes";
- audio_output = [
- {
- type = "pulse";
- name = "PipeWire Output";
- mixer_type = "hardware";
- }
- ];
- };
- };
-
- # 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 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" ];
- after = [ "graphical-session.target" ];
- serviceConfig = {
- ExecStart = "${pkgs.mpd-mpris}/bin/mpd-mpris -network tcp -host 127.0.0.1 -port 6600";
- Restart = "on-failure";
- };
- };
-} \ No newline at end of file
diff --git a/nixos/modules/features/niri/default.nix b/nixos/modules/features/niri/default.nix
deleted file mode 100644
index 8c1a651..0000000
--- a/nixos/modules/features/niri/default.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ 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
- ];
-}
diff --git a/nixos/modules/features/noctalia-greeter/default.nix b/nixos/modules/features/noctalia-greeter/default.nix
deleted file mode 100644
index c65f806..0000000
--- a/nixos/modules/features/noctalia-greeter/default.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ pkgs, inputs, ... }:
-
-{
- # Noctalia greeter (display manager login screen).
- # The module comes from the flake input rather than nixpkgs.
- imports = [
- inputs.noctalia-greeter.nixosModules.default
- ];
-
- programs.noctalia-greeter = {
- enable = true;
- settings = {
- cursor = {
- theme = "Bibata-Modern-Ice";
- size = 24;
- path = "${pkgs.bibata-cursors}/share/icons";
- };
- };
- };
-} \ No newline at end of file
diff --git a/nixos/modules/features/noctalia-shell/default.nix b/nixos/modules/features/noctalia-shell/default.nix
deleted file mode 100644
index c9bc20c..0000000
--- a/nixos/modules/features/noctalia-shell/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ 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; [
- inputs.noctalia.packages.${stdenv.hostPlatform.system}.default
- noctalia-shell
- ];
-}
diff --git a/nixos/modules/features/nvidia/default.nix b/nixos/modules/features/nvidia/default.nix
deleted file mode 100644
index f5f4d8f..0000000
--- a/nixos/modules/features/nvidia/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ 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;
- open = false;
- nvidiaSettings = true;
- package = config.boot.kernelPackages.nvidiaPackages.latest;
- };
-
- environment.systemPackages = with pkgs; [
- # VA-API translation layer so NVIDIA can accelerate video decode.
- nvidia-vaapi-driver
- ];
-
- environment.sessionVariables = {
- LIBVA_DRIVER_NAME = "nvidia";
- __GLX_VENDOR_LIBRARY_NAME = "nvidia";
- NIXOS_OZONE_WL = "1";
- };
-} \ No newline at end of file
diff --git a/nixos/modules/features/p2p/default.nix b/nixos/modules/features/p2p/default.nix
deleted file mode 100644
index af05afe..0000000
--- a/nixos/modules/features/p2p/default.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- pkgs.qbittorrent
- ];
-}
diff --git a/nixos/modules/features/productivity/default.nix b/nixos/modules/features/productivity/default.nix
deleted file mode 100644
index 2b14ff6..0000000
--- a/nixos/modules/features/productivity/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- libreoffice
- obsidian
- anytype
- evince
- pkgs.masterpdfeditor
- ];
-}
diff --git a/nixos/modules/features/security/default.nix b/nixos/modules/features/security/default.nix
deleted file mode 100644
index 935ef22..0000000
--- a/nixos/modules/features/security/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{ pkgs, ... }:
-
-{
- environment.systemPackages = with pkgs; [
- keepassxc
- cryptomator
- ];
-}
diff --git a/nixos/modules/features/swingmusic/default.nix b/nixos/modules/features/swingmusic/default.nix
deleted file mode 100644
index 389e3c8..0000000
--- a/nixos/modules/features/swingmusic/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-#{ ... }:
-
-{
- # 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" ];
-# after = [ "graphical-session.target" ];
-# serviceConfig = {
-# ExecStart = "/home/seraphim/.swingmusic/swingmusic";
-# Restart = "on-failure";
-# WorkingDirectory = "/home/seraphim";
-# NoNewPrivileges = true;
-# PrivateTmp = true;
-# ProtectSystem = "strict";
-# ProtectHome = "false";
-# RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
-# };
-# };
-#}
diff --git a/nixos/modules/features/terminals/default.nix b/nixos/modules/features/terminals/default.nix
deleted file mode 100644
index ec7ead3..0000000
--- a/nixos/modules/features/terminals/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ pkgs, ... }:
-
-{
- programs.foot.settings.main.shell = "tmux";
- environment.systemPackages = with pkgs; [
- foot
- ghostty
- tmux
- ];
-}
diff --git a/nixos/modules/features/vpn-utils/default.nix b/nixos/modules/features/vpn-utils/default.nix
deleted file mode 100644
index ed5bb8d..0000000
--- a/nixos/modules/features/vpn-utils/default.nix
+++ /dev/null
@@ -1,33 +0,0 @@
-{ pkgs, ... }:
-
-{
- programs.throne = {
- enable = true;
- tunMode.enable = true;
- };
-
- programs.amnezia-vpn.enable = true;
-
- environment.systemPackages = with pkgs; [
- wireguard-tools
- amneziawg-tools
- amneziawg-go
- ];
-
- # Throne's sing-box core resolves its underlying DNS by running
- # `resolvectl -i <default-iface> dns` and fails to parse the empty
- # per-link output (enp42s0 has no per-link DNS; ours is global Mullvad
- # in services.resolved). Push the same Mullvad servers per-link so the
- # resolvectl parse succeeds and proxy hostnames can be looked up.
- networking.networkmanager.dispatcherScripts = [
- {
- type = "basic";
- source = pkgs.writeText "link-dns.sh" ''
- #!/bin/sh
- if [ "$1" = "enp42s0" ] && { [ "$2" = "up" ] || [ "$2" = "dhcp4-change" ]; }; then
- ${pkgs.systemd}/bin/resolvectl dns enp42s0 194.242.2.2 194.242.2.4 || true
- fi
- '';
- }
- ];
-}
diff --git a/nixos/modules/features/wayland-tools/default.nix b/nixos/modules/features/wayland-tools/default.nix
deleted file mode 100644
index 399fcb0..0000000
--- a/nixos/modules/features/wayland-tools/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ pkgs, ... }:
-
-{
- # Wayland clipboard, screenshot, launcher and input tooling
- environment.systemPackages = with pkgs; [
- cliphist
- fuzzel
- grim
- slurp
- wl-clipboard
- wtype
- xwayland-satellite
- ];
-}
diff --git a/nixos/modules/features/wireshark/default.nix b/nixos/modules/features/wireshark/default.nix
deleted file mode 100644
index afebd39..0000000
--- a/nixos/modules/features/wireshark/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ 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;
- };
-
- 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
deleted file mode 100644
index 66ab087..0000000
--- a/nixos/modules/system/audio/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ 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;
- alsa.support32Bit = true;
- pulse.enable = true;
- };
-
- environment.systemPackages = with pkgs; [
- brightnessctl
- pamixer
- playerctl
- ];
-} \ No newline at end of file
diff --git a/nixos/modules/system/boot/default.nix b/nixos/modules/system/boot/default.nix
deleted file mode 100644
index 54cb1e6..0000000
--- a/nixos/modules/system/boot/default.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ pkgs, ... }:
-
-{
- # systemd-boot on UEFI
- boot.loader.systemd-boot.enable = true;
- boot.loader.efi.canTouchEfiVariables = true;
-
- # 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
- cp ${../../../mi_edid.bin} $out/lib/firmware/edid/mi_edid.bin
- '')
- ];
-} \ No newline at end of file
diff --git a/nixos/modules/system/hardware/default.nix b/nixos/modules/system/hardware/default.nix
deleted file mode 100644
index d81b60e..0000000
--- a/nixos/modules/system/hardware/default.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ 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" ];
-}
diff --git a/nixos/modules/system/locale/default.nix b/nixos/modules/system/locale/default.nix
deleted file mode 100644
index f95ba12..0000000
--- a/nixos/modules/system/locale/default.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{ ... }:
-
-{
- # 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";
- LC_IDENTIFICATION = "de_CH.UTF-8";
- LC_MEASUREMENT = "de_CH.UTF-8";
- LC_MONETARY = "de_CH.UTF-8";
- LC_NAME = "de_CH.UTF-8";
- LC_NUMERIC = "de_CH.UTF-8";
- LC_PAPER = "de_CH.UTF-8";
- LC_TELEPHONE = "de_CH.UTF-8";
- LC_TIME = "en_US.UTF-8";
- };
-} \ No newline at end of file
diff --git a/nixos/modules/system/network/default.nix b/nixos/modules/system/network/default.nix
deleted file mode 100644
index 588314e..0000000
--- a/nixos/modules/system/network/default.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ ... }:
-
-{
- networking.hostName = "opus";
- networking.networkmanager.enable = true;
-
- # 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.
- # Options live under `settings.Resolve` (the flat `services.resolved.*`
- # aliases were removed upstream — they now emit deprecation warnings).
- services.resolved = {
- enable = true;
- 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)
- services.avahi = {
- enable = true;
- nssmdns4 = true;
- openFirewall = true;
- };
-}
diff --git a/nixos/modules/system/nix/default.nix b/nixos/modules/system/nix/default.nix
deleted file mode 100644
index a02cb6f..0000000
--- a/nixos/modules/system/nix/default.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ 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;
- permittedInsecurePackages = [
- "electron-39.8.10"
- ];
- };
-
- # Automatic garbage collection — drop builds older than a week.
- nix.gc = {
- automatic = true;
- dates = "weekly";
- options = "--delete-older-than 7d";
- };
-
- # 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;
-
- environment.variables = {
- SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt";
- NIX_SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt";
- };
-} \ No newline at end of file
diff --git a/nixos/modules/system/printing/default.nix b/nixos/modules/system/printing/default.nix
deleted file mode 100644
index 91828b2..0000000
--- a/nixos/modules/system/printing/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ 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; [
- brlaser
- gutenprint
- cups-filters
- ];
- };
-} \ No newline at end of file
diff --git a/nixos/modules/system/services/default.nix b/nixos/modules/system/services/default.nix
deleted file mode 100644
index 571ae3a..0000000
--- a/nixos/modules/system/services/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ ... }:
-
-{
- # 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
- '';
-
- # Cap core dumps so a crashing app can't fill the root partition with
- # multi-GB crash dumps (e.g. java/electron segfaults).
- systemd.coredump.settings.Coredump = {
- ProcessSizeMax = "512M";
- Storage = "external";
- };
-}
diff --git a/nixos/modules/system/users/default.nix b/nixos/modules/system/users/default.nix
deleted file mode 100644
index d9ac254..0000000
--- a/nixos/modules/system/users/default.nix
+++ /dev/null
@@ -1,69 +0,0 @@
-{ 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" ];
- keepEnv = true;
- persist = true;
- }
- ];
- };
-
- # fzf -- proper key bindings + completion for zsh.
- programs.fzf = {
- fuzzyCompletion = true;
- keybindings = true;
- };
-
- # ZSH + completion, oh-my-zsh, autosuggestions.
- programs.zsh = {
- enable = true;
- enableCompletion = true;
- ohMyZsh.enable = true;
- autosuggestions = {
- enable = true;
- highlightStyle = "fg=#6c7086";
- strategy = [ "history" "completion" ];
- };
- interactiveShellInit = ''
- # Fish-style full-screen Ctrl+R history search.
- export FZF_CTRL_R_OPTS="
- --layout=reverse
- --scheme=history
- --height=100%
- --border=sharp
- --border-label=' Ctrl+R '
- --highlight-line
- --pointer=→
- --info=inline-right
- --header-first
- --header='enter: accept · ctrl-/ : toggle preview'
- --preview='echo {}' --preview-window=down:3:hidden:wrap
- --bind=ctrl-/:toggle-preview
- "
- '';
- shellAliases = {
- ls = "eza -al --icons=auto";
- ll = "eza -al --icons=auto";
- fs = "fastfetch";
- hf = "hyfetch";
- sudo = "doas";
- open = "xdg-open";
- };
- };
-}
diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json
index e93480e..4bb05d4 100644
--- a/nvim/.config/nvim/lazy-lock.json
+++ b/nvim/.config/nvim/lazy-lock.json
@@ -1,15 +1,14 @@
{
"LazyVim": { "branch": "main", "commit": "459a4c3b1059671e766a46c7cc223827dc67e3d0" },
- "base16-nvim": { "branch": "master", "commit": "cf82c4be16334c7cdf9883296eacfba50ff93b26" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
- "catppuccin": { "branch": "main", "commit": "79e2049a0fdf7ec840f8463fe1d962c94493196b" },
- "conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" },
+ "catppuccin": { "branch": "main", "commit": "edefef779ab08ce1a4a404713e3012b0d202bd35" },
+ "conform.nvim": { "branch": "master", "commit": "016802de402556da54c36bd7359b441266b01cdd" },
"flash.nvim": { "branch": "main", "commit": "b6346946d10d07998efee029fb0f7a593806d0cd" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
- "gitsigns.nvim": { "branch": "main", "commit": "31d6fb2d618bca1482b9f274751ead5f03461408" },
- "grug-far.nvim": { "branch": "main", "commit": "6e05398cf6cad05b3fb46569db96b1ccfcbbd402" },
- "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
+ "gitsigns.nvim": { "branch": "main", "commit": "5be654f2232c10ddcad19c1607a67b6b4b78fc29" },
+ "grug-far.nvim": { "branch": "main", "commit": "11595bf747edc270bce2069d1020502ad4ae56cf" },
+ "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "67029ccdac1ef8941e13b826417bc0ffac24cc86" },
@@ -18,10 +17,10 @@
"mini.icons": { "branch": "main", "commit": "98faae31e9be1cc054ae63485e58ceb185efcad0" },
"mini.pairs": { "branch": "main", "commit": "b1c5a726921b7a8c9321e9a7a208aa0571de5810" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
- "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
- "nvim-lint": { "branch": "master", "commit": "a219b2c9e5b4765e5c845aba119dad55806fcaf1" },
- "nvim-lspconfig": { "branch": "master", "commit": "43ed3797b266e1ee8d222e491379ad471c9d3146" },
- "nvim-treesitter": { "branch": "main", "commit": "3d3321b560a63ff92a8692401f303a5123336b86" },
+ "nui.nvim": { "branch": "main", "commit": "5959922693a785a0e1624b45c968c844822f1ca1" },
+ "nvim-lint": { "branch": "master", "commit": "9b99aad869102ac01775187abd8d49017b148612" },
+ "nvim-lspconfig": { "branch": "master", "commit": "51dbf5359da86721662c87ca10eb73add973737b" },
+ "nvim-treesitter": { "branch": "main", "commit": "7caec274fd19c12b55902a5b795100d21531391f" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "898ee307df58f854d11cd7edd06472574d48014e" },
"nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" },
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
diff --git a/start-niri.sh b/start-niri.sh
deleted file mode 100644
index b9df63a..0000000
--- a/start-niri.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-# Устанавливаем переменные для корректной работы Qt/Noctalia
-export XDG_CURRENT_DESKTOP=niri
-export XDG_SESSION_TYPE=wayland
-export QT_QPA_PLATFORM=wayland
-
-# Запускаем dbus-сессию, если она еще не создана greetd, и внутри нее niri
-exec dbus-run-session niri
-
diff --git a/waybar/config.jsonc b/waybar/config.jsonc
new file mode 100644
index 0000000..4c55e55
--- /dev/null
+++ b/waybar/config.jsonc
@@ -0,0 +1,73 @@
+{
+ "layer": "top",
+ "position": "top",
+ "height": 30,
+ "spacing": 4,
+ "modules-left": [
+ "niri/workspaces"
+ ],
+ "modules-center": [
+ "clock",
+ "custom/media",
+ "custom/layout"
+ ],
+ "modules-right": [
+ "pulseaudio",
+ "memory",
+ "custom/power",
+ "tray"
+ ],
+
+ "niri/workspaces": {
+ "format": "{idx}/10",
+ "disable-scroll": true
+ },
+
+ "clock": {
+ "format": "[{:%H:%M}]"
+ },
+
+ "custom/media": {
+ "format": "▶ {}",
+ "max-length": 40,
+ "interval": 2,
+ "exec": "playerctl metadata --format '{{ artist }} - {{ title }}' 2>/dev/null",
+ "on-click": "playerctl play-pause"
+ },
+
+ "custom/layout": {
+ "format": "[{}]",
+ "interval": 0,
+ "exec": "niri msg -j keyboard-layouts | jq -r 'if .current_idx == 0 then \"En\" elif .current_idx == 1 then \"Ru\" else .names[.current_idx] end'; niri msg event-stream | while read -r line; do if echo \"$line\" | grep -q 'Keyboard layouts changed'; then niri msg -j keyboard-layouts | jq -r 'if .current_idx == 0 then \"En\" elif .current_idx == 1 then \"Ru\" else .names[.current_idx] end'; fi; done"
+ },
+
+ "tray": {
+ "spacing": 10
+ },
+
+ "pulseaudio": {
+ "format": "VOL {icon} {volume}%",
+ "format-muted": "VOL [x_x ] 00%",
+ "format-icons": [
+ "[> ]",
+ "[=> ]",
+ "[==> ]",
+ "[===> ]",
+ "[====> ]",
+ "[=====> ]",
+ "[======> ]",
+ "[=======>]"
+ ],
+ "on-click": "pavucontrol"
+ },
+
+ "memory": {
+ "interval": 5,
+ "format": "RAM [{percentage:02}%]"
+ },
+
+ "custom/power": {
+ "format": "[ SYS ]",
+ "on-click": "wlogout -b 2"
+ }
+}
diff --git a/waybar/style.css b/waybar/style.css
new file mode 100644
index 0000000..4d7326f
--- /dev/null
+++ b/waybar/style.css
@@ -0,0 +1,49 @@
+/* Импортируем цвета, сгенерированные pywal */
+@import "../../.cache/wal/colors-waybar.css";
+
+/* Modern Aesthetic Waybar Theme */
+* {
+ font-family: "JetBrainsMono Nerd Font", "Fira Code", monospace;
+ font-size: 14px;
+ border: none;
+ border-radius: 0;
+}
+
+window#waybar {
+ /* @background и @foreground берутся из обоев */
+ background-color: @background;
+ color: @foreground;
+}
+
+#workspaces button {
+ padding: 0 8px;
+ background: transparent;
+ color: @color7;
+}
+
+#workspaces button.active {
+ color: @color2; /* Цвет активного окна из обоев */
+ font-weight: bold;
+}
+
+#custom-media,
+#custom-workspace,
+#clock,
+#custom-layout,
+#tray,
+#pulseaudio,
+#memory,
+#custom-power {
+ padding: 0 12px;
+ color: @foreground;
+}
+
+/* Акценты для отдельных модулей */
+#custom-layout {
+ color: @color3;
+}
+
+#custom-power {
+ color: @color1; /* Обычно это красный или яркий цвет из обоев */
+ font-weight: bold;
+}