summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nixos/configuration.nix83
-rw-r--r--nixos/flake.lock72
-rw-r--r--nixos/flake.nix13
-rw-r--r--nixos/hardware-configuration.nix33
-rw-r--r--nixos/hosts/opus/default.nix93
-rw-r--r--nixos/modules/features/appimage/default.nix13
-rw-r--r--nixos/modules/features/audio-tools/default.nix12
-rw-r--r--nixos/modules/features/binary-compat/default.nix23
-rw-r--r--nixos/modules/features/cli-tools/default.nix18
-rw-r--r--nixos/modules/features/desktop-apps/default.nix18
-rw-r--r--nixos/modules/features/dev-tools/default.nix20
-rw-r--r--nixos/modules/features/editors/default.nix10
-rw-r--r--nixos/modules/features/file-managers/default.nix13
-rw-r--r--nixos/modules/features/fonts/default.nix13
-rw-r--r--nixos/modules/features/gst-codecs/default.nix10
-rw-r--r--nixos/modules/features/monitoring/default.nix11
-rw-r--r--nixos/modules/features/mpd/default.nix39
-rw-r--r--nixos/modules/features/niri/default.nix13
-rw-r--r--nixos/modules/features/noctalia-greeter/default.nix18
-rw-r--r--nixos/modules/features/noctalia-shell/default.nix10
-rw-r--r--nixos/modules/features/nvidia/default.nix21
-rw-r--r--nixos/modules/features/starship/default.nix5
-rw-r--r--nixos/modules/features/swingmusic/default.nix19
-rw-r--r--nixos/modules/features/terminals/default.nix8
-rw-r--r--nixos/modules/features/wayland-tools/default.nix13
-rw-r--r--nixos/modules/system/audio/default.nix17
-rw-r--r--nixos/modules/system/boot/default.nix31
-rw-r--r--nixos/modules/system/hardware/default.nix16
-rw-r--r--nixos/modules/system/locale/default.nix18
-rw-r--r--nixos/modules/system/network/default.nix32
-rw-r--r--nixos/modules/system/nix/default.nix21
-rw-r--r--nixos/modules/system/printing/default.nix12
-rw-r--r--nixos/modules/system/services/default.nix13
-rw-r--r--nixos/modules/system/users/default.nix34
34 files changed, 725 insertions, 70 deletions
diff --git a/nixos/configuration.nix b/nixos/configuration.nix
index 0992ccd..760c077 100644
--- a/nixos/configuration.nix
+++ b/nixos/configuration.nix
@@ -22,6 +22,7 @@
programs.nix-ld.enable = true;
services.envfs.enable = true;
security.polkit.enable = true;
+
# =========================================================================
# BOOT & KERNEL CONFIGURATION
# =========================================================================
@@ -63,43 +64,42 @@
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.latest;
};
- #Appimage settings
+
+ # Appimage settings
programs.appimage = {
- enable = true;
- binfmt = true;
- package = pkgs.appimage-run.override {
- extraPkgs = pkgs: [
- pkgs.webkitgtk_4_1
+ enable = true;
+ binfmt = true;
+ package = pkgs.appimage-run.override {
+ extraPkgs = pkgs: [
+ pkgs.webkitgtk_4_1
];
};
};
-
# =========================================================================
# NETWORKING, DNS & VPN
# =========================================================================
networking.hostName = "opus";
networking.networkmanager.enable = true;
+ programs.amnezia-vpn.enable = true;
+ # Primary DNS Server: Mullvad DoT (Base Mode)
+ networking.nameservers = [
+ "194.242.2.4#base.dns.mullvad.net"
+ "194.242.2.2#dns.mullvad.net"
+ ];
- # Systemd-Resolved (Encrypted DNS)
+ # systemd-resolved Configuration (Mullvad Base Primary -> Quad9 Fallback)
services.resolved = {
enable = true;
- settings = {
- Resolve = {
- DNSOverTLS = "true";
- DNSSEC = "true";
- Domains = [ "~." ];
- DNS = "76.76.2.2#p2.freedns.controld.com";
- FallbackDNS = "1.1.1.1";
- };
- };
+ dnsovertls = "opportunistic"; # Encrypts DNS via DoT, falls back if port 853 is blocked
+ dnssec = "false"; # Disables DNSSEC validation drops
+ domains = [ "~." ]; # Forces systemd-resolved to use global DNS, ignoring DHCP DNS
+ fallbackDns = [
+ "9.9.9.9#dns.quad9.net"
+ "149.112.112.112#dns.quad9.net"
+ ];
};
- # Mullvad VPN Daemon
- services.mullvad-vpn = {
- enable = true;
- package = pkgs.mullvad-vpn;
- };
# Avahi (Printer / Network Discovery)
services.avahi = {
@@ -150,11 +150,12 @@
# =========================================================================
# SHELLS & ENHANCEMENTS
# =========================================================================
-programs.fish = {
+ programs.fish = {
enable = true;
interactiveShellInit = ''
set -g fish_greeting "" # Disables the welcome message
- fzf --fish | source
+ fzf --fish |
+ source
'';
shellAliases = {
ls = "eza -al --icons=auto";
@@ -235,14 +236,13 @@ programs.fish = {
alsa.support32Bit = true;
pulse.enable = true;
};
-
- # Printing (CUPS)
+ # printer service
services.printing = {
enable = true;
drivers = with pkgs; [
brlaser
- gutenprint
cups-filters
+ gutenprint
];
};
@@ -326,7 +326,8 @@ programs.fish = {
# =========================================================================
# SYSTEM PACKAGES
# =========================================================================
- environment.systemPackages = with pkgs; [
+ environment.systemPackages = with pkgs;
+ [
# Flake Inputs & Hardware Overrides
inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default
(btop.override { cudaSupport = true; })
@@ -334,6 +335,23 @@ programs.fish = {
# Terminals & CLI Utilities
cacert
tree
+ pkgs.libsixel
+ libGL
+ nss
+ cups
+ libdrm
+ glib
+ pango
+ gtk3
+ zlib
+ expat
+ alsa-lib
+ libxkbcommon
+ atk
+ pkg-config
+ cmake
+
+ nftables
pkgs.rsync
duf
eza
@@ -362,7 +380,7 @@ programs.fish = {
# Text Editors
micro
neovim
- (emacs-pgtk.override {
+ (emacs.override {
withNativeCompilation = true;
})
@@ -407,13 +425,14 @@ programs.fish = {
hunspellDicts.ru_RU
nvidia-vaapi-driver
opencode
- telegram-desktop
- vesktop
+ pkgs.ayugram-desktop
+ pkgs.legcord
+ pkgs.amnezia-vpn
obsidian
pkgs.lutris
pkgs.qbittorrent
pkgs.prismlauncher
-
+ pkgs.wireshark
# Software Development & Toolchains
black
cargo
diff --git a/nixos/flake.lock b/nixos/flake.lock
index ff02820..102f69f 100644
--- a/nixos/flake.lock
+++ b/nixos/flake.lock
@@ -1,5 +1,27 @@
{
"nodes": {
+ "helium-browser": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "nixpkgs-darwin": "nixpkgs-darwin",
+ "utils": "utils"
+ },
+ "locked": {
+ "lastModified": 1785004096,
+ "narHash": "sha256-8stbyRwnEwPMmni/U6iHGGBbi3uebfq60qlKXPgYwWI=",
+ "owner": "schembriaiden",
+ "repo": "helium-browser-nix-flake",
+ "rev": "b356d11eff33ec730a51f9c88d258fdd72efe587",
+ "type": "github"
+ },
+ "original": {
+ "owner": "schembriaiden",
+ "repo": "helium-browser-nix-flake",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
"lastModified": 1784796856,
@@ -16,6 +38,22 @@
"type": "github"
}
},
+ "nixpkgs-darwin": {
+ "locked": {
+ "lastModified": 1784834831,
+ "narHash": "sha256-yj0LPLnsmYoLmA3FGANjeTEwej0/DHjZBXWnDQDUuIs=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "51fe96f9107566e6b8eeb7fc4ba696c01e548b04",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-26.05-darwin",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
"nixpkgs_2": {
"locked": {
"lastModified": 1784356753,
@@ -69,10 +107,44 @@
},
"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",
diff --git a/nixos/flake.nix b/nixos/flake.nix
index f5f5b35..ef43174 100644
--- a/nixos/flake.nix
+++ b/nixos/flake.nix
@@ -1,5 +1,5 @@
{
- description = "Noctalia shell conf";
+ description = "Noctalia shell conf (dendritic layout)";
inputs = {
# Main tree
@@ -11,16 +11,19 @@
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; };
+ specialArgs = { inherit inputs; };
modules = [
- ./configuration.nix
+ ./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
new file mode 100644
index 0000000..4143528
--- /dev/null
+++ b/nixos/hosts/opus/default.nix
@@ -0,0 +1,93 @@
+{ 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/starship
+ ../../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/dev-tools
+ ];
+
+ # ────────────────────────────────────────────────────────────────────────
+ # Desktop composition (was attrs/desktop)
+ # Inline because this host is the only one using the full desktop stack.
+ # ────────────────────────────────────────────────────────────────────────
+ qt = {
+ enable = true;
+ platformTheme = "qt5ct";
+ style = "breeze";
+ };
+
+ xdg.portal = {
+ enable = true;
+ extraPortals = [
+ pkgs.xdg-desktop-portal-gnome
+ pkgs.xdg-desktop-portal-gtk
+ ];
+ };
+
+ environment.sessionVariables = {
+ SHELL = "${pkgs.fish}/bin/fish";
+ 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";
+ };
+
+ # ────────────────────────────────────────────────────────────────────────
+ # Gaming composition (was attrs/gaming)
+ # ────────────────────────────────────────────────────────────────────────
+ programs.steam = {
+ enable = true;
+ remotePlay.openFirewall = true;
+ dedicatedServer.openFirewall = true;
+ };
+
+ programs.throne = {
+ enable = true;
+ tunMode.enable = true;
+ };
+
+ environment.systemPackages = with pkgs; [
+ pkgs.lutris
+ pkgs.prismlauncher
+ ];
+
+ system.stateVersion = "26.05";
+}
diff --git a/nixos/modules/features/appimage/default.nix b/nixos/modules/features/appimage/default.nix
new file mode 100644
index 0000000..b291735
--- /dev/null
+++ b/nixos/modules/features/appimage/default.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }:
+
+{
+ 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
new file mode 100644
index 0000000..b3013b0
--- /dev/null
+++ b/nixos/modules/features/audio-tools/default.nix
@@ -0,0 +1,12 @@
+{ pkgs, ... }:
+
+{
+ 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
new file mode 100644
index 0000000..f2ad751
--- /dev/null
+++ b/nixos/modules/features/binary-compat/default.nix
@@ -0,0 +1,23 @@
+{ pkgs, ... }:
+
+{
+ # Libraries shipped so non-Nix binaries (AppImages, dynamically linked
+ # programs via nix-ld) can resolve their runtime deps.
+ environment.systemPackages = with pkgs; [
+ cacert
+ libGL
+ nss
+ cups
+ libdrm
+ glib
+ pango
+ gtk3
+ zlib
+ expat
+ alsa-lib
+ libxkbcommon
+ atk
+ pkg-config
+ cmake
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/cli-tools/default.nix b/nixos/modules/features/cli-tools/default.nix
new file mode 100644
index 0000000..2cb6f25
--- /dev/null
+++ b/nixos/modules/features/cli-tools/default.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ tree
+ pkgs.libsixel
+ fd
+ fzf
+ eza
+ stow
+ util-linux
+ nftables
+ pkgs.rsync
+ cryptsetup
+ yt-dlp
+ caligula
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/desktop-apps/default.nix b/nixos/modules/features/desktop-apps/default.nix
new file mode 100644
index 0000000..59dda45
--- /dev/null
+++ b/nixos/modules/features/desktop-apps/default.nix
@@ -0,0 +1,18 @@
+{ pkgs, inputs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ inputs.helium-browser.packages.${pkgs.stdenv.hostPlatform.system}.helium
+ secretspec
+ claude-code
+ keepassxc
+ libreoffice
+ hunspellDicts.ru_RU
+ opencode
+ pkgs.ayugram-desktop
+ pkgs.legcord
+ pkgs.amnezia-vpn
+ obsidian
+ pkgs.qbittorrent
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/dev-tools/default.nix b/nixos/modules/features/dev-tools/default.nix
new file mode 100644
index 0000000..2215b49
--- /dev/null
+++ b/nixos/modules/features/dev-tools/default.nix
@@ -0,0 +1,20 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ black
+ cargo
+ clang
+ clippy
+ gcc
+ git
+ gnumake
+ nodejs
+ pyright
+ python3
+ rust-analyzer
+ rustc
+ tree-sitter
+ pkgs.wireshark
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/editors/default.nix b/nixos/modules/features/editors/default.nix
new file mode 100644
index 0000000..1570aa3
--- /dev/null
+++ b/nixos/modules/features/editors/default.nix
@@ -0,0 +1,10 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ micro
+ neovim
+ (emacs.override { withNativeCompilation = true; })
+ 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
new file mode 100644
index 0000000..03bd41d
--- /dev/null
+++ b/nixos/modules/features/file-managers/default.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ file-roller
+ kdePackages.ark
+ kdePackages.qt6ct
+ loupe
+ nautilus
+ sushi
+ yazi
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/fonts/default.nix b/nixos/modules/features/fonts/default.nix
new file mode 100644
index 0000000..8ac4785
--- /dev/null
+++ b/nixos/modules/features/fonts/default.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }:
+
+{
+ fonts.fontconfig.enable = true;
+
+ environment.systemPackages = with pkgs; [
+ font-awesome
+ nerd-fonts.jetbrains-mono
+ nerd-fonts.symbols-only
+ jetbrains-mono
+ noto-fonts-color-emoji
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/gst-codecs/default.nix b/nixos/modules/features/gst-codecs/default.nix
new file mode 100644
index 0000000..7a85bf2
--- /dev/null
+++ b/nixos/modules/features/gst-codecs/default.nix
@@ -0,0 +1,10 @@
+{ pkgs, ... }:
+
+{
+ 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
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/monitoring/default.nix b/nixos/modules/features/monitoring/default.nix
new file mode 100644
index 0000000..df0a937
--- /dev/null
+++ b/nixos/modules/features/monitoring/default.nix
@@ -0,0 +1,11 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ (btop.override { cudaSupport = true; })
+ duf
+ fastfetch
+ ghfetch
+ hyfetch
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/features/mpd/default.nix b/nixos/modules/features/mpd/default.nix
new file mode 100644
index 0000000..383180d
--- /dev/null
+++ b/nixos/modules/features/mpd/default.nix
@@ -0,0 +1,39 @@
+{ pkgs, ... }:
+
+{
+ # MPD server
+ 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";
+ }
+ ];
+ };
+ };
+
+ 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.
+ 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
new file mode 100644
index 0000000..84f1d15
--- /dev/null
+++ b/nixos/modules/features/niri/default.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }:
+
+{
+ programs.niri.enable = true;
+ systemd.user.services.niri.enableDefaultPath = false;
+
+ environment.systemPackages = with pkgs; [
+ adwaita-icon-theme
+ bibata-cursors
+ hicolor-icon-theme
+ 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
new file mode 100644
index 0000000..b80465c
--- /dev/null
+++ b/nixos/modules/features/noctalia-greeter/default.nix
@@ -0,0 +1,18 @@
+{ pkgs, inputs, ... }:
+
+{
+ 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";
+ };
+ };
+ };
+}
diff --git a/nixos/modules/features/noctalia-shell/default.nix b/nixos/modules/features/noctalia-shell/default.nix
new file mode 100644
index 0000000..a137d32
--- /dev/null
+++ b/nixos/modules/features/noctalia-shell/default.nix
@@ -0,0 +1,10 @@
+{ pkgs, inputs, ... }:
+
+{
+ 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
new file mode 100644
index 0000000..30a8c28
--- /dev/null
+++ b/nixos/modules/features/nvidia/default.nix
@@ -0,0 +1,21 @@
+{ config, pkgs, ... }:
+
+{
+ hardware.nvidia = {
+ modesetting.enable = true;
+ powerManagement.enable = false;
+ open = false;
+ nvidiaSettings = true;
+ package = config.boot.kernelPackages.nvidiaPackages.latest;
+ };
+
+ environment.systemPackages = with pkgs; [
+ 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/starship/default.nix b/nixos/modules/features/starship/default.nix
new file mode 100644
index 0000000..b364c5d
--- /dev/null
+++ b/nixos/modules/features/starship/default.nix
@@ -0,0 +1,5 @@
+{ ... }:
+
+{
+ 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
new file mode 100644
index 0000000..6c3bc90
--- /dev/null
+++ b/nixos/modules/features/swingmusic/default.nix
@@ -0,0 +1,19 @@
+{ ... }:
+
+{
+ 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" ];
+ };
+ };
+} \ No newline at end of file
diff --git a/nixos/modules/features/terminals/default.nix b/nixos/modules/features/terminals/default.nix
new file mode 100644
index 0000000..22c5662
--- /dev/null
+++ b/nixos/modules/features/terminals/default.nix
@@ -0,0 +1,8 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ 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
new file mode 100644
index 0000000..19111c1
--- /dev/null
+++ b/nixos/modules/features/wayland-tools/default.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }:
+
+{
+ environment.systemPackages = with pkgs; [
+ cliphist
+ fuzzel
+ grim
+ slurp
+ wl-clipboard
+ wtype
+ xwayland-satellite
+ ];
+} \ No newline at end of file
diff --git a/nixos/modules/system/audio/default.nix b/nixos/modules/system/audio/default.nix
new file mode 100644
index 0000000..140b08c
--- /dev/null
+++ b/nixos/modules/system/audio/default.nix
@@ -0,0 +1,17 @@
+{ pkgs, ... }:
+
+{
+ security.rtkit.enable = true;
+ 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
new file mode 100644
index 0000000..eedf939
--- /dev/null
+++ b/nixos/modules/system/boot/default.nix
@@ -0,0 +1,31 @@
+{ config, pkgs, lib, modulesPath, ... }:
+
+{
+ imports = [
+ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ boot.loader.systemd-boot.enable = true;
+ boot.loader.efi.canTouchEfiVariables = true;
+
+ boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-amd" ];
+ boot.extraModulePackages = [ ];
+
+ # 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"
+ # ];
+ hardware.firmware = [
+ (pkgs.runCommand "custom-edid" {} ''
+ mkdir -p $out/lib/firmware/edid
+ cp ${../../../mi_edid.bin} $out/lib/firmware/edid/mi_edid.bin
+ '')
+ ];
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+} \ No newline at end of file
diff --git a/nixos/modules/system/hardware/default.nix b/nixos/modules/system/hardware/default.nix
new file mode 100644
index 0000000..bad717c
--- /dev/null
+++ b/nixos/modules/system/hardware/default.nix
@@ -0,0 +1,16 @@
+{ config, pkgs, ... }:
+
+{
+ fileSystems."/mnt/giga" = {
+ device = "/dev/disk/by-uuid/bfed3a37-05e1-465b-a4b7-d74cd31bf937";
+ fsType = "ext4";
+ options = [ "defaults" "user" "rw" ];
+ };
+
+ hardware.graphics = {
+ enable = true;
+ enable32Bit = true;
+ };
+
+ 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
new file mode 100644
index 0000000..da66f76
--- /dev/null
+++ b/nixos/modules/system/locale/default.nix
@@ -0,0 +1,18 @@
+{ ... }:
+
+{
+ time.timeZone = "Etc/GMT-7";
+
+ i18n.defaultLocale = "en_US.UTF-8";
+ i18n.extraLocaleSettings = {
+ LC_ADDRESS = "en_US.UTF-8";
+ LC_IDENTIFICATION = "en_US.UTF-8";
+ LC_MEASUREMENT = "en_US.UTF-8";
+ LC_MONETARY = "en_US.UTF-8";
+ LC_NAME = "en_US.UTF-8";
+ LC_NUMERIC = "en_US.UTF-8";
+ LC_PAPER = "en_US.UTF-8";
+ LC_TELEPHONE = "en_US.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
new file mode 100644
index 0000000..a862235
--- /dev/null
+++ b/nixos/modules/system/network/default.nix
@@ -0,0 +1,32 @@
+{ ... }:
+
+{
+ networking.hostName = "opus";
+ networking.networkmanager.enable = true;
+ programs.amnezia-vpn.enable = true;
+
+ # Primary DNS via Mullvad DoT (Base mode)
+ networking.nameservers = [
+ "194.242.2.4#base.dns.mullvad.net"
+ "194.242.2.2#dns.mullvad.net"
+ ];
+
+ # systemd-resolved: Mullvad primary, Quad9 fallback
+ services.resolved = {
+ enable = true;
+ 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;
+ };
+} \ No newline at end of file
diff --git a/nixos/modules/system/nix/default.nix b/nixos/modules/system/nix/default.nix
new file mode 100644
index 0000000..8f33990
--- /dev/null
+++ b/nixos/modules/system/nix/default.nix
@@ -0,0 +1,21 @@
+{ config, pkgs, lib, inputs, ... }:
+
+{
+ nix.settings.experimental-features = [ "nix-command" "flakes" ];
+ nixpkgs.config.allowUnfree = true;
+
+ nix.gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d";
+ };
+
+ programs.nix-ld.enable = true;
+ 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
new file mode 100644
index 0000000..26ceb03
--- /dev/null
+++ b/nixos/modules/system/printing/default.nix
@@ -0,0 +1,12 @@
+{ pkgs, ... }:
+
+{
+ 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
new file mode 100644
index 0000000..40cfa89
--- /dev/null
+++ b/nixos/modules/system/services/default.nix
@@ -0,0 +1,13 @@
+{ ... }:
+
+{
+ services.gvfs.enable = true;
+ services.tumbler.enable = true;
+ services.gnome.gnome-keyring.enable = true;
+ programs.dconf.enable = true;
+
+ services.journald.extraConfig = ''
+ SystemMaxUse=50M
+ MaxRetentionSec=1month
+ '';
+} \ No newline at end of file
diff --git a/nixos/modules/system/users/default.nix b/nixos/modules/system/users/default.nix
new file mode 100644
index 0000000..042c055
--- /dev/null
+++ b/nixos/modules/system/users/default.nix
@@ -0,0 +1,34 @@
+{ pkgs, ... }:
+
+{
+ users.users."seraphim" = {
+ isNormalUser = true;
+ description = "seraphim";
+ shell = pkgs.fish;
+ extraGroups = [ "networkmanager" "wheel" ];
+ packages = with pkgs; [];
+ };
+
+ security.doas = {
+ enable = true;
+ extraRules = [
+ {
+ users = [ "seraphim" ];
+ keepEnv = true;
+ persist = true;
+ }
+ ];
+ };
+
+ programs.fish = {
+ enable = true;
+ interactiveShellInit = ''
+ set -g fish_greeting ""
+ fzf --fish | source
+ '';
+ shellAliases = {
+ ls = "eza -al --icons=auto";
+ ll = "eza -al --icons=auto";
+ };
+ };
+} \ No newline at end of file