My NixOS and Home Manager configurations
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

update den and big refactor

quasigod b9685edb d15e74a6

+466 -696
+8 -194
flake.lock
··· 141 141 "type": "github" 142 142 } 143 143 }, 144 - "crane_2": { 145 - "locked": { 146 - "lastModified": 1759893430, 147 - "narHash": "sha256-yAy4otLYm9iZ+NtQwTMEbqHwswSFUbhn7x826RR6djw=", 148 - "owner": "ipetkov", 149 - "repo": "crane", 150 - "rev": "1979a2524cb8c801520bd94c38bb3d5692419d93", 151 - "type": "github" 152 - }, 153 - "original": { 154 - "owner": "ipetkov", 155 - "repo": "crane", 156 - "type": "github" 157 - } 158 - }, 159 144 "dank-material-shell": { 160 145 "inputs": { 161 146 "nixpkgs": [ ··· 179 164 }, 180 165 "den": { 181 166 "locked": { 182 - "lastModified": 1774839389, 183 - "narHash": "sha256-gjREeOXMLLMfgqhL0I+cX0RIV1Qn554ajwxf3+Flp8I=", 167 + "lastModified": 1775551420, 168 + "narHash": "sha256-8ICGLVOpuXc8b1YirfsAQcPEW5sV4bpGHHDny8Pww0I=", 184 169 "owner": "vic", 185 170 "repo": "den", 186 - "rev": "d03b126aa36035752b6b172f26027d015b5cf70a", 171 + "rev": "8101ec865c0bf4027d40b9fd8951e3e435a86d64", 187 172 "type": "github" 188 173 }, 189 174 "original": { 190 175 "owner": "vic", 191 - "ref": "v0.10.0", 176 + "ref": "v0.15.0", 192 177 "repo": "den", 193 178 "type": "github" 194 179 } ··· 234 219 "type": "github" 235 220 } 236 221 }, 237 - "fenix": { 238 - "inputs": { 239 - "nixpkgs": [ 240 - "scx_cake", 241 - "nixpkgs" 242 - ], 243 - "rust-analyzer-src": "rust-analyzer-src" 244 - }, 245 - "locked": { 246 - "lastModified": 1759732757, 247 - "narHash": "sha256-RUR2yXYbKSoDvI/JdH0AvojFjhCfxBXOA/BtGUpaoR0=", 248 - "owner": "nix-community", 249 - "repo": "fenix", 250 - "rev": "1d3600dda5c27ddbc9c424bb4edae744bdb9b14d", 251 - "type": "github" 252 - }, 253 - "original": { 254 - "owner": "nix-community", 255 - "repo": "fenix", 256 - "type": "github" 257 - } 258 - }, 259 - "flake-aspects": { 260 - "locked": { 261 - "lastModified": 1771320365, 262 - "narHash": "sha256-t1FKnPRvg/l376pM+hMS0hPMTmxu7S4eVS2s+A25SbU=", 263 - "owner": "vic", 264 - "repo": "flake-aspects", 265 - "rev": "f338a5062628c9b9fda0796a141ca1a6eb4dcf75", 266 - "type": "github" 267 - }, 268 - "original": { 269 - "owner": "vic", 270 - "ref": "v0.5.0", 271 - "repo": "flake-aspects", 272 - "type": "github" 273 - } 274 - }, 275 222 "flake-compat": { 276 223 "locked": { 277 224 "lastModified": 1767039857, ··· 381 328 "type": "github" 382 329 } 383 330 }, 384 - "flake-utils": { 385 - "inputs": { 386 - "systems": "systems_2" 387 - }, 388 - "locked": { 389 - "lastModified": 1731533236, 390 - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 391 - "owner": "numtide", 392 - "repo": "flake-utils", 393 - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 394 - "type": "github" 395 - }, 396 - "original": { 397 - "owner": "numtide", 398 - "repo": "flake-utils", 399 - "type": "github" 400 - } 401 - }, 402 331 "git-hooks": { 403 332 "inputs": { 404 333 "flake-compat": "flake-compat_2", ··· 536 465 "original": { 537 466 "owner": "nix-community", 538 467 "repo": "lanzaboote", 539 - "type": "github" 540 - } 541 - }, 542 - "libbpf-src": { 543 - "flake": false, 544 - "locked": { 545 - "lastModified": 1756253079, 546 - "narHash": "sha256-2cX/d5W2ojMtQxNc+FO7oBfecXGjCOw0aoPOHj40zvM=", 547 - "owner": "libbpf", 548 - "repo": "libbpf", 549 - "rev": "3f077472ee7e703b733c2c9ae15ef3f4c13ee25b", 550 - "type": "github" 551 - }, 552 - "original": { 553 - "owner": "libbpf", 554 - "repo": "libbpf", 555 468 "type": "github" 556 469 } 557 470 }, ··· 798 711 "type": "github" 799 712 } 800 713 }, 801 - "nix-develop-gha": { 802 - "inputs": { 803 - "nixpkgs": [ 804 - "scx_cake", 805 - "nixpkgs" 806 - ] 807 - }, 808 - "locked": { 809 - "lastModified": 1740956892, 810 - "narHash": "sha256-9MhGx2h0/iE2xF9SOw4QaQNfSM0KXvkUBNJZ5NYLb1I=", 811 - "owner": "nicknovitski", 812 - "repo": "nix-develop", 813 - "rev": "5da6ac475f1ffbcf54ee562fa3056646e146be95", 814 - "type": "github" 815 - }, 816 - "original": { 817 - "owner": "nicknovitski", 818 - "repo": "nix-develop", 819 - "type": "github" 820 - } 821 - }, 822 714 "nix-gaming": { 823 715 "inputs": { 824 716 "flake-parts": [ ··· 1012 904 }, 1013 905 "nixpkgs_2": { 1014 906 "locked": { 1015 - "lastModified": 1775423009, 1016 - "narHash": "sha256-hvNLo3SaIwi6+Cm5NMLyFQYJrYagpsYap4EfQe9CQpc=", 1017 - "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", 907 + "lastModified": 1775710090, 908 + "narHash": "sha256-WGjBfvXv/mcg5yBg+AtK1Q3FHyXfjAAeJROmg7DLYfM=", 909 + "rev": "4c1018dae018162ec878d42fec712642d214fdfa", 1018 910 "type": "tarball", 1019 - "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre975402.68d8aa3d661f/nixexprs.tar.xz?lastModified=1775423009&rev=68d8aa3d661f0e6bd5862291b5bb263b2a6595c9" 911 + "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre977467.4c1018dae018/nixexprs.tar.xz?lastModified=1775710090&rev=4c1018dae018162ec878d42fec712642d214fdfa" 1020 912 }, 1021 913 "original": { 1022 914 "type": "tarball", ··· 1117 1009 "den": "den", 1118 1010 "dsearch": "dsearch", 1119 1011 "emacs-overlay": "emacs-overlay", 1120 - "flake-aspects": "flake-aspects", 1121 1012 "flake-parts": "flake-parts", 1122 1013 "home-manager": "home-manager", 1123 1014 "import-tree": "import-tree", ··· 1141 1032 "nixpkgs-patch-scx-loader": "nixpkgs-patch-scx-loader", 1142 1033 "nixpkgs-patcher": "nixpkgs-patcher", 1143 1034 "nur": "nur", 1144 - "scx_cake": "scx_cake", 1145 1035 "sops-nix": "sops-nix", 1146 1036 "srvos": "srvos", 1147 1037 "wrapper-manager": "wrapper-manager", 1148 1038 "zen-browser": "zen-browser" 1149 1039 } 1150 1040 }, 1151 - "rust-analyzer-src": { 1152 - "flake": false, 1153 - "locked": { 1154 - "lastModified": 1759691178, 1155 - "narHash": "sha256-O11yp/in47Ef1jLsEgNACXuziuRSSV4RAuxIWTdKI9w=", 1156 - "owner": "rust-lang", 1157 - "repo": "rust-analyzer", 1158 - "rev": "f0b496cbc774f589de0d46bb9c291ff7ff0329da", 1159 - "type": "github" 1160 - }, 1161 - "original": { 1162 - "owner": "rust-lang", 1163 - "ref": "nightly", 1164 - "repo": "rust-analyzer", 1165 - "type": "github" 1166 - } 1167 - }, 1168 1041 "rust-overlay": { 1169 1042 "inputs": { 1170 1043 "nixpkgs": [ ··· 1186 1059 "type": "github" 1187 1060 } 1188 1061 }, 1189 - "scx_cake": { 1190 - "inputs": { 1191 - "crane": "crane_2", 1192 - "fenix": "fenix", 1193 - "flake-utils": "flake-utils", 1194 - "libbpf-src": "libbpf-src", 1195 - "nix-develop-gha": "nix-develop-gha", 1196 - "nixpkgs": [ 1197 - "nixpkgs" 1198 - ], 1199 - "veristat-src": "veristat-src" 1200 - }, 1201 - "locked": { 1202 - "dir": ".nix", 1203 - "lastModified": 1773267450, 1204 - "narHash": "sha256-BRUI8U5KxEUnMiCGFqR3Yb5CmbA7KHgfPjrRCtiro5Q=", 1205 - "owner": "michaelBelsanti", 1206 - "repo": "scx", 1207 - "rev": "33ff2f33a64978d82fdfc00b970b1180f29b99a2", 1208 - "type": "github" 1209 - }, 1210 - "original": { 1211 - "dir": ".nix", 1212 - "owner": "michaelBelsanti", 1213 - "repo": "scx", 1214 - "type": "github" 1215 - } 1216 - }, 1217 1062 "sops-nix": { 1218 1063 "inputs": { 1219 1064 "nixpkgs": [ ··· 1285 1130 "type": "github" 1286 1131 } 1287 1132 }, 1288 - "systems_2": { 1289 - "locked": { 1290 - "lastModified": 1681028828, 1291 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1292 - "owner": "nix-systems", 1293 - "repo": "default", 1294 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1295 - "type": "github" 1296 - }, 1297 - "original": { 1298 - "owner": "nix-systems", 1299 - "repo": "default", 1300 - "type": "github" 1301 - } 1302 - }, 1303 1133 "treefmt-nix": { 1304 1134 "inputs": { 1305 1135 "nixpkgs": [ ··· 1338 1168 "original": { 1339 1169 "owner": "numtide", 1340 1170 "repo": "treefmt-nix", 1341 - "type": "github" 1342 - } 1343 - }, 1344 - "veristat-src": { 1345 - "flake": false, 1346 - "locked": { 1347 - "lastModified": 1754566905, 1348 - "narHash": "sha256-Sl0ypWP9cI7DLaE5Rjsr8U9T/n+UpBMN0wHZCKuvnOQ=", 1349 - "owner": "libbpf", 1350 - "repo": "veristat", 1351 - "rev": "ca3717b165522860a01e01ea67dd0e99c56e0faf", 1352 - "type": "github" 1353 - }, 1354 - "original": { 1355 - "owner": "libbpf", 1356 - "repo": "veristat", 1357 1171 "type": "github" 1358 1172 } 1359 1173 },
+1 -7
flake.nix
··· 6 6 inputs = { 7 7 flake-parts.url = "github:hercules-ci/flake-parts"; 8 8 import-tree.url = "github:vic/import-tree"; 9 - den.url = "github:vic/den/v0.10.0"; 10 - flake-aspects.url = "github:vic/flake-aspects/v0.5.0"; 9 + den.url = "github:vic/den/v0.15.0"; 11 10 12 11 nixpkgs.url = "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"; 13 12 nixpkgs-patcher.url = "github:gepbird/nixpkgs-patcher"; ··· 130 129 }; 131 130 mics-skills = { 132 131 url = "github:Mic92/mics-skills"; 133 - inputs.nixpkgs.follows = "nixpkgs"; 134 - }; 135 - 136 - scx_cake = { 137 - url = "github:michaelBelsanti/scx?dir=.nix"; 138 132 inputs.nixpkgs.follows = "nixpkgs"; 139 133 }; 140 134
+1
modules/apps/core.nix
··· 4 4 { 5 5 home.packages = with pkgs; [ 6 6 aria2 7 + bindfs 7 8 choose 8 9 difftastic 9 10 doggo
-24
modules/apps/default.nix
··· 1 - { __findFile, ... }: 2 - { 3 - den.aspects.quasi.includes = [ 4 - <styx/fish> 5 - <styx/apps/coreutils> 6 - ]; 7 - styx.workstation.includes = [ 8 - <styx/dev> 9 - <styx/apps/gui> 10 - <styx/apps/distrobox> 11 - <styx/apps/ghostty> 12 - <styx/apps/git> 13 - <styx/apps/jujutsu> 14 - <styx/apps/halloy> 15 - <styx/apps/localsend> 16 - <styx/apps/nh> 17 - <styx/apps/nix-tools> 18 - <styx/apps/radicle> 19 - <styx/apps/topgrade> 20 - <styx/apps/wezterm> 21 - <styx/apps/zen> 22 - <styx/apps/zsa> 23 - ]; 24 - }
+1 -1
modules/apps/prompt.nix
··· 28 28 }; 29 29 custom.jjstate = { 30 30 command = '' 31 - jj log -r@ -n1 --ignore-working-copy --no-graph -T "" --stat | tail -n1 | sd "(\d+) files? changed, (\d+) insertions?\(\+\), (\d+) deletions?\(-\)" ' ''\${1}m ''\${2}+ ''\${3}-' | sd " 0." "" 31 + jj log -r@ -n1 --ignore-working-copy --no-graph -T "" --stat | tail -n1 | sd "(\d+) files? changed, (\d+) insertions?\(\+\), (\d+) deletions?\(-\)" ' ''${1}m ''${2}+ ''${3}-' | sd " 0." "" 32 32 ''; 33 33 when = "jj --ignore-working-copy root"; 34 34 };
modules/catppuccin/default.nix modules/catppuccin.nix
+1 -7
modules/default.nix
··· 3 3 # Some preferred defaults 4 4 den.default = { 5 5 includes = [ 6 - <den/home-manager> 7 6 <den/define-user> 8 - ( 9 - { host, ... }: 10 - { 11 - ${host.class}.networking.hostName = host.name; 12 - } 13 - ) 7 + <den/hostname> 14 8 ]; 15 9 16 10 nixos =
+1
modules/den.nix
··· 1 1 { inputs, den, ... }: 2 2 { 3 3 _module.args.__findFile = den.lib.__findFile; 4 + den.ctx.user.includes = [ den._.mutual-provider ]; 4 5 imports = [ 5 6 inputs.den.flakeModule 6 7 (inputs.den.namespace "styx" true)
+2
modules/hacking/default.nix
··· 11 11 styx.hax._.subfinder 12 12 (styx.groups [ 13 13 "wireshark" 14 + "docker" 14 15 ]) 15 16 ]; 16 17 nixos = { 17 18 environment.etc.hosts.mode = "0644"; 18 19 programs.wireshark.enable = true; 20 + virtualisation.docker.enable = true; 19 21 }; 20 22 homeManager = 21 23 { pkgs, config, ... }:
+29 -73
modules/hosts/hades/default.nix
··· 5 5 ... 6 6 }: 7 7 { 8 - hostConfig.hades = { 9 - primaryDisplay = config.hostConfig.hades.displays.DP-3; 8 + den.hosts.x86_64-linux.hades = { 9 + users.quasi.classes = [ "homeManager" ]; 10 + # instantiate = 11 + # args: inputs.nixpkgs-patcher.lib.nixosSystem ({ nixpkgsPatcher.inputs = inputs; } // args); 10 12 displays = { 11 13 DP-3 = { 12 14 primary = true; ··· 26 28 }; 27 29 }; 28 30 }; 29 - 30 - den.hosts.x86_64-linux.hades = { 31 - inherit (config.hostConfig.hades) displays primaryDisplay; 32 - instantiate = 33 - args: inputs.nixpkgs-patcher.lib.nixosSystem ({ nixpkgsPatcher.inputs = inputs; } // args); 34 - }; 35 31 den.aspects.hades = { 32 + provides.quasi.includes = [ styx.gaming._.max ]; 36 33 includes = with styx; [ 37 34 desktop 38 - hax 39 - gaming._.max 40 35 ai._.ollama 41 - apps._.radicle 42 36 apps._.zsa 43 37 virt._.waydroid 44 38 ]; ··· 65 59 66 60 services = { 67 61 fwupd.enable = true; 68 - falcond = { 69 - enable = true; 70 - package = pkgs.falcond.overrideAttrs (finalAttrs: { 71 - src = pkgs.fetchFromGitHub { 72 - owner = "michaelBelsanti"; 73 - repo = "falcond"; 74 - rev = "38e9a823ff31b47671a7d209cc69f9d7c27f637a"; 75 - hash = "sha256-ZNifsY3eut78Hg+xZ5A8I4h1NJqRTnfDE4OfOi/gu6Q="; 76 - rootDir = "falcond"; 77 - }; 78 - }); 79 - configText = '' 80 - scx_sched = cake 81 - vcache_mode = freqency 82 - ''; 83 - profiles.deadlock = '' 84 - name = "deadlock.exe" 85 - scx_sched_props = latency 86 - ''; 87 - }; 88 - scx-loader = { 89 - enable = true; 90 - schedsPackages = [ 91 - (pkgs.scx.rustscheds) 92 - (inputs.scx_cake.packages.${pkgs.stdenv.hostPlatform.system}.scx_cake) 93 - ]; 94 - settings = { }; 95 - package = pkgs.scx.loader.overrideAttrs ( 96 - final: prev: { 97 - src = pkgs.fetchFromGitHub { 98 - owner = "sched-ext"; 99 - repo = "scx-loader"; 100 - rev = "v1.1.0"; 101 - hash = "sha256-B66+Awt+q3GuriRSFWmGKh6GicQiPlpQMPlpwbItUrk="; 102 - }; 103 - } 104 - ); 105 - }; 62 + # falcond = { 63 + # enable = true; 64 + # package = pkgs.falcond.overrideAttrs (finalAttrs: { 65 + # src = pkgs.fetchFromGitHub { 66 + # owner = "michaelBelsanti"; 67 + # repo = "falcond"; 68 + # rev = "38e9a823ff31b47671a7d209cc69f9d7c27f637a"; 69 + # hash = "sha256-ZNifsY3eut78Hg+xZ5A8I4h1NJqRTnfDE4OfOi/gu6Q="; 70 + # rootDir = "falcond"; 71 + # }; 72 + # }); 73 + # configText = '' 74 + # scx_sched = cake 75 + # vcache_mode = freqency 76 + # ''; 77 + # profiles.deadlock = '' 78 + # name = "deadlock.exe" 79 + # scx_sched_props = latency 80 + # ''; 81 + # }; 82 + # scx-loader = { 83 + # enable = true; 84 + # settings = { }; 85 + # }; 106 86 }; 107 87 108 88 security.rtkit.enable = true; ··· 134 114 ]; 135 115 }; 136 116 137 - # services.scx.scheduler uses an enum with the upstream schedulers hardcoded 138 - # systemd.services.scx = 139 - # let 140 - # scx_cake = inputs.scx_cake.packages.${pkgs.stdenv.hostPlatform.system}.scx_cake; 141 - # in 142 - # { 143 - # description = "SCX scheduler daemon"; 144 - # # SCX service should be started only if the kernel supports sched-ext 145 - # unitConfig.ConditionPathIsDirectory = "/sys/kernel/sched_ext"; 146 - # startLimitIntervalSec = 30; 147 - # startLimitBurst = 2; 148 - # serviceConfig = { 149 - # Type = "simple"; 150 - # ExecStart = '' 151 - # ${pkgs.runtimeShell} -c 'exec ${scx_cake}/bin/scx_cake' 152 - # ''; 153 - # Restart = "on-failure"; 154 - # }; 155 - # wantedBy = [ "multi-user.target" ]; 156 - # }; 157 - 158 117 boot.kernelPackages = 159 118 inputs.nix-cachyos-kernel.legacyPackages.${pkgs.stdenv.hostPlatform.system}.linuxPackages-cachyos-latest; 160 - 161 - virtualisation.docker.enable = true; 162 - users.users.quasi.extraGroups = [ "docker" ]; 163 119 164 120 networking = { 165 121 networkmanager.unmanaged = [ "eth0" ];
+3 -5
modules/hosts/zagreus/default.nix
··· 5 5 ... 6 6 }: 7 7 { 8 - hostConfig.zagreus = { 9 - primaryDisplay = config.hostConfig.zagreus.displays.eDP-1; 8 + den.hosts.x86_64-linux.zagreus = { 9 + users.quasi.classes = [ "homeManager" ]; 10 10 displays = { 11 11 eDP-1 = { 12 12 refresh = 60.0; ··· 17 17 }; 18 18 }; 19 19 }; 20 - 21 - den.hosts.x86_64-linux.zagreus = { inherit (config.hostConfig.zagreus) displays primaryDisplay; }; 22 20 den.aspects.zagreus = { 23 21 includes = with styx; [ 24 22 laptop 25 - hax 23 + gaming._.min 26 24 ]; 27 25 28 26 nixos =
+1 -1
modules/mcsr/default.nix
··· 5 5 ... 6 6 }: 7 7 { 8 - styx.gaming._.mcsr = den.lib.take.exactly ( 8 + styx.gaming._.mcsr = den.lib.perUser ( 9 9 { host, user }: 10 10 { 11 11 homeManager =
+84 -72
modules/meta/displays.nix
··· 1 1 { inputs, lib, ... }: 2 2 let 3 3 inherit (lib) mkOption types; 4 + 5 + displayType = types.submodule ( 6 + { name, config, ... }: 7 + { 8 + options = { 9 + name = mkOption { 10 + default = name; 11 + readOnly = true; 12 + }; 13 + primary = mkOption { 14 + type = types.bool; 15 + default = false; 16 + }; 17 + refresh = mkOption { 18 + type = types.float; 19 + default = 60; 20 + }; 21 + width = mkOption { 22 + type = types.int; 23 + default = 1920; 24 + }; 25 + height = mkOption { 26 + type = types.int; 27 + default = 1080; 28 + }; 29 + x = mkOption { 30 + type = types.int; 31 + default = 0; 32 + }; 33 + y = mkOption { 34 + type = types.int; 35 + default = 0; 36 + }; 37 + scaling = mkOption { 38 + type = types.float; 39 + default = 1.0; 40 + }; 41 + roundScaling = mkOption { 42 + type = types.int; 43 + default = builtins.ceil config.scaling; 44 + }; 45 + vrr = mkOption { 46 + type = types.enum [ 47 + true 48 + false 49 + "on-demand" 50 + ]; 51 + default = false; 52 + }; 53 + wallpaper = mkOption { 54 + type = types.path; 55 + apply = v: builtins.path { path = (inputs.self + v); }; 56 + }; 57 + }; 58 + } 59 + ); 4 60 in 5 61 { 6 - options.hostConfig = mkOption { 7 - default = { }; 8 - type = types.attrsOf ( 9 - types.submodule { 10 - options = { 11 - primaryDisplay = mkOption { 12 - type = types.lazyAttrsOf types.raw; 13 - default = { }; 14 - }; 15 - displays = mkOption { 16 - type = types.lazyAttrsOf ( 17 - types.submodule ( 18 - { name, config, ... }: 19 - { 20 - options = { 21 - name = mkOption { 22 - default = name; 23 - readOnly = true; 24 - }; 25 - primary = mkOption { 26 - type = types.bool; 27 - default = false; 28 - }; 29 - refresh = mkOption { 30 - type = types.float; 31 - default = 60; 32 - }; 33 - width = mkOption { 34 - type = types.int; 35 - default = 1920; 36 - }; 37 - height = mkOption { 38 - type = types.int; 39 - default = 1080; 40 - }; 41 - x = mkOption { 42 - type = types.int; 43 - default = 0; 44 - }; 45 - y = mkOption { 46 - type = types.int; 47 - default = 0; 48 - }; 49 - scaling = mkOption { 50 - type = types.float; 51 - default = 1.0; 52 - }; 53 - roundScaling = mkOption { 54 - type = types.int; 55 - default = builtins.ceil config.scaling; 56 - }; 57 - vrr = mkOption { 58 - type = types.enum [ 59 - true 60 - false 61 - "on-demand" 62 - ]; 63 - default = false; 64 - }; 65 - wallpaper = mkOption { 66 - type = types.path; 67 - apply = v: builtins.path { path = (inputs.self + v); }; 68 - }; 69 - }; 70 - } 71 - ) 72 - ); 73 - }; 74 - }; 75 - } 76 - ); 77 - }; 62 + den.schema.host = 63 + { config, ... }: 64 + let 65 + displays = config.displays; 66 + displayList = builtins.attrValues displays; 67 + primaries = lib.filterAttrs (_: d: d.primary) displays; 68 + primaryList = builtins.attrValues primaries; 69 + primaryNames = lib.concatStringsSep ", " (lib.mapAttrsToList (n: _: n) primaries); 70 + in 71 + { 72 + options.displays = mkOption { 73 + type = types.lazyAttrsOf displayType; 74 + default = { }; 75 + }; 76 + options.primaryDisplay = mkOption { 77 + type = types.nullOr (types.lazyAttrsOf types.raw); 78 + readOnly = true; 79 + default = 80 + if builtins.length displayList == 1 then 81 + builtins.head displayList 82 + else if builtins.length primaryList == 0 then 83 + null 84 + else if builtins.length primaryList > 1 then 85 + builtins.throw "Multiple displays marked as primary: ${primaryNames}" 86 + else 87 + builtins.head primaryList; 88 + }; 89 + }; 78 90 }
+260 -253
modules/niri/default.nix
··· 7 7 ... 8 8 }: 9 9 { 10 - styx.wayland._.niri = 11 - { host, user }: 12 - den.lib.parametric.fixedTo { inherit host; } { 13 - includes = [ 14 - styx.wayland._.base 15 - styx.apps._.vicinae 16 - ]; 17 - nixos = 18 - { config, pkgs, ... }: 10 + styx.niri = { 11 + includes = [ 12 + styx.wayland._.base 13 + styx.apps._.vicinae 14 + den.lib.perHost 15 + ( 16 + { host, ... }: 19 17 { 20 - imports = [ inputs.dank-material-shell.nixosModules.greeter ]; 21 - environment = { 22 - # fixes zap proxy 23 - # making gui apps with java should be banned. 24 - variables.AWT_TOOLKIT = "MToolkit"; 25 - variables._JAVA_AWT_WM_NONREPARENTING = 1; 26 - systemPackages = with pkgs; [ 27 - xwayland-satellite 28 - file-roller 29 - nautilus 30 - satty 31 - celluloid 32 - loupe 33 - dsearch 34 - pwvucontrol 35 - bazaar 36 - ]; 37 - }; 38 - programs = { 39 - niri.enable = true; 40 - niri.package = pkgs.niri; 41 - dank-material-shell.greeter = { 42 - enable = true; 43 - configHome = "/home/quasi"; 44 - compositor.name = "niri"; 45 - compositor.customConfig = inputs.niri.lib.kdl.serialize.nodes ( 46 - builtins.filter ( 47 - n: 48 - lib.elem n.name [ 49 - "hotkey-overlay" 50 - "input" 51 - "output" 52 - ] 53 - ) config.home-manager.users.quasi.programs.niri.config 54 - ); 18 + homeManager = 19 + { pkgs, config, ... }: 20 + { 21 + services.awww.enable = true; 22 + systemd.user.services.awww.Service.ExecStartPost = lib.mapAttrsToList ( 23 + name: display: "${lib.getExe pkgs.awww} img -o ${name} ${display.wallpaper} -t none" 24 + ) host.displays; 25 + programs.niri.settings.outputs = lib.mapAttrs ( 26 + _: v: with v; { 27 + mode = { inherit width height refresh; }; 28 + scale = scaling; 29 + position = { inherit x y; }; 30 + variable-refresh-rate = vrr; 31 + focus-at-startup = lib.mkIf primary true; 32 + } 33 + ) host.displays; 55 34 }; 56 - kdeconnect = { 57 - enable = true; 58 - package = pkgs.valent; 59 - }; 35 + } 36 + ) 37 + ]; 38 + nixos = 39 + { config, pkgs, ... }: 40 + { 41 + imports = [ inputs.dank-material-shell.nixosModules.greeter ]; 42 + environment = { 43 + # fixes zap proxy 44 + # making gui apps with java should be banned. 45 + variables.AWT_TOOLKIT = "MToolkit"; 46 + variables._JAVA_AWT_WM_NONREPARENTING = 1; 47 + systemPackages = with pkgs; [ 48 + xwayland-satellite 49 + file-roller 50 + nautilus 51 + satty 52 + celluloid 53 + loupe 54 + dsearch 55 + pwvucontrol 56 + bazaar 57 + ]; 58 + }; 59 + programs = { 60 + niri.enable = true; 61 + niri.package = pkgs.niri; 62 + dank-material-shell.greeter = { 63 + enable = true; 64 + configHome = "/home/quasi"; 65 + compositor.name = "niri"; 66 + compositor.customConfig = inputs.niri.lib.kdl.serialize.nodes ( 67 + builtins.filter ( 68 + n: 69 + lib.elem n.name [ 70 + "hotkey-overlay" 71 + "input" 72 + "output" 73 + ] 74 + ) config.home-manager.users.quasi.programs.niri.config 75 + ); 60 76 }; 61 - services = { 62 - accounts-daemon.enable = true; 63 - greetd.settings.default_session.user = "quasi"; 64 - gvfs.enable = true; 65 - geoclue2 = { 66 - enable = true; 67 - enableDemoAgent = true; 68 - }; 77 + kdeconnect = { 78 + enable = true; 79 + package = pkgs.valent; 69 80 }; 70 81 }; 71 - homeManager = 72 - { 73 - pkgs, 74 - config, 75 - ... 76 - }: 77 - { 78 - imports = [ 79 - inputs.niri.homeModules.config 80 - inputs.dank-material-shell.homeModules.dank-material-shell 81 - inputs.dsearch.homeModules.default 82 - ]; 83 - services.awww.enable = true; 84 - systemd.user.services.awww.Service.ExecStartPost = lib.mapAttrsToList ( 85 - name: display: "${lib.getExe pkgs.awww} img -o ${name} ${display.wallpaper} -t none" 86 - ) host.displays; 87 - dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; 88 - xdg = { 89 - autostart.enable = true; 90 - configFile."gtk-4.0/gtk.css".enable = lib.mkForce false; 82 + services = { 83 + accounts-daemon.enable = true; 84 + greetd.settings.default_session.user = "quasi"; 85 + gvfs.enable = true; 86 + geoclue2 = { 87 + enable = true; 88 + enableDemoAgent = true; 91 89 }; 92 - gtk.theme = { 93 - package = pkgs.colloid-gtk-theme; 94 - name = "Colloid"; 90 + }; 91 + }; 92 + homeManager = 93 + { 94 + pkgs, 95 + config, 96 + ... 97 + }: 98 + { 99 + imports = [ 100 + inputs.niri.homeModules.config 101 + inputs.dank-material-shell.homeModules.dank-material-shell 102 + inputs.dsearch.homeModules.default 103 + ]; 104 + dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; 105 + xdg = { 106 + autostart.enable = true; 107 + configFile."gtk-4.0/gtk.css".enable = lib.mkForce false; 108 + }; 109 + gtk.theme = { 110 + package = pkgs.colloid-gtk-theme; 111 + name = "Colloid"; 112 + }; 113 + programs = { 114 + dank-material-shell = { 115 + enable = true; 116 + systemd.enable = true; 117 + # [TODO] restore when khal isn't exploded 118 + enableCalendarEvents = false; 95 119 }; 96 - programs = { 97 - dank-material-shell = { 98 - enable = true; 99 - systemd.enable = true; 100 - # [TODO] restore when khal isn't exploded 101 - enableCalendarEvents = false; 102 - }; 103 - dsearch.enable = true; 104 - niri.settings = { 105 - input = { 106 - keyboard.xkb.options = "fkeys:basic_13-24"; 107 - mouse.accel-profile = "flat"; 108 - warp-mouse-to-focus.enable = true; 109 - focus-follows-mouse = { 110 - enable = true; 111 - max-scroll-amount = "0%"; 112 - }; 113 - touchpad = { 114 - tap = true; 115 - dwt = true; 116 - drag = true; 117 - click-method = "clickfinger"; 118 - scroll-method = "two-finger"; 119 - }; 120 + dsearch.enable = true; 121 + niri.settings = { 122 + input = { 123 + keyboard.xkb.options = "fkeys:basic_13-24"; 124 + mouse.accel-profile = "flat"; 125 + warp-mouse-to-focus.enable = true; 126 + focus-follows-mouse = { 127 + enable = true; 128 + max-scroll-amount = "0%"; 120 129 }; 130 + touchpad = { 131 + tap = true; 132 + dwt = true; 133 + drag = true; 134 + click-method = "clickfinger"; 135 + scroll-method = "two-finger"; 136 + }; 137 + }; 121 138 122 - outputs = lib.mapAttrs ( 123 - _: v: with v; { 124 - mode = { inherit width height refresh; }; 125 - scale = scaling; 126 - position = { inherit x y; }; 127 - variable-refresh-rate = vrr; 128 - focus-at-startup = lib.mkIf primary true; 129 - } 130 - ) host.displays; 139 + cursor.theme = config.home.pointerCursor.name; 131 140 132 - cursor.theme = config.home.pointerCursor.name; 141 + prefer-no-csd = true; 133 142 134 - prefer-no-csd = true; 143 + hotkey-overlay = { 144 + hide-not-bound = true; 145 + skip-at-startup = true; 146 + }; 135 147 136 - hotkey-overlay = { 137 - hide-not-bound = true; 138 - skip-at-startup = true; 148 + clipboard.disable-primary = true; 149 + 150 + layout = { 151 + border = { 152 + enable = false; 153 + width = 1; 139 154 }; 155 + focus-ring.enable = true; 156 + shadow.enable = true; 157 + gaps = 8; 158 + default-column-width.proportion = 0.66667; 159 + tab-indicator.place-within-column = true; 160 + }; 140 161 141 - clipboard.disable-primary = true; 142 - 143 - layout = { 144 - border = { 145 - enable = false; 146 - width = 1; 162 + window-rules = [ 163 + { 164 + geometry-corner-radius = { 165 + top-left = 8.0; 166 + top-right = 8.0; 167 + bottom-left = 8.0; 168 + bottom-right = 8.0; 147 169 }; 148 - focus-ring.enable = true; 149 - shadow.enable = true; 150 - gaps = 8; 151 - default-column-width.proportion = 0.66667; 152 - tab-indicator.place-within-column = true; 153 - }; 170 + clip-to-geometry = true; 171 + } 172 + ]; 154 173 155 - window-rules = [ 174 + binds = 175 + let 176 + dms = cmd: { spawn-sh = "dms ipc " + cmd; }; 177 + in 178 + lib.attrsets.mergeAttrsList [ 156 179 { 157 - geometry-corner-radius = { 158 - top-left = 8.0; 159 - top-right = 8.0; 160 - bottom-left = 8.0; 161 - bottom-right = 8.0; 162 - }; 163 - clip-to-geometry = true; 164 - } 165 - ]; 166 - 167 - binds = 168 - let 169 - dms = cmd: { spawn-sh = "dms ipc " + cmd; }; 170 - in 171 - lib.attrsets.mergeAttrsList [ 172 - { 173 - "Mod+Q".action.close-window = [ ]; 180 + "Mod+Q".action.close-window = [ ]; 174 181 175 - "Mod+Space".action = dms "spotlight toggle"; 176 - "Mod+Shift+Space".action.spawn-sh = "systemctl --user restart vicinae.service"; 182 + "Mod+Space".action = dms "spotlight toggle"; 183 + "Mod+Shift+Space".action.spawn-sh = "systemctl --user restart vicinae.service"; 177 184 178 - "Mod+Return".action.spawn = "wezterm"; 179 - "Mod+B".action.spawn = "zen-beta"; 185 + "Mod+Return".action.spawn = "wezterm"; 186 + "Mod+B".action.spawn = "zen-beta"; 180 187 181 - # "Mod+Shift+E".action.spawn = toString ( 182 - # pkgs.writeScript "open-emacs" ("#!${lib.getExe pkgs.nushell}" + builtins.readFile ./emacs.nu) 183 - # ); 184 - "Mod+Shift+E".action.spawn-sh = "emacsclient -c"; 188 + # "Mod+Shift+E".action.spawn = toString ( 189 + # pkgs.writeScript "open-emacs" ("#!${lib.getExe pkgs.nushell}" + builtins.readFile ./emacs.nu) 190 + # ); 191 + "Mod+Shift+E".action.spawn-sh = "emacsclient -c"; 185 192 186 - "Mod+W".action.toggle-overview = [ ]; 187 - "Mod+O".action.show-hotkey-overlay = [ ]; 193 + "Mod+W".action.toggle-overview = [ ]; 194 + "Mod+O".action.show-hotkey-overlay = [ ]; 188 195 189 - "Mod+Escape".action = dms "lock lock"; 196 + "Mod+Escape".action = dms "lock lock"; 190 197 191 - "Mod+V".action = dms "clipboard toggle"; 198 + "Mod+V".action = dms "clipboard toggle"; 192 199 193 - "Mod+Shift+S".action.screenshot = [ ]; 194 - "Mod+S".action.screenshot-window = [ ]; 195 - "Mod+Ctrl+S".action.spawn-sh = "niri msg action screenshot-screen && wl-paste | satty -f -"; 200 + "Mod+Shift+S".action.screenshot = [ ]; 201 + "Mod+S".action.screenshot-window = [ ]; 202 + "Mod+Ctrl+S".action.spawn-sh = "niri msg action screenshot-screen && wl-paste | satty -f -"; 196 203 197 - # "Mod+Insert".action = set-dynamic-cast-window; 198 - # "Mod+Shift+Insert".action = set-dynamic-cast-monitor; 199 - # "Mod+Delete".action = clear-dynamic-cast-target; 204 + # "Mod+Insert".action = set-dynamic-cast-window; 205 + # "Mod+Shift+Insert".action = set-dynamic-cast-monitor; 206 + # "Mod+Delete".action = clear-dynamic-cast-target; 200 207 201 - XF86AudioRaiseVolume = { 202 - allow-when-locked = true; 203 - action = dms "audio increment 3"; 204 - }; 205 - XF86AudioLowerVolume = { 206 - allow-when-locked = true; 207 - action = dms "audio decrement 3"; 208 - }; 209 - XF86AudioMute = { 210 - allow-when-locked = true; 211 - action = dms "audio mute"; 212 - }; 213 - XF86AudioMicMute = { 214 - allow-when-locked = true; 215 - action = dms "audio micmute"; 216 - }; 208 + XF86AudioRaiseVolume = { 209 + allow-when-locked = true; 210 + action = dms "audio increment 3"; 211 + }; 212 + XF86AudioLowerVolume = { 213 + allow-when-locked = true; 214 + action = dms "audio decrement 3"; 215 + }; 216 + XF86AudioMute = { 217 + allow-when-locked = true; 218 + action = dms "audio mute"; 219 + }; 220 + XF86AudioMicMute = { 221 + allow-when-locked = true; 222 + action = dms "audio micmute"; 223 + }; 217 224 218 - XF86AudioPlay = { 219 - allow-when-locked = true; 220 - action = dms "mpris playPause"; 221 - }; 222 - XF86AudioNext = { 223 - allow-when-locked = true; 224 - action = dms "mpris next"; 225 - }; 226 - XF86AudioPrev = { 227 - allow-when-locked = true; 228 - action = dms "mpris prev"; 229 - }; 225 + XF86AudioPlay = { 226 + allow-when-locked = true; 227 + action = dms "mpris playPause"; 228 + }; 229 + XF86AudioNext = { 230 + allow-when-locked = true; 231 + action = dms "mpris next"; 232 + }; 233 + XF86AudioPrev = { 234 + allow-when-locked = true; 235 + action = dms "mpris prev"; 236 + }; 230 237 231 - XF86MonBrightnessUp.action = dms "brightness increment 5"; 232 - XF86MonBrightnessDown.action = dms "brightness decrement 5"; 238 + XF86MonBrightnessUp.action = dms "brightness increment 5"; 239 + XF86MonBrightnessDown.action = dms "brightness decrement 5"; 233 240 234 - "Mod+Shift+T".action.toggle-column-tabbed-display = [ ]; 241 + "Mod+Shift+T".action.toggle-column-tabbed-display = [ ]; 235 242 236 - # "Mod+Tab".action = focus-window-down-or-column-right; 237 - # "Mod+Shift+Tab".action = focus-window-up-or-column-left; 243 + # "Mod+Tab".action = focus-window-down-or-column-right; 244 + # "Mod+Shift+Tab".action = focus-window-up-or-column-left; 238 245 239 - "Mod+G".action.switch-focus-between-floating-and-tiling = [ ]; 246 + "Mod+G".action.switch-focus-between-floating-and-tiling = [ ]; 240 247 241 - "Mod+H".action.focus-column-or-monitor-left = [ ]; 242 - "Mod+J".action.focus-window-or-workspace-down = [ ]; 243 - "Mod+K".action.focus-window-or-workspace-up = [ ]; 244 - "Mod+L".action.focus-column-or-monitor-right = [ ]; 248 + "Mod+H".action.focus-column-or-monitor-left = [ ]; 249 + "Mod+J".action.focus-window-or-workspace-down = [ ]; 250 + "Mod+K".action.focus-window-or-workspace-up = [ ]; 251 + "Mod+L".action.focus-column-or-monitor-right = [ ]; 245 252 246 - "Mod+Shift+H".action.move-column-left-or-to-monitor-left = [ ]; 247 - "Mod+Shift+J".action.move-window-down = [ ]; 248 - "Mod+Shift+K".action.move-window-up = [ ]; 249 - "Mod+Shift+L".action.move-column-right-or-to-monitor-right = [ ]; 253 + "Mod+Shift+H".action.move-column-left-or-to-monitor-left = [ ]; 254 + "Mod+Shift+J".action.move-window-down = [ ]; 255 + "Mod+Shift+K".action.move-window-up = [ ]; 256 + "Mod+Shift+L".action.move-column-right-or-to-monitor-right = [ ]; 250 257 251 - "Mod+WheelScrollDown".action.focus-column-right = [ ]; 252 - "Mod+WheelScrollUp".action.focus-column-left = [ ]; 253 - } 254 - (niri-lib.binds { 255 - suffixes."H" = "monitor-left"; 256 - suffixes."J" = "monitor-down"; 257 - suffixes."K" = "monitor-up"; 258 - suffixes."L" = "monitor-right"; 259 - prefixes."Mod+Ctrl" = "focus"; 260 - prefixes."Mod+Ctrl+Shift" = "move-column-to"; 261 - }) 262 - (niri-lib.binds { 263 - suffixes."Home" = "first"; 264 - suffixes."End" = "last"; 265 - prefixes."Mod" = "focus-column"; 266 - prefixes."Mod+Ctrl" = "move-column-to"; 267 - }) 268 - (niri-lib.binds { 269 - suffixes = builtins.listToAttrs ( 270 - map (n: { 271 - name = toString n; 272 - value = [ 273 - "workspace" 274 - n 275 - ]; 276 - }) (lib.range 1 9) 277 - ); 278 - prefixes."Mod" = "focus"; 279 - prefixes."Mod+Shift" = "move-column-to"; 280 - }) 281 - { 282 - "Mod+Comma".action.consume-window-into-column = [ ]; 283 - "Mod+Period".action.expel-window-from-column = [ ]; 258 + "Mod+WheelScrollDown".action.focus-column-right = [ ]; 259 + "Mod+WheelScrollUp".action.focus-column-left = [ ]; 260 + } 261 + (niri-lib.binds { 262 + suffixes."H" = "monitor-left"; 263 + suffixes."J" = "monitor-down"; 264 + suffixes."K" = "monitor-up"; 265 + suffixes."L" = "monitor-right"; 266 + prefixes."Mod+Ctrl" = "focus"; 267 + prefixes."Mod+Ctrl+Shift" = "move-column-to"; 268 + }) 269 + (niri-lib.binds { 270 + suffixes."Home" = "first"; 271 + suffixes."End" = "last"; 272 + prefixes."Mod" = "focus-column"; 273 + prefixes."Mod+Ctrl" = "move-column-to"; 274 + }) 275 + (niri-lib.binds { 276 + suffixes = builtins.listToAttrs ( 277 + map (n: { 278 + name = toString n; 279 + value = [ 280 + "workspace" 281 + n 282 + ]; 283 + }) (lib.range 1 9) 284 + ); 285 + prefixes."Mod" = "focus"; 286 + prefixes."Mod+Shift" = "move-column-to"; 287 + }) 288 + { 289 + "Mod+Comma".action.consume-window-into-column = [ ]; 290 + "Mod+Period".action.expel-window-from-column = [ ]; 284 291 285 - "Mod+R".action.switch-preset-column-width = [ ]; 286 - "Mod+E".action.switch-preset-column-width-back = [ ]; 287 - "Mod+F".action.maximize-column = [ ]; 288 - "Mod+Shift+F".action.fullscreen-window = [ ]; 289 - "Mod+C".action.center-column = [ ]; 290 - "Mod+T".action.toggle-window-floating = [ ]; 292 + "Mod+R".action.switch-preset-column-width = [ ]; 293 + "Mod+E".action.switch-preset-column-width-back = [ ]; 294 + "Mod+F".action.maximize-column = [ ]; 295 + "Mod+Shift+F".action.fullscreen-window = [ ]; 296 + "Mod+C".action.center-column = [ ]; 297 + "Mod+T".action.toggle-window-floating = [ ]; 291 298 292 - "Mod+Shift+Escape".action.toggle-keyboard-shortcuts-inhibit = [ ]; 293 - "Mod+Shift+Ctrl+T".action.toggle-debug-tint = [ ]; 294 - "Ctrl+Alt+Delete".action.quit = [ ]; 295 - } 296 - ]; 297 - }; 299 + "Mod+Shift+Escape".action.toggle-keyboard-shortcuts-inhibit = [ ]; 300 + "Mod+Shift+Ctrl+T".action.toggle-debug-tint = [ ]; 301 + "Ctrl+Alt+Delete".action.quit = [ ]; 302 + } 303 + ]; 298 304 }; 299 305 }; 300 - }; 306 + }; 307 + }; 301 308 }
+30
modules/profiles.nix
··· 1 + { den, __findFile, ... }: 2 + { 3 + styx = { 4 + workstation.includes = [ 5 + <styx/boot> 6 + <styx/filesystems/ntfs> 7 + <styx/flatpak> 8 + <styx/microvm/host> 9 + <styx/networking> 10 + <styx/printing> 11 + <styx/tailscale> 12 + <styx/udev> 13 + <styx/virt/podman> 14 + <styx/virt/qemu> 15 + ]; 16 + laptop.includes = [ 17 + <styx/boot/graphical> 18 + <styx/boot/secure> 19 + <styx/performance/responsive> 20 + <styx/power-mgmt> 21 + <styx/workstation> 22 + ]; 23 + desktop.includes = [ 24 + <styx/networking/wol> 25 + <styx/performance/max> 26 + <styx/ssh/server> 27 + <styx/workstation> 28 + ]; 29 + }; 30 + }
+27 -12
modules/quasi.nix
··· 6 6 <styx/helix/with-tools> 7 7 <styx/nushell> 8 8 <styx/shell> 9 + <styx/niri> 10 + <styx/fish> 11 + <styx/easyeffects> 12 + <styx/emacs> 13 + <styx/theming> 14 + <styx/ssh/client> 15 + <styx/syncthing/client> 16 + <styx/xdg> 17 + <styx/secrets> 18 + <styx/hax> 19 + 20 + <styx/dev> 21 + <styx/apps/coreutils> 22 + <styx/apps/gui> 23 + <styx/apps/distrobox> 24 + <styx/apps/ghostty> 25 + <styx/apps/git> 26 + <styx/apps/jujutsu> 27 + <styx/apps/halloy> 28 + <styx/apps/localsend> 29 + <styx/apps/nh> 30 + <styx/apps/nix-tools> 31 + <styx/apps/radicle> 32 + <styx/apps/topgrade> 33 + <styx/apps/wezterm> 34 + <styx/apps/zsa> 35 + <styx/apps/zen> 9 36 ]; 10 - nixos.users.users.quasi = { 11 - openssh.authorizedKeys.keys = [ 12 - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIezBKQfXf4ZHTKyCBavmlIXVFhJ7xd4MltEubJe9Kxe quasi@hades" 13 - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBQ8s7HeNm2rc4jxPdontGgXy3am1qSkXDbOgnT4Kz+J quasi@zagreus" 14 - ]; 15 - extraGroups = [ 16 - "docker" 17 - "wireshark" 18 - ]; 19 - }; 20 37 }; 21 - den.hosts.x86_64-linux.hades.users.quasi = { }; 22 - den.hosts.x86_64-linux.zagreus.users.quasi = { }; 23 38 }
+1
modules/services/flatpak.nix
··· 2 2 styx.flatpak.nixos = { 3 3 appstream.enable = true; 4 4 services.flatpak.enable = true; 5 + xdg.portal.enable = true; 5 6 }; 6 7 }
+16 -3
modules/services/sshd.nix
··· 1 1 { 2 2 styx.ssh.provides = { 3 3 client.homeManager.services.ssh-agent.enable = true; 4 - server.nixos.services.openssh = { 5 - enable = true; 6 - openFirewall = true; 4 + server.nixos = { 5 + services.openssh = { 6 + enable = true; 7 + openFirewall = true; 8 + }; 9 + users.users = 10 + let 11 + keys = [ 12 + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIezBKQfXf4ZHTKyCBavmlIXVFhJ7xd4MltEubJe9Kxe quasi@hades" 13 + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBQ8s7HeNm2rc4jxPdontGgXy3am1qSkXDbOgnT4Kz+J quasi@zagreus" 14 + ]; 15 + in 16 + { 17 + quasi.openssh.authorizedKeys = { inherit keys; }; 18 + root.openssh.authorizedKeys = { inherit keys; }; 19 + }; 7 20 }; 8 21 }; 9 22 }
-44
modules/systems.nix
··· 1 - { den, __findFile, ... }: 2 - { 3 - styx = { 4 - workstation = den.lib.parametric.atLeast { 5 - includes = [ 6 - <styx/boot> 7 - <styx/networking> 8 - <styx/secrets> 9 - <styx/easyeffects> 10 - <styx/emacs> 11 - <styx/flatpak> 12 - <styx/printing> 13 - <styx/ssh/client> 14 - <styx/syncthing/client> 15 - <styx/theming> 16 - <styx/wayland/niri> 17 - <styx/filesystems/ntfs> 18 - <styx/virt/podman> 19 - <styx/virt/qemu> 20 - <styx/tailscale> 21 - <styx/udev> 22 - <styx/xdg> 23 - <styx/microvm/host> 24 - ]; 25 - }; 26 - laptop = den.lib.parametric.atLeast { 27 - includes = [ 28 - <styx/boot/graphical> 29 - <styx/boot/secure> 30 - <styx/performance/responsive> 31 - <styx/power-mgmt> 32 - <styx/workstation> 33 - ]; 34 - }; 35 - desktop = den.lib.parametric.atLeast { 36 - includes = [ 37 - <styx/performance/max> 38 - <styx/ssh/server> 39 - <styx/workstation> 40 - <styx/networking/wol> 41 - ]; 42 - }; 43 - }; 44 - }