diff --git a/README.md b/README.md index 87fdf860..6f6e4db2 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This config is primarily organized for my own use, you may find individual servi ### Installation You can install this flake from any system with the Nix package manager installed, including any official images. Disko is used to automatically format your drive according to a declared config. -Use ``nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount ./filename.nix`` to format the disk with Disko. +Use ``nix-shell -p disko --run "sudo disko --mode destroy,format,mount ./disko.nix"`` to format the disk with Disko. You will likely want to generate a per hardware nix file using ``nixos-generate-config --root ./ --no-filesystems``, and adapt it to fit the format of ``/hosts``, to ensure essential drivers are loaded on boot. Once formatted and adjusted, NixOS can be installed to the mounted drive with ``nixos-install --root /mnt --flake .#host``, where ``host`` is a hostname defined in this flake. diff --git a/flake.lock b/flake.lock index 67ff2a5c..1a7b3ce5 100644 --- a/flake.lock +++ b/flake.lock @@ -2,7 +2,9 @@ "nodes": { "blender": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "unstable" + ] }, "locked": { "dir": "blender", @@ -37,18 +39,12 @@ } }, "crane": { - "inputs": { - "nixpkgs": [ - "lanzaboote", - "nixpkgs" - ] - }, "locked": { - "lastModified": 1717535930, - "narHash": "sha256-1hZ/txnbd/RmiBPNUs7i8UQw2N89uAK3UzrGAWdnFfU=", + "lastModified": 1748970125, + "narHash": "sha256-UDyigbDGv8fvs9aS95yzFfOKkEjx1LO3PL3DsKopohA=", "owner": "ipetkov", "repo": "crane", - "rev": "55e7754ec31dac78980c8be45f8a28e80e370946", + "rev": "323b5746d89e04b22554b061522dfce9e4c49b18", "type": "github" }, "original": { @@ -64,11 +60,11 @@ ] }, "locked": { - "lastModified": 1746411114, - "narHash": "sha256-mLlkVX1kKbAa/Ns5u26wDYw4YW4ziMFM21fhtRmfirU=", + "lastModified": 1749436314, + "narHash": "sha256-CqmqU5FRg5AadtIkxwu8ulDSOSoIisUMZRLlcED3Q5w=", "owner": "nix-community", "repo": "disko", - "rev": "b5d1320ebc2f34dbea4655f95167f55e2130cdb3", + "rev": "dfa4d1b9c39c0342ef133795127a3af14598017a", "type": "github" }, "original": { @@ -80,11 +76,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -96,11 +92,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -112,11 +108,11 @@ "flake-compat_3": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -133,11 +129,11 @@ ] }, "locked": { - "lastModified": 1717285511, - "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "lastModified": 1749398372, + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", "type": "github" }, "original": { @@ -172,11 +168,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -203,6 +199,32 @@ "type": "github" } }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "mailserver", + "flake-compat" + ], + "gitignore": "gitignore_2", + "nixpkgs": [ + "mailserver", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742649964, + "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -225,6 +247,28 @@ "type": "github" } }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "mailserver", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "hm": { "inputs": { "nixpkgs": [ @@ -232,16 +276,16 @@ ] }, "locked": { - "lastModified": 1746171682, - "narHash": "sha256-EyXUNSa+H+YvGVuQJP1nZskXAowxKYp79RNUsNdQTj4=", + "lastModified": 1749154018, + "narHash": "sha256-gjN3j7joRvT3a8Zgcylnd4NFsnXeDBumqiu4HmY1RIg=", "owner": "nix-community", "repo": "home-manager", - "rev": "50eee705bbdbac942074a8c120e8194185633675", + "rev": "7aae0ee71a17b19708b93b3ed448a1a0952bf111", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.11", + "ref": "release-25.05", "repo": "home-manager", "type": "github" } @@ -269,11 +313,11 @@ ] }, "locked": { - "lastModified": 1746158343, - "narHash": "sha256-i/1os9oEq0m/Da4FTdSqKUdI4+wzrvoDTuk1/dHSVDc=", + "lastModified": 1749495634, + "narHash": "sha256-NPifVq2XZGRCsLBoUt6M5YUTiIh23+ubq57w7mSODt8=", "owner": "Jovian-Experiments", "repo": "Jovian-NixOS", - "rev": "8b45a8efb2829adf2996b51965ada1e4620631ac", + "rev": "c40d2f31f92571bf341497884174a132829ef0fc", "type": "github" }, "original": { @@ -287,7 +331,6 @@ "crane": "crane", "flake-compat": "flake-compat", "flake-parts": "flake-parts", - "flake-utils": "flake-utils", "nixpkgs": [ "stable" ], @@ -295,16 +338,15 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1718178907, - "narHash": "sha256-eSZyrQ9uoPB9iPQ8Y5H7gAmAgAvCw3InStmU3oEjqsE=", + "lastModified": 1749471908, + "narHash": "sha256-uGfPqd43KTomeIVWUzHu3hGLWFsqYibhWLt2OaRic28=", "owner": "nix-community", "repo": "lanzaboote", - "rev": "b627ccd97d0159214cee5c7db1412b75e4be6086", + "rev": "00292388ad3b497763b81568d6ee5e1c4a2bcf85", "type": "github" }, "original": { "owner": "nix-community", - "ref": "v0.4.1", "repo": "lanzaboote", "type": "github" } @@ -313,22 +355,23 @@ "inputs": { "blobs": "blobs", "flake-compat": "flake-compat_2", + "git-hooks": "git-hooks", "nixpkgs": [ "stable" ], - "nixpkgs-24_11": "nixpkgs-24_11" + "nixpkgs-25_05": "nixpkgs-25_05" }, "locked": { - "lastModified": 1746469806, - "narHash": "sha256-kL3cc25sc0x+6gBZYjuE4566RT1E3XLQs4V8sl7D+VE=", + "lastModified": 1747965231, + "narHash": "sha256-BW3ktviEhfCN/z3+kEyzpDKAI8qFTwO7+S0NVA0C90o=", "owner": "simple-nixos-mailserver", "repo": "nixos-mailserver", - "rev": "14857a0309d7bbdf7c51bbfa309d0d13448ae77e", + "rev": "53007af63fade28853408370c4c600a63dd97f41", "type": "gitlab" }, "original": { "owner": "simple-nixos-mailserver", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixos-mailserver", "type": "gitlab" } @@ -337,14 +380,16 @@ "inputs": { "flake-compat": "flake-compat_3", "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_2" + "nixpkgs": [ + "stable" + ] }, "locked": { - "lastModified": 1746324578, - "narHash": "sha256-VUSIQ2W1Q3YgGvX3M4jPwIi3iIApdPHabhdrVjVgnwE=", + "lastModified": 1749607590, + "narHash": "sha256-vvu9zoaYuuPIGG9YKRBMNqOELGN+x2qHbEK6PrZ/Ky0=", "owner": "Infinidoge", "repo": "nix-minecraft", - "rev": "9e7fd83ba3b25b6f03561a5b7f8ea74b70296816", + "rev": "83aaf9c7e3caa39608992e723cfb997624920a35", "type": "github" }, "original": { @@ -375,64 +420,18 @@ "type": "github" } }, - "nixpkgs": { + "nixpkgs-25_05": { "locked": { - "lastModified": 1733808091, - "narHash": "sha256-KWwINTQelKOoQgrXftxoqxmKFZb9pLVfnRvK270nkVk=", + "lastModified": 1747610100, + "narHash": "sha256-rpR5ZPMkWzcnCcYYo3lScqfuzEw5Uyfh+R0EKZfroAc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a0f3e10d94359665dba45b71b4227b0aeb851f8e", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-24.11", - "type": "indirect" - } - }, - "nixpkgs-24_11": { - "locked": { - "lastModified": 1734083684, - "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-24.11", - "type": "indirect" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1710695816, - "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "rev": "ca49c4304acf0973078db0a9d200fd2bae75676d", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-23.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1742889210, - "narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "698214a32beb4f4c8e3942372c694f40848b360d", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -446,11 +445,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1746568792, - "narHash": "sha256-e3QkOhtYJUlMLGCVUmQWULtVDokSJqud0VmPZoRj4s0=", + "lastModified": 1749614785, + "narHash": "sha256-yn6eDwnUr9vZYpneg+XNh0/tC1KA9a+yXxvFMEzOfco=", "owner": "nix-community", "repo": "NUR", - "rev": "29d16321b0f48ad0d24c3eaf5656adfaaf99d19e", + "rev": "14f8439ad1190d3dd09f9fcc6a033d9710d68806", "type": "github" }, "original": { @@ -469,15 +468,14 @@ "nixpkgs": [ "lanzaboote", "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" + ] }, "locked": { - "lastModified": 1717664902, - "narHash": "sha256-7XfBuLULizXjXfBYy/VV+SpYMHreNRHk9nKMsm1bgb4=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "cc4d466cb1254af050ff7bdf47f6d404a7c646d1", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -490,6 +488,7 @@ "inputs": { "blender": "blender", "disko": "disko", + "flake-utils": "flake-utils", "hm": "hm", "impermanence": "impermanence", "jovian": "jovian", @@ -503,21 +502,17 @@ }, "rust-overlay": { "inputs": { - "flake-utils": [ - "lanzaboote", - "flake-utils" - ], "nixpkgs": [ "lanzaboote", "nixpkgs" ] }, "locked": { - "lastModified": 1717813066, - "narHash": "sha256-wqbRwq3i7g5EHIui0bIi84mdqZ/It1AXBSLJ5tafD28=", + "lastModified": 1749436897, + "narHash": "sha256-OkDtaCGQQVwVFz5HWfbmrMJR99sFIMXHCHEYXzUJEJY=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "6dc3e45fe4aee36efeed24d64fc68b1f989d5465", + "rev": "e7876c387e35dc834838aff254d8e74cf5bd4f19", "type": "github" }, "original": { @@ -528,16 +523,16 @@ }, "stable": { "locked": { - "lastModified": 1746422338, - "narHash": "sha256-NTtKOTLQv6dPfRe00OGSywg37A1FYqldS6xiNmqBUYc=", + "lastModified": 1750005367, + "narHash": "sha256-h/aac1dGLhS3qpaD2aZt25NdKY7b+JT0ZIP2WuGsJMU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5b35d248e9206c1f3baf8de6a7683fee126364aa", + "rev": "6c64dabd3aa85e0c02ef1cdcb6e1213de64baee3", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "type": "indirect" } }, @@ -594,11 +589,11 @@ }, "unstable": { "locked": { - "lastModified": 1746461020, - "narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=", + "lastModified": 1749794982, + "narHash": "sha256-Kh9K4taXbVuaLC0IL+9HcfvxsSUx8dPB5s5weJcc9pc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae", + "rev": "ee930f9755f58096ac6e8ca94a1887e0534e2d81", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 48728d61..03a9d53f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,9 +1,12 @@ { inputs = { # General inputs - stable.url = "nixpkgs/nixos-24.11"; + stable.url = "nixpkgs/nixos-25.05"; unstable.url = "nixpkgs/nixos-unstable"; + # Flake helpers + flake-utils.url = "github:numtide/flake-utils"; + # System inputs disko = { url = "github:nix-community/disko"; @@ -13,7 +16,7 @@ impermanence.url = "github:nix-community/impermanence"; lanzaboote = { - url = "github:nix-community/lanzaboote/v0.4.1"; + url = "github:nix-community/lanzaboote"; inputs.nixpkgs.follows = "stable"; }; @@ -25,72 +28,98 @@ # Service inputs mailserver = { - url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.11"; + url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-25.05"; inputs.nixpkgs.follows = "stable"; }; - minecraft.url = "github:Infinidoge/nix-minecraft"; + minecraft = { + url = "github:Infinidoge/nix-minecraft"; + inputs.nixpkgs.follows = "stable"; + }; # Home inputs hm = { - url = "github:nix-community/home-manager/release-24.11"; + url = "github:nix-community/home-manager/release-25.05"; inputs.nixpkgs.follows = "stable"; }; + nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "unstable"; }; - blender.url = "github:edolstra/nix-warez?dir=blender"; + # Specific apps + blender = { + url = "github:edolstra/nix-warez?dir=blender"; + inputs.nixpkgs.follows = "unstable"; + }; }; - outputs = { - stable, - unstable, + outputs = inputs: with inputs; - disko, - impermanence, - lanzaboote, + { + colmena = { + meta = { + # Info + description = "The Bun Systems"; + name = "bunhive"; - mailserver, - minecraft, + # NixPKGs + nixpkgs = import stable { + overlays = [ + blender.overlays.default + minecraft.overlay + ]; + system = "x86_64-linux"; + }; - jovian, + specialArgs = inputs; - hm, - nur, - blender, - ... - }@inputs: + # Use a different Nixpkgs import on some systems + nodeNixpkgs.jupiter = import unstable { system = "x86_64-linux"; }; + }; - let - mkNix = modules: channel: channel.lib.nixosSystem { - inherit modules; - specialArgs = inputs; + # Import the default config to all hosts + defaults.imports = [ + ./modules/system + disko.nixosModules.disko + hm.nixosModules.home-manager + impermanence.nixosModules.impermanence + jovian.nixosModules.default + lanzaboote.nixosModules.lanzaboote + minecraft.nixosModules.minecraft-servers + ]; + + # Desktops + tower.imports = [ ./hosts/tower ]; + hidden.imports = [ ./hosts/hidden ]; + + # Laptops + intuos.imports = [ ./hosts/intuos ]; + jupiter.imports = [ ./hosts/jupiter ]; + flight.imports = [ ./hosts/flight ]; + + # Servers + midas.imports = [ ./hosts/midas ]; + kitty.imports = [ ./hosts/kitty ]; + detritus.imports = [ ./hosts/detritus ]; + prophet.imports = [ ./hosts/prophet ]; }; - mkHome = modules: channel: arch: hm.lib.homeManagerConfiguration { - inherit modules; - pkgs = builtins.getAttr arch channel.legacyPackages; + } + + // flake-utils.lib.eachDefaultSystemPassThrough (system: let + mkHome = extraModules: hm.lib.homeManagerConfiguration { + modules = [ + ./modules/home + { targets.genericLinux.enable = true; } + ] ++ extraModules; extraSpecialArgs = inputs; + pkgs = builtins.getAttr system stable.legacyPackages; }; in { - # nh os switch /path -H host - nixosConfigurations = { - tower = mkNix [ ./hosts/tower ] stable; # Main Desktop - - intuos = mkNix [ ./hosts/intuos ] stable; # Wacom Intuos Tablet - jupiter = mkNix [ ./hosts/jupiter ] unstable; # Steam Deck - redmond = mkNix [ ./hosts/redmond ] stable; # Lenovo Dual-Boot - - midas = mkNix [ ./hosts/midas ] stable; # Dell Optiplex 5040 - kitty = mkNix [ ./hosts/kitty ] stable; # Dell Optiplex 7010 - prophet = mkNix [ ./hosts/prophet ] stable; # Oracle Neoverse-N1 - }; - - # nh home switch /path -c arch homeConfigurations = { - x86 = mkHome [ ./modules/home ] stable "x86_64-linux"; - aarch = mkHome [ ./modules/home ] stable "aarch64-linux"; + default = mkHome [ ]; + desktop = mkHome [{ home.guifull.enable = true; }]; }; - }; + }); } diff --git a/hosts/detritus/boot/default.nix b/hosts/detritus/boot/default.nix new file mode 100644 index 00000000..a0b1cae3 --- /dev/null +++ b/hosts/detritus/boot/default.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + boot = { + kernelPackages = pkgs.linuxPackages_hardened; + loader.limine.enable = true; + }; +} diff --git a/hosts/detritus/default.nix b/hosts/detritus/default.nix new file mode 100644 index 00000000..010d2eca --- /dev/null +++ b/hosts/detritus/default.nix @@ -0,0 +1,22 @@ +{ ... }: +{ + imports = [ + ./boot + ./disko + ./filesystems + ./hardware + ]; + + system = { + nixos.tags = [ "server" ]; + stateVersion = "25.05"; + }; + + deployment.targetHost = "53a:2092:12ff:889c:2e1f:1d79:f05a:cadd"; + + networking.hostId = "0917a5c1"; + + services.nfs.server.enable = true; + + virtualisation.libvirtd.enable = true; +} diff --git a/hosts/detritus/disko/default.nix b/hosts/detritus/disko/default.nix new file mode 100644 index 00000000..09ce1b53 --- /dev/null +++ b/hosts/detritus/disko/default.nix @@ -0,0 +1,99 @@ +{ config, name, ... }: +{ + disko.devices = { + disk = { + "${name}" = { + type = "disk"; + device = "/dev/sda"; + content = { + type = "gpt"; + partitions = { + boot = { + priority = 1; + size = "1M"; + type = "EF02"; + }; + ESP = { + size = "2G"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + main = { + size = "100%"; + content = { + type = "lvm_pv"; + vg = "${name}"; + }; + }; + }; + }; + }; + }; + + lvm_vg = { + "${name}" = { + type = "lvm_vg"; + lvs = { + root = { + size = "100%"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; + subvolumes = { + "/root" = { + mountpoint = "/"; + mountOptions = [ + "compress=zstd" + "ssd" + ]; + }; + "/prev" = { + mountpoint = "/prev"; + mountOptions = [ + "compress=zstd" + "noexec" + "ssd" + ]; + }; + "/nix" = { + mountpoint = "/nix"; + mountOptions = [ + "compress=zstd" + "ssd" + ]; + }; + + # Impermanence + "/persist" = { + mountpoint = "/persist"; + mountOptions = [ + "compress=zstd" + "ssd" + ]; + }; + "/persist/.snapshots" = { }; + "/persist/home" = { }; + "/persist/home/.snapshots" = { }; + }; + }; + }; + swap = { + size = "2G"; + content = { + type = "swap"; + discardPolicy = "both"; + }; + }; + }; + }; + }; + }; + + # Needed for impermanence + fileSystems."/persist".neededForBoot = true; +} diff --git a/hosts/detritus/filesystems/default.nix b/hosts/detritus/filesystems/default.nix new file mode 100644 index 00000000..63042a0a --- /dev/null +++ b/hosts/detritus/filesystems/default.nix @@ -0,0 +1,14 @@ +{ ... }: +{ + fileSystems = { + "/persist/storage" = { + device = "/dev/disk/by-uuid/d0d6783f-ad51-4d85-b8a9-3374f6460ef6"; + fsType = "btrfs"; + options = [ + "nofail" + "nosuid" + "subvol=storage" + ]; + }; + }; +} diff --git a/hosts/detritus/hardware/default.nix b/hosts/detritus/hardware/default.nix new file mode 100644 index 00000000..73a80f35 --- /dev/null +++ b/hosts/detritus/hardware/default.nix @@ -0,0 +1,23 @@ +{ modulesPath, ... }: +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot = { + initrd = { + availableKernelModules = [ + "ahci" + "ehci_pci" + "sd_mod" + "usb_storage" + "usbhid" + "xhci_pci_renesas" + ]; + kernelModules = [ "dm-snapshot" ]; + }; + kernelModules = [ "kvm-intel" ]; + }; + + hardware.cpu.intel.updateMicrocode = true; + + nixpkgs.hostPlatform = "x86_64-linux"; +} diff --git a/hosts/flight/boot/default.nix b/hosts/flight/boot/default.nix new file mode 100644 index 00000000..2d553d61 --- /dev/null +++ b/hosts/flight/boot/default.nix @@ -0,0 +1,11 @@ +{ lib, pkgs, ... }: +{ + boot = { + kernelPackages = pkgs.linuxPackages; + loader.limine = { + enable = true; + biosDevice = lib.mkForce "/dev/disk/by-id/ata-XSTAR_SSD_64GB_XSFA2011000462"; + }; + plymouth.enable = true; + }; +} diff --git a/hosts/flight/default.nix b/hosts/flight/default.nix new file mode 100644 index 00000000..fe3b545a --- /dev/null +++ b/hosts/flight/default.nix @@ -0,0 +1,17 @@ +{ ... }: +{ + imports = [ + ./boot + ./filesystems + ./hardware + ./root + ./user + ]; + + system = { + nixos.tags = [ "pc" ]; + stateVersion = "25.05"; + }; + + deployment.targetHost = "409:b2b1:966c:b13:6d67:2d6b:45e2:f048"; +} diff --git a/hosts/flight/filesystems/default.nix b/hosts/flight/filesystems/default.nix new file mode 100644 index 00000000..8a568d0f --- /dev/null +++ b/hosts/flight/filesystems/default.nix @@ -0,0 +1,14 @@ +{ config, ... }: +{ + fileSystems = { + "/persist/storage" = { + device = "/dev/disk/by-uuid/3d6f81f2-7fa5-40a2-85bb-56f4cab63773"; + fsType = "btrfs"; + options = [ + "nofail" + "nosuid" + "subvol=storage" + ]; + }; + }; +} diff --git a/hosts/flight/hardware/default.nix b/hosts/flight/hardware/default.nix new file mode 100644 index 00000000..fa1b984c --- /dev/null +++ b/hosts/flight/hardware/default.nix @@ -0,0 +1,35 @@ +{ config, modulesPath, ... }: +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot = { + initrd = { + availableKernelModules = [ + "ehci_pci" + "ahci" + "xhci_pci" + "usb_storage" + "sd_mod" + "sr_mod" + ]; + kernelModules = [ "dm-snapshot" ]; + }; + kernelModules = [ "kvm-intel" ]; + }; + + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware = { + cpu.intel.updateMicrocode = true; + nvidia = { + package = config.boot.kernelPackages.nvidiaPackages.legacy_390; + prime = { + sync.enable = true; + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; + }; + + nixpkgs.hostPlatform = "x86_64-linux"; +} diff --git a/hosts/flight/root/default.nix b/hosts/flight/root/default.nix new file mode 100644 index 00000000..7bccd4b8 --- /dev/null +++ b/hosts/flight/root/default.nix @@ -0,0 +1,54 @@ +{ config, name, ... }: +{ + boot.initrd.luks.devices."${name}-disk".device = "/dev/disk/by-uuid/0fc43c11-c382-4e37-812b-8866b1b20e68"; + + fileSystems = { + "/boot" = { + device = "/dev/disk/by-uuid/FA96-EF11"; + fsType = "vfat"; + options = [ "umask=0077" ]; + }; + + "/" = { + device = "/dev/disk/by-uuid/bbaf733b-14af-417b-b1c8-2f0534995483"; + fsType = "btrfs"; + options = [ + "compress=zstd" + "ssd" + "subvol=root" + ]; + }; + "/prev" = { + device = "/dev/disk/by-uuid/bbaf733b-14af-417b-b1c8-2f0534995483"; + fsType = "btrfs"; + options = [ + "compress=zstd" + "noexec" + "ssd" + "subvol=prev" + ]; + }; + "/nix" = { + device = "/dev/disk/by-uuid/bbaf733b-14af-417b-b1c8-2f0534995483"; + fsType = "btrfs"; + options = [ + "compress=zstd" + "ssd" + "subvol=nix" + ]; + }; + + "/persist" = { + device = "/dev/disk/by-uuid/bbaf733b-14af-417b-b1c8-2f0534995483"; + fsType = "btrfs"; + neededForBoot = true; + options = [ + "compress=zstd" + "ssd" + "subvol=persist" + ]; + }; + }; + + swapDevices = [ { device = "/dev/disk/by-uuid/93ac8c5c-c947-4b45-a12a-146e87398517"; } ]; +} diff --git a/hosts/flight/user/default.nix b/hosts/flight/user/default.nix new file mode 100644 index 00000000..e408de6a --- /dev/null +++ b/hosts/flight/user/default.nix @@ -0,0 +1,7 @@ +{ config, lib, ... }: +{ + home-manager.users."${config.vars.mainUser}" = { + home.guifull.enable = true; + wayland.windowManager.sway.extraSessionCommands = lib.mkForce ""; + }; +} diff --git a/hosts/hidden/boot/default.nix b/hosts/hidden/boot/default.nix new file mode 100644 index 00000000..1919dae1 --- /dev/null +++ b/hosts/hidden/boot/default.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + boot = { + kernelPackages = pkgs.linuxPackages_6_14; + loader.limine.enable = true; + plymouth.enable = true; + }; +} diff --git a/hosts/hidden/default.nix b/hosts/hidden/default.nix new file mode 100644 index 00000000..c0da8fb6 --- /dev/null +++ b/hosts/hidden/default.nix @@ -0,0 +1,17 @@ +{ ... }: +{ + imports = [ + ./boot + ./disko + ./hardware + ./services + ./user + ]; + + system = { + nixos.tags = [ "pc" ]; + stateVersion = "24.11"; + }; + + deployment.targetHost = "4ec:1001:ca5a:ae79:40e2:cb4c:e3c9:f401"; +} diff --git a/hosts/redmond/disko/default.nix b/hosts/hidden/disko/default.nix similarity index 72% rename from hosts/redmond/disko/default.nix rename to hosts/hidden/disko/default.nix index 4ebcb697..60a3aa22 100644 --- a/hosts/redmond/disko/default.nix +++ b/hosts/hidden/disko/default.nix @@ -1,16 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; - device = "/dev/nvme0n1"; + device = "/dev/sda"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -28,12 +27,12 @@ size = "100%"; content = { type = "luks"; - name = "${config.networking.hostName}-disk"; + name = "${name}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -43,7 +42,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { @@ -54,25 +53,35 @@ subvolumes = { "/root" = { mountpoint = "/"; - mountOptions = [ "compress=zstd" ]; + mountOptions = [ + "compress=zstd" + "ssd" + ]; }; "/prev" = { mountpoint = "/prev"; mountOptions = [ "compress=zstd" "noexec" + "ssd" ]; }; "/nix" = { mountpoint = "/nix"; - mountOptions = [ "compress=zstd" ]; + mountOptions = [ + "compress=zstd" + "ssd" + ]; }; - # Impermanence - "/persist" = { - mountpoint = "/persist"; - mountOptions = [ "compress=zstd" ]; - }; + # Impermanence + "/persist" = { + mountpoint = "/persist"; + mountOptions = [ + "compress=zstd" + "ssd" + ]; + }; "/persist/.snapshots" = { }; "/persist/home" = { }; "/persist/home/.snapshots" = { }; @@ -80,7 +89,7 @@ }; }; swap = { - size = "8G"; + size = "2G"; content = { type = "swap"; discardPolicy = "both"; diff --git a/hosts/hidden/hardware/default.nix b/hosts/hidden/hardware/default.nix new file mode 100644 index 00000000..93d299a4 --- /dev/null +++ b/hosts/hidden/hardware/default.nix @@ -0,0 +1,27 @@ +{ modulesPath, ... }: +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot = { + initrd = { + availableKernelModules = [ + "ahci" + "nvme" + "sd_mod" + "sr_mod" + "usb_storage" + "usbhid" + "xhci_pci" + ]; + kernelModules = [ "dm-snapshot" ]; + }; + kernelModules = [ "kvm-intel" ]; + }; + + hardware.cpu = { + amd.updateMicrocode = true; + intel.updateMicrocode = true; + }; + + nixpkgs.hostPlatform = "x86_64-linux"; +} diff --git a/hosts/hidden/services/default.nix b/hosts/hidden/services/default.nix new file mode 100644 index 00000000..e1b677cd --- /dev/null +++ b/hosts/hidden/services/default.nix @@ -0,0 +1,9 @@ +{ config, lib, ... }: +{ + networking.useNetworkd = lib.mkForce false; + + virtualisation = { + libvirtd.enable = true; + vmware.host.enable = true; + }; +} diff --git a/hosts/hidden/user/default.nix b/hosts/hidden/user/default.nix new file mode 100644 index 00000000..60e0e93a --- /dev/null +++ b/hosts/hidden/user/default.nix @@ -0,0 +1,7 @@ +{ config, ... }: +{ + home-manager.users."${config.vars.mainUser}".home = { + desktop.enable = true; + school.enable = true; + }; +} diff --git a/hosts/intuos/boot/default.nix b/hosts/intuos/boot/default.nix index f6458c21..84a34f0c 100644 --- a/hosts/intuos/boot/default.nix +++ b/hosts/intuos/boot/default.nix @@ -1,7 +1,6 @@ -{ pkgs, ... }: +{ ... }: { boot = { - kernelPackages = pkgs.linuxPackages_latest; lanzaboote.enable = true; plymouth.enable = true; }; diff --git a/hosts/intuos/default.nix b/hosts/intuos/default.nix index ceea57fa..4e3a9f3b 100644 --- a/hosts/intuos/default.nix +++ b/hosts/intuos/default.nix @@ -3,16 +3,14 @@ imports = [ ./boot ./disko - ./filesystems ./hardware ./user - ../../modules/system ]; - networking.hostName = "intuos"; - system = { - desktop.enable = true; + nixos.tags = [ "pc" ]; stateVersion = "24.11"; }; + + deployment.targetHost = "40e:404:a427:da33:163e:97b3:a2a3:9ed4"; } diff --git a/hosts/intuos/disko/default.nix b/hosts/intuos/disko/default.nix index 4d195170..e204a376 100644 --- a/hosts/intuos/disko/default.nix +++ b/hosts/intuos/disko/default.nix @@ -1,16 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; device = "/dev/sda"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -28,12 +27,12 @@ size = "100%"; content = { type = "luks"; - name = "${config.networking.hostName}-disk"; + name = "${name}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -43,7 +42,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/intuos/filesystems/default.nix b/hosts/intuos/filesystems/default.nix deleted file mode 100644 index e17b5eec..00000000 --- a/hosts/intuos/filesystems/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, ... }: -{ - fileSystems = { - "/home/${config.sysusers.main}/Network/Midas" = { - device = "10.2.0.1:/storage"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; - "/home/${config.sysusers.main}/Network/Kitty" = { - device = "10.2.0.2:/storage/bun"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; - "/home/${config.sysusers.main}/Network/Prophet" = { - device = "mx.nixfox.ca:/storage"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; - }; -} diff --git a/hosts/intuos/hardware/default.nix b/hosts/intuos/hardware/default.nix index a6b9aa1b..bf6c9f70 100644 --- a/hosts/intuos/hardware/default.nix +++ b/hosts/intuos/hardware/default.nix @@ -1,4 +1,4 @@ -{ config, lib, modulesPath, ... }: +{ modulesPath, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; @@ -16,6 +16,7 @@ kernelModules = [ "kvm-intel" ]; }; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = true; + + nixpkgs.hostPlatform = "x86_64-linux"; } diff --git a/hosts/intuos/user/default.nix b/hosts/intuos/user/default.nix index b609338c..256a66ed 100644 --- a/hosts/intuos/user/default.nix +++ b/hosts/intuos/user/default.nix @@ -1,8 +1,7 @@ -{ config, lib, ... }: +{ config, ... }: { - home-manager.users."${config.sysusers.main}".home = { + home-manager.users."${config.vars.mainUser}".home = { desktop.enable = true; production.enable = true; - stateVersion = lib.mkForce config.system.stateVersion; }; } diff --git a/hosts/jupiter/boot/default.nix b/hosts/jupiter/boot/default.nix index 3cf63f7f..17b17837 100644 --- a/hosts/jupiter/boot/default.nix +++ b/hosts/jupiter/boot/default.nix @@ -1,8 +1,8 @@ -{ pkgs, ... }: +{ pkgsStable, ... }: { boot = { - kernelPackages = pkgs.linuxPackages_latest; - loader.systemd-boot.enable = true; + kernelPackages = pkgsStable.linuxPackages_6_14; + loader.limine.enable = true; plymouth.enable = true; }; } diff --git a/hosts/jupiter/default.nix b/hosts/jupiter/default.nix index fb5554d1..7271d00e 100644 --- a/hosts/jupiter/default.nix +++ b/hosts/jupiter/default.nix @@ -8,14 +8,14 @@ ./jovian ./services ./user - ../../modules/system ]; - networking.hostName = "jupiter"; - system = { - desktop.enable = true; - steamdeck.enable = true; + nixos.tags = [ "pc" ]; stateVersion = "24.11"; }; + + deployment.targetHost = "5ce:969c:40d1:9575:f5e:591d:c377:a20b"; + + jovian.steam.enable = true; } diff --git a/hosts/jupiter/disko/default.nix b/hosts/jupiter/disko/default.nix index 900c8a59..abb7808a 100644 --- a/hosts/jupiter/disko/default.nix +++ b/hosts/jupiter/disko/default.nix @@ -1,16 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; device = "/dev/nvme0n1"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -28,7 +27,7 @@ size = "100%"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -37,7 +36,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/jupiter/filesystems/default.nix b/hosts/jupiter/filesystems/default.nix index 7c1feb2d..7f734c26 100644 --- a/hosts/jupiter/filesystems/default.nix +++ b/hosts/jupiter/filesystems/default.nix @@ -1,11 +1,13 @@ { config, ... }: { - fileSystems."/mnt/Games" = { - device = "/dev/disk/by-uuid/cb109a85-846d-4417-9c50-a2279bd20803"; - fsType = "btrfs"; - options = [ - "nofail" - "nosuid" - ]; + fileSystems = { + "/mnt/Games" = { + device = "/dev/disk/by-uuid/cb109a85-846d-4417-9c50-a2279bd20803"; + fsType = "btrfs"; + options = [ + "nofail" + "nosuid" + ]; + }; }; } diff --git a/hosts/jupiter/hardware/default.nix b/hosts/jupiter/hardware/default.nix index a3e7b2bf..811cc7c9 100644 --- a/hosts/jupiter/hardware/default.nix +++ b/hosts/jupiter/hardware/default.nix @@ -1,4 +1,4 @@ -{ config, lib, modulesPath, ... }: +{ modulesPath, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; @@ -15,6 +15,7 @@ kernelModules = [ "kvm-amd" ]; }; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.amd.updateMicrocode = true; + + nixpkgs.hostPlatform = "x86_64-linux"; } diff --git a/hosts/jupiter/jovian/default.nix b/hosts/jupiter/jovian/default.nix index fa5ecf0c..b8d075e9 100644 --- a/hosts/jupiter/jovian/default.nix +++ b/hosts/jupiter/jovian/default.nix @@ -1,16 +1,12 @@ { config, lib, pkgs, jovian, ... }: { - imports = [ jovian.nixosModules.jovian ]; + imports = [ ./desktop ]; - options.system.steamdeck.enable = lib.mkEnableOption "Jovian NixOS environment"; - - config = lib.mkIf config.system.steamdeck.enable { + config = lib.mkIf config.jovian.steam.enable { jovian = { steam = { - enable = true; autoStart = true; - desktopSession = "gnome"; - user = config.sysusers.main; + user = config.vars.mainUser; }; decky-loader = { enable = true; @@ -22,80 +18,46 @@ }; }; + # Evil kernel boot.kernelPackages = lib.mkForce pkgs.linuxPackages_jovian; - programs.steam = { - extest.enable = true; - localNetworkGameTransfers.openFirewall = true; - remotePlay.openFirewall = true; - }; + programs.steam.extest.enable = true; - services = { - keyd.enable = lib.mkForce false; - tlp.enable = lib.mkForce false; - xserver.desktopManager.gnome.enable = true; - }; + hardware.xone.enable = true; + # Use networkmanager for ui compatibility networking = { networkmanager.enable = true; wireless.enable = lib.mkForce false; }; - environment = { - persistence."/persist" = { - directories = [ - "/etc/NetworkManager/system-connections" - "/var/lib/decky-loader" - ]; - users.${config.sysusers.main}.directories = [ ".steam" ]; - }; - gnome.excludePackages = with pkgs; [ - adwaita-icon-theme - baobab - epiphany - evince - file-roller - geary - gnome-calculator - gnome-calendar - gnome-characters - gnome-clocks - gnome-color-manager - gnome-connections - gnome-console - gnome-contacts - gnome-disk-utility - gnome-font-viewer - gnome-logs - gnome-maps - gnome-music - gnome-shell-extensions - gnome-software - gnome-system-monitor - gnome-text-editor - gnome-tour - gnome-user-docs - gnome-weather - loupe - nautilus - orca - seahorse - simple-scan - snapshot - sushi - sysprof - totem - yelp - ]; + # Disable conflicting services + services = { + keyd.enable = lib.mkForce false; + tlp.enable = lib.mkForce false; }; + # Disable network filesystems + fileSystems = { + "midas".enable = false; + "kitty".enable = false; + "detritus".enable = false; + "prophet".enable = false; + }; + + environment.persistence."/persist".directories = [ + "/etc/NetworkManager/system-connections" + "/var/lib/decky-loader" + ]; + nixpkgs.allowUnfreePackages = [ "steam" "steam-jupiter-unwrapped" "steamdeck-firmware" "steamdeck-hw-theme" + "xow_dongle-firmware" ]; - specialisation.desktop.configuration.config.system.steamdeck.enable = lib.mkForce false; + specialisation.desktop.configuration.config.jovian.steam.enable = lib.mkForce false; }; } diff --git a/hosts/jupiter/jovian/desktop/default.nix b/hosts/jupiter/jovian/desktop/default.nix new file mode 100644 index 00000000..8c9655dd --- /dev/null +++ b/hosts/jupiter/jovian/desktop/default.nix @@ -0,0 +1,48 @@ +{ config, lib, pkgs, ... }: +{ + config = lib.mkIf config.jovian.steam.enable { + jovian.steam.desktopSession = "gnome"; + + services.desktopManager.gnome.enable = true; + + environment.gnome.excludePackages = with pkgs; [ + adwaita-icon-theme + baobab + epiphany + evince + file-roller + geary + gnome-calculator + gnome-calendar + gnome-characters + gnome-clocks + gnome-color-manager + gnome-connections + gnome-console + gnome-contacts + gnome-disk-utility + gnome-font-viewer + gnome-logs + gnome-maps + gnome-music + gnome-remote-desktop + gnome-shell-extensions + gnome-software + gnome-system-monitor + gnome-text-editor + gnome-tour + gnome-user-docs + gnome-weather + loupe + nautilus + orca + seahorse + simple-scan + snapshot + sushi + sysprof + totem + yelp + ]; + }; +} diff --git a/hosts/jupiter/services/default.nix b/hosts/jupiter/services/default.nix index f633f5d2..3ead25ff 100644 --- a/hosts/jupiter/services/default.nix +++ b/hosts/jupiter/services/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - config = lib.mkIf (!config.system.steamdeck.enable) { + config = lib.mkIf (!config.jovian.steam.enable) { networking.useNetworkd = lib.mkForce false; services.globalprotect.enable = true; @@ -9,12 +9,5 @@ libvirtd.enable = true; vmware.host.enable = true; }; - - nixpkgs.allowUnfreePackages = [ "vmware-workstation" ]; - - environment.persistence."/persist".users.${config.sysusers.main}.directories = [ - "vmware" - ".vmware" - ]; }; } diff --git a/hosts/jupiter/user/default.nix b/hosts/jupiter/user/default.nix index e4b30d0b..43b57345 100644 --- a/hosts/jupiter/user/default.nix +++ b/hosts/jupiter/user/default.nix @@ -1,11 +1,8 @@ -{ config, lib, ... }: +{ config, ... }: { - home-manager.users."${config.sysusers.main}".home = { - desktop.enable = true; - gaming.enable = true; - production.enable = true; + home-manager.users."${config.vars.mainUser}".home = { + guifull.enable = true; school.enable = true; enableNixpkgsReleaseCheck = false; - stateVersion = lib.mkForce config.system.stateVersion; }; } diff --git a/hosts/kitty/boot/default.nix b/hosts/kitty/boot/default.nix index e21b5c06..a0b1cae3 100644 --- a/hosts/kitty/boot/default.nix +++ b/hosts/kitty/boot/default.nix @@ -2,6 +2,6 @@ { boot = { kernelPackages = pkgs.linuxPackages_hardened; - loader.systemd-boot.enable = true; + loader.limine.enable = true; }; } diff --git a/hosts/kitty/default.nix b/hosts/kitty/default.nix index 64f97ede..a2fb8126 100644 --- a/hosts/kitty/default.nix +++ b/hosts/kitty/default.nix @@ -6,20 +6,16 @@ ./filesystems ./hardware ./network - ./user - ../../modules/system + ./services ]; - networking = { - hostName = "kitty"; - hostId = "8745e22e"; - }; - system = { - server.enable = true; - extraUsers.enable = true; + nixos.tags = [ + "extra-users" + "server" + ]; stateVersion = "24.11"; }; - services.nfs.server.enable = true; + deployment.targetHost = "53f:dc2d:80c9:3ca2:4b15:ef4d:38a0:c868"; } diff --git a/hosts/kitty/disko/default.nix b/hosts/kitty/disko/default.nix index 2191e808..5959c753 100644 --- a/hosts/kitty/disko/default.nix +++ b/hosts/kitty/disko/default.nix @@ -1,16 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; - device = "/dev/sda"; + device = "/dev/disk/by-id/ata-KINGSTON_SA400S37120G_50026B7783DBB232"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -28,7 +27,7 @@ size = "100%"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -37,7 +36,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/kitty/filesystems/default.nix b/hosts/kitty/filesystems/default.nix index 29880794..0e452e07 100644 --- a/hosts/kitty/filesystems/default.nix +++ b/hosts/kitty/filesystems/default.nix @@ -1,4 +1,4 @@ -{ config, ... }: +{ ... }: { fileSystems = { "/persist/storage" = { @@ -9,23 +9,5 @@ "nosuid" ]; }; - "/home/${config.sysusers.main}/Network/Midas" = { - device = "11.0.0.1:/storage"; - fsType = "nfs4"; - options = [ - "x-systemd.automount" - "noauto" - "soft" - ]; - }; - "/home/${config.sysusers.main}/Network/Prophet" = { - device = "mx.nixfox.ca:/storage"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; }; } diff --git a/hosts/kitty/hardware/default.nix b/hosts/kitty/hardware/default.nix index 3e917a7a..64943f7a 100644 --- a/hosts/kitty/hardware/default.nix +++ b/hosts/kitty/hardware/default.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ ... }: { boot.initrd = { availableKernelModules = [ @@ -9,6 +9,7 @@ kernelModules = [ "dm-snapshot" ]; }; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = true; + + nixpkgs.hostPlatform = "x86_64-linux"; } diff --git a/hosts/kitty/id_ed25519.pub b/hosts/kitty/id_ed25519.pub deleted file mode 100644 index 0b6823a8..00000000 --- a/hosts/kitty/id_ed25519.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDOBa+Wz1FqFEnMeXflP0CPt2wnN819T+FdSCIwFLJjN diff --git a/hosts/kitty/network/default.nix b/hosts/kitty/network/default.nix index 7775a2fe..4518518c 100644 --- a/hosts/kitty/network/default.nix +++ b/hosts/kitty/network/default.nix @@ -2,21 +2,13 @@ { networking = { interfaces."eno1".ipv4.addresses = [{ - address = "10.2.0.2"; + address = "11.2.0.1"; prefixLength = 8; }]; defaultGateway = { - address = "10.1.0.1"; + address = "11.1.0.1"; interface = "eno1"; }; - - vlans.internal = { - id=100; - interface="eno1"; - }; - interfaces.internal.ipv4.addresses = [{ - address = "11.0.0.2"; - prefixLength = 8; - }]; + hostId = "8745e22e"; }; } diff --git a/hosts/kitty/services/default.nix b/hosts/kitty/services/default.nix new file mode 100644 index 00000000..a330605b --- /dev/null +++ b/hosts/kitty/services/default.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + services = { + nfs.server.enable = true; + nginx.enable = true; + }; + + virtualisation.incus.enable = true; +} diff --git a/hosts/kitty/user/default.nix b/hosts/kitty/user/default.nix deleted file mode 100644 index 9366cadc..00000000 --- a/hosts/kitty/user/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, lib, ... }: -{ - home-manager.users."${config.sysusers.main}".home = { - stateVersion = lib.mkForce config.system.stateVersion; - }; -} diff --git a/hosts/midas/default.nix b/hosts/midas/default.nix index 766fb372..7ae69555 100644 --- a/hosts/midas/default.nix +++ b/hosts/midas/default.nix @@ -7,17 +7,12 @@ ./hardware ./network ./services - ./user - ../../modules/system ]; - networking = { - hostName = "midas"; - hostId = "38ba3f57"; - }; - system = { - server.enable = true; + nixos.tags = [ "server" ]; stateVersion = "24.11"; }; + + deployment.targetHost = "538:e163:87ba:f847:3646:18b6:6b01:d8f8"; } diff --git a/hosts/midas/disko/default.nix b/hosts/midas/disko/default.nix index 60e95465..7978befb 100644 --- a/hosts/midas/disko/default.nix +++ b/hosts/midas/disko/default.nix @@ -1,16 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; - device = "/dev/nvme0n1"; + device = "/dev/disk/by-id/nvme-eui.00080d03001365cc"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -28,12 +27,12 @@ size = "100%"; content = { type = "luks"; - name = "${config.networking.hostName}-disk"; + name = "${name}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -43,7 +42,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/midas/filesystems/default.nix b/hosts/midas/filesystems/default.nix index 0abb186a..3048a803 100644 --- a/hosts/midas/filesystems/default.nix +++ b/hosts/midas/filesystems/default.nix @@ -10,14 +10,5 @@ "subvol=persist" ]; }; - "/kitty" = { - device = "11.0.0.2:/storage/bun"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; }; } diff --git a/hosts/midas/hardware/default.nix b/hosts/midas/hardware/default.nix index 19194610..d3f129ad 100644 --- a/hosts/midas/hardware/default.nix +++ b/hosts/midas/hardware/default.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ ... }: { boot.initrd = { availableKernelModules = [ @@ -10,6 +10,7 @@ kernelModules = [ "dm-snapshot" ]; }; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = true; + + nixpkgs.hostPlatform = "x86_64-linux"; } diff --git a/hosts/midas/id_ed25519.pub b/hosts/midas/id_ed25519.pub deleted file mode 100644 index 082fe2e0..00000000 --- a/hosts/midas/id_ed25519.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFGHaxdTeC1xnTx2BY5LLR5LxhdSkmYoWuOeEuRIz0k diff --git a/hosts/midas/network/default.nix b/hosts/midas/network/default.nix index 17b47f4f..909a3623 100644 --- a/hosts/midas/network/default.nix +++ b/hosts/midas/network/default.nix @@ -2,45 +2,13 @@ { networking = { interfaces."enp0s31f6".ipv4.addresses = [{ - address = "10.2.0.1"; + address = "11.2.0.1"; prefixLength = 8; }]; defaultGateway = { - address = "10.1.0.1"; + address = "11.1.0.1"; interface = "enp0s31f6"; }; - - vlans.internal = { - id=100; - interface="enp0s31f6"; - }; - interfaces.internal.ipv4.addresses = [{ - address = "11.0.0.1"; - prefixLength = 8; - }]; - - nftables.tables.forwarding = { - family = "inet"; - content = '' - chain incoming { - type nat hook prerouting priority dstnat; policy accept; - tcp dport 2211 dnat ip to 11.0.0.100:22 comment "Tower SSH" - tcp dport 2222 dnat ip to 11.0.0.2:22 comment "Kitty SSH" - - udp dport { 27005, 27015 } dnat ip to 11.0.0.100 comment "PC Hosted Games" - - tcp dport { 48010, 47989, 47984 } dnat ip to 11.0.0.100 comment "PC Sunshine TCP" - udp dport { 47998, 47999, 48000 } dnat ip to 11.0.0.100 comment "PC Sunshine UDP" - } - - chain forward { - type nat hook postrouting priority 100; policy accept; - masquerade - } - ''; - }; + hostId = "38ba3f57"; }; - - # Enable IP forwarding for the server configuration - boot.kernel.sysctl."net.ipv4.ip_forward" = 1; } diff --git a/hosts/midas/services/default.nix b/hosts/midas/services/default.nix index 683391b3..cddcad85 100644 --- a/hosts/midas/services/default.nix +++ b/hosts/midas/services/default.nix @@ -1,21 +1,21 @@ { ... }: { + imports = [ ./nginx ]; + services = { cloudflare-dyndns.enable = true; forgejo.enable = true; + hedgedoc.enable = true; icecast.enable = true; jellyfin.enable = true; - lemmy.enable = true; mastodon.enable = true; matrix-synapse.enable = true; mysql.enable = true; nextcloud.enable = true; nfs.server.enable = true; - nginx.enable = true; owncast.enable = true; transmission.enable = true; vaultwarden.enable = true; - webserver.enable = true; minecraft-servers = { enable = true; diff --git a/hosts/midas/services/nginx/default.nix b/hosts/midas/services/nginx/default.nix new file mode 100644 index 00000000..99142a59 --- /dev/null +++ b/hosts/midas/services/nginx/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + imports = [ ./nixfox ]; + + services.nginx.enable = true; +} diff --git a/modules/system/services/server/nginx/hosts/nixfox/default.nix b/hosts/midas/services/nginx/nixfox/default.nix similarity index 90% rename from modules/system/services/server/nginx/hosts/nixfox/default.nix rename to hosts/midas/services/nginx/nixfox/default.nix index adbcbd1c..c8264276 100644 --- a/modules/system/services/server/nginx/hosts/nixfox/default.nix +++ b/hosts/midas/services/nginx/nixfox/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts = lib.mkIf config.services.webserver.enable { + services.nginx.virtualHosts = { "www.nixfox.ca" = { enableACME = true; addSSL = true; diff --git a/hosts/midas/user/default.nix b/hosts/midas/user/default.nix deleted file mode 100644 index 9366cadc..00000000 --- a/hosts/midas/user/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, lib, ... }: -{ - home-manager.users."${config.sysusers.main}".home = { - stateVersion = lib.mkForce config.system.stateVersion; - }; -} diff --git a/hosts/prophet/boot/default.nix b/hosts/prophet/boot/default.nix index e21b5c06..5c3db6a2 100644 --- a/hosts/prophet/boot/default.nix +++ b/hosts/prophet/boot/default.nix @@ -1,7 +1,8 @@ { pkgs, ... }: { boot = { + binfmt.emulatedSystems = [ "x86_64-linux" ]; kernelPackages = pkgs.linuxPackages_hardened; - loader.systemd-boot.enable = true; + loader.limine.enable = true; }; } diff --git a/hosts/prophet/default.nix b/hosts/prophet/default.nix index cafc1fea..5f2196a5 100644 --- a/hosts/prophet/default.nix +++ b/hosts/prophet/default.nix @@ -6,18 +6,18 @@ ./filesystems ./hardware ./services - ./user - ../../modules/system (modulesPath + "/profiles/headless.nix") ]; - networking = { - hostName = "prophet"; - hostId = "97a21a38"; - }; - system = { - server.enable = true; + nixos.tags = [ "server" ]; stateVersion = "24.05"; }; + + deployment = { + buildOnTarget = true; + targetHost = "42f:2737:2aed:4dee:cbe4:3c73:1918:ad9b"; + }; + + networking.hostId = "97a21a38"; } diff --git a/hosts/prophet/disko/default.nix b/hosts/prophet/disko/default.nix index 4961d53b..aad74c04 100644 --- a/hosts/prophet/disko/default.nix +++ b/hosts/prophet/disko/default.nix @@ -1,16 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; - device = "/dev/nvme0n1"; + device = "/dev/disk/by-id/scsi-3609c958403f14cd29ff94a5a2e405cc2"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -28,7 +27,7 @@ size = "100%"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -37,7 +36,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/prophet/filesystems/default.nix b/hosts/prophet/filesystems/default.nix index f3943967..dda781b9 100644 --- a/hosts/prophet/filesystems/default.nix +++ b/hosts/prophet/filesystems/default.nix @@ -1,11 +1,13 @@ { ... }: { - fileSystems."/persist/storage" = { - device = "/dev/disk/by-uuid/ef465845-cc56-4db5-9260-8ae515eb025e"; - fsType = "btrfs"; - options = [ - "nofail" - "nosuid" - ]; + fileSystems = { + "/persist/storage" = { + device = "/dev/disk/by-uuid/ef465845-cc56-4db5-9260-8ae515eb025e"; + fsType = "btrfs"; + options = [ + "nofail" + "nosuid" + ]; + }; }; } diff --git a/hosts/prophet/hardware/default.nix b/hosts/prophet/hardware/default.nix index 4b2b3178..3e057fc7 100644 --- a/hosts/prophet/hardware/default.nix +++ b/hosts/prophet/hardware/default.nix @@ -1,4 +1,4 @@ -{ lib, ... }: +{ ... }: { boot.initrd = { availableKernelModules = [ @@ -8,5 +8,5 @@ kernelModules = [ "dm-snapshot" ]; }; - nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; + nixpkgs.hostPlatform = "aarch64-linux"; } diff --git a/hosts/prophet/id_ed25519.pub b/hosts/prophet/id_ed25519.pub deleted file mode 100644 index 0d58d2b8..00000000 --- a/hosts/prophet/id_ed25519.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDXU+mo+lkFaGBV7wuzrGnlII15YS3/MkkG3KmGJRT0j diff --git a/hosts/prophet/services/default.nix b/hosts/prophet/services/default.nix index 1c8b896a..71ffb3cf 100644 --- a/hosts/prophet/services/default.nix +++ b/hosts/prophet/services/default.nix @@ -2,9 +2,10 @@ { services = { cloudflare-dyndns.enable = true; - mailserver.enable = true; mysql.enable = true; nfs.server.enable = true; nginx.enable = true; }; + + mailserver.enable = true; } diff --git a/hosts/prophet/user/default.nix b/hosts/prophet/user/default.nix deleted file mode 100644 index 9366cadc..00000000 --- a/hosts/prophet/user/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, lib, ... }: -{ - home-manager.users."${config.sysusers.main}".home = { - stateVersion = lib.mkForce config.system.stateVersion; - }; -} diff --git a/hosts/redmond/boot/default.nix b/hosts/redmond/boot/default.nix deleted file mode 100644 index 9a94a6b2..00000000 --- a/hosts/redmond/boot/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, ... }: -{ - boot = { - kernelPackages = pkgs.linuxPackages_latest; - kernelParams = [ - "radeon.cik_support=0" - "amdgpu.cik_support=1" - ]; - loader.systemd-boot.enable = true; - plymouth.enable = true; - }; -} diff --git a/hosts/redmond/default.nix b/hosts/redmond/default.nix deleted file mode 100644 index cdaa5afc..00000000 --- a/hosts/redmond/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ lib, ... }: -{ - imports = [ - ./boot - ./disko - ./filesystems - ./hardware - ./network - ./user - ../../modules/system - ]; - - networking.hostName = "redmond"; - - system = { - desktop.enable = true; - stateVersion = "24.05"; - }; -} diff --git a/hosts/redmond/filesystems/default.nix b/hosts/redmond/filesystems/default.nix deleted file mode 100644 index ddaa83f9..00000000 --- a/hosts/redmond/filesystems/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, ... }: -{ - fileSystems."/mnt/Windrive" = { - device = "/dev/disk/by-uuid/582C6B802C6B57D0"; - fsType = "ntfs"; - options = [ - "nodev" - "nosuid" - ]; - }; -} diff --git a/hosts/redmond/hardware/default.nix b/hosts/redmond/hardware/default.nix deleted file mode 100644 index 8d652d04..00000000 --- a/hosts/redmond/hardware/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, lib, modulesPath, ... }: -{ - imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - - boot = { - initrd = { - availableKernelModules = [ - "ahci" - "ehci_pci" - "rtsx_usb_sdmmc" - "sd_mod" - "sdhci_pci" - "sr_mod" - "xhci_pci" - ]; - kernelModules = [ "dm-snapshot" ]; - }; - kernelModules = [ "kvm-amd" ]; - }; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/redmond/id_ed25519.pub b/hosts/redmond/id_ed25519.pub deleted file mode 100644 index 5319a978..00000000 --- a/hosts/redmond/id_ed25519.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICHJ2Gy1Gaq96K85zOSfgWzGY0rIaUcqGS7Si5Nvzg+n diff --git a/hosts/redmond/network/default.nix b/hosts/redmond/network/default.nix deleted file mode 100644 index f87dee8a..00000000 --- a/hosts/redmond/network/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ ... }: -{ - networking = { - interfaces."wlp1s0".ipv4.addresses = [{ - address = "192.168.2.200"; - prefixLength = 24; - }]; - defaultGateway = { - address = "192.168.2.1"; - interface = "wlp1s0"; - }; - }; -} diff --git a/hosts/redmond/user/default.nix b/hosts/redmond/user/default.nix deleted file mode 100644 index fed1d317..00000000 --- a/hosts/redmond/user/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, lib, ... }: -{ - home-manager.users."${config.sysusers.main}".home = { - desktop.enable = true; - stateVersion = lib.mkForce config.system.stateVersion; - }; -} diff --git a/hosts/tower/boot/default.nix b/hosts/tower/boot/default.nix index 8c5668af..a71f03cf 100644 --- a/hosts/tower/boot/default.nix +++ b/hosts/tower/boot/default.nix @@ -1,19 +1,12 @@ -{ config, lib, pkgsUnstable, ... }: +{ config, lib, pkgs, ... }: let commonKernelParams = [ - # VM/GPU passthrough "amd_iommu=on" "iommu=pt" - "nested=1" - - # Isolate devices into IOMMU groups - "pcie_acs_override=downstream,multifunction" - "pci=routeirq" ]; in { boot = { - # Latest kernel and IOMMU isolation - kernelPackages = pkgsUnstable.linuxPackages_latest; + kernelPackages = pkgs.linuxPackages_6_14; kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:1f82,10de:10fa" ]; # Load into GPU before video driver @@ -28,8 +21,5 @@ in { }; # Use second GPU on boot - specialisation.gputwo.configuration = { - boot.kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:2504,10de:228e" ]; - environment.sessionVariables.WLR_RENDERER = lib.mkForce "gles2"; - }; + specialisation.gputwo.configuration.boot.kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:2504,10de:228e" ]; } diff --git a/hosts/tower/default.nix b/hosts/tower/default.nix index 362aba9c..bb1ea3e0 100644 --- a/hosts/tower/default.nix +++ b/hosts/tower/default.nix @@ -5,18 +5,15 @@ ./disko ./filesystems ./hardware - ./network ./user - ../../modules/system ]; - networking.hostName = "tower"; - system = { - desktop.enable = true; - nvidia.enable = true; + nixos.tags = [ "pc" ]; stateVersion = "24.05"; }; + deployment.targetHost = "4e4:535:9d47:f367:becd:6557:458d:5b1b"; + virtualisation.libvirtd.enable = true; } diff --git a/hosts/tower/disko/default.nix b/hosts/tower/disko/default.nix index a5d6345a..72540892 100644 --- a/hosts/tower/disko/default.nix +++ b/hosts/tower/disko/default.nix @@ -1,17 +1,15 @@ -{ config, disko, ... }: +{ config, name, ... }: { - imports = [ disko.nixosModules.disko ]; - disko.devices = { disk = { - "${config.networking.hostName}" = { + "${name}" = { type = "disk"; - device = "/dev/nvme0n1"; - imageSize = "32G"; + device = "/dev/disk/by-id/nvme-INTEL_SSDPEKNU512GZ_BTKA20550TKC512A"; content = { type = "gpt"; partitions = { boot = { + priority = 1; size = "1M"; type = "EF02"; }; @@ -29,12 +27,12 @@ size = "100%"; content = { type = "luks"; - name = "${config.networking.hostName}-disk"; + name = "${name}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${config.networking.hostName}"; + vg = "${name}"; }; }; }; @@ -44,7 +42,7 @@ }; lvm_vg = { - "${config.networking.hostName}" = { + "${name}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/tower/filesystems/default.nix b/hosts/tower/filesystems/default.nix index 18b0e1ac..0f983e1b 100644 --- a/hosts/tower/filesystems/default.nix +++ b/hosts/tower/filesystems/default.nix @@ -1,26 +1,34 @@ -{ config, ... }: +{ ... }: { fileSystems = { # Games and such "/mnt/Linux1" = { - device = "/dev/disk/by-uuid/b2901f8c-ffda-4b88-bb63-a9ea0c96ccb4"; - fsType = "ext4"; + device = "/dev/disk/by-label/Linux1"; + fsType = "btrfs"; options = [ "nofail" "nosuid" ]; }; "/mnt/Linux2" = { - device = "/dev/disk/by-uuid/f08e4f38-162c-402f-ba2a-5925151b78bf"; - fsType = "ext4"; + device = "/dev/disk/by-label/Linux2"; + fsType = "btrfs"; options = [ "nofail" "nosuid" ]; }; "/mnt/Linux3" = { - device = "/dev/disk/by-uuid/e7bc75bd-c371-4b28-b212-7be9b1fad339"; - fsType = "ext4"; + device = "/dev/disk/by-label/Linux3"; + fsType = "btrfs"; + options = [ + "nofail" + "nosuid" + ]; + }; + "/mnt/Linux4" = { + device = "/dev/disk/by-label/Linux4"; + fsType = "btrfs"; options = [ "nofail" "nosuid" @@ -37,34 +45,5 @@ "subvol=libvirt" ]; }; - - # Network mounts - "/home/${config.sysusers.main}/Network/Midas" = { - device = "11.0.0.1:/storage"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; - "/home/${config.sysusers.main}/Network/Kitty" = { - device = "11.0.0.2:/storage/bun"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; - "/home/${config.sysusers.main}/Network/Prophet" = { - device = "mx.nixfox.ca:/storage"; - fsType = "nfs4"; - options = [ - "noauto" - "soft" - "x-systemd.automount" - ]; - }; }; } diff --git a/hosts/tower/hardware/default.nix b/hosts/tower/hardware/default.nix index 4ee8328d..a374acd5 100644 --- a/hosts/tower/hardware/default.nix +++ b/hosts/tower/hardware/default.nix @@ -1,4 +1,4 @@ -{ config, lib, modulesPath, ... }: +{ modulesPath, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; @@ -16,6 +16,9 @@ kernelModules = [ "kvm-amd" ]; }; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware.cpu.amd.updateMicrocode = true; + + nixpkgs.hostPlatform = "x86_64-linux"; } diff --git a/hosts/tower/network/default.nix b/hosts/tower/network/default.nix deleted file mode 100644 index a14294f2..00000000 --- a/hosts/tower/network/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ ... }: -{ - networking = { - interfaces."enp42s0".ipv4.addresses = [{ - address = "10.2.0.100"; - prefixLength = 8; - }]; - defaultGateway = { - address = "10.1.0.1"; - interface = "enp42s0"; - }; - - vlans.internal = { - id=100; - interface="enp42s0"; - }; - interfaces.internal.ipv4.addresses = [{ - address = "11.0.0.100"; - prefixLength = 8; - }]; - - firewall.allowedUDPPorts = [ 27015 ]; - }; -} diff --git a/hosts/tower/user/default.nix b/hosts/tower/user/default.nix index 9c6469d4..bdfb086b 100644 --- a/hosts/tower/user/default.nix +++ b/hosts/tower/user/default.nix @@ -1,9 +1,4 @@ -{ config, lib, ... }: +{ config, ... }: { - home-manager.users."${config.sysusers.main}".home = { - desktop.enable = true; - gaming.enable = true; - production.enable = true; - stateVersion = lib.mkForce config.system.stateVersion; - }; + home-manager.users."${config.vars.mainUser}".home.guifull.enable = true; } diff --git a/modules/home/default.nix b/modules/home/default.nix index ed97b6a8..c1e04428 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -1,20 +1,13 @@ { lib, ... }: { imports = [ + ./profiles ./programs ./services ./settings - ./user ./variables ./wms ]; - options.home = with lib; { - desktop.enable = mkEnableOption "Desktop programs and services"; - gaming.enable = mkEnableOption "Gaming apps and programs"; - production.enable = mkEnableOption "Apps for visual productivity"; - school.enable = mkEnableOption "Apps for school and college"; - }; - - config.home.stateVersion = "24.11"; + config.home.stateVersion = "25.05"; } diff --git a/modules/home/profiles/default.nix b/modules/home/profiles/default.nix new file mode 100644 index 00000000..4c658ec6 --- /dev/null +++ b/modules/home/profiles/default.nix @@ -0,0 +1,11 @@ +{ lib, ... }: +{ + imports = [ ./guifull ]; + + options.home = with lib; { + desktop.enable = mkEnableOption "Desktop programs and services"; + gaming.enable = mkEnableOption "Gaming apps and programs"; + production.enable = mkEnableOption "Apps for visual productivity"; + school.enable = mkEnableOption "Apps for school and college"; + }; +} diff --git a/modules/home/profiles/guifull/default.nix b/modules/home/profiles/guifull/default.nix new file mode 100644 index 00000000..a322678d --- /dev/null +++ b/modules/home/profiles/guifull/default.nix @@ -0,0 +1,12 @@ +{ config, lib, ... }: +{ + options.home = with lib; { + guifull.enable = mkEnableOption "Enable most other GUI profiles"; + }; + + config.home = lib.mkIf config.home.guifull.enable { + desktop.enable = true; + gaming.enable = true; + production.enable = true; + }; +} diff --git a/modules/home/programs/gui/foot/default.nix b/modules/home/programs/gui/foot/default.nix index 27f704d5..a1974e51 100644 --- a/modules/home/programs/gui/foot/default.nix +++ b/modules/home/programs/gui/foot/default.nix @@ -6,11 +6,11 @@ settings = { main = { term = "xterm-256color"; - font = "${config.look.fonts.mono}:size=14.7"; + font = "${config.vars.fonts.mono}:size=14.7"; }; colors = { alpha = "0.85"; - background = config.look.colors.dark; + background = config.vars.colors.dark; regular0 = "3f3f3f"; regular1 = "cc0000"; regular2 = "4e9a06"; @@ -29,7 +29,10 @@ bright7 = "ffffff"; }; cursor.style = "beam"; - key-bindings.search-start = "Control+f"; + key-bindings = { + search-start = "Control+f"; + show-urls-launch = "Control+s"; + }; }; }; } diff --git a/modules/home/programs/gui/librewolf/default.nix b/modules/home/programs/gui/librewolf/default.nix index 8f5291be..6e208d51 100644 --- a/modules/home/programs/gui/librewolf/default.nix +++ b/modules/home/programs/gui/librewolf/default.nix @@ -1,60 +1,78 @@ -{ config, lib, pkgs, nur, ... }: +{ config, lib, pkgs, ... }: { config = lib.mkIf config.home.desktop.enable { programs.firefox = { enable = true; package = pkgs.librewolf; - profiles = let - # FireFox css, based on https://github.com/Dook97/firefox-qutebrowser-userchrome - themeFont = '' - --tab-font: '${config.look.fonts.main}'; - --urlbar-font: '${config.look.fonts.main}'; - ''; - themeMain = '' - :root { - --tab-active-bg-color: #${config.look.colors.prime}; - --tab-hover-bg-color: #${config.look.colors.accent}; - --tab-inactive-bg-color: #${config.look.colors.dark}; - --tab-active-fg-fallback-color: #FFFFFF; - --tab-inactive-fg-fallback-color: #${config.look.colors.text}; - --urlbar-focused-bg-color: #${config.look.colors.dark}; - --urlbar-not-focused-bg-color: #${config.look.colors.dark}; - --toolbar-bgcolor: #${config.look.colors.dark} !important; - ''; - themeAlt = '' - :root { - --tab-active-bg-color: #${config.look.colors.dark}; - --tab-hover-bg-color: #${config.look.colors.accent}; - --tab-inactive-bg-color: #${config.look.colors.prime}; - --tab-active-fg-fallback-color: #${config.look.colors.text}; - --tab-inactive-fg-fallback-color: #FFFFFF; - --urlbar-focused-bg-color: #${config.look.colors.prime}; - --urlbar-not-focused-bg-color: #${config.look.colors.prime}; - --toolbar-bgcolor: #${config.look.colors.prime} !important; - ''; + profiles.default = { + isDefault = true; - # Profile settings - commonExtensions = with pkgs.nur.repos.rycee.firefox-addons; [ - bitwarden - darkreader - return-youtube-dislikes - simple-tab-groups - sponsorblock - ublock-origin - violentmonkey - ]; - commonSearch = { + containersForce = true; + containers = { + home = { + color = "purple"; + icon = "fruit"; + id = 1; + }; + school = { + color = "red"; + icon = "briefcase"; + id = 2; + }; + }; + + bookmarks = { force = true; - default = "Ecosia"; - order = [ - "Ecosia" - "NixPKGs" - "MyNixOS" - "YouTube" - "Spotify" + settings = [ + { + name = "NixFox"; + url = "https://www.nixfox.ca"; + } + { + name = "Luna"; + url = "https://www.lunamoonlight.xyz"; + } + { + name = "Freecorn"; + url = "https://freecorn1854.win"; + } + { + name = "Bloxelcom"; + url = "https://www.bloxelcom.net"; + } + { + name = "YouTube"; + url = "https://www.kernel.org"; + } + { + name = "NixOS Wiki"; + url = "https://nixos.wiki"; + } + { + name = "Kernel"; + url = "https://www.kernel.org"; + } ]; + }; + + extensions = { + force = true; + packages = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + darkreader + return-youtube-dislikes + simple-tab-groups + sponsorblock + ublock-origin + violentmonkey + ]; + }; + + search = { + force = true; + default = "ecosia"; engines = { - "Ecosia" = { + "ecosia" = { urls = [{ template = "https://www.ecosia.org/search"; params = [{ @@ -64,7 +82,8 @@ }]; definedAliases = [ "@e" ]; }; - "NixPKGs" = { + + "nixpkgs" = { urls = [{ template = "https://search.nixos.org/packages"; params = [ @@ -80,7 +99,8 @@ }]; definedAliases = [ "@p" ]; }; - "MyNixOS" = { + + "mynixos" = { urls = [{ template = "https://mynixos.com/search"; params = [{ @@ -90,7 +110,8 @@ }]; definedAliases = [ "@my" ]; }; - "YouTube" = { + + "youtube" = { urls = [{ template = "https://www.youtube.com/results"; params = [{ @@ -100,13 +121,17 @@ }]; definedAliases = [ "@y" ]; }; - "Spotify" = { + + "spotify" = { urls = [{ template = "https://open.spotify.com/search/{searchTerms}"; }]; definedAliases = [ "@s" ]; }; }; }; - commonSettings = { + + settings = { + force = true; + # Generic "browser.download.useDownloadDir" = true; "browser.shell.checkDefaultBrowser" = false; @@ -121,9 +146,9 @@ "webgl.disabled" = false; # Fonts - "font.name.serif.x-western" = config.look.fonts.main; - "font.name.sans-serif.x-western" = config.look.fonts.main; - "font.name.monospace.x-western" = config.look.fonts.mono; + "font.name.monospace.x-western" = config.vars.fonts.mono; + "font.name.sans-serif.x-western" = config.vars.fonts.main; + "font.name.serif.x-western" = config.vars.fonts.main; # Theming and visibility "browser.aboutConfig.showWarning" = false; @@ -143,47 +168,45 @@ "browser.newtabpage.enabled" = false; # Safe browsing + "browser.safebrowsing.blockedURIs.enabled" = false; "browser.safebrowsing.downloads.enabled" = false; - "browser.safebrowsing.downloads.remote.enabled" = false; - "browser.safebrowsing.downloads.remote.block_uncommon" = false; "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; + "browser.safebrowsing.downloads.remote.block_uncommon" = false; + "browser.safebrowsing.downloads.remote.enabled" = false; "browser.safebrowsing.malware.enabled" = false; "browser.safebrowsing.phishing.enabled" = false; - "browser.safebrowsing.blockedURIs.enabled" = false; - "browser.safebrowsing.provider.google4.gethashURL" = false; - "browser.safebrowsing.provider.google4.updateURL" = false; "browser.safebrowsing.provider.google.gethashURL" = false; "browser.safebrowsing.provider.google.updateURL" = false; + "browser.safebrowsing.provider.google4.gethashURL" = false; + "browser.safebrowsing.provider.google4.updateURL" = false; # Extensions - "extensions.pocket.enabled" = false; "extensions.formautofill.addresses.enabled" = false; "extensions.formautofill.creditCards.enabled" = false; "extensions.getAddons.showPane" = false; "extensions.htmlaboutaddons.discover.enabled" = false; "extensions.htmlaboutaddons.recommendations.enabled" = false; + "extensions.pocket.enabled" = false; # Force extensions to work "extensions.autoDisableScopes" = 0; "extensions.enabledScopes" = 15; # Privacy - "privacy.resistFingerprinting" = true; - "privacy.firstparty.isolate" = true; + "privacy.clearOnShutdown.cookies" = false; + "privacy.clearOnShutdown_v2.cookiesAndStorage" = false; "privacy.fingerprintingProtection" = true; "privacy.globalprivacycontrol.enabled" = true; "privacy.globalprivacycontrol.functionality.enabled" = true; - "privacy.clearOnShutdown.cookies" = false; - "privacy.clearOnShutdown_v2.cookiesAndStorage" = false; + "privacy.resistFingerprinting" = true; # Tracking URL blocking - "urlclassifier.trackingSkipURLs" = "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com"; "urlclassifier.features.socialtracking.skipURLs" = "*.instagram.com, *.twitter.com, *.twimg.com"; + "urlclassifier.trackingSkipURLs" = "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com"; # Network tracking "browser.contentblocking.category" = "strict"; "network.cookie.cookieBehavior" = 1; - "network.cookie.sameSite.noneRequiresSecure" = true; "network.http.referer.XOriginPolicy" = 2; "network.http.referer.XOriginTrimmingPolicy" = 2; "network.http.referer.trimmingPolicy" = 2; @@ -209,40 +232,28 @@ "services.sync.engine.addresses.available" = false; "svg.context-properties.content.enabled" = true; }; - in { - Main = { - id = 0; - isDefault = true; - extensions = commonExtensions; - search = commonSearch; - settings = commonSettings; - userChrome = '' - ${themeMain} - ${themeFont} + + userChrome = '' + :root { + --tab-active-bg-color: #${config.vars.colors.prime}; + --tab-hover-bg-color: #${config.vars.colors.accent}; + --tab-inactive-bg-color: #${config.vars.colors.dark}; + --tab-active-fg-fallback-color: #FFFFFF; + --tab-inactive-fg-fallback-color: #${config.vars.colors.text}; + --urlbar-focused-bg-color: #${config.vars.colors.dark}; + --urlbar-not-focused-bg-color: #${config.vars.colors.dark}; + --toolbar-bgcolor: #${config.vars.colors.dark} !important; + --tab-font: '${config.vars.fonts.main}'; + --urlbar-font: '${config.vars.fonts.main}'; ${builtins.readFile ./quteFox.css} - ''; - }; - Alt = { - id = 1; - extensions = commonExtensions; - search = commonSearch; - settings = commonSettings; - userChrome = '' - ${themeAlt} - ${themeFont} - ${builtins.readFile ./quteFox.css} - ''; - }; + ''; }; }; # Symlinks to Librewolf home = { - file = { - ".librewolf".source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.mozilla/firefox"; - ".mozilla/librewolf".source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.mozilla/firefox"; - }; - persistence."/persist${config.home.homeDirectory}".directories = [ ".mozilla" ]; + file.".librewolf".source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.mozilla/firefox"; + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = [ "browser/.mozilla/firefox/default" ]; }; }; } diff --git a/modules/home/programs/gui/obs/default.nix b/modules/home/programs/gui/obs/default.nix index 950c8bb8..bb593e4c 100644 --- a/modules/home/programs/gui/obs/default.nix +++ b/modules/home/programs/gui/obs/default.nix @@ -12,6 +12,8 @@ ]; }; - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".config/obs-studio" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "data/${removePrefix "${homeDirectory}/" configHome}/obs-studio" ]; }; } diff --git a/modules/home/programs/gui/thunderbird/default.nix b/modules/home/programs/gui/thunderbird/default.nix index 21c23773..e7c67571 100644 --- a/modules/home/programs/gui/thunderbird/default.nix +++ b/modules/home/programs/gui/thunderbird/default.nix @@ -3,62 +3,43 @@ config = lib.mkIf config.home.desktop.enable { programs.thunderbird = { enable = config.home.desktop.enable; - profiles = { - Main = { - isDefault = true; - userContent = '' - *{scrollbar-width:none !important} - ''; - settings = { - "general.autoScroll" = true; + profiles.default = { + isDefault = true; + settings = { + "general.autoScroll" = true; + "browser.download.promptForDownload" = true; - "security.mixed_content.block_active_content" = true; - "security.mixed_content.block_display_content" = true; + "security.mixed_content.block_active_content" = true; + "security.mixed_content.block_display_content" = true; - "extensions.enabled" = false; - "extensions.autoDisableScopes" = 0; - "extensions.allow-non-mpc-extensions" = false; - "extensions.installDistroAddons" = false; - "extensions.getAddons.cache.enabled" = false; - "extensions.blocklist.enabled" = true; - "extensions.webextensions.userSelection" = false; - "extensions.checkCompatibility" = false; - "extensions.allowRemoteAddons" = false; - "extensions.ui.enabled" = false; - "extensions.ui.useSystemTheme" = true; - "extensions.activeThemeID" = "thunderbird-compact-dark@mozilla.org"; + "extensions.activeThemeID" = "thunderbird-compact-dark@mozilla.org"; + "extensions.allow-non-mpc-extensions" = false; + "extensions.allowRemoteAddons" = false; + "extensions.blocklist.enabled" = true; + "extensions.checkCompatibility" = false; + "extensions.enabled" = false; + "extensions.getAddons.cache.enabled" = false; + "extensions.ui.enabled" = false; + "extensions.webextensions.userSelection" = false; - "privacy.clearOnShutdown.cookies" = true; - "privacy.clearOnShutdown.cache" = true; - "privacy.clearOnShutdown.formdata" = true; - "privacy.clearOnShutdown.siteSettings" = true; - "privacy.trackingprotection.enabled" = true; - "privacy.firstparty.isolate" = true; - "privacy.donottrackheader.enabled" = true; - "privacy.resistFingerprinting" = true; + "privacy.clearOnShutdown.cache" = true; + "privacy.clearOnShutdown.cookies" = true; + "privacy.clearOnShutdown.formdata" = true; + "privacy.clearOnShutdown.siteSettings" = true; + "privacy.donottrackheader.enabled" = true; + "privacy.resistFingerprinting" = true; + "privacy.trackingprotection.enabled" = true; - "browser.history.enabled" = false; - "browser.sessionstore.privacy_level" = 2; - "browser.tabs.warnOnClose" = false; - "browser.shell.checkDefaultBrowser" = false; - "browser.urlbar.suggest.openpage" = false; - "browser.urlbar.suggest.bookmark" = false; - "browser.urlbar.suggest.history" = false; - "browser.urlbar.suggest.searches" = false; - "browser.urlbar.suggest.topsites" = false; - "browser.download.promptForDownload" = true; - - "network.cookie.cookieBehavior" = 1; - "network.dns.dnsOverHttps.enabled" = true; - "network.http.speculative-parallel-limit" = 0; - "network.http.pipelining" = false; - "network.predictor.enabled" = false; - "network.cookie.lifetimePolicy" = 2; - }; + "network.cookie.cookieBehavior" = 1; + "network.cookie.lifetimePolicy" = 2; + "network.dns.dnsOverHttps.enabled" = true; + "network.http.pipelining" = false; + "network.http.speculative-parallel-limit" = 0; + "network.predictor.enabled" = false; }; }; }; - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".thunderbird" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = [ "browser/.thunderbird/default" ]; }; } diff --git a/modules/home/programs/misc/avtools/default.nix b/modules/home/programs/misc/avtools/default.nix index 6f4d9356..31838e31 100644 --- a/modules/home/programs/misc/avtools/default.nix +++ b/modules/home/programs/misc/avtools/default.nix @@ -1,13 +1,14 @@ -{ config, lib, pkgs, pkgsUnstable, ... }: +{ config, lib, pkgs, ... }: { config = lib.mkIf config.home.desktop.enable { - home.packages = (with pkgs; [ + home.packages = with pkgs; [ ffmpeg ffmpegthumbnailer playerctl puddletag pulsemixer - ]) ++ (with pkgsUnstable; [ spotdl ]); + spotdl + ]; home.shellAliases.spotopus = "spotdl --m3u --format opus"; }; diff --git a/modules/home/programs/misc/gaming/emulators/default.nix b/modules/home/programs/misc/gaming/emulators/default.nix index 98f32035..53448024 100644 --- a/modules/home/programs/misc/gaming/emulators/default.nix +++ b/modules/home/programs/misc/gaming/emulators/default.nix @@ -1,14 +1,11 @@ -{ config, lib, pkgs, pkgsUnstable, ... }: +{ config, lib, pkgs, ... }: { - config = lib.mkIf config.home.gaming.enable { - home.packages = (with pkgs; [ - cemu - dolphin-emu-beta - duckstation - pcsx2 - ]) ++ (with pkgsUnstable; [ - azahar - ryubing - ]); - }; + home.packages = with pkgs; lib.mkIf config.home.gaming.enable [ + azahar + cemu + dolphin-emu-beta + duckstation + pcsx2 + ryubing + ]; } diff --git a/modules/home/programs/misc/gaming/launchers/default.nix b/modules/home/programs/misc/gaming/launchers/default.nix index 9f0a8e44..2cc451d0 100644 --- a/modules/home/programs/misc/gaming/launchers/default.nix +++ b/modules/home/programs/misc/gaming/launchers/default.nix @@ -8,11 +8,22 @@ steam steam-run-free ]; - persistence."/persist${config.home.homeDirectory}".directories = [ - ".config/heroic" - ".local/share/PrismLauncher" - ".local/share/Steam" - ]; + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}" = + with lib; with config.home; with config.xdg; { + directories = [ + "games/${removePrefix "${homeDirectory}/" "Games"}" + "games/${removePrefix "${homeDirectory}/" configHome}/heroic" + "games/${removePrefix "${homeDirectory}/" dataHome}/PrismLauncher" + { + directory = "games/.steam"; + method = "symlink"; + } + { + directory = "games/${removePrefix "${homeDirectory}/" dataHome}/Steam"; + method = "symlink"; + } + ]; + }; }; nixpkgs.allowUnfreePackages = [ diff --git a/modules/home/programs/misc/general/default.nix b/modules/home/programs/misc/general/default.nix index 6c023524..f8e7530e 100644 --- a/modules/home/programs/misc/general/default.nix +++ b/modules/home/programs/misc/general/default.nix @@ -6,9 +6,10 @@ qbittorrent vesktop ]; - persistence."/persist${config.home.homeDirectory}".directories = [ - ".config/qBittorrent" - ".config/vesktop" - ]; + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; [ + "data/${removePrefix "${homeDirectory}/" configHome}/qBittorrent" + "data/${removePrefix "${homeDirectory}/" configHome}/vesktop" + ]; }; } diff --git a/modules/home/programs/misc/headless/default.nix b/modules/home/programs/misc/headless/default.nix index 43d8e3f0..e36efce0 100644 --- a/modules/home/programs/misc/headless/default.nix +++ b/modules/home/programs/misc/headless/default.nix @@ -2,6 +2,7 @@ { home.packages = with pkgs; [ bc + colmena ncdu p7zip vimv diff --git a/modules/home/programs/misc/production/default.nix b/modules/home/programs/misc/production/default.nix index ea3a1c3b..a7b62231 100644 --- a/modules/home/programs/misc/production/default.nix +++ b/modules/home/programs/misc/production/default.nix @@ -8,10 +8,11 @@ blender_4_4 krita ]; - persistence."/persist${config.home.homeDirectory}".directories = [ - ".config/audacity" - ".config/blender" - ".local/share/krita" - ]; + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; [ + "data/${removePrefix "${homeDirectory}/" configHome}/audacity" + "data/${removePrefix "${homeDirectory}/" configHome}/blender" + "data/${removePrefix "${homeDirectory}/" dataHome}/krita" + ]; }; } diff --git a/modules/home/programs/misc/school/default.nix b/modules/home/programs/misc/school/default.nix index 35452156..d43655ec 100644 --- a/modules/home/programs/misc/school/default.nix +++ b/modules/home/programs/misc/school/default.nix @@ -6,13 +6,16 @@ globalprotect-openconnect gpauth remmina - teams-for-linux - ]; - persistence."/persist${config.home.homeDirectory}".directories = [ - ".cache/gpclient" - ".config/com.yuezk.qt" - ".config/remmina" - ".config/teams-for-linux" ]; + + shellAliases.seneca = "ssh jhampton1@matrix.senecapolytechnic.ca"; + + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; [ + "school/${removePrefix "${homeDirectory}/" cacheHome}/gpclient" + "school/${removePrefix "${homeDirectory}/" configHome}/com.yuezk.qt" + "school/${removePrefix "${homeDirectory}/" configHome}/remmina" + "school/.vmware" + ]; }; } diff --git a/modules/home/programs/terminal/default.nix b/modules/home/programs/terminal/default.nix index 6d8f3522..5fbad56b 100644 --- a/modules/home/programs/terminal/default.nix +++ b/modules/home/programs/terminal/default.nix @@ -7,14 +7,15 @@ ./eza ./fastfetch ./git + ./gpg ./lazygit ./ncmpcpp ./neovim - ./nh ./nix-index ./ranger - ./tmux + ./ssh ./yt-dlp + ./zellij ./zoxide ./zsh ]; diff --git a/modules/home/programs/terminal/direnv/default.nix b/modules/home/programs/terminal/direnv/default.nix index b71ece6d..c0858a93 100644 --- a/modules/home/programs/terminal/direnv/default.nix +++ b/modules/home/programs/terminal/direnv/default.nix @@ -1,7 +1,11 @@ -{ ... }: +{ config, lib, ... }: { programs.direnv = { enable = true; nix-direnv.enable = true; }; + + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "data/${removePrefix "${homeDirectory}/" dataHome}/direnv" ]; } diff --git a/modules/home/programs/terminal/fastfetch/configs/config.jsonc b/modules/home/programs/terminal/fastfetch/configs/config.jsonc deleted file mode 100644 index cae0ed27..00000000 --- a/modules/home/programs/terminal/fastfetch/configs/config.jsonc +++ /dev/null @@ -1,97 +0,0 @@ -{ - "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", - "logo": { - "source": "xenia", - "color": { - "1": "1;97", - "2": "red", - "3": "yellow" - } - }, - "display": { - "separator": " \u001b[33m ", - "color": "red" - }, - "modules": [ - { - "type": "custom", - "format": "\u001b[1m—————————————————————————————————————" - }, - { - "type": "host", - "key": "󰌢 " - }, - { - "type": "cpu", - "key": " " - }, - { - "type": "gpu", - "key": "󰢮 " - }, - { - "type": "disk", - "folders": "/", - "key": " " - }, - { - "type": "memory", - "format": "{/1}{-}{/}{/2}{-}{/}{} / {}", - "key": " " - }, - { - "type": "display", - "compactType": "original", - "key": "󰍹 " - }, - - { - "type": "custom", - "format": "\u001b[1m—————————————————————————————————————" - }, - { - "type": "os", - "format": "{3} {12}", - "key": "󰍛 " - }, - { - "type": "kernel", - "format": "{1} {2}", - "key": " " - }, - { - "type": "wm", - "key": " " - }, - { - "type": "shell", - "key": " " - }, - { - "type": "terminal", - "key": " " - }, - { - "type": "packages", - "key": "󰆧 " - }, - { - "type": "uptime", - "key": "󰅐 " - }, - { - "type": "command", - "text": "date -d @$(stat -c %W /persist) '+%a %b %d %r %Y'", - "key": "󰶡 " - }, - - { - "type": "custom", - "format": "\u001b[1m—————————————————————————————————————" - }, - { - "type": "custom", - "format": "\u001b[90m󰮯 \u001b[31m󰊠 \u001b[32m󰊠 \u001b[33m󰊠 \u001b[34m󰊠 \u001b[35m󰊠 \u001b[36m󰊠 \u001b[37m󰊠" - } - ] -} diff --git a/modules/home/programs/terminal/fastfetch/default.nix b/modules/home/programs/terminal/fastfetch/default.nix index ecaf8e3b..19f7b068 100644 --- a/modules/home/programs/terminal/fastfetch/default.nix +++ b/modules/home/programs/terminal/fastfetch/default.nix @@ -1,8 +1,108 @@ -{ pkgs, ... }: +{ ... }: { - programs.fastfetch.enable = true; + imports = [ ./smallfetch ]; - home.packages = with pkgs; [ (writeScriptBin "smallfetch" "fastfetch --config ~/.config/fastfetch/small.jsonc") ]; + programs.fastfetch = { + enable = true; + settings = with builtins; { + logo = { + source = "xenia"; + color = { + "1" = "1;97"; + "2" = "red"; + "3" = "yellow"; + }; + }; - xdg.configFile."fastfetch".source = ./configs; + display = { + separator = fromJSON ''" \u001b[33m "''; + color = "red"; + }; + + modules = [ + { + type = "custom"; + format = fromJSON ''"\u001b[1m—————————————————————————————————————"''; + } + { + type = "host"; + key = "󰌢 "; + } + { + type = "cpu"; + key = " "; + } + { + type = "gpu"; + key = "󰢮 "; + } + { + type = "disk"; + folders = "/"; + key = " "; + } + { + type = "memory"; + format = "{/1}{-}{/}{/2}{-}{/}{} / {}"; + key = " "; + } + { + type = "display"; + compactType = "original"; + key = "󰍹 "; + } + + { + type = "custom"; + format = fromJSON ''"\u001b[1m—————————————————————————————————————"''; + } + { + type = "os"; + format = "{3} {12}"; + key = "󰍛 "; + } + { + type = "kernel"; + format = "{1} {2}"; + key = " "; + } + { + type = "wm"; + key = " "; + } + { + type = "shell"; + key = " "; + } + { + type = "terminal"; + key = " "; + } + { + type = "packages"; + key = "󰆧 "; + } + { + type = "uptime"; + key = "󰅐 "; + } + { + type = "command"; + text = "date -d @$(stat -c %W /persist) '+%a %b %d %r %Y'"; + key = "󰶡 "; + } + + { + type = "custom"; + format = fromJSON ''"\u001b[1m—————————————————————————————————————"''; + } + { + type = "custom"; + format = fromJSON ''"\u001b[90m󰮯 \u001b[31m󰊠 \u001b[32m󰊠 \u001b[33m󰊠 \u001b[34m󰊠 \u001b[35m󰊠 \u001b[36m󰊠 \u001b[37m󰊠"''; + } + ]; + }; + }; + + home.shellAliases.ff = "clear && fastfetch"; } diff --git a/modules/home/programs/terminal/fastfetch/smallfetch/default.nix b/modules/home/programs/terminal/fastfetch/smallfetch/default.nix new file mode 100644 index 00000000..fcd5fddd --- /dev/null +++ b/modules/home/programs/terminal/fastfetch/smallfetch/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + home.packages = with pkgs; with lib; with config.home; with config.xdg; [ + (writeScriptBin "smallfetch" '' + #!/bin/sh + fastfetch --config $HOME/${removePrefix "${homeDirectory}/" configHome}/fastfetch/small.jsonc + '') + ]; + + xdg.configFile."fastfetch/small.jsonc".source = ./small.jsonc; +} diff --git a/modules/home/programs/terminal/fastfetch/configs/small.jsonc b/modules/home/programs/terminal/fastfetch/smallfetch/small.jsonc similarity index 100% rename from modules/home/programs/terminal/fastfetch/configs/small.jsonc rename to modules/home/programs/terminal/fastfetch/smallfetch/small.jsonc diff --git a/modules/home/programs/terminal/gpg/default.nix b/modules/home/programs/terminal/gpg/default.nix new file mode 100644 index 00000000..dfd108be --- /dev/null +++ b/modules/home/programs/terminal/gpg/default.nix @@ -0,0 +1,11 @@ +{ config, ... }: +{ + services.gpg-agent = { + enable = true; + enableSshSupport = true; + }; + + programs.gpg.enable = true; + + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = [ "secure/.gnupg" ]; +} diff --git a/modules/home/programs/terminal/lazygit/default.nix b/modules/home/programs/terminal/lazygit/default.nix index 45a9411d..cd0059c1 100644 --- a/modules/home/programs/terminal/lazygit/default.nix +++ b/modules/home/programs/terminal/lazygit/default.nix @@ -1,5 +1,7 @@ -{ config, ... }: +{ config, lib, ... }: { programs.lazygit.enable = true; - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".local/state/lazygit" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" stateHome}/lazygit" ]; } diff --git a/modules/home/programs/terminal/neovim/default.nix b/modules/home/programs/terminal/neovim/default.nix index 3040b096..f07a4f3b 100644 --- a/modules/home/programs/terminal/neovim/default.nix +++ b/modules/home/programs/terminal/neovim/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, lib, pkgs, ... }: { programs.neovim = { enable = true; @@ -92,8 +92,8 @@ let g:airline_theme='onedark' let g:airline#extensions#tabline#enabled = 1 hi Normal guibg=none - hi Visual guibg=#${config.look.colors.mid} - hi Pmenu guibg=#${config.look.colors.mid} + hi Visual guibg=#${config.vars.colors.mid} + hi Pmenu guibg=#${config.vars.colors.mid} hi EndOfBuffer guibg=none hi LineNr guibg=none lua require'colorizer'.setup() @@ -103,7 +103,7 @@ set mouse=a set undofile - set undodir=$HOME/.local/share/nvim/undo + set undodir=${config.xdg.dataHome}/nvim/undo set undolevels=100 set undoreload=10000 @@ -115,6 +115,8 @@ home = { sessionVariables.MANPAGER = "nvim +Man!"; - persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/nvim/undo" ]; + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" dataHome}/nvim/undo" ]; }; } diff --git a/modules/home/programs/terminal/nh/default.nix b/modules/home/programs/terminal/nh/default.nix deleted file mode 100644 index 52aa9908..00000000 --- a/modules/home/programs/terminal/nh/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, ... }: -{ - programs.nh = { - enable = true; - flake = "${config.home.homeDirectory}/Projects/nixos-config"; - }; -} diff --git a/modules/home/programs/terminal/nix-index/default.nix b/modules/home/programs/terminal/nix-index/default.nix index 58f33a55..4cd34016 100644 --- a/modules/home/programs/terminal/nix-index/default.nix +++ b/modules/home/programs/terminal/nix-index/default.nix @@ -1,6 +1,8 @@ -{ config, ... }: +{ config, lib, ... }: { programs.nix-index.enable = true; - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".cache/nix-index" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" cacheHome}/nix-index" ]; } diff --git a/modules/home/programs/terminal/ranger/default.nix b/modules/home/programs/terminal/ranger/default.nix index d6d55b5d..0cc9a969 100644 --- a/modules/home/programs/terminal/ranger/default.nix +++ b/modules/home/programs/terminal/ranger/default.nix @@ -1,8 +1,8 @@ -{ config, pkgsStable, ... }: +{ config, lib, pkgs, pkgsUnstable, ... }: { programs.ranger = { enable = true; - package = pkgsStable.ranger; + package = pkgsUnstable.ranger; settings = { preview_images = true; preview_images_method = "sixel"; @@ -94,33 +94,30 @@ # Ranger's bookmarks and necessary tools home = { - file = { - ".local/share/ranger/bookmarks".text = '' + file = with lib; with config.home; with config.xdg; with config.xdg.userDirs; with config.xdg.userDirs.extraConfig; { + "${removePrefix "${homeDirectory}/" dataHome}/ranger/bookmarks".text = '' # Local files - h:${config.home.homeDirectory} - k:${config.home.homeDirectory}/Keepers - j:${config.home.homeDirectory}/Downloads - j:${config.home.homeDirectory}/Documents - p:${config.home.homeDirectory}/Photos - v:${config.home.homeDirectory}/Videos - n:${config.home.homeDirectory}/Projects/nixos-config - c:${config.home.homeDirectory}/.config - l:${config.home.homeDirectory}/.local - q:/persist + h:${homeDirectory} + k:${XDG_KEEPERS_DIR} + d:${download} + j:${documents} + p:${pictures} + v:${videos} + n:${XDG_PROJECTS_DIR}/nixos-config + c:${configHome} + l:${dataHome} + q:${XDG_PERSIST_DIR} w:/mnt # Remote files - N:${config.home.homeDirectory}/Network - H:${config.home.homeDirectory}/Network/Midas/ - K:${config.home.homeDirectory}/Network/Midas/Files - M:${config.home.homeDirectory}/Network/Midas/Music - V:${config.home.homeDirectory}/Network/Midas/Videos - P:${config.home.homeDirectory}/Network/Midas/Photos + N:${XDG_NETWORK_DIR}/ + H:${XDG_NETWORK_DIR}/Midas/ + K:${XDG_NETWORK_DIR}/Midas/Files + M:${XDG_NETWORK_DIR}/Midas/Music + V:${XDG_NETWORK_DIR}/Midas/Videos + P:${XDG_NETWORK_DIR}/Midas/Photos ''; }; - packages = with pkgsStable; [ - imagemagick - poppler_utils - ]; + packages = with pkgs; [ poppler_utils ]; }; } diff --git a/modules/home/programs/terminal/ssh/default.nix b/modules/home/programs/terminal/ssh/default.nix new file mode 100644 index 00000000..a154ecbe --- /dev/null +++ b/modules/home/programs/terminal/ssh/default.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: +{ + programs.ssh = { + enable = true; + addKeysToAgent = "yes"; + compression = true; + matchBlocks = { + # Personal servers + sv1.hostname = "sv1.nixfox.ca"; + sv2.hostname = "sv2.nixfox.ca"; + mx.hostname = "mx.nixfox.ca"; + + # Other servers + bloxel.hostname = "rtmp.bloxelcom.net"; + seneca = { + hostname = "matrix.senecapolytechnic.ca"; + user = "jhampton1"; + }; + }; + }; +} diff --git a/modules/home/programs/terminal/tmux/default.nix b/modules/home/programs/terminal/tmux/default.nix deleted file mode 100644 index 338fa76e..00000000 --- a/modules/home/programs/terminal/tmux/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ ... }: -{ - programs.tmux = { - enable = true; - keyMode = "vi"; - mouse = true; - terminal = "st-256color"; - historyLimit = 4096; - baseIndex = 1; - extraConfig = '' - set -g status on - set -g status-left "" - set -g status-position bottom - set -g status-right "#[bg=brightblack]#[fg=dark_purple] #T " - set -g status-style "bg=black" - - set -g set-titles on - set -g set-titles-string "#T" - - setw -g window-status-format "#[bg=brightmagenta]#[fg=black] #I #[bg=brightblack]#[fg=white] #W " - setw -g window-status-current-format "#[bg=brightmagenta]#[fg=black] #I #[bg=white]#[fg=black] #W " - ''; - }; -} diff --git a/modules/home/programs/terminal/zellij/default.nix b/modules/home/programs/terminal/zellij/default.nix new file mode 100644 index 00000000..2b0546b6 --- /dev/null +++ b/modules/home/programs/terminal/zellij/default.nix @@ -0,0 +1,10 @@ +{ config, lib, ... }: +{ + programs.zellij.enable = true; + + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; [ + "state/${removePrefix "${homeDirectory}/" cacheHome}/zellij" + "state/${removePrefix "${homeDirectory}/" configHome}/zellij" + ]; +} diff --git a/modules/home/programs/terminal/zoxide/default.nix b/modules/home/programs/terminal/zoxide/default.nix index ee6e4704..e6d3cb37 100644 --- a/modules/home/programs/terminal/zoxide/default.nix +++ b/modules/home/programs/terminal/zoxide/default.nix @@ -1,9 +1,11 @@ -{ config, ... }: +{ config, lib, ... }: { programs.zoxide.enable = true; home = { shellAliases.cd = "z"; - persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/zoxide" ]; + persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" dataHome}/zoxide" ]; }; } diff --git a/modules/home/programs/terminal/zsh/default.nix b/modules/home/programs/terminal/zsh/default.nix index b9f9780b..db1ee096 100644 --- a/modules/home/programs/terminal/zsh/default.nix +++ b/modules/home/programs/terminal/zsh/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, lib, pkgs, ... }: { programs.zsh = { enable = true; @@ -16,15 +16,18 @@ }; history = { append = true; + expireDuplicatesFirst = true; ignoreAllDups = true; ignoreSpace = true; path = "$ZDOTDIR/.zsh_history"; }; - initExtra = '' + initContent = '' smallfetch source ${pkgs.zsh-you-should-use}/share/zsh/plugins/you-should-use/you-should-use.plugin.zsh ''; }; - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".config/zsh" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" configHome}/zsh" ]; } diff --git a/modules/home/services/default.nix b/modules/home/services/default.nix index 8bbdeef3..7a788ba1 100644 --- a/modules/home/services/default.nix +++ b/modules/home/services/default.nix @@ -2,7 +2,6 @@ { imports = [ ./easyeffects - ./gpg ./mpd ./playerctl ]; diff --git a/modules/home/services/gpg/default.nix b/modules/home/services/gpg/default.nix deleted file mode 100644 index a6cbd32b..00000000 --- a/modules/home/services/gpg/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - services.gpg-agent = { - enable = true; - enableSshSupport = true; - }; -} diff --git a/modules/home/services/mpd/default.nix b/modules/home/services/mpd/default.nix index e862bd2b..e842508a 100644 --- a/modules/home/services/mpd/default.nix +++ b/modules/home/services/mpd/default.nix @@ -5,7 +5,7 @@ mpd = { enable = true; network.startWhenNeeded = true; - musicDirectory = "${config.home.homeDirectory}/Network/Midas/Music/NixBops"; + musicDirectory = "${config.xdg.userDirs.extraConfig.XDG_NETWORK_DIR}/Midas/Music/NixBops"; playlistDirectory = "${config.services.mpd.musicDirectory}/Playlists"; extraConfig = '' audio_output { @@ -18,6 +18,8 @@ mpd-discord-rpc.enable = true; }; - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/mpd" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" dataHome}/mpd" ]; }; } diff --git a/modules/home/settings/aliases/default.nix b/modules/home/settings/aliases/default.nix index ff62e202..e4d5ff4d 100644 --- a/modules/home/settings/aliases/default.nix +++ b/modules/home/settings/aliases/default.nix @@ -2,13 +2,10 @@ { home.shellAliases = { # NixOS - nhs = "nh os switch"; nixclean = "nix store gc; nix store optimise"; nixpurge = "sudo nix-collect-garbage --delete-old"; # Shortcuts - ff = "clear && fastfetch"; myip = "curl ifconfig.co"; - seneca = "ssh jhampton1@matrix.senecapolytechnic.ca"; }; } diff --git a/modules/home/settings/cursor/default.nix b/modules/home/settings/cursor/default.nix index b6ff65ef..4d547cc2 100644 --- a/modules/home/settings/cursor/default.nix +++ b/modules/home/settings/cursor/default.nix @@ -1,10 +1,11 @@ { config, lib, pkgs, ... }: { home.pointerCursor = lib.mkIf config.home.desktop.enable { - gtk.enable = true; - x11.enable = true; name = "Simp1e-Dark"; package = pkgs.simp1e-cursors; size = 24; + + gtk.enable = true; + x11.enable = true; }; } diff --git a/modules/home/settings/dconf/default.nix b/modules/home/settings/dconf/default.nix index 38cda938..69c88c4b 100644 --- a/modules/home/settings/dconf/default.nix +++ b/modules/home/settings/dconf/default.nix @@ -8,7 +8,8 @@ uris = [ "qemu:///system" ]; }; }; - - home.persistence."/persist${config.home.homeDirectory}".directories = [ ".config/dconf" ]; + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = + with lib; with config.home; with config.xdg; + [ "state/${removePrefix "${homeDirectory}/" configHome}/dconf" ]; }; } diff --git a/modules/home/settings/default.nix b/modules/home/settings/default.nix index ffe0fbb4..59cfe345 100644 --- a/modules/home/settings/default.nix +++ b/modules/home/settings/default.nix @@ -9,7 +9,9 @@ ./impermanence ./locale ./nix + ./nixgl ./qt + ./user ./xdg ]; } diff --git a/modules/home/settings/fonts/fontconfig/default.nix b/modules/home/settings/fonts/fontconfig/default.nix index 0ad9bae1..395aeef2 100644 --- a/modules/home/settings/fonts/fontconfig/default.nix +++ b/modules/home/settings/fonts/fontconfig/default.nix @@ -3,8 +3,8 @@ fonts.fontconfig = { enable = config.home.desktop.enable; defaultFonts = { - sansSerif = [ config.look.fonts.main ]; - monospace = [ config.look.fonts.mono ]; + sansSerif = [ config.vars.fonts.main ]; + monospace = [ config.vars.fonts.mono ]; emoji = [ "Twitter Color Emoji" ]; }; }; diff --git a/modules/home/settings/fonts/packages/default.nix b/modules/home/settings/fonts/packages/default.nix index d7cae882..e1fd0145 100644 --- a/modules/home/settings/fonts/packages/default.nix +++ b/modules/home/settings/fonts/packages/default.nix @@ -1,11 +1,14 @@ -{ config, lib, pkgsStable, ... }: +{ config, lib, pkgs, ... }: { - home.packages = lib.mkIf config.home.desktop.enable (with pkgsStable; [ - liberation_ttf - twitter-color-emoji - noto-fonts - sarasa-gothic - ubuntu_font_family - (nerdfonts.override { fonts = [ "UbuntuMono" ]; }) - ]); + config = lib.mkIf config.home.desktop.enable { + home.packages = (with pkgs; [ + liberation_ttf + noto-fonts + sarasa-gothic + twitter-color-emoji + ]) ++ (with pkgs.nerd-fonts; [ + ubuntu + ubuntu-mono + ]); + }; } diff --git a/modules/home/settings/gtk/bookmarks/default.nix b/modules/home/settings/gtk/bookmarks/default.nix index 57d2d2c7..904aabfd 100644 --- a/modules/home/settings/gtk/bookmarks/default.nix +++ b/modules/home/settings/gtk/bookmarks/default.nix @@ -5,7 +5,8 @@ "file://${config.home.homeDirectory}/Downloads" "file://${config.home.homeDirectory}/Documents" "file://${config.home.homeDirectory}/Videos" - "file://${config.home.homeDirectory}/Pictures/Screenshots" - "file:///etc/nixos" + "file://${config.home.homeDirectory}/Photos" + "file://${config.home.homeDirectory}/Photos/Screenshots" + "file:///network" ]; } diff --git a/modules/home/settings/gtk/theme/default.nix b/modules/home/settings/gtk/theme/default.nix index 34918d00..9b7f6719 100644 --- a/modules/home/settings/gtk/theme/default.nix +++ b/modules/home/settings/gtk/theme/default.nix @@ -2,7 +2,7 @@ { gtk = with pkgs; { font = { - name = config.look.fonts.main; + name = config.vars.fonts.main; size = 11; }; theme = { @@ -21,7 +21,7 @@ iconTheme = { name = "Papirus-Dark"; package = papirus-icon-theme.override { - color = config.look.colors.folder; + color = config.vars.colors.folder; }; }; }; diff --git a/modules/home/settings/impermanence/default.nix b/modules/home/settings/impermanence/default.nix index 39181199..99ef68af 100644 --- a/modules/home/settings/impermanence/default.nix +++ b/modules/home/settings/impermanence/default.nix @@ -1,22 +1,24 @@ { config, lib, impermanence, ... }: { - imports = [ impermanence.homeManagerModules.impermanence ]; + imports = [ impermanence.homeManagerModules.default ]; - home.persistence."/persist${config.home.homeDirectory}" = { - directories = [ - "Keepers" - "Projects" - - ".ssh" - ".gnupg" + home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}" = { + enable = !config.targets.genericLinux.enable; + allowOther = true; + removePrefixDirectory = true; + directories = let + home = config.home.homeDirectory; + strip = path: lib.removePrefix "${home}/" path; + in with config.xdg.userDirs; [ + "dirs/${strip extraConfig.XDG_KEEPERS_DIR}" + "dirs/${strip extraConfig.XDG_PROJECTS_DIR}" + "secure/.ssh" ] ++ (if config.home.desktop.enable then [ - "Documents" - "Photos" - "Videos" - "Games" + "dirs/${strip documents}" + "dirs/${strip pictures}" + "dirs/${strip videos}" - ".local/state/wireplumber" + "state/${strip config.xdg.stateHome}/wireplumber" ] else []); - allowOther = false; }; } diff --git a/modules/home/settings/nix/channels/default.nix b/modules/home/settings/nix/channels/default.nix index 499e5afd..0273e22d 100644 --- a/modules/home/settings/nix/channels/default.nix +++ b/modules/home/settings/nix/channels/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, stable, unstable, ... }: +{ config, pkgs, stable, unstable, ... }: with pkgs; { nix.registry.stable.flake = stable; nix.registry.unstable.flake = unstable; diff --git a/modules/home/settings/nix/default.nix b/modules/home/settings/nix/default.nix index 21ba02ba..627937f5 100644 --- a/modules/home/settings/nix/default.nix +++ b/modules/home/settings/nix/default.nix @@ -6,7 +6,7 @@ ]; nix = { - package = lib.mkForce pkgs.lix; + package = lib.mkForce pkgs.nix; settings.experimental-features = [ "flakes" "nix-command" diff --git a/modules/home/settings/nix/unfree/default.nix b/modules/home/settings/nix/unfree/default.nix index 8c0a288a..41d21c96 100644 --- a/modules/home/settings/nix/unfree/default.nix +++ b/modules/home/settings/nix/unfree/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: -with lib; { - options.nixpkgs.allowUnfreePackages = mkOption { +{ + options.nixpkgs.allowUnfreePackages = with lib; mkOption { type = types.listOf types.str; default = []; }; diff --git a/modules/home/settings/nixgl/default.nix b/modules/home/settings/nixgl/default.nix new file mode 100644 index 00000000..539ad99f --- /dev/null +++ b/modules/home/settings/nixgl/default.nix @@ -0,0 +1,10 @@ +{ config, lib, ... }: +{ + nixGL = { + installScripts = [ + "mesa" + "nvidia" + ]; + vulkan.enable = true; + }; +} diff --git a/modules/home/settings/qt/default.nix b/modules/home/settings/qt/default.nix index 8c32d581..b5fd1884 100644 --- a/modules/home/settings/qt/default.nix +++ b/modules/home/settings/qt/default.nix @@ -2,6 +2,7 @@ { qt = { enable = config.home.desktop.enable; - platformTheme.name = "gtk3"; + platformTheme.name = "gtk"; + style.name = "gtk2"; }; } diff --git a/modules/home/user/default.nix b/modules/home/settings/user/default.nix similarity index 100% rename from modules/home/user/default.nix rename to modules/home/settings/user/default.nix diff --git a/modules/home/settings/xdg/default.nix b/modules/home/settings/xdg/default.nix index 25fda81c..daa8a344 100644 --- a/modules/home/settings/xdg/default.nix +++ b/modules/home/settings/xdg/default.nix @@ -1,9 +1,8 @@ -{ ... }: +{ config, ... }: { - imports = [ - ./defaults - ./folders - ]; + imports = [ ./dirs ]; + + xdg.enable = config.home.desktop.enable; home.preferXdgDirectories = true; } diff --git a/modules/home/settings/xdg/defaults/default.nix b/modules/home/settings/xdg/defaults/default.nix deleted file mode 100644 index b8ba593b..00000000 --- a/modules/home/settings/xdg/defaults/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ ... }: -{ - xdg.mimeApps.defaultApplications = { - "inode/directory" = [ "pcmanfm-qt.desktop" ]; - "text/plain" = [ "nvim.desktop" ]; - "image/png" = [ "imv.desktop" ]; - "image/jpeg" = [ "imv.desktop" ]; - "image/gif" = [ "mpv.desktop" ]; - "video/*" = [ "mpv.desktop" ]; - }; -} diff --git a/modules/home/settings/xdg/dirs/default.nix b/modules/home/settings/xdg/dirs/default.nix new file mode 100644 index 00000000..5473ab0a --- /dev/null +++ b/modules/home/settings/xdg/dirs/default.nix @@ -0,0 +1,22 @@ +{ config, ... }: +{ + xdg.userDirs = with config.home; { + enable = config.xdg.enable; + createDirectories = true; + + desktop = null; + music = null; + pictures = "${homeDirectory}/Photos"; + publicShare = null; + templates = null; + + extraConfig = { + XDG_GAMES_DIR = "${homeDirectory}/Games"; + XDG_KEEPERS_DIR = "${homeDirectory}/Keepers"; + XDG_NETWORK_DIR = "/network"; + XDG_PERSIST_DIR = "/persist${homeDirectory}"; + XDG_PROJECTS_DIR = "${homeDirectory}/Projects"; + XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots"; + }; + }; +} diff --git a/modules/home/settings/xdg/folders/default.nix b/modules/home/settings/xdg/folders/default.nix deleted file mode 100644 index 470cd693..00000000 --- a/modules/home/settings/xdg/folders/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ config, ... }: -{ - xdg.userDirs = { - enable = config.home.desktop.enable; - createDirectories = true; - desktop = null; - pictures = "${config.home.homeDirectory}/Photos"; - music = null; - publicShare = null; - templates = null; - extraConfig.XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots"; - }; -} diff --git a/modules/home/variables/border/default.nix b/modules/home/variables/border/default.nix new file mode 100644 index 00000000..938c98b5 --- /dev/null +++ b/modules/home/variables/border/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + vars.border = rec { + int = 3; + string = toString int; + }; +} diff --git a/modules/home/variables/look/colors/default.nix b/modules/home/variables/colors/default.nix similarity index 71% rename from modules/home/variables/look/colors/default.nix rename to modules/home/variables/colors/default.nix index e75d1e6a..b15c1a34 100644 --- a/modules/home/variables/look/colors/default.nix +++ b/modules/home/variables/colors/default.nix @@ -1,10 +1,6 @@ -{ config, lib, ... }: +{ ... }: { - options.look.colors = lib.mkOption { - type = lib.types.attrs; - }; - - config.look.colors = { + vars.colors = { prime = "3823C4"; #3823C4 accent = "1B1F59"; #1B1F59 split = "555B9E"; #555B9E diff --git a/modules/home/variables/default.nix b/modules/home/variables/default.nix index 2a4872ac..675dee94 100644 --- a/modules/home/variables/default.nix +++ b/modules/home/variables/default.nix @@ -1,8 +1,14 @@ -{ ... }: +{ lib, ... }: { imports = [ + ./border + ./colors ./displays - ./look + ./fonts ./workspaces ]; + + options.vars = lib.mkOption { + type = lib.types.attrs; + }; } diff --git a/modules/home/variables/displays/default.nix b/modules/home/variables/displays/default.nix index 8d1fc828..44f7e4eb 100644 --- a/modules/home/variables/displays/default.nix +++ b/modules/home/variables/displays/default.nix @@ -1,18 +1,12 @@ -{ config, lib, ... }: +{ ... }: { - options.displays = lib.mkOption { - type = lib.types.attrs; - }; - - config.displays = { + vars.displays = { tower1 = "Microstep MSI G24C 0000000000001"; - tower2 = "BNQ BenQ GW2270 6CH00781019"; + tower2 = "Dell Inc. DELL P2214H KW14V4965YKS"; tower3 = "Eizo Nanao Corporation CG223W 23252050"; - tower4 = "Samsung Electric Company SAMSUNG Unknown"; + tower4 = "Sony SONY TV 0x01010101"; - jupiter = "Valve Corporation ANX7530 U 0x00000001"; - - estradiol1 = "Dell Inc. DELL P2214H KW14V4965YKS"; - estradiol2 = "HannStar Display Corp iP192A 051AW1WY03797"; + intuos1 = "Wacom Tech Cintiq W1310 MIRACULIX"; + intuos2 = "BNQ BenQ GW2270 6CH00781019"; }; } diff --git a/modules/home/variables/fonts/default.nix b/modules/home/variables/fonts/default.nix new file mode 100644 index 00000000..a9a26c8b --- /dev/null +++ b/modules/home/variables/fonts/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + vars.fonts = { + main = "Ubuntu Nerd Font"; + mono = "UbuntuMono Nerd Font"; + }; +} diff --git a/modules/home/variables/look/border/default.nix b/modules/home/variables/look/border/default.nix deleted file mode 100644 index 8ffa16e4..00000000 --- a/modules/home/variables/look/border/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, lib, ... }: -{ - options.look.border = lib.mkOption { - type = lib.types.attrs; - }; - - config.look.border = rec { - int = 3; - string = toString int; - }; -} diff --git a/modules/home/variables/look/default.nix b/modules/home/variables/look/default.nix deleted file mode 100644 index a5930b9c..00000000 --- a/modules/home/variables/look/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ ... }: -{ - imports = [ - ./border - ./colors - ./fonts - ]; -} diff --git a/modules/home/variables/look/fonts/default.nix b/modules/home/variables/look/fonts/default.nix deleted file mode 100644 index b8cc234c..00000000 --- a/modules/home/variables/look/fonts/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, lib, ... }: -{ - options.look.fonts = lib.mkOption { - type = lib.types.attrs; - }; - - config.look.fonts = { - main = "Ubuntu"; - mono = "UbuntuMono Nerd Font"; - }; -} diff --git a/modules/home/variables/workspaces/default.nix b/modules/home/variables/workspaces/default.nix index ead54949..80875cb0 100644 --- a/modules/home/variables/workspaces/default.nix +++ b/modules/home/variables/workspaces/default.nix @@ -1,10 +1,6 @@ -{ config, lib, ... }: +{ ... }: { - options.ws = lib.mkOption { - type = lib.types.attrs; - }; - - config.ws = { + vars.ws = { w0 = "0"; w1 = "1"; w2 = "2"; diff --git a/modules/home/wms/programs/default.nix b/modules/home/wms/programs/default.nix index 4828dc84..924e4a0b 100644 --- a/modules/home/wms/programs/default.nix +++ b/modules/home/wms/programs/default.nix @@ -4,9 +4,11 @@ ./clipman ./kanshi ./mako + ./portals ./rofi ./swayidle ./swaylock + ./wallpapers ./waybar ./wlsunset ]; diff --git a/modules/home/wms/programs/kanshi/default.nix b/modules/home/wms/programs/kanshi/default.nix index d592d646..235b9aa9 100644 --- a/modules/home/wms/programs/kanshi/default.nix +++ b/modules/home/wms/programs/kanshi/default.nix @@ -2,65 +2,91 @@ { services.kanshi = { enable = config.home.desktop.enable; - settings = [ + settings = with config.vars.displays; [ + # Outputs { output = { - criteria = config.displays.tower1; + criteria = tower1; + adaptiveSync = true; mode = "1920x1080@143.979996Hz"; }; } { output = { - criteria = config.displays.jupiter; - mode = "800x1280@59.99900"; - transform = "270"; - scale = 1.15; + criteria = tower3; + mode = "1680x1050@59.883"; + transform = "90"; }; } + + # Profiles { profile = { - name = "primary"; + name = "tower-tv"; outputs = [ { - criteria = config.displays.tower1; + criteria = tower1; position = "3840,405"; + status = "enable"; } { - criteria = config.displays.tower2; + criteria = tower2; position = "1920,405"; + status = "enable"; } { - criteria = config.displays.tower3; + criteria = tower3; position = "5760,0"; - transform = "90"; + status = "enable"; } { - criteria = config.displays.tower4; + criteria = tower4; position = "0,405"; + status = "enable"; } ]; }; } { profile = { - name = "estradiol"; + name = "tower"; outputs = [ { - criteria = config.displays.estradiol1; + criteria = tower1; + position = "1920,405"; + status = "enable"; + } + { + criteria = tower2; + position = "0,405"; + status = "enable"; + } + { + criteria = tower3; + position = "3840,0"; + status = "enable"; + } + ]; + }; + } + + { + profile = { + name = "intuos"; + outputs = [ + { + criteria = intuos1; + position = "1920,278"; + scale = 1.80; + } + { + criteria = intuos2; position = "0,0"; } - { - criteria = config.displays.estradiol2; - position = "1920,0"; - scale = 0.85; - } - { - criteria = "eDP-1"; - status = "disable"; - } ]; }; } + { profile = { name = "docked"; @@ -76,6 +102,22 @@ ]; }; } + + { + profile = { + name = "deck"; + outputs = [ + { + criteria = "Valve Corporation ANX7530 U 0x00000001"; + status = "enable"; + mode = "800x1280@59.99900"; + transform = "270"; + scale = 1.15; + } + ]; + }; + } + { profile = { name = "undocked"; diff --git a/modules/home/wms/programs/mako/default.nix b/modules/home/wms/programs/mako/default.nix index 065026c7..1e689e1e 100644 --- a/modules/home/wms/programs/mako/default.nix +++ b/modules/home/wms/programs/mako/default.nix @@ -2,22 +2,26 @@ { services.mako = { enable = config.home.desktop.enable; - borderColor = "#${config.look.colors.accent}"; - backgroundColor = "#${config.look.colors.dark}D9"; - sort = "+time"; - layer = "overlay"; - padding = "8"; - margin = "0"; - borderSize = config.look.border.int; - maxIconSize = 40; - defaultTimeout = 4500; - font = "${config.look.fonts.main} 12"; - anchor = "bottom-right"; - extraConfig = '' - on-button-right=dismiss-all - outer-margin=10 - [mode=do-not-disturb] - invisible=1 - ''; + settings = { + # Theme + background-color = "#${config.vars.colors.dark}D9"; + border-color = "#${config.vars.colors.accent}"; + border-size = config.vars.border.int; + font = "${config.vars.fonts.main} 12"; + margin = 0; + max-icon-size = 40; + outer-margin = 10; + padding = 8; + + # Rules + anchor = "bottom-right"; + default-timeout = 4500; + layer = "overlay"; + on-button-right = "dismiss-all"; + sort = "+time"; + + # Modes + "mode=do-not-disturb".invisible = 1; + }; }; } diff --git a/modules/home/wms/programs/portals/default.nix b/modules/home/wms/programs/portals/default.nix new file mode 100644 index 00000000..b54c9d9f --- /dev/null +++ b/modules/home/wms/programs/portals/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: +{ + xdg.portal = { + enable = config.home.desktop.enable; + configPackages = config.xdg.portal.extraPortals; + xdgOpenUsePortal = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-gtk + xdg-desktop-portal-wlr + ]; + }; +} diff --git a/modules/home/wms/programs/rofi/default.nix b/modules/home/wms/programs/rofi/default.nix index a32f7076..bcdaddf5 100644 --- a/modules/home/wms/programs/rofi/default.nix +++ b/modules/home/wms/programs/rofi/default.nix @@ -7,7 +7,7 @@ enable = true; package = pkgs.rofi-wayland; terminal = "foot"; - font = "${config.look.fonts.main} 14"; + font = "${config.vars.fonts.main} 14"; theme = let inherit (config.lib.formats.rasi) mkLiteral; in { @@ -18,24 +18,24 @@ red = mkLiteral "#DC322F"; background-color = mkLiteral "#00000000"; separatorcolor = mkLiteral "#00000000"; - normal-foreground = mkLiteral "#${config.look.colors.text}"; - normal-background = mkLiteral "#${config.look.colors.dark}1A"; - urgent-foreground = mkLiteral "#${config.look.colors.urgent}"; - active-foreground = mkLiteral "#${config.look.colors.split}"; - selected-active-foreground = mkLiteral "#${config.look.colors.prime}"; - background = mkLiteral "#${config.look.colors.dark}D9"; - bordercolor = mkLiteral "#${config.look.colors.prime}"; + normal-foreground = mkLiteral "#${config.vars.colors.text}"; + normal-background = mkLiteral "#${config.vars.colors.dark}1A"; + urgent-foreground = mkLiteral "#${config.vars.colors.urgent}"; + active-foreground = mkLiteral "#${config.vars.colors.split}"; + selected-active-foreground = mkLiteral "#${config.vars.colors.prime}"; + background = mkLiteral "#${config.vars.colors.dark}D9"; + bordercolor = mkLiteral "#${config.vars.colors.prime}"; selected-normal-foreground = mkLiteral "#FFFFFF"; - selected-normal-background = mkLiteral "#${config.look.colors.prime}80"; - border-color = mkLiteral "#${config.look.colors.prime}"; - urgent-background = mkLiteral "#${config.look.colors.accent}26"; - active-background = mkLiteral "#${config.look.colors.accent}26"; - selected-active-background = mkLiteral "#${config.look.colors.split}54"; + selected-normal-background = mkLiteral "#${config.vars.colors.prime}80"; + border-color = mkLiteral "#${config.vars.colors.prime}"; + urgent-background = mkLiteral "#${config.vars.colors.accent}26"; + active-background = mkLiteral "#${config.vars.colors.accent}26"; + selected-active-background = mkLiteral "#${config.vars.colors.split}54"; }; "#window" = { background-color = mkLiteral "@background"; width = 500; - border = mkLiteral "${config.look.border.string}"; + border = mkLiteral "${config.vars.border.string}"; padding = 5; }; "#message" = { diff --git a/modules/home/wms/programs/rofi/scripts/default.nix b/modules/home/wms/programs/rofi/scripts/default.nix index 95efb373..cfc82d5b 100644 --- a/modules/home/wms/programs/rofi/scripts/default.nix +++ b/modules/home/wms/programs/rofi/scripts/default.nix @@ -2,18 +2,26 @@ { home.packages = with pkgs; lib.mkIf config.programs.rofi.enable [ (writeScriptBin "rofiscratch" '' + #!/bin/sh + SCRATCHPADS=$(echo -e "Btop\nMusic\nSound\nEasyEffects" | rofi -dmenu -i -p "Scratchpads") + case $SCRATCHPADS in Btop) foot -a btop -T Btop btop;; Music) foot -a music -T Music ncmpcpp;; Sound) foot -a sound -T Sound pulsemixer;; esac '') + (writeScriptBin "rofipower" '' + #!/bin/sh + POWER=$(echo -e "Shutdown\nReboot\nLock\nSleep\nKill" | rofi -dmenu -i -p "Power") + case $POWER in Shutdown) poweroff;; Reboot) reboot;; + Lock) swaylock;; Sleep) systemctl suspend;; Kill) pkill -9 $XDG_CURRENT_DESKTOP;; esac diff --git a/modules/home/wms/programs/swaylock/default.nix b/modules/home/wms/programs/swaylock/default.nix index 33b18cfa..ca361fd9 100644 --- a/modules/home/wms/programs/swaylock/default.nix +++ b/modules/home/wms/programs/swaylock/default.nix @@ -1,8 +1,8 @@ { config, pkgs, ... }: let - default = "#${config.look.colors.prime}FF"; - wrong = "#${config.look.colors.split}FF"; - verifying = "#${config.look.colors.accent}FF"; + default = "#${config.vars.colors.prime}FF"; + wrong = "#${config.vars.colors.split}FF"; + verifying = "#${config.vars.colors.accent}FF"; blank = "#00000000"; clear = "#FFFFFF22"; text = "#FFFFFFFF"; @@ -12,8 +12,8 @@ in { package = pkgs.swaylock-effects; settings = { clock = true; - image = builtins.toString ./lock.png; - font = config.look.fonts.main; + image = ".wallpapers/lock.png"; + font = config.vars.fonts.main; font-size = 30; timestr = "%I:%M%p"; datestr = "%a %b %d %Y"; diff --git a/modules/home/wms/programs/wallpapers/default.nix b/modules/home/wms/programs/wallpapers/default.nix new file mode 100644 index 00000000..9077d586 --- /dev/null +++ b/modules/home/wms/programs/wallpapers/default.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: +{ + imports = [ ./wpaperd ]; + + config = lib.mkIf config.home.desktop.enable { + home.file.".wallpapers".source = ./photos; + }; +} diff --git a/modules/home/wms/sway/theme/wallpapers/1.png b/modules/home/wms/programs/wallpapers/photos/1.png similarity index 100% rename from modules/home/wms/sway/theme/wallpapers/1.png rename to modules/home/wms/programs/wallpapers/photos/1.png diff --git a/modules/home/wms/sway/theme/wallpapers/2.png b/modules/home/wms/programs/wallpapers/photos/2.png similarity index 100% rename from modules/home/wms/sway/theme/wallpapers/2.png rename to modules/home/wms/programs/wallpapers/photos/2.png diff --git a/modules/home/wms/sway/theme/wallpapers/3.png b/modules/home/wms/programs/wallpapers/photos/3.png similarity index 100% rename from modules/home/wms/sway/theme/wallpapers/3.png rename to modules/home/wms/programs/wallpapers/photos/3.png diff --git a/modules/home/wms/programs/swaylock/lock.png b/modules/home/wms/programs/wallpapers/photos/lock.png similarity index 100% rename from modules/home/wms/programs/swaylock/lock.png rename to modules/home/wms/programs/wallpapers/photos/lock.png diff --git a/modules/home/wms/programs/wallpapers/wpaperd/default.nix b/modules/home/wms/programs/wallpapers/wpaperd/default.nix new file mode 100644 index 00000000..98892d90 --- /dev/null +++ b/modules/home/wms/programs/wallpapers/wpaperd/default.nix @@ -0,0 +1,12 @@ +{ config, ... }: +{ + services.wpaperd = { + enable = config.home.desktop.enable; + settings = { + default.mode = "center"; + any.path = ".wallpapers/1.png"; + "${config.vars.displays.tower2}".path = ".wallpapers/2.png"; + "${config.vars.displays.tower3}".path = ".wallpapers/3.png"; + }; + }; +} diff --git a/modules/home/wms/programs/waybar/default.nix b/modules/home/wms/programs/waybar/default.nix index da9d4eff..1ddb8963 100644 --- a/modules/home/wms/programs/waybar/default.nix +++ b/modules/home/wms/programs/waybar/default.nix @@ -1,222 +1,244 @@ { config, lib, pkgs, ... }: { programs.waybar = let - workspaceModule = { - format = "{name}"; - enable-bar-scroll = true; - disable-scroll-wraparound = true; - numeric-first = true; - warp-on-scroll = false; - }; - - windowModule = { - icon = true; - icon-size = 15; - all-outputs = true; - tooltip = false; - rewrite = { - "(.*) — LibreWolf" = " $1"; - "LibreWolf" = " Firefox"; - "(.*) - LibreWolf — Firefox" = "󰗃 $1"; + commonModules = { + "sway/workspaces" = { + format = "{name}"; + enable-bar-scroll = true; + disable-scroll-wraparound = true; + numeric-first = true; + warp-on-scroll = false; }; - }; - pulseModule = { - format = "{icon} {volume}%"; - format-bluetooth = "{icon} {volume}%"; - format-muted = " muted"; - format-icons = { - headphone = "󰋋 "; - headset = "󰋋 "; - default = [ - " " - " " + "sway/window" = { + icon = true; + icon-size = 15; + all-outputs = true; + tooltip = false; + }; + + "pulseaudio" = with pkgs; { + format = "{icon} {volume}%"; + format-bluetooth = "{icon} {volume}%"; + format-muted = " muted"; + format-icons = { + headphone = "󰋋"; + headset = "󰋋"; + default = [ + "" + "" + ]; + }; + on-click = "${wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + on-click-middle = "${wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 100%"; + on-click-right = "${wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 60%"; + ignored-sinks = [ "Easy Effects Sink" ]; + }; + + "mpris" = { + player = "mpd"; + format = " {title}"; + format-paused = " {artist}"; + format-stopped = ""; + tooltip-format = lib.concatStrings [ + "{title} - {artist} - {album}\n" + "{position}/{length}" + ]; + interval = 2; + max-length = 30; + }; + + "custom/notifs" = with pkgs; { + exec = pkgs.writeScript "notificationScript.sh" '' + #!/bin/sh + + SED="${gnused}/bin/sed" + MAKOCTL="${mako}/bin/makoctl" + + # Extract the second line after "default" + mode=$(echo "$($MAKOCTL mode)" | $SED -n '/default/{n;p}') + + # Print the notification status with the tooltip + if [[ "$mode" == "do-not-disturb" ]]; then + printf '{"text":"󱆥 Off","class":"disabled","tooltip":"Notifications Disabled."}' + else + printf '{"text":" On","tooltip":"Notifications Enabled."}'; + fi + ''; + format = "{}"; + return-type = "json"; + interval = 2; + on-click = "${mako}/bin/makoctl mode -t do-not-disturb"; + }; + + "idle_inhibitor" = { + format = "{icon}"; + format-icons = { + activated = " On"; + deactivated = "󰾫 Off"; + tooltip-format-activated = "Sleep inhibited."; + tooltip-format-deactivated = "Sleep uninhibited."; + }; + }; + + "custom/weather" = { + exec = "${pkgs.wttrbar}/bin/wttrbar --ampm"; + format = "{}°"; + tooltip = true; + return-type = "json"; + interval = 3600; + }; + + "cpu" = { + format = " {usage}%"; + interval = 3; + }; + + "memory" = { + format = " {used}G"; + tooltip = false; + interval = 3; + }; + + "custom/vram" = { + exec = with pkgs; pkgs.writeScript "vramScript.sh" '' + #!/bin/sh + + LSPCI="${pciutils}/bin/lspci" + GREP="${gnugrep}/bin/grep" + AWK="${gawk}/bin/awk" + BC="${bc}/bin/bc" + HEAD="${uutils-coreutils-noprefix}/bin/head" + CAT="${uutils-coreutils-noprefix}/bin/cat" + NVIDIA="/run/current-system/sw/bin/nvidia-smi" + + # Detect the active GPU driver + gpu_driver="$($LSPCI -k | $GREP -Eo 'in use: (nvidia|amdgpu)' | $AWK '{print $3}')" + + # Exit if no supported GPU driver is in use + if [[ -z "$gpu_driver" ]]; then + exit 0 + fi + + # Get VRAM usage in MB + if [[ "$gpu_driver" == "nvidia" ]]; then + vram_usage_mb="$($NVIDIA --query-gpu=memory.used --format=csv,noheader,nounits | $HEAD -n1)" + elif [[ "$gpu_driver" == "amdgpu" ]]; then + vram_bytes="$($CAT /sys/class/drm/card*/device/mem_info_vram_used 2>/dev/null | $HEAD -n1)" + vram_usage_mb="$($BC <<< "$vram_bytes / 1024 / 1024")" + fi + + # Format VRAM usage for display + if [[ "$vram_usage_mb" -lt 1024 ]]; then + vram_usage_display="''${vram_usage_mb}M" + else + vram_usage_gib="$($BC <<< "scale=2; $vram_usage_mb / 1024")" + vram_usage_display="''${vram_usage_gib}G" + fi + + # Output the VRAM usage + echo "{\"text\": \"󰢮 ''${vram_usage_display}\"}" + ''; + format = "{}"; + return-type = "json"; + interval = 3; + }; + + "backlight" = { + format = "{icon} {percent}%"; + format-icons = [ + "" + "󰖨" + ]; + tooltip = false; + }; + + "battery" = { + interval = 60; + states = { + warning = 30; + critical = 15; + }; + format = "{icon} {capacity}%"; + format-icons = [ + "" + "" + "" + "" + "" ]; }; - on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; - on-click-middle = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 100%"; - on-click-right = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 60%"; - ignored-sinks = [ "Easy Effects Sink" ]; - }; - # Monitoring - cpuModule = { - format = " {usage}%"; - interval = 3; - }; - - ramModule = { - format = " {used}G"; - tooltip = false; - interval = 3; - }; - - vramModule = { - exec = pkgs.writeScript "vramScript" '' - # Don't run the script if running on integrated graphics - gpu_driver=$(${pkgs.pciutils}/bin/lspci -k | grep -Eo "in use: (nvidia|amdgpu)" | awk '{print $3}') - - if [ -n "$gpu_driver" ]; then - if [ "$gpu_driver" == "nvidia" ]; then - vram_usage_mb=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits) - temperature=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits) - - elif [ "$gpu_driver" == "amdgpu" ]; then - vram_usage_mb=$(echo "$(cat /sys/class/drm/card0/device/mem_info_vram_used || cat /sys/class/drm/card1/device/mem_info_vram_used) / 1024 / 1024" | bc) - temperature=$(${pkgs.lm_sensors}/bin/sensors | grep 'edge' | awk '{print $2}' | sed 's/[^0-9.-]//g') - fi - - # Check if VRAM usage is under 1GB - if [ $vram_usage_mb -lt 1024 ]; then - vram_usage_display="$(echo $vram_usage_mb)M" - else - # Convert MB to GiB - vram_usage_gib=$(bc <<< "scale=2; $vram_usage_mb / 1024") - vram_usage_display="$(echo $vram_usage_gib)G" - fi - - # Print the VRAM usage and temperature - echo "{\"text\":\"󰢮 $(echo $vram_usage_display)\",\"tooltip\":\"$(echo $temperature)°C\"}" - fi - ''; - format = "{}"; - return-type = "json"; - interval = 3; - }; - - # Clocks - clockModule = { - interval = 1; - format = "{:%a %b %d %I:%M:%S%p}"; - tooltip-format = "{calendar}"; - }; - - # Misc - trayModule.spacing = 5; - - networkModule = { - format-ethernet = "󰈀"; - format-wifi = ""; - format-disconnected = "󰖪"; - format-linked = ""; - tooltip-format-ethernet = lib.concatStrings [ - "{ipaddr}\n" - "{ifname} " - ]; - tooltip-format-wifi = lib.concatStrings [ - "{ipaddr}\n" - "{essid} ({signalStrength}%)" - ]; - tooltip-format-disconnected = "Disconnected"; - }; - - bluetoothModule = { - format = ""; - format-disabled = ""; - format-no-controller = ""; - tooltip-format-on = "No devices connected."; - tooltip-format-connected = lib.concatStrings [ - "{num_connections} connected\n" - "{device_enumerate}" - ]; - tooltip-format-enumerate-connected = "{device_alias}"; - tooltip-format-enumerate-connected-battery = "{device_alias} {device_battery_percentage}%"; - }; - - scratchpadModule = { - format = " {count}"; - show-empty = false; - tooltip = true; - tooltip-format = "{title}"; - }; - - gamemodeModule = { - format = "{glyph}"; - hide-not-running = true; - use-icon = true; - icon-size = 19; - icon-spacing = 0; - tooltip = true; - }; - - privacyModule = { - icon-spacing = 5; - icon-size = 15; - }; - - mpdModule = { - format = " {title}"; - format-paused = " {artist}"; - format-stopped = ""; - format-disconnected = ""; - tooltip-format = "{artist} - {title}"; - interval = 2; - max-length = 30; - on-click = "playerctl -p mpd play-pause"; - }; - - notificationModule = { - exec = pkgs.writeScript "notificationScript" '' - # Extract the second line after "default" - mode=$(echo "$(makoctl mode)" | sed -n '/default/{n;p}') - - # Print the notification status with the tooltip - if [[ "$mode" == "do-not-disturb" ]]; then - printf '{"text":"󱆥 Off","class":"disabled","tooltip":"Notifications Disabled."}' - else - printf '{"text":" On","tooltip":"Notifications Enabled."}'; - fi - ''; - format = "{}"; - return-type = "json"; - interval = 2; - on-click = "makotoggle"; - }; - - weatherModule = { - exec = "${pkgs.wttrbar}/bin/wttrbar --ampm"; - format = "{}°"; - tooltip = true; - return-type = "json"; - interval = 3600; - }; - - # Laptop modules - backlightModule = { - format = "{icon} {percent}%"; - format-icons = [ - "" - "󰖨" - ]; - tooltip = false; - }; - - batteryModule = { - interval = 60; - states = { - warning = 30; - critical = 15; + "clock" = { + interval = 1; + format = "󰥔 {:%a %b %d %I:%M:%S%p}"; + tooltip-format = "{calendar}"; + }; + + "sway/scratchpad" = { + format = " {count}"; + show-empty = false; + tooltip = true; + tooltip-format = "{title}"; + }; + + "privacy" = { + icon-spacing = 5; + icon-size = 15; + }; + + "gamemode" = { + format = "{glyph}"; + hide-not-running = true; + use-icon = true; + icon-size = 19; + icon-spacing = 0; + tooltip = true; + }; + + "tray".spacing = 5; + + "bluetooth" = { + format = ""; + format-disabled = ""; + format-no-controller = ""; + tooltip-format-on = "No devices connected."; + tooltip-format-connected = lib.concatStrings [ + "{num_connections} connected\n" + "{device_enumerate}" + ]; + tooltip-format-enumerate-connected = "{device_alias}"; + tooltip-format-enumerate-connected-battery = "{device_alias} {device_battery_percentage}%"; + }; + + "network" = { + format-ethernet = "󰈀"; + format-wifi = ""; + format-disconnected = "󰖪"; + format-linked = ""; + tooltip-format-ethernet = lib.concatStrings [ + "{ipaddr}\n" + "{ifname} " + ]; + tooltip-format-wifi = lib.concatStrings [ + "{ipaddr}\n" + "{essid} ({signalStrength}%)" + ]; + tooltip-format-disconnected = "Disconnected"; }; - format = "{icon} {capacity}%"; - format-icons = [ - "" - "" - "" - "" - "" - ]; }; in { enable = config.home.desktop.enable; + systemd.enable = true; settings = { - displayPrimary = { + displayPrimary = commonModules // { name = "bar1"; position = "top"; layer = "top"; output = [ - "!${config.displays.tower2}" - "!${config.displays.tower3}" - "!${config.displays.estradiol2}" + "!${config.vars.displays.tower2}" + "!${config.vars.displays.tower3}" + "!${config.vars.displays.intuos2}" "*" ]; modules-left = [ @@ -225,9 +247,10 @@ ]; modules-right = [ "pulseaudio" - "mpd" + "mpris" "custom/notifs" - "custom/weather2" + "idle_inhibitor" + "custom/weather" "cpu" "memory" "custom/vram" @@ -241,33 +264,16 @@ "bluetooth" "network" ]; - "sway/workspaces" = workspaceModule; - "sway/window" = windowModule; - "pulseaudio" = pulseModule; - "mpd" = mpdModule; - "custom/notifs" = notificationModule; - "custom/weather2" = weatherModule; - "cpu" = cpuModule; - "memory" = ramModule; - "custom/vram" = vramModule; - "backlight" = backlightModule; - "battery" = batteryModule; - "clock" = clockModule; - "sway/scratchpad" = scratchpadModule; - "privacy" = privacyModule; - "tray" = trayModule; - "bluetooth" = bluetoothModule; - "network" = networkModule; }; - displaySecondary = { + displaySecondary = commonModules // { name = "bar2"; position = "top"; layer = "top"; output = [ - config.displays.tower2 - config.displays.tower3 - config.displays.estradiol2 + config.vars.displays.tower2 + config.vars.displays.tower3 + config.vars.displays.intuos2 ]; modules-left = [ "sway/workspaces" @@ -280,15 +286,6 @@ "custom/vram" "clock" ]; - "sway/workspaces" = workspaceModule; - "sway/window" = windowModule; - "pulseaudio" = pulseModule; - "mpd" = mpdModule; - "custom/notifs" = notificationModule; - "cpu" = cpuModule; - "memory" = ramModule; - "custom/vram" = vramModule; - "clock" = clockModule; }; }; @@ -297,29 +294,16 @@ border: 0; border-radius: 0; min-height: 0; - font-family: ${config.look.fonts.main}, ${config.look.fonts.mono}; font-size: 15.5px; - color: #${config.look.colors.text}; - } - #waybar { - background: #${config.look.colors.dark}; - } - #workspaces { - padding: 0 6px 0 0; - } - #tray { - padding: 0 2px 0 5px; - } - #network { - padding: 0 10px 0 4px; - } - #network.disconnected,#bluetooth.off { - color: #424242; - } - #bluetooth { - margin: 0 6px 0 4px; - font-size: 13.4px; + color: #${config.vars.colors.text}; } + + #waybar { background: #${config.vars.colors.dark}; } + #network { padding: 0 6px 0 4px; } + #gamemode, #scratchpad, #privacy, #tray, #bluetooth { margin: 0 2px 0 2px; } + #pulseaudio, #mpris, #custom-notifs, #idle_inhibitor, #custom-weather, #cpu, #memory, #custom-vram, #backlight, #battery, #clock { margin: 0 2px 0 4px; } + + #workspaces { padding: 0 6px 0 0; } #workspaces button { padding: 0 3px; color: white; @@ -327,70 +311,30 @@ min-width: 20px; } #workspaces button.visible, #workspaces button.active { - border-bottom: 3px solid #${config.look.colors.prime}; - background: #${config.look.colors.mid}; + border-bottom: 3px solid #${config.vars.colors.prime}; + background: #${config.vars.colors.mid}; } #workspaces button.urgent { - border-bottom: 3px solid #${config.look.colors.urgent}; + border-bottom: 3px solid #${config.vars.colors.urgent}; } #workspaces button:hover { box-shadow: none; - background: #${config.look.colors.light}; - } - #scratchpad { - margin-left: 4px; - } - #privacy { - margin-left: 4px; - } - #cpu, #memory, #custom-vram, #mpd, #backlight, #battery, #custom-weather, #custom-weather2, #custom-notifs { - margin: 0 5px 0 2px; - } - #clock { - margin: 0 2px 0 2px; - } - #cpu { - border-bottom: 3px solid #f90000; - } - #memory { - border-bottom: 3px solid #4bffdc; - } - #custom-vram { - border-bottom: 3px solid #33FF00; - } - #mpd { - border-bottom: 3px solid #ffb066; - } - #mpd.paused { - color: #888; - } - #clock { - border-bottom: 3px solid #0a6cf5; - } - #backlight { - border-bottom: 3px solid #5ffca3; - } - #battery { - border-bottom: 3px solid #fcfc16; - } - #custom-weather { - border-bottom: 3px solid #3823C4; - } - #custom-weather2 { - border-bottom: 3px solid #c75bd3; - } - #custom-notifs { - border-bottom: 3px solid #3823C4; - } - #custom-notifs.disabled { - color: #888; - } - #pulseaudio { - margin-right: 5px; - } - #pulseaudio.muted { - color: #424242; + background: #${config.vars.colors.light}; } + + #mpris { border-bottom: 3px solid #ffb066; } + #custom-notifs { border-bottom: 3px solid #3823C4; } + #idle_inhibitor { border-bottom: 3px solid #941efc; } + #custom-weather { border-bottom: 3px solid #ea60e3; } + #cpu { border-bottom: 3px solid #f90000; } + #memory { border-bottom: 3px solid #4bffdc; } + #custom-vram { border-bottom: 3px solid #33FF00; } + #backlight { border-bottom: 3px solid #5ffca3; } + #battery { border-bottom: 3px solid #fcfc16; } + #clock { border-bottom: 3px solid #0a6cf5; } + + #mpris.paused, #custom-notifs.disabled, #idle_inhibitor.deactivated { color: #888; } + #pulseaudio.muted, #network.disconnected, #bluetooth.off { color: #424242; } ''; }; } diff --git a/modules/home/wms/sway/autostart/default.nix b/modules/home/wms/sway/autostart/default.nix index ddb9303e..f0570187 100644 --- a/modules/home/wms/sway/autostart/default.nix +++ b/modules/home/wms/sway/autostart/default.nix @@ -1,24 +1,17 @@ { ... }: { - wayland.windowManager.sway.config = { - bars = [{ command = "waybar"; }]; + wayland.windowManager.sway.config.startup = [ + # Scratchpads + { command = "foot -a btop -T Gotop btop"; } + { command = "foot -a music -T Music ncmpcpp"; } + { command = "foot -a sound -T Sound pulsemixer"; } - startup = [ - # Scratchpads - { command = "foot -a btop -T Gotop btop"; } - { command = "foot -a music -T Music ncmpcpp"; } - { command = "foot -a sound -T Sound pulsemixer"; } + # Daemons and tray + { command = "kanshictl reload"; always = true; } + { command = "wayland-pipewire-idle-inhibit"; } - # Daemons and tray - { - command = "kanshictl reload"; - always = true; - } - { command = "wayland-pipewire-idle-inhibit"; } - - # Foreground - { command = "thunderbird"; } - { command = "vesktop"; } - ]; - }; + # Foreground + { command = "thunderbird"; } + { command = "vesktop"; } + ]; } diff --git a/modules/home/wms/sway/extra/default.nix b/modules/home/wms/sway/extra/default.nix index 9a0ae172..2a879219 100644 --- a/modules/home/wms/sway/extra/default.nix +++ b/modules/home/wms/sway/extra/default.nix @@ -2,6 +2,5 @@ { wayland.windowManager.sway.extraConfig = '' titlebar_padding 10 1 - primary_selection disabled ''; } diff --git a/modules/home/wms/sway/hotkeys/default.nix b/modules/home/wms/sway/hotkeys/default.nix index f8bd83b4..ffd9e6e2 100644 --- a/modules/home/wms/sway/hotkeys/default.nix +++ b/modules/home/wms/sway/hotkeys/default.nix @@ -8,12 +8,11 @@ in { # Hotkeys modifier = "${primeMod}"; - keybindings = { + keybindings = with config.vars.ws; { ## Launchers - # Browser profiles - "${primeMod}+F1" = ''exec librewolf -p Main --name MainBrowser | notify-send "Main Browser"''; - "${primeMod}+F2" = ''exec librewolf -p Alt --name AltBrowser | notify-send "Alternate Browser"''; + # Browser + "${primeMod}+F1" = ''exec librewolf | notify-send "Browser"''; # Virtual machines "${primeMod}+F4" = ''exec virt-manager | notify-send "Virtual Machines"''; @@ -79,50 +78,50 @@ "${primeMod}+Shift+r" = ''reload''; # Switch to workspaces - "${primeMod}+grave" = ''workspace 0:${config.ws.w0}''; - "${primeMod}+1" = ''workspace 1:${config.ws.w1}''; - "${primeMod}+2" = ''workspace 2:${config.ws.w2}''; - "${primeMod}+3" = ''workspace 3:${config.ws.w3}''; - "${primeMod}+4" = ''workspace 4:${config.ws.w4}''; - "${primeMod}+5" = ''workspace 5:${config.ws.w5}''; - "${primeMod}+6" = ''workspace 6:${config.ws.w6}''; - "${primeMod}+7" = ''workspace 7:${config.ws.w7}''; - "${primeMod}+8" = ''workspace 8:${config.ws.w8}''; - "${primeMod}+9" = ''workspace 9:${config.ws.w9}''; + "${primeMod}+grave" = ''workspace 0:${w0}''; + "${primeMod}+1" = ''workspace 1:${w1}''; + "${primeMod}+2" = ''workspace 2:${w2}''; + "${primeMod}+3" = ''workspace 3:${w3}''; + "${primeMod}+4" = ''workspace 4:${w4}''; + "${primeMod}+5" = ''workspace 5:${w5}''; + "${primeMod}+6" = ''workspace 6:${w6}''; + "${primeMod}+7" = ''workspace 7:${w7}''; + "${primeMod}+8" = ''workspace 8:${w8}''; + "${primeMod}+9" = ''workspace 9:${w9}''; # Switch to alternate workspaces - "${secMod}+F1" = ''workspace 11:${config.ws.w1a}''; - "${secMod}+F2" = ''workspace 22:${config.ws.w2a}''; - "${secMod}+F3" = ''workspace 33:${config.ws.w3a}''; - "${secMod}+F4" = ''workspace 44:${config.ws.w4a}''; - "${secMod}+F5" = ''workspace 55:${config.ws.w5a}''; - "${secMod}+F6" = ''workspace 66:${config.ws.w6a}''; - "${secMod}+F7" = ''workspace 77:${config.ws.w7a}''; - "${secMod}+F8" = ''workspace 88:${config.ws.w8a}''; - "${secMod}+F9" = ''workspace 99:${config.ws.w9a}''; + "${secMod}+F1" = ''workspace 11:${w1a}''; + "${secMod}+F2" = ''workspace 22:${w2a}''; + "${secMod}+F3" = ''workspace 33:${w3a}''; + "${secMod}+F4" = ''workspace 44:${w4a}''; + "${secMod}+F5" = ''workspace 55:${w5a}''; + "${secMod}+F6" = ''workspace 66:${w6a}''; + "${secMod}+F7" = ''workspace 77:${w7a}''; + "${secMod}+F8" = ''workspace 88:${w8a}''; + "${secMod}+F9" = ''workspace 99:${w9a}''; # Move window to and focus workspace - "${primeMod}+Shift+grave" = ''move container to workspace 0:${config.ws.w0}; workspace 0:${config.ws.w0}''; - "${primeMod}+Shift+1" = ''move container to workspace 1:${config.ws.w1}; workspace 1:${config.ws.w1}''; - "${primeMod}+Shift+2" = ''move container to workspace 2:${config.ws.w2}; workspace 2:${config.ws.w2}''; - "${primeMod}+Shift+3" = ''move container to workspace 3:${config.ws.w3}; workspace 3:${config.ws.w3}''; - "${primeMod}+Shift+4" = ''move container to workspace 4:${config.ws.w4}; workspace 4:${config.ws.w4}''; - "${primeMod}+Shift+5" = ''move container to workspace 5:${config.ws.w5}; workspace 5:${config.ws.w5}''; - "${primeMod}+Shift+6" = ''move container to workspace 6:${config.ws.w6}; workspace 6:${config.ws.w6}''; - "${primeMod}+Shift+7" = ''move container to workspace 7:${config.ws.w7}; workspace 7:${config.ws.w7}''; - "${primeMod}+Shift+8" = ''move container to workspace 8:${config.ws.w8}; workspace 8:${config.ws.w8}''; - "${primeMod}+Shift+9" = ''move container to workspace 9:${config.ws.w9}; workspace 9:${config.ws.w9}''; + "${primeMod}+Shift+grave" = ''move container to workspace 0:${w0}; workspace 0:${w0}''; + "${primeMod}+Shift+1" = ''move container to workspace 1:${w1}; workspace 1:${w1}''; + "${primeMod}+Shift+2" = ''move container to workspace 2:${w2}; workspace 2:${w2}''; + "${primeMod}+Shift+3" = ''move container to workspace 3:${w3}; workspace 3:${w3}''; + "${primeMod}+Shift+4" = ''move container to workspace 4:${w4}; workspace 4:${w4}''; + "${primeMod}+Shift+5" = ''move container to workspace 5:${w5}; workspace 5:${w5}''; + "${primeMod}+Shift+6" = ''move container to workspace 6:${w6}; workspace 6:${w6}''; + "${primeMod}+Shift+7" = ''move container to workspace 7:${w7}; workspace 7:${w7}''; + "${primeMod}+Shift+8" = ''move container to workspace 8:${w8}; workspace 8:${w8}''; + "${primeMod}+Shift+9" = ''move container to workspace 9:${w9}; workspace 9:${w9}''; # Move window to and focus alternate workspace - "${secMod}+Shift+F1" = ''move container to workspace 11:${config.ws.w1a}; workspace 11:${config.ws.w1a}''; - "${secMod}+Shift+F2" = ''move container to workspace 22:${config.ws.w2a}; workspace 22:${config.ws.w2a}''; - "${secMod}+Shift+F3" = ''move container to workspace 33:${config.ws.w3a}; workspace 33:${config.ws.w3a}''; - "${secMod}+Shift+F4" = ''move container to workspace 44:${config.ws.w4a}; workspace 44:${config.ws.w4a}''; - "${secMod}+Shift+F5" = ''move container to workspace 55:${config.ws.w5a}; workspace 55:${config.ws.w5a}''; - "${secMod}+Shift+F6" = ''move container to workspace 66:${config.ws.w6a}; workspace 66:${config.ws.w6a}''; - "${secMod}+Shift+F7" = ''move container to workspace 77:${config.ws.w7a}; workspace 77:${config.ws.w7a}''; - "${secMod}+Shift+F8" = ''move container to workspace 88:${config.ws.w8a}; workspace 88:${config.ws.w8a}''; - "${secMod}+Shift+F9" = ''move container to workspace 99:${config.ws.w9a}; workspace 99:${config.ws.w9a}''; + "${secMod}+Shift+F1" = ''move container to workspace 11:${w1a}; workspace 11:${w1a}''; + "${secMod}+Shift+F2" = ''move container to workspace 22:${w2a}; workspace 22:${w2a}''; + "${secMod}+Shift+F3" = ''move container to workspace 33:${w3a}; workspace 33:${w3a}''; + "${secMod}+Shift+F4" = ''move container to workspace 44:${w4a}; workspace 44:${w4a}''; + "${secMod}+Shift+F5" = ''move container to workspace 55:${w5a}; workspace 55:${w5a}''; + "${secMod}+Shift+F6" = ''move container to workspace 66:${w6a}; workspace 66:${w6a}''; + "${secMod}+Shift+F7" = ''move container to workspace 77:${w7a}; workspace 77:${w7a}''; + "${secMod}+Shift+F8" = ''move container to workspace 88:${w8a}; workspace 88:${w8a}''; + "${secMod}+Shift+F9" = ''move container to workspace 99:${w9a}; workspace 99:${w9a}''; # Change focused window "${primeMod}+h" = ''focus left''; @@ -148,6 +147,7 @@ # Change layout "${primeMod}+f" = ''fullscreen toggle''; + "${primeMod}+${secMod}+f" = ''fullscreen toggle global''; "${primeMod}+w" = ''layout toggle split''; "${primeMod}+v" = ''split v''; "${primeMod}+e" = ''layout toggle tabbed stacking''; diff --git a/modules/home/wms/sway/inputs/default.nix b/modules/home/wms/sway/inputs/default.nix index 512ce6de..7b27d603 100644 --- a/modules/home/wms/sway/inputs/default.nix +++ b/modules/home/wms/sway/inputs/default.nix @@ -1,13 +1,12 @@ -{ ... }: +{ config, ... }: { # HID devices wayland.windowManager.sway.config.input = { - "9610:4103:SINOWEALTH_Game_Mouse" = { - pointer_accel = "-0.9"; - }; - "9639:64097:Compx_2.4G_Receiver_Mouse" = { - pointer_accel = "-0.82"; - }; + "9610:4103:SINOWEALTH_Game_Mouse".pointer_accel = "-0.9"; + "9639:64097:Compx_2.4G_Receiver_Mouse".pointer_accel = "-0.82"; + "type:touch".map_to_output = ''"${config.vars.displays.intuos1}"''; + + # Wildcard, affects everything "*" = { accel_profile = "flat"; dwt = "disabled"; diff --git a/modules/home/wms/sway/outputs/default.nix b/modules/home/wms/sway/outputs/default.nix index a287851f..cd954b47 100644 --- a/modules/home/wms/sway/outputs/default.nix +++ b/modules/home/wms/sway/outputs/default.nix @@ -2,47 +2,47 @@ { # Monitors wayland.windowManager.sway.config = { - workspaceOutputAssign = let + workspaceOutputAssign = with config.vars.ws; with config.vars.displays; let workspaces1 = [ - "0:${config.ws.w0}" - "1:${config.ws.w1}" - "2:${config.ws.w2}" - "3:${config.ws.w3}" - "11:${config.ws.w1a}" - "22:${config.ws.w2a}" - "33:${config.ws.w3a}" + "0:${w0}" + "1:${w1}" + "2:${w2}" + "3:${w3}" + "11:${w1a}" + "22:${w2a}" + "33:${w3a}" ]; workspaces2 = [ - "4:${config.ws.w4}" - "5:${config.ws.w5}" - "6:${config.ws.w6}" - "44:${config.ws.w4a}" - "55:${config.ws.w5a}" + "4:${w4}" + "5:${w5}" + "6:${w6}" + "44:${w4a}" + "55:${w5a}" ]; workspaces3 = [ - "7:${config.ws.w7}" - "8:${config.ws.w8}" - "9:${config.ws.w9}" - "77:${config.ws.w7a}" - "88:${config.ws.w8a}" + "7:${w7}" + "8:${w8}" + "9:${w9}" + "77:${w7a}" + "88:${w8a}" ]; workspaces4 = [ - "66:${config.ws.w6a}" - "99:${config.ws.w9a}" + "66:${w6a}" + "99:${w9a}" ]; assign = output: workspaces: map (workspace: { inherit workspace; inherit output; }) workspaces; in - (assign "${config.displays.tower1}" workspaces1) ++ - (assign "${config.displays.tower2}" workspaces2) ++ - (assign "${config.displays.tower3}" workspaces3) ++ - (assign "${config.displays.tower3}" workspaces4) ++ + (assign "${tower1}" workspaces1) ++ + (assign "${tower2}" workspaces2) ++ + (assign "${tower3}" workspaces3) ++ + (assign "${tower4}" workspaces4) ++ - (assign "${config.displays.estradiol1}" workspaces1) ++ - (assign "${config.displays.estradiol1}" workspaces2) ++ - (assign "${config.displays.estradiol1}" workspaces4) ++ - (assign "${config.displays.estradiol2}" workspaces3); + (assign "${intuos2}" workspaces1) ++ + (assign "${intuos2}" workspaces2) ++ + (assign "${intuos1}" workspaces3) ++ + (assign "${intuos1}" workspaces4); }; } diff --git a/modules/home/wms/sway/rules/default.nix b/modules/home/wms/sway/rules/default.nix index 392dbe0f..8d213281 100644 --- a/modules/home/wms/sway/rules/default.nix +++ b/modules/home/wms/sway/rules/default.nix @@ -1,7 +1,7 @@ { config, ... }: { - wayland.windowManager.sway.config = { - defaultWorkspace = "workspace 1:${config.ws.w1}"; + wayland.windowManager.sway.config = with config.vars.ws; { + defaultWorkspace = "workspace 1:${w1}"; focus = { mouseWarping = "container"; @@ -34,7 +34,7 @@ # Give apps that don't have them borders { criteria = { con_mark = "giveborder"; }; - command = ''border pixel ${config.look.border.string}''; + command = ''border pixel ${config.vars.border.string}''; } { criteria = { class = "steam"; }; @@ -55,23 +55,23 @@ ]; }; assigns = { - # Browsers - "1:${config.ws.w1}" = [{ app_id = "MainBrowser"; }]; - "11:${config.ws.w1a}" = [{ app_id = "AltBrowser"; }]; + # Browser + "1:${w1}" = [{ app_id = "librewolf"; }]; # Communication - "7:${config.ws.w7}" = [ + "7:${w7}" = [ { app_id = "teams-for-linux"; } { app_id = "vesktop"; } + { class = "vesktop"; } ]; - "9:${config.ws.w9}" = [{ app_id = "thunderbird"; }]; + "9:${w9}" = [{ app_id = "thunderbird"; }]; # Etc - "2:${config.ws.w2}" = [ + "2:${w2}" = [ { class = "steam"; } { app_id = "heroic"; } ]; - "44:${config.ws.w4a}" = [{ app_id = "com.obsproject.Studio"; }]; + "44:${w4a}" = [{ app_id = "com.obsproject.Studio"; }]; }; }; } diff --git a/modules/home/wms/sway/theme/default.nix b/modules/home/wms/sway/theme/default.nix index a5eb5980..6c042bdb 100644 --- a/modules/home/wms/sway/theme/default.nix +++ b/modules/home/wms/sway/theme/default.nix @@ -3,47 +3,49 @@ wayland.windowManager.sway.config = { colors = { focused = { - border = "#${config.look.colors.prime}"; - background = "#${config.look.colors.prime}"; + border = "#${config.vars.colors.prime}"; + background = "#${config.vars.colors.prime}"; text = "#FFFFFF"; - indicator = "#${config.look.colors.actSplit}"; - childBorder = "#${config.look.colors.prime}"; + indicator = "#${config.vars.colors.actSplit}"; + childBorder = "#${config.vars.colors.prime}"; }; focusedInactive = { - border = "#${config.look.colors.accent}"; - background = "#${config.look.colors.accent}"; - text = "#${config.look.colors.text}"; - indicator = "#${config.look.colors.split}"; - childBorder = "#${config.look.colors.accent}"; + border = "#${config.vars.colors.accent}"; + background = "#${config.vars.colors.accent}"; + text = "#${config.vars.colors.text}"; + indicator = "#${config.vars.colors.split}"; + childBorder = "#${config.vars.colors.accent}"; }; unfocused = { - border = "#${config.look.colors.dark}"; - background = "#${config.look.colors.dark}"; - text = "#${config.look.colors.text}"; - indicator = "#${config.look.colors.split}"; - childBorder = "#${config.look.colors.split}"; + border = "#${config.vars.colors.dark}"; + background = "#${config.vars.colors.dark}"; + text = "#${config.vars.colors.text}"; + indicator = "#${config.vars.colors.split}"; + childBorder = "#${config.vars.colors.split}"; }; urgent = { - border = "#${config.look.colors.urgent}"; - background = "#${config.look.colors.urgent}"; - text = "#${config.look.colors.text}"; - indicator = "#${config.look.colors.urgent}"; - childBorder = "#${config.look.colors.urgent}"; + border = "#${config.vars.colors.urgent}"; + background = "#${config.vars.colors.urgent}"; + text = "#${config.vars.colors.text}"; + indicator = "#${config.vars.colors.urgent}"; + childBorder = "#${config.vars.colors.urgent}"; }; }; + bars = [ ]; + fonts = { - names = [ config.look.fonts.main ]; + names = [ config.vars.fonts.main ]; size = 10.5; }; window = { - border = config.look.border.int; + border = config.vars.border.int; hideEdgeBorders = "smart"; }; floating = { - border = config.look.border.int; + border = config.vars.border.int; titlebar = false; }; @@ -51,14 +53,5 @@ inner = 5; smartGaps = true; }; - - output = { - "*".bg = "${builtins.toString ./wallpapers/1.png} fill"; - - "${config.displays.tower2}".bg = "${builtins.toString ./wallpapers/2.png} fill"; - "${config.displays.tower3}".bg = "${builtins.toString ./wallpapers/3.png} fill"; - - "${config.displays.estradiol2}".bg = "${builtins.toString ./wallpapers/2.png} fill"; - }; }; } diff --git a/modules/system/default.nix b/modules/system/default.nix index 4d9fa244..6040e075 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -1,4 +1,4 @@ -{ lib, ... }: +{ config, name, ... }: { imports = [ ./devices @@ -7,10 +7,8 @@ ./services ./settings ./users + ./variables ]; - options.system = with lib; { - desktop.enable = mkEnableOption "Desktop apps and services"; - server.enable = mkEnableOption "Server apps and services"; - }; + networking.hostName = name; } diff --git a/modules/system/devices/audio/default.nix b/modules/system/devices/audio/default.nix index 08950259..4d66e614 100644 --- a/modules/system/devices/audio/default.nix +++ b/modules/system/devices/audio/default.nix @@ -1,13 +1,13 @@ { config, ... }: { services.pipewire = { - enable = config.system.desktop.enable; - wireplumber.extraConfig."wireplumber.settings"."bluetooth.autoswitch-to-headset-profile" = false; + enable = builtins.elem "pc" config.system.nixos.tags; alsa = { enable = true; support32Bit = true; }; pulse.enable = true; #jack.enable = true; + wireplumber.extraConfig."wireplumber.settings"."bluetooth.autoswitch-to-headset-profile" = false; }; } diff --git a/modules/system/devices/bluetooth/default.nix b/modules/system/devices/bluetooth/default.nix index b6885d45..e735bf31 100644 --- a/modules/system/devices/bluetooth/default.nix +++ b/modules/system/devices/bluetooth/default.nix @@ -1,6 +1,6 @@ -{ config, lib, pkgs, ... }: +{ config, lib, ... }: { - config = lib.mkIf config.system.desktop.enable { + config = lib.mkIf (builtins.elem "pc" config.system.nixos.tags) { hardware.bluetooth = { enable = true; settings = { @@ -8,9 +8,7 @@ Policy.AutoEnable = "true"; }; }; - environment = { - systemPackages = with pkgs; [ bluetui ]; - persistence."/persist".directories = [ "/var/lib/bluetooth" ]; - }; + + environment.persistence."/persist".directories = [ "/var/lib/bluetooth" ]; }; } diff --git a/modules/system/devices/boot/default.nix b/modules/system/devices/boot/default.nix index 15adb99c..9a139f45 100644 --- a/modules/system/devices/boot/default.nix +++ b/modules/system/devices/boot/default.nix @@ -1,19 +1,16 @@ -{ ... }: +{ lib, pkgs, ... }: { imports = [ - ./grub ./lanzaboote + ./limine ./plymouth ./services - ./systemd ]; boot = { - kernelParams = [ "nouveau.config=NvGspRm=1" ]; blacklistedKernelModules = [ "pcspkr" ]; - kernel.sysctl = { - "vm.max_map_count" = 2147483642; - "kernel.sysrq" = 1; - }; + kernel.sysctl."vm.max_map_count" = 2147483642; + kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; + loader.systemd-boot.editor = false; }; } diff --git a/modules/system/devices/boot/grub/default.nix b/modules/system/devices/boot/grub/default.nix deleted file mode 100644 index 99105e9c..00000000 --- a/modules/system/devices/boot/grub/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ lib, ... }: -{ - boot.loader.grub = { - enable = lib.mkDefault false; - efiSupport = true; - efiInstallAsRemovable = true; - }; -} diff --git a/modules/system/devices/boot/lanzaboote/default.nix b/modules/system/devices/boot/lanzaboote/default.nix index b3eb4940..796a3a40 100644 --- a/modules/system/devices/boot/lanzaboote/default.nix +++ b/modules/system/devices/boot/lanzaboote/default.nix @@ -1,7 +1,5 @@ -{ config, pkgs, lanzaboote, ... }: +{ config, pkgs, ... }: { - imports = [ lanzaboote.nixosModules.lanzaboote ]; - boot.lanzaboote.pkiBundle = "/etc/secureboot"; environment = { diff --git a/modules/system/devices/boot/limine/default.nix b/modules/system/devices/boot/limine/default.nix new file mode 100644 index 00000000..20024f19 --- /dev/null +++ b/modules/system/devices/boot/limine/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, name, ... }: +{ + boot.loader.limine = { + biosSupport = !pkgs.stdenv.hostPlatform.isAarch64; + efiInstallAsRemovable = true; + efiSupport = true; + }; +} diff --git a/modules/system/devices/boot/plymouth/default.nix b/modules/system/devices/boot/plymouth/default.nix index 96773c96..1586477a 100644 --- a/modules/system/devices/boot/plymouth/default.nix +++ b/modules/system/devices/boot/plymouth/default.nix @@ -1,16 +1,14 @@ { config, lib, ... }: { config.boot = lib.mkIf config.boot.plymouth.enable { - loader.timeout = lib.mkForce 0; - consoleLogLevel = lib.mkForce 0; + consoleLogLevel = 0; initrd.verbose = false; kernelParams = [ - "quiet" - "splash" - "boot.shell_on_fail" "loglevel=3" + "quiet" "rd.systemd.show_status=false" "rd.udev.log_level=3" + "splash" "udev.log_priority=3" ]; }; diff --git a/modules/system/devices/boot/services/root-reset/default.nix b/modules/system/devices/boot/services/root-reset/default.nix index 44d2a1b7..632066ed 100644 --- a/modules/system/devices/boot/services/root-reset/default.nix +++ b/modules/system/devices/boot/services/root-reset/default.nix @@ -1,4 +1,4 @@ -{ config, ... }: +{ config, name, ... }: { boot.initrd.systemd.services.root-reset = { enable = config.environment.persistence."/persist".enable; @@ -10,7 +10,7 @@ serviceConfig.Type = "oneshot"; script = '' mkdir -p /mnt - mount -t btrfs /dev/${config.networking.hostName}/root /mnt + mount -t btrfs /dev/${name}/root /mnt if [[ -e /mnt/prev ]]; then btrfs subvolume delete /mnt/prev diff --git a/modules/system/devices/boot/systemd/default.nix b/modules/system/devices/boot/systemd/default.nix deleted file mode 100644 index bc13baff..00000000 --- a/modules/system/devices/boot/systemd/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - boot.loader.systemd-boot = { - editor = false; - graceful = true; - }; -} diff --git a/modules/system/devices/default.nix b/modules/system/devices/default.nix index 0ccbcf4d..a99c9a26 100644 --- a/modules/system/devices/default.nix +++ b/modules/system/devices/default.nix @@ -7,6 +7,7 @@ ./disks ./networking ./printing + ./tlp ./udev ./video ]; diff --git a/modules/system/devices/disks/filesystems/default.nix b/modules/system/devices/disks/filesystems/default.nix index 8a6e5943..20d77e04 100644 --- a/modules/system/devices/disks/filesystems/default.nix +++ b/modules/system/devices/disks/filesystems/default.nix @@ -2,17 +2,22 @@ { boot = { supportedFilesystems = { - ntfs = config.system.desktop.enable; - zfs = config.system.server.enable; + ntfs = builtins.elem "pc" config.system.nixos.tags; + zfs = builtins.elem "server" config.system.nixos.tags; }; swraid = { - enable = config.system.server.enable; + enable = builtins.elem "server" config.system.nixos.tags; mdadmConf = "MAILADDR contact@nixfox.ca"; }; }; - services = lib.mkIf config.environment.persistence."/persist".enable { - btrfs.autoScrub.enable = true; + services = { + btrfs.autoScrub = { + enable = (config.fileSystems."/".fsType == "btrfs"); + interval = "weekly"; + }; fstrim.enable = true; }; + + programs.fuse.userAllowOther = true; } diff --git a/modules/system/devices/disks/impermanence/default.nix b/modules/system/devices/disks/impermanence/default.nix index 9c555679..8f6d1794 100644 --- a/modules/system/devices/disks/impermanence/default.nix +++ b/modules/system/devices/disks/impermanence/default.nix @@ -1,12 +1,17 @@ -{ impermanence, ... }: +{ ... }: { - imports = [ impermanence.nixosModules.impermanence ]; - environment.persistence."/persist" = { hideMounts = true; directories = [ "/storage" - "/var/lib/nixos" + { + directory = "/var/lib/nixos"; + mode = "0700"; + } + { + directory = "/var/lib/nixos-containers"; + mode = "0700"; + } ]; files = [ "/etc/machine-id" ]; }; diff --git a/modules/system/devices/networking/default.nix b/modules/system/devices/networking/default.nix index 8e6944f9..6046a291 100644 --- a/modules/system/devices/networking/default.nix +++ b/modules/system/devices/networking/default.nix @@ -1,6 +1,9 @@ { config, ... }: { imports = [ + ./hosts + ./mounts + ./mycelium ./nameservers ./wireless ]; @@ -16,4 +19,9 @@ enable = config.networking.useNetworkd; dnsovertls = "true"; }; + + systemd = { + services.NetworkManager-wait-online.enable = false; + network.wait-online.enable = false; + }; } diff --git a/modules/system/devices/networking/hosts/default.nix b/modules/system/devices/networking/hosts/default.nix new file mode 100644 index 00000000..c2f38678 --- /dev/null +++ b/modules/system/devices/networking/hosts/default.nix @@ -0,0 +1,17 @@ +{ config, lib, nodes, ... }: +{ + networking.hosts = with nodes; { + # PCs + "${tower.config.deployment.targetHost}" = [ "tower" ]; + "${hidden.config.deployment.targetHost}" = [ "hidden" ]; + "${intuos.config.deployment.targetHost}" = [ "intuos" ]; + "${jupiter.config.deployment.targetHost}" = [ "jupiter" ]; + "${flight.config.deployment.targetHost}" = [ "flight" ]; + + # Servers + "${midas.config.deployment.targetHost}" = [ "midas" ]; + "${kitty.config.deployment.targetHost}" = [ "kitty" ]; + "${detritus.config.deployment.targetHost}" = [ "detritus" ]; + "${prophet.config.deployment.targetHost}" = [ "prophet" ]; + }; +} diff --git a/modules/system/devices/networking/mounts/default.nix b/modules/system/devices/networking/mounts/default.nix new file mode 100644 index 00000000..b8e7913a --- /dev/null +++ b/modules/system/devices/networking/mounts/default.nix @@ -0,0 +1,31 @@ +{ config, lib, nodes, ... }: +{ + fileSystems = let + common = { + fsType = "nfs"; + options = [ + "noatime" + "noauto" + "soft" + "x-systemd.automount" + ]; + }; + in with nodes; { + "midas" = common // { + device = "midas:/storage"; + mountPoint = "/network/Midas"; + }; + "kitty" = common // { + device = "kitty:/storage"; + mountPoint = "/network/Kitty"; + }; + "detritus" = common // { + device = "detritus:/storage"; + mountPoint = "/network/Detritus"; + }; + "prophet" = common // { + device = "prophet:/storage"; + mountPoint = "/network/Prophet"; + }; + }; +} diff --git a/modules/system/devices/networking/mycelium/default.nix b/modules/system/devices/networking/mycelium/default.nix new file mode 100644 index 00000000..72f637f8 --- /dev/null +++ b/modules/system/devices/networking/mycelium/default.nix @@ -0,0 +1,14 @@ +{ ... }: +{ + services.mycelium = { + enable = true; + openFirewall = true; + peers = [ + "quic://99.247.177.43:9651" + "quic://174.119.246.206:9651" + "quic://150.230.26.224:9651" + ]; + }; + + environment.persistence."/persist".directories = [ { directory = "/var/lib/private/mycelium"; mode = "0700"; } ]; +} diff --git a/modules/system/devices/networking/wireless/default.nix b/modules/system/devices/networking/wireless/default.nix index 2bddfeef..eab13bb7 100644 --- a/modules/system/devices/networking/wireless/default.nix +++ b/modules/system/devices/networking/wireless/default.nix @@ -1,7 +1,7 @@ -{ config, ... }: +{ ... }: { networking.wireless = { - enable = config.system.desktop.enable; + enable = true; userControlled.enable = true; }; } diff --git a/modules/system/devices/printing/default.nix b/modules/system/devices/printing/default.nix index 8ea5eed7..a57dbaff 100644 --- a/modules/system/devices/printing/default.nix +++ b/modules/system/devices/printing/default.nix @@ -2,7 +2,7 @@ { services = { printing = { - enable = config.system.desktop.enable; + enable = builtins.elem "pc" config.system.nixos.tags; drivers = with pkgs; [ hplip ]; }; avahi = { diff --git a/modules/system/devices/tlp/default.nix b/modules/system/devices/tlp/default.nix new file mode 100644 index 00000000..694db2be --- /dev/null +++ b/modules/system/devices/tlp/default.nix @@ -0,0 +1,31 @@ +{ config, ... }: +{ + services.tlp = { + enable = true; + settings = let + leastBat = 80; + maxBat = 85; + in { + # Stop battery charging after threshold + START_CHARGE_THRESH_BAT0 = leastBat; + STOP_CHARGE_THRESH_BAT0 = maxBat; + START_CHARGE_THRESH_BAT1 = leastBat; + STOP_CHARGE_THRESH_BAT1 = maxBat; + + # Change CPU energy/performance policy to power + CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; + + # Enable the platform profile low-power + PLATFORM_PROFILE_ON_AC = "performance"; + PLATFORM_PROFILE_ON_BAT = "low-power"; + + # Disable turbo boost + CPU_BOOST_ON_AC = 1; + CPU_BOOST_ON_BAT = 0; + + CPU_HWP_DYN_BOOST_ON_AC = 1; + CPU_HWP_DYN_BOOST_ON_BAT = 0; + }; + }; +} diff --git a/modules/system/devices/udev/default.nix b/modules/system/devices/udev/default.nix index 37191c01..728dba1e 100644 --- a/modules/system/devices/udev/default.nix +++ b/modules/system/devices/udev/default.nix @@ -1,6 +1,7 @@ -{ config, lib, pkgs, ... }: +{ pkgs, ... }: { - services.udev.packages = with pkgs; lib.mkIf config.system.desktop.enable [ + services.udev.packages = with pkgs; [ + android-udev-rules game-devices-udev-rules ]; } diff --git a/modules/system/devices/video/amd/default.nix b/modules/system/devices/video/amd/default.nix new file mode 100644 index 00000000..8d349fec --- /dev/null +++ b/modules/system/devices/video/amd/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + boot.kernelParams = [ "amd_pstate=active" ]; + + hardware.amdgpu.legacySupport.enable = true; +} diff --git a/modules/system/devices/video/default.nix b/modules/system/devices/video/default.nix index de825e6f..d4d981ae 100644 --- a/modules/system/devices/video/default.nix +++ b/modules/system/devices/video/default.nix @@ -1,9 +1,12 @@ { config, pkgs, ... }: { - imports = [ ./nvidia ]; + imports = [ + ./amd + ./nvidia + ]; hardware.graphics = { - enable = config.system.desktop.enable; + enable = builtins.elem "pc" config.system.nixos.tags; enable32Bit = if config.nixpkgs.hostPlatform.linuxArch == "x86_64" then true else false; extraPackages = with pkgs; [ vulkan-loader diff --git a/modules/system/devices/video/nvidia/default.nix b/modules/system/devices/video/nvidia/default.nix index f9d10a1c..ebc7cd42 100644 --- a/modules/system/devices/video/nvidia/default.nix +++ b/modules/system/devices/video/nvidia/default.nix @@ -1,20 +1,23 @@ { config, lib, ... }: { - options.system.nvidia.enable = lib.mkEnableOption "Nvidia graphic drivers"; + boot.kernelParams = [ + "nouveau.config=NvGspRm=1" # Use high power mode for Nouveau + "nvidia_drm.fbdev=1" # Fix framebuffer + ]; - config = lib.mkIf config.system.nvidia.enable { - hardware.nvidia = { - modesetting.enable = true; - nvidiaSettings = false; - open = true; - }; + hardware.nvidia = { + modesetting.enable = true; + nvidiaSettings = false; + open = if lib.versionOlder config.hardware.nvidia.package.version "560" then false else true; + powerManagement.enable = config.hardware.nvidia.open; + }; - boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; # Framebuffer fixes TTY access + nixpkgs = { + allowUnfreePackages = [ "nvidia-x11" ]; + config.nvidia.acceptLicense = true; + }; - services.xserver.videoDrivers = [ "nvidia" ]; - - nixpkgs.allowUnfreePackages = [ "nvidia-x11" ]; - - specialisation.nouveau.configuration.config.system.nvidia.enable = lib.mkForce false; + specialisation = lib.mkIf (lib.elem "nvidia" config.services.xserver.videoDrivers) { + nouveau.configuration.config.services.xserver.videoDrivers = lib.mkForce [ "nouveau" ]; }; } diff --git a/modules/system/programs/desktops/default.nix b/modules/system/programs/desktops/default.nix index d693bd1b..39b1ab5c 100644 --- a/modules/system/programs/desktops/default.nix +++ b/modules/system/programs/desktops/default.nix @@ -1,9 +1,7 @@ { config, lib, ... }: { - config = lib.mkIf config.system.desktop.enable { + config = lib.mkIf (builtins.elem "pc" config.system.nixos.tags) { programs.sway.enable = true; - - services.dbus.enable = true; security.pam.services.swaylock = {}; }; } diff --git a/modules/system/programs/gaming/default.nix b/modules/system/programs/gaming/default.nix index e9a4ae97..44949786 100644 --- a/modules/system/programs/gaming/default.nix +++ b/modules/system/programs/gaming/default.nix @@ -1,7 +1,14 @@ { config, ... }: { programs.gamemode = { - enable = config.system.desktop.enable; - settings.general.renice = 10; + enable = builtins.elem "pc" config.system.nixos.tags; + settings = { + general.renice = 10; + gpu = { + amd_performance_level = "high"; + apply_gpu_optimisations = "accept-responsibility"; + gpu_device = 0; + }; + }; }; } diff --git a/modules/system/programs/home-manager/default.nix b/modules/system/programs/home-manager/default.nix index d7e2ce31..b72752ef 100644 --- a/modules/system/programs/home-manager/default.nix +++ b/modules/system/programs/home-manager/default.nix @@ -1,7 +1,5 @@ -{ hm, stable, unstable, blender, impermanence, nur, ... }: +{ stable, unstable, blender, impermanence, nur, ... }: { - imports = [ hm.nixosModules.home-manager ]; - home-manager = { useUserPackages = true; backupFileExtension = "bak"; diff --git a/modules/system/programs/udevil/default.nix b/modules/system/programs/udevil/default.nix index 604943ab..d5dac7fb 100644 --- a/modules/system/programs/udevil/default.nix +++ b/modules/system/programs/udevil/default.nix @@ -1,4 +1,4 @@ -{ config, ... }: +{ ... }: { - programs.udevil.enable = config.system.desktop.enable; + programs.udevil.enable = true; } diff --git a/modules/system/secrets/default.nix b/modules/system/secrets/default.nix index 61e1b921..0ba12e4d 100644 Binary files a/modules/system/secrets/default.nix and b/modules/system/secrets/default.nix differ diff --git a/modules/system/secrets/networks/default.nix b/modules/system/secrets/networks/default.nix index 69744caa..23f458ad 100644 Binary files a/modules/system/secrets/networks/default.nix and b/modules/system/secrets/networks/default.nix differ diff --git a/modules/system/services/general/default.nix b/modules/system/services/general/default.nix index 5b57ebba..1fbfcf57 100644 --- a/modules/system/services/general/default.nix +++ b/modules/system/services/general/default.nix @@ -4,10 +4,9 @@ ./displaymanager ./keyd ./libvirtd - ./portals ./snowflake ./ssh - ./tlp ./userborn + ./vmware ]; } diff --git a/modules/system/services/general/displaymanager/default.nix b/modules/system/services/general/displaymanager/default.nix index 585e7f35..c1cf9e25 100644 --- a/modules/system/services/general/displaymanager/default.nix +++ b/modules/system/services/general/displaymanager/default.nix @@ -1,6 +1,6 @@ { config, lib, pkgs, ... }: { - config = lib.mkIf config.system.desktop.enable { + config = lib.mkIf (builtins.elem "pc" config.system.nixos.tags) { services.greetd = { enable = true; settings.default_session.command = lib.mkDefault (lib.strings.concatStringsSep " " [ diff --git a/modules/system/services/general/libvirtd/default.nix b/modules/system/services/general/libvirtd/default.nix index 8cb556dd..0ff033dc 100644 --- a/modules/system/services/general/libvirtd/default.nix +++ b/modules/system/services/general/libvirtd/default.nix @@ -14,13 +14,16 @@ }; }; - programs.virt-manager.enable = true; - - networking.firewall.trustedInterfaces = [ - "virbr0" - "virbr1" + # Isolate devices into more IOMMU groups + boot.kernelParams = [ + "pcie_acs_override=downstream,multifunction" + "pci=routeirq" ]; + # Enable the gui manager + programs.virt-manager.enable = builtins.elem "pc" config.system.nixos.tags; + + # Allow looking glass to be accessed by users systemd.tmpfiles.rules = [ "f /dev/shm/looking-glass 0660 - libvirtd -" ]; environment.persistence."/persist".directories = [ "/var/lib/libvirt" ]; diff --git a/modules/system/services/general/portals/default.nix b/modules/system/services/general/portals/default.nix deleted file mode 100644 index 4bdecd68..00000000 --- a/modules/system/services/general/portals/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - xdg.portal.extraPortals = with pkgs; lib.mkIf config.system.desktop.enable [ - xdg-desktop-portal-gnome - xdg-desktop-portal-wlr - ]; -} diff --git a/modules/system/services/general/ssh/default.nix b/modules/system/services/general/ssh/default.nix index 7169d070..3616641c 100644 --- a/modules/system/services/general/ssh/default.nix +++ b/modules/system/services/general/ssh/default.nix @@ -1,17 +1,28 @@ -{ lib, ... }: +{ ... }: { imports = [ ./fail2ban ]; services.openssh = { enable = true; settings = { - AllowGroups = [ "users" ]; AuthenticationMethods = "publickey"; PermitEmptyPasswords = true; PrintLastLog = "no"; }; }; + programs.ssh = { + startAgent = true; + + # Don't host prompt for servers + knownHosts = { + midas.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFcFMvrx9/iUZ1mEubf+QF1i3LNTxFhaU/1zFSjdo0kK"; + kitty.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIrGmsya5DXKuXO6jNjUlrYHqk49KLzxM/60GXtLRLrL"; + detritus.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDPD9m/rUjb88C4Kin2YhMrMVigu5IEf20FzwfAvz8SI"; + prophet.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICrp3Y/X2BRUENx+0GMTmB1VDA6SiwkGgdJMHSdMMepM"; + }; + }; + security.pam.services.sshd.allowNullPassword = true; environment.persistence."/persist".files = [ diff --git a/modules/system/services/general/ssh/fail2ban/default.nix b/modules/system/services/general/ssh/fail2ban/default.nix index 15f4349d..acc00f8c 100644 --- a/modules/system/services/general/ssh/fail2ban/default.nix +++ b/modules/system/services/general/ssh/fail2ban/default.nix @@ -4,7 +4,6 @@ enable = true; maxretry = 5; bantime = "10m"; - ignoreIP = [ "11.0.0.0/8" ]; }; environment.persistence."/persist".directories = [ "/var/lib/fail2ban" ]; diff --git a/modules/system/services/general/tlp/default.nix b/modules/system/services/general/tlp/default.nix deleted file mode 100644 index 4b030f55..00000000 --- a/modules/system/services/general/tlp/default.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ config, ... }: -{ - services.tlp.enable = config.system.desktop.enable; -} diff --git a/modules/system/services/general/vmware/default.nix b/modules/system/services/general/vmware/default.nix new file mode 100644 index 00000000..e7541157 --- /dev/null +++ b/modules/system/services/general/vmware/default.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, ... }: +{ + config = lib.mkIf config.virtualisation.vmware.host.enable { + virtualisation.vmware.host.extraConfig = '' + mks.gl.allowUnsupportedDrivers = "TRUE" + mks.vk.allowUnsupportedDevices = "TRUE" + ''; + + nixpkgs.allowUnfreePackages = [ "vmware-workstation" ]; + }; +} diff --git a/modules/system/services/server/cfdyndns/default.nix b/modules/system/services/server/cfdyndns/default.nix index 16760fe1..922c774b 100644 --- a/modules/system/services/server/cfdyndns/default.nix +++ b/modules/system/services/server/cfdyndns/default.nix @@ -1,4 +1,7 @@ -{ config, pkgs, ... }: +{ config, lib, ... }: { - services.cloudflare-dyndns.apiTokenFile = "${pkgs.writeText "cloudflareapikey" config.secrets.flareApiKey}"; + config = lib.mkIf config.services.cloudflare-dyndns.enable { + services.cloudflare-dyndns.apiTokenFile = "/var/lib/private/cloudflare-dyndns/key"; + environment.persistence."/persist".directories = [ "/var/lib/private/cloudflare-dyndns" ]; + }; } diff --git a/modules/system/services/server/default.nix b/modules/system/services/server/default.nix index 6e2a762f..59510325 100644 --- a/modules/system/services/server/default.nix +++ b/modules/system/services/server/default.nix @@ -3,9 +3,10 @@ imports = [ ./cfdyndns ./forgejo + ./hedgedoc ./icecast + ./incus ./jellyfin - ./lemmy ./mailserver ./mastodon ./matrix diff --git a/modules/system/services/server/forgejo/default.nix b/modules/system/services/server/forgejo/default.nix index 37ce0176..34b29076 100644 --- a/modules/system/services/server/forgejo/default.nix +++ b/modules/system/services/server/forgejo/default.nix @@ -8,17 +8,17 @@ lfs.enable = true; settings = { server = { - DOMAIN = "git.nixfox.ca"; - ROOT_URL = "https://git.nixfox.ca:443"; + DOMAIN = "git.${config.vars.primeDomain}"; + ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}:443"; HTTP_PORT = 3110; SSH_PORT = 2299; START_SSH_SERVER = true; }; mailer = { ENABLED = true; - SMTP_ADDR = "mx.nixfox.ca"; - FROM = "NixFox Git "; - USER = "noreply@nixfox.ca"; + SMTP_ADDR = "mx.${config.vars.mailDomain}"; + FROM = "NixFox Git "; + USER = "noreply@${config.vars.primeDomain}"; PASSWD = config.secrets.mailPass.nixfoxNoReply; PROTOCOL = "smtps"; }; @@ -32,7 +32,7 @@ networking.firewall.allowedTCPPorts = [ 2299 ]; - services.cloudflare-dyndns.domains = [ "git.nixfox.ca" ]; + services.cloudflare-dyndns.domains = [ config.services.forgejo.settings.server.DOMAIN ]; environment.persistence."/persist".directories = [ "/var/lib/forgejo" ]; }; diff --git a/modules/system/services/server/forgejo/nginx/default.nix b/modules/system/services/server/forgejo/nginx/default.nix index 5428884a..a40ab52b 100644 --- a/modules/system/services/server/forgejo/nginx/default.nix +++ b/modules/system/services/server/forgejo/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."git.nixfox.ca" = lib.mkIf config.services.forgejo.enable { + services.nginx.virtualHosts."${config.services.forgejo.settings.server.DOMAIN}" = lib.mkIf config.services.forgejo.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/hedgedoc/default.nix b/modules/system/services/server/hedgedoc/default.nix new file mode 100644 index 00000000..c2be42e0 --- /dev/null +++ b/modules/system/services/server/hedgedoc/default.nix @@ -0,0 +1,15 @@ +{ config, ... }: +{ + imports = [ ./nginx ]; + + services.hedgedoc.settings = { + domain = "hedgedoc.${config.vars.primeDomain}"; + port = 8001; + host = "127.0.0.1"; + protocolUseSSL = true; + allowOrigin = [ + "localhost" + config.services.hedgedoc.settings.domain + ]; + }; +} diff --git a/modules/system/services/server/hedgedoc/nginx/default.nix b/modules/system/services/server/hedgedoc/nginx/default.nix new file mode 100644 index 00000000..9848af75 --- /dev/null +++ b/modules/system/services/server/hedgedoc/nginx/default.nix @@ -0,0 +1,11 @@ +{ config, lib, ... }: +{ + services.nginx.virtualHosts."${config.services.hedgedoc.settings.domain}" = lib.mkIf config.services.hedgedoc.enable { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://127.0.0.1:${toString config.services.hedgedoc.settings.port}"; + proxyWebsockets = true; + }; + }; +} diff --git a/modules/system/services/server/icecast/default.nix b/modules/system/services/server/icecast/default.nix index ec3dce64..453f339f 100644 --- a/modules/system/services/server/icecast/default.nix +++ b/modules/system/services/server/icecast/default.nix @@ -7,9 +7,9 @@ services.icecast = { listen.port = 73; - hostname = "radio.nixfox.ca"; + hostname = "radio.${config.vars.primeDomain}"; admin = { - user = config.sysusers.main; + user = "admin"; password = config.secrets.cast.adminPass; }; extraConf = '' @@ -17,7 +17,7 @@ ${config.secrets.cast.sourcePass} Canada - contact@nixfox.ca + contact@${config.vars.primeDomain} ''; }; } diff --git a/modules/system/services/server/icecast/liquidsoap/nixbops/default.nix b/modules/system/services/server/icecast/liquidsoap/nixbops/default.nix index 8d200cb7..d26b68b3 100644 --- a/modules/system/services/server/icecast/liquidsoap/nixbops/default.nix +++ b/modules/system/services/server/icecast/liquidsoap/nixbops/default.nix @@ -7,7 +7,7 @@ settings.init.allow_root.set(true) settings.scheduler.fast_queues.set(2) - stream = mksafe(playlist(mode='randomize', reload=1, reload_mode="rounds", "/storage/Music/NixBops")) + stream = mksafe(playlist(mode='randomize', reload=1, reload_mode="rounds", "/network/Midas/Music/NixBops")) stream_fallback = fallback([stream, stream]) output.icecast( diff --git a/modules/system/services/server/icecast/liquidsoap/nixscrap/default.nix b/modules/system/services/server/icecast/liquidsoap/nixscrap/default.nix index 6f520910..36e22aef 100644 --- a/modules/system/services/server/icecast/liquidsoap/nixscrap/default.nix +++ b/modules/system/services/server/icecast/liquidsoap/nixscrap/default.nix @@ -7,7 +7,7 @@ settings.init.allow_root.set(true) settings.scheduler.fast_queues.set(2) - stream = mksafe(playlist(mode='randomize', reload=1, reload_mode="rounds", "/storage/Music/Scrap")) + stream = mksafe(playlist(mode='randomize', reload=1, reload_mode="rounds", "/network/Midas/Music/Scrap")) stream_fallback = fallback([stream, stream]) output.icecast( diff --git a/modules/system/services/server/icecast/nginx/default.nix b/modules/system/services/server/icecast/nginx/default.nix index 6573d11f..120cbb66 100644 --- a/modules/system/services/server/icecast/nginx/default.nix +++ b/modules/system/services/server/icecast/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."radio.nixfox.ca" = lib.mkIf config.services.icecast.enable { + services.nginx.virtualHosts."${config.services.icecast.hostname}" = lib.mkIf config.services.icecast.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/incus/default.nix b/modules/system/services/server/incus/default.nix new file mode 100644 index 00000000..db07d144 --- /dev/null +++ b/modules/system/services/server/incus/default.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: +{ + config = lib.mkIf config.virtualisation.incus.enable { + networking.firewall.interfaces.incusbr0 = let + ports = [ + 53 + 67 + ]; + in { + allowedTCPPorts = ports; + allowedUDPPorts = ports; + }; + + environment.persistence."/persist".directories = [ "/var/lib/incus" ]; + }; +} diff --git a/modules/system/services/server/jellyfin/nginx/default.nix b/modules/system/services/server/jellyfin/nginx/default.nix index 26d20ab9..550749ae 100644 --- a/modules/system/services/server/jellyfin/nginx/default.nix +++ b/modules/system/services/server/jellyfin/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."jelly.nixfox.ca" = lib.mkIf config.services.jellyfin.enable { + services.nginx.virtualHosts."jelly.${config.vars.primeDomain}" = lib.mkIf config.services.jellyfin.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/lemmy/default.nix b/modules/system/services/server/lemmy/default.nix deleted file mode 100644 index 2cc6ed6d..00000000 --- a/modules/system/services/server/lemmy/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, lib, ... }: -{ - imports = [ ./nginx ]; - - config = lib.mkIf config.services.lemmy.enable { - services.lemmy = lib.mkIf config.services.lemmy.enable { - nginx.enable = true; - database.createLocally = true; - settings = { - hostname = "lemmy.nixfox.ca"; - email = { - smtp_server = "mx.nixfox.ca:587"; - smtp_login = "noreply@nixfox.ca"; - smtp_from_address = "NixFox Lemmy "; - smtp_password = config.secrets.mailPass.nixfoxNoReply; - tls_type = "starttls"; - }; - }; - }; - environment.persistence."/persist".directories = [ "/var/lib/postgresql" ]; - }; -} diff --git a/modules/system/services/server/lemmy/nginx/default.nix b/modules/system/services/server/lemmy/nginx/default.nix deleted file mode 100644 index 0ab2106e..00000000 --- a/modules/system/services/server/lemmy/nginx/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, lib, ... }: -{ - services.nginx.virtualHosts."lemmy.nixfox.ca" = lib.mkIf config.services.lemmy.enable { - enableACME = true; - forceSSL = true; - }; -} diff --git a/modules/system/services/server/mailserver/default.nix b/modules/system/services/server/mailserver/default.nix index b2edc8eb..744cde04 100644 --- a/modules/system/services/server/mailserver/default.nix +++ b/modules/system/services/server/mailserver/default.nix @@ -1,11 +1,75 @@ -{ lib, ... }: +{ config, lib, pkgs, mailserver, ... }: { imports = [ ./go-autoconfig ./radicale ./roundcube - ./simplenix + mailserver.nixosModule ]; - options.services.mailserver.enable = lib.mkEnableOption "Simple NixOS Mailserver"; + config = lib.mkIf config.mailserver.enable { + mailserver = { + fqdn = "mx.${config.vars.mailDomain}"; + domains = [ + "nixfox.ca" + "bloxelcom.net" + "freecorn1854.win" + "lunamoonlight.xyz" + ]; + certificateScheme = "acme-nginx"; + localDnsResolver = false; + redis.port = 1515; + + # Passwords made with 'mkpasswd -sm bcrypt' + loginAccounts = { + "jimbo@nixfox.ca" = { + hashedPassword = config.secrets.mailHash.bun; + aliases = [ + "james@nixfox.ca" + + "bun@nixfox.ca" + "bun@bloxelcom.net" + + "contact@nixfox.ca" + ]; + }; + + "luna@lunamoonlight.xyz" = { + hashedPassword = config.secrets.mailHash.luna; + aliases = [ + "luna@bloxelcom.net" + "contact@bloxelcom.net" + "ibu@bloxelcom.net" + ]; + }; + + "contact@freecorn1854.win" = { + hashedPassword = config.secrets.mailHash.corn; + aliases = [ "freecorn@bloxelcom.net" ]; + }; + + # Noreply emails + "noreply@nixfox.ca" = { + hashedPassword = config.secrets.mailHash.nixfoxNoReply; + sendOnly = true; + }; + "noreply@bloxelcom.net" = { + hashedPassword = config.secrets.mailHash.bloxelNoReply; + sendOnly = true; + }; + }; + }; + + services = { + redis.servers.rspamd.port = config.mailserver.redis.port; + cloudflare-dyndns.domains = [ config.mailserver.fqdn ]; + }; + + environment.persistence."/persist".directories = [ + "/var/vmail" + "/var/lib/dovecot" + "/var/lib/postfix" + "/var/lib/redis-rspamd" + ]; + }; } diff --git a/modules/system/services/server/mailserver/go-autoconfig/default.nix b/modules/system/services/server/mailserver/go-autoconfig/default.nix index 740a3fb6..6854adb1 100644 --- a/modules/system/services/server/mailserver/go-autoconfig/default.nix +++ b/modules/system/services/server/mailserver/go-autoconfig/default.nix @@ -2,18 +2,18 @@ { imports = [ ./nginx ]; - services = lib.mkIf config.services.mailserver.enable { + services = lib.mkIf config.mailserver.enable { go-autoconfig = { enable = true; settings = { service_addr = ":1323"; - domain = "autoconfig.nixfox.ca"; + domain = "autoconfig.${config.vars.mailDomain}"; imap = { - server = "mx.nixfox.ca"; + server = "mx.${config.vars.mailDomain}"; port = 143; }; smtp = { - server = "mx.nixfox.ca"; + server = "mx.${config.vars.mailDomain}"; port = 587; }; }; diff --git a/modules/system/services/server/mailserver/go-autoconfig/nginx/default.nix b/modules/system/services/server/mailserver/go-autoconfig/nginx/default.nix index 1bb0d687..d612fce4 100644 --- a/modules/system/services/server/mailserver/go-autoconfig/nginx/default.nix +++ b/modules/system/services/server/mailserver/go-autoconfig/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."autoconfig.nixfox.ca" = lib.mkIf config.services.go-autoconfig.enable { + services.nginx.virtualHosts."autoconfig.${config.vars.mailDomain}" = lib.mkIf config.services.go-autoconfig.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/mailserver/radicale/default.nix b/modules/system/services/server/mailserver/radicale/default.nix index 148d064f..f553819b 100644 --- a/modules/system/services/server/mailserver/radicale/default.nix +++ b/modules/system/services/server/mailserver/radicale/default.nix @@ -2,7 +2,7 @@ { imports = [ ./nginx ]; - config = lib.mkIf config.services.mailserver.enable { + config = lib.mkIf config.mailserver.enable { services = { radicale = { enable = true; @@ -19,7 +19,7 @@ htpasswd_encryption = "bcrypt"; }; }; - cloudflare-dyndns.domains = [ "cal.nixfox.ca" ]; + cloudflare-dyndns.domains = [ "cal.${config.vars.mailDomain}" ]; }; environment.persistence."/persist".directories = [ "/var/lib/radicale" ]; diff --git a/modules/system/services/server/mailserver/radicale/nginx/default.nix b/modules/system/services/server/mailserver/radicale/nginx/default.nix index d6e1a5be..8d70efbf 100644 --- a/modules/system/services/server/mailserver/radicale/nginx/default.nix +++ b/modules/system/services/server/mailserver/radicale/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."cal.nixfox.ca" = lib.mkIf config.services.go-autoconfig.enable { + services.nginx.virtualHosts."cal.${config.vars.mailDomain}" = lib.mkIf config.services.radicale.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/mailserver/roundcube/default.nix b/modules/system/services/server/mailserver/roundcube/default.nix index f1d8d44c..c4fc9784 100644 --- a/modules/system/services/server/mailserver/roundcube/default.nix +++ b/modules/system/services/server/mailserver/roundcube/default.nix @@ -1,11 +1,11 @@ { config, lib, ... }: { - config = lib.mkIf config.services.mailserver.enable { + config = lib.mkIf config.mailserver.enable { services.roundcube = { enable = true; - hostName = "mail.nixfox.ca"; + hostName = "mail.${config.vars.mailDomain}"; extraConfig = '' - $config['smtp_server'] = "tls://mx.nixfox.ca"; + $config['smtp_server'] = "tls://mx.${config.vars.mailDomain}"; $config['smtp_user'] = "%u"; $config['smtp_pass'] = "%p"; ''; diff --git a/modules/system/services/server/mailserver/simplenix/default.nix b/modules/system/services/server/mailserver/simplenix/default.nix deleted file mode 100644 index 2e022966..00000000 --- a/modules/system/services/server/mailserver/simplenix/default.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ config, lib, pkgs, mailserver, ... }: -{ - imports = [ mailserver.nixosModule ]; - - config = lib.mkIf config.services.mailserver.enable { - mailserver = { - enable = true; - fqdn = "mx.nixfox.ca"; - domains = [ - "nixfox.ca" - "bloxelcom.net" - "freecorn1854.win" - "lunamoonlight.xyz" - ]; - certificateScheme = "acme-nginx"; - localDnsResolver = false; - redis.port = 1515; - - # Passwords made with 'mkpasswd -sm bcrypt' - loginAccounts = { - "jimbo@nixfox.ca" = { - hashedPassword = config.secrets.mailHash.bun; - aliases = [ - "james@nixfox.ca" - "jimbo@bloxelcom.net" - - "bun@nixfox.ca" - "bun@bloxelcom.net" - - "contact@nixfox.ca" - ]; - }; - - "luna@lunamoonlight.xyz" = { - hashedPassword = config.secrets.mailHash.luna; - aliases = [ - "luna@bloxelcom.net" - "contact@bloxelcom.net" - "ibu@bloxelcom.net" - ]; - }; - - "contact@freecorn1854.win" = { - hashedPassword = config.secrets.mailHash.corn; - aliases = [ "freecorn@bloxelcom.net" ]; - }; - - # Noreply emails - "noreply@nixfox.ca" = { - hashedPassword = config.secrets.mailHash.nixfoxNoReply; - sendOnly = true; - }; - "noreply@bloxelcom.net" = { - hashedPassword = config.secrets.mailHash.bloxelNoReply; - sendOnly = true; - }; - }; - }; - - services = { - redis.servers.rspamd.port = config.mailserver.redis.port; - cloudflare-dyndns.domains = [ config.mailserver.fqdn ]; - }; - - environment.persistence."/persist".directories = [ - "/var/vmail" - "/var/lib/dovecot" - "/var/lib/postfix" - "/var/lib/redis-rspamd" - ]; - }; -} diff --git a/modules/system/services/server/mastodon/default.nix b/modules/system/services/server/mastodon/default.nix index 7a8786b2..9cc7bee6 100644 --- a/modules/system/services/server/mastodon/default.nix +++ b/modules/system/services/server/mastodon/default.nix @@ -2,16 +2,16 @@ { config = lib.mkIf config.services.mastodon.enable { services.mastodon = { - localDomain = "social.nixfox.ca"; + localDomain = "social.${config.vars.primeDomain}"; streamingProcesses = 4; configureNginx = true; smtp = { createLocally = false; - host = "mx.nixfox.ca"; + host = "mx.${config.vars.mailDomain}"; port = 587; authenticate = true; - fromAddress = "NixFox Mastodon "; - user = "noreply@nixfox.ca"; + fromAddress = "NixFox Mastodon "; + user = "noreply@${config.vars.primeDomain}"; passwordFile = pkgs.writeText "smtp_pass.txt" config.secrets.mailPass.nixfoxNoReply; }; }; diff --git a/modules/system/services/server/matrix/coturn/default.nix b/modules/system/services/server/matrix/coturn/default.nix index 6f98c201..9ef549de 100644 --- a/modules/system/services/server/matrix/coturn/default.nix +++ b/modules/system/services/server/matrix/coturn/default.nix @@ -12,7 +12,7 @@ max-port = 50000; use-auth-secret = true; static-auth-secret = config.secrets.coturnSecret; - realm = "turn.nixfox.ca"; + realm = "turn.${config.vars.primeDomain}"; cert = "/var/lib/acme/${config.services.coturn.realm}/fullchain.pem"; pkey = "/var/lib/acme/${config.services.coturn.realm}/key.pem"; }; diff --git a/modules/system/services/server/matrix/coturn/nginx/default.nix b/modules/system/services/server/matrix/coturn/nginx/default.nix index f73bb312..c0466107 100644 --- a/modules/system/services/server/matrix/coturn/nginx/default.nix +++ b/modules/system/services/server/matrix/coturn/nginx/default.nix @@ -1,7 +1,7 @@ { config, lib, ... }: { config = lib.mkIf config.services.coturn.enable { - services.nginx.virtualHosts."turn.nixfox.ca" = { + services.nginx.virtualHosts."turn.${config.vars.primeDomain}" = { enableACME = true; forceSSL = true; listen = [{ @@ -12,11 +12,9 @@ locations."/".proxyPass = "http://127.0.0.1:1380"; }; - security.acme.certs = { - "turn.nixfox.ca" = { - group = "turnserver"; - postRun = "systemctl restart coturn.service"; - }; + security.acme.certs."turn.${config.vars.primeDomain}" = { + group = "turnserver"; + postRun = "systemctl restart coturn.service"; }; }; } diff --git a/modules/system/services/server/matrix/element/default.nix b/modules/system/services/server/matrix/element/default.nix index 5e8492a4..a1ba1067 100644 --- a/modules/system/services/server/matrix/element/default.nix +++ b/modules/system/services/server/matrix/element/default.nix @@ -4,14 +4,14 @@ nixpkgs.config.element-web.conf = { default_server_config."m.homeserver" = { - base_url = "https://matrix.nixfox.ca"; - server_name = "matrix.nixfox.ca"; + base_url = "https://matrix.${config.vars.primeDomain}"; + server_name = "matrix.${config.vars.primeDomain}"; }; branding = { - auth_header_logo_url = "https://www.nixfox.ca/images/copyright/profile.png"; - #welcome_background_url = "https://www.nixfox.ca/images/backgrounds/template-background.png"; + auth_header_logo_url = "https://www.${config.vars.primeDomain}/images/copyright/profile.png"; + #welcome_background_url = "https://www.${config.vars.primeDomain}/images/backgrounds/template-background.png"; }; - embedded_pages.home_url = "https://www.nixfox.ca/"; + embedded_pages.home_url = "https://www.${config.vars.primeDomain}/"; disable_custom_urls = true; disable_guests = true; default_theme = "dark"; diff --git a/modules/system/services/server/matrix/element/nginx/default.nix b/modules/system/services/server/matrix/element/nginx/default.nix index 1c085eb3..86c601a3 100644 --- a/modules/system/services/server/matrix/element/nginx/default.nix +++ b/modules/system/services/server/matrix/element/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, pkgs, ... }: { - services.nginx.virtualHosts."chat.nixfox.ca" = lib.mkIf config.services.matrix-synapse.enable { + services.nginx.virtualHosts."chat.${config.vars.primeDomain}" = lib.mkIf config.services.matrix-synapse.enable { enableACME = true; addSSL = true; root = "${pkgs.element-web}"; diff --git a/modules/system/services/server/matrix/synapse/default.nix b/modules/system/services/server/matrix/synapse/default.nix index 342fff38..40f890a3 100644 --- a/modules/system/services/server/matrix/synapse/default.nix +++ b/modules/system/services/server/matrix/synapse/default.nix @@ -5,16 +5,16 @@ config = lib.mkIf config.services.matrix-synapse.enable { services.matrix-synapse = { settings = { - server_name = "nixfox.ca"; - public_baseurl = "https://matrix.nixfox.ca"; + server_name = "${config.vars.primeDomain}"; + public_baseurl = "https://matrix.${config.vars.primeDomain}"; suppress_key_server_warning = true; # Email notifications about account status email = { - notif_from = "NixFox Matrix "; - smtp_host = "mx.nixfox.ca"; - smtp_user = "noreply@nixfox.ca"; + smtp_host = "mx.${config.vars.mailDomain}"; + smtp_user = "noreply@${config.vars.primeDomain}"; smtp_pass = config.secrets.mailPass.nixfoxNoReply; + notif_from = "NixFox Matrix "; enable_tls = true; smtp_port = 587; require_transport_security = true; diff --git a/modules/system/services/server/matrix/synapse/nginx/default.nix b/modules/system/services/server/matrix/synapse/nginx/default.nix index c5d9d5fe..dd71d56d 100644 --- a/modules/system/services/server/matrix/synapse/nginx/default.nix +++ b/modules/system/services/server/matrix/synapse/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."matrix.nixfox.ca" = lib.mkIf config.services.matrix-synapse.enable { + services.nginx.virtualHosts."matrix.${config.vars.primeDomain}" = lib.mkIf config.services.matrix-synapse.enable { enableACME = true; forceSSL = true; locations = { diff --git a/modules/system/services/server/minecraft/default.nix b/modules/system/services/server/minecraft/default.nix index a2a9131b..da5539fa 100644 --- a/modules/system/services/server/minecraft/default.nix +++ b/modules/system/services/server/minecraft/default.nix @@ -3,17 +3,13 @@ imports = [ ./common ./servers - minecraft.nixosModules.minecraft-servers ]; config = lib.mkIf config.services.minecraft-servers.enable { - nixpkgs = { - overlays = [ minecraft.overlay ]; - allowUnfreePackages = [ "minecraft-server" ]; - }; - services.minecraft-servers.eula = true; + nixpkgs.allowUnfreePackages = [ "minecraft-server" ]; + environment.persistence."/persist".directories = [ "/srv/minecraft" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/blockworld/default.nix b/modules/system/services/server/minecraft/servers/blockworld/default.nix index d6525204..5f9c1e68 100644 --- a/modules/system/services/server/minecraft/servers/blockworld/default.nix +++ b/modules/system/services/server/minecraft/servers/blockworld/default.nix @@ -14,6 +14,6 @@ symlinks = config.services.minecraft-servers.common.paperSymlinks; files = config.services.minecraft-servers.common.configFiles; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.blockworld.enable [ "bloxel.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.blockworld.enable [ "bloxel.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/cornworld/default.nix b/modules/system/services/server/minecraft/servers/cornworld/default.nix index fafef772..28161ebc 100644 --- a/modules/system/services/server/minecraft/servers/cornworld/default.nix +++ b/modules/system/services/server/minecraft/servers/cornworld/default.nix @@ -13,6 +13,6 @@ symlinks = config.services.minecraft-servers.common.paperSymlinks; files = config.services.minecraft-servers.common.configFiles; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.cornworld.enable [ "corn.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.cornworld.enable [ "corn.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/default.nix b/modules/system/services/server/minecraft/servers/default.nix index b7088614..5eab36e7 100644 --- a/modules/system/services/server/minecraft/servers/default.nix +++ b/modules/system/services/server/minecraft/servers/default.nix @@ -6,7 +6,6 @@ ./dewdemolisher ./johnside ./marsh - ./roguecraft ./skyblock ./uberbeta ./velocity diff --git a/modules/system/services/server/minecraft/servers/dewdemolisher/default.nix b/modules/system/services/server/minecraft/servers/dewdemolisher/default.nix index f3d13191..da6bcdc9 100644 --- a/modules/system/services/server/minecraft/servers/dewdemolisher/default.nix +++ b/modules/system/services/server/minecraft/servers/dewdemolisher/default.nix @@ -13,6 +13,6 @@ symlinks = config.services.minecraft-servers.common.paperSymlinks; files = config.services.minecraft-servers.common.configFiles; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.dewdemolisher.enable [ "dew.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.dewdemolisher.enable [ "dew.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/johnside/default.nix b/modules/system/services/server/minecraft/servers/johnside/default.nix index c65ff0ce..0c8933af 100644 --- a/modules/system/services/server/minecraft/servers/johnside/default.nix +++ b/modules/system/services/server/minecraft/servers/johnside/default.nix @@ -26,6 +26,6 @@ }; files = config.services.minecraft-servers.common.configFiles; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.johnside.enable [ "john.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.johnside.enable [ "john.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/marsh/default.nix b/modules/system/services/server/minecraft/servers/marsh/default.nix index 4bdbbd2e..f6a3030d 100644 --- a/modules/system/services/server/minecraft/servers/marsh/default.nix +++ b/modules/system/services/server/minecraft/servers/marsh/default.nix @@ -13,6 +13,6 @@ symlinks = config.services.minecraft-servers.common.paperSymlinks; files = config.services.minecraft-servers.common.configFiles; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.marsh.enable [ "marsh.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.marsh.enable [ "marsh.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/roguecraft/default.nix b/modules/system/services/server/minecraft/servers/roguecraft/default.nix deleted file mode 100644 index b7a15a0e..00000000 --- a/modules/system/services/server/minecraft/servers/roguecraft/default.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - services = { - minecraft-servers.servers.roguecraft = { - package = pkgs.paperServers.paper-1_21_1; - jvmOpts = "-Xmx3000M"; - serverProperties = config.services.minecraft-servers.common.serverProperties // { - difficulty = 3; - server-port = 30014; - motd = "\\u00A7l\\u00A7bNixFox \\u00A7cRoguecraft \\u00A7bserver."; - require-resource-pack = true; - resource-pack = "https://nixfox.ca/roguecraftresourcepackredir"; - resource-pack-sha1 = "b540c0562aba90c3ead2356bb9cb74fcf0db36b3"; - }; - whitelist = config.services.minecraft-servers.common.whitelist; - symlinks = config.services.minecraft-servers.common.paperSymlinks; - files = config.services.minecraft-servers.common.configFiles // { - "world/datapacks/roguecraft.zip" = builtins.fetchurl { - url = "https://nixfox.ca/roguecraftdatapackredir"; - sha256 = "04zrkvzvi1i898al45fh9j3k635sf9qhwca7phbv4ynkfl8bz3q3"; - }; - }; - }; - - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.roguecraft.enable [ "rogue.nixfox.ca" ]; - - nginx.virtualHosts."nixfox.ca".locations = lib.mkIf config.services.minecraft-servers.servers.roguecraft.enable { - "/roguecraftdatapackredir" = { - return = "301 https://cdn.modrinth.com/data/HtKjVijx/versions/Rme4c23R/Roguecraft%201.2.6%20-%20Data%20Pack.zip"; - }; - "/roguecraftresourcepackredir" = { - return = "301 https://cdn.modrinth.com/data/HtKjVijx/versions/C6bITJnq/Roguecraft%201.2.5.4%20-%20Resource%20Pack.zip"; - }; - }; - }; -} diff --git a/modules/system/services/server/minecraft/servers/skyblock/default.nix b/modules/system/services/server/minecraft/servers/skyblock/default.nix index 956f84ec..12ae26a7 100644 --- a/modules/system/services/server/minecraft/servers/skyblock/default.nix +++ b/modules/system/services/server/minecraft/servers/skyblock/default.nix @@ -13,6 +13,6 @@ symlinks = config.services.minecraft-servers.common.paperSymlinks; files = config.services.minecraft-servers.common.configFiles; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.skyblock.enable [ "skyblock.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.skyblock.enable [ "skyblock.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/uberbeta/default.nix b/modules/system/services/server/minecraft/servers/uberbeta/default.nix index 6f3b3dc5..ef58b477 100644 --- a/modules/system/services/server/minecraft/servers/uberbeta/default.nix +++ b/modules/system/services/server/minecraft/servers/uberbeta/default.nix @@ -18,6 +18,6 @@ in { server-port = 30005; }; }; - cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.uberbeta.enable [ "beta.nixfox.ca" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.uberbeta.enable [ "beta.${config.vars.primeDomain}" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/velocity/default.nix b/modules/system/services/server/minecraft/servers/velocity/default.nix index c358006e..099eb183 100644 --- a/modules/system/services/server/minecraft/servers/velocity/default.nix +++ b/modules/system/services/server/minecraft/servers/velocity/default.nix @@ -12,10 +12,6 @@ url = "https://download.geysermc.org/v2/projects/floodgate/versions/2.2.4/builds/116/downloads/velocity"; sha256 = "0sinl47pdyc3zyi3jprjqh8ka754rz2r6gmyd27nq39qf31mbbvy"; }; - "plugins/LuckPerms.jar" = builtins.fetchurl { - url = "https://download.luckperms.net/1571/velocity/LuckPerms-Velocity-5.4.154.jar"; - sha256 = "03kqgxrf6ssclrwgyfxs521b7kswmpkk90kdwyaajkkx8hqvbqlc"; - }; "plugins/SkinsRestorer.jar" = builtins.fetchurl { url = "https://github.com/SkinsRestorer/SkinsRestorer/releases/download/15.4.2/SkinsRestorer.jar"; sha256 = "14nl9mi958bfqwqz9182cxj7m6l15kalq3wjmjqzy50s52si35wf"; diff --git a/modules/system/services/server/nextcloud/default.nix b/modules/system/services/server/nextcloud/default.nix index 20408682..87bfffda 100644 --- a/modules/system/services/server/nextcloud/default.nix +++ b/modules/system/services/server/nextcloud/default.nix @@ -7,22 +7,23 @@ config = lib.mkIf config.services.nextcloud.enable { services.nextcloud = { - package = pkgs.nextcloud30; - hostName = "files.nixfox.ca"; + package = pkgs.nextcloud31; + hostName = "files.${config.vars.primeDomain}"; https = true; config = { - adminuser = config.sysusers.main; + adminuser = "admin"; adminpassFile = "${pkgs.writeText "initial" config.secrets.initialPass}"; + dbtype = "sqlite"; }; settings = { trusted_proxies = [ "127.0.0.1" ]; trusted_domains = [ config.services.nextcloud.hostName ]; overwriteprotocol = "https"; - mail_smtphost = "mx.nixfox.ca"; - mail_domain = "nixfox.ca"; + mail_smtphost = "mx.${config.vars.mailDomain}"; + mail_domain = "${config.vars.primeDomain}"; mail_from_address = "noreply"; mail_smtpauth = "true"; - mail_smtpname = "noreply@nixfox.ca"; + mail_smtpname = "noreply@${config.vars.primeDomain}"; mail_smtppassword = config.secrets.mailPass.nixfoxNoReply; mail_smtpmode = "smtp"; mail_smtpport = 587; diff --git a/modules/system/services/server/nextcloud/nginx/default.nix b/modules/system/services/server/nextcloud/nginx/default.nix index 5212d535..5cc87b9a 100644 --- a/modules/system/services/server/nextcloud/nginx/default.nix +++ b/modules/system/services/server/nextcloud/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."files.nixfox.ca" = lib.mkIf config.services.nextcloud.enable { + services.nginx.virtualHosts."files.${config.vars.primeDomain}" = lib.mkIf config.services.nextcloud.enable { enableACME = true; addSSL = true; locations."/" = { diff --git a/modules/system/services/server/nfs/default.nix b/modules/system/services/server/nfs/default.nix index b08ba2a4..236a7147 100644 --- a/modules/system/services/server/nfs/default.nix +++ b/modules/system/services/server/nfs/default.nix @@ -1,9 +1,13 @@ -{ config, lib, ... }: +{ config, lib, nodes, ... }: { imports = [ ./user ]; config = lib.mkIf config.services.nfs.server.enable { services.nfs.server.exports = "/storage *(rw)"; - networking.firewall.extraInputRules = "ip saddr { 10.0.0.0/8, 11.0.0.0/8, ${config.secrets.ips.bun} } tcp dport 2049 accept"; + networking.firewall.extraInputRules = let + targetHosts = lib.attrValues (lib.mapAttrs (_: node: node.config.deployment.targetHost) nodes); + in '' + ip6 saddr { ${lib.concatStringsSep ", " targetHosts} } tcp dport 2049 accept + ''; }; } diff --git a/modules/system/services/server/nginx/acme/default.nix b/modules/system/services/server/nginx/acme/default.nix index a88a2b7b..941c8a64 100644 --- a/modules/system/services/server/nginx/acme/default.nix +++ b/modules/system/services/server/nginx/acme/default.nix @@ -3,7 +3,7 @@ config = lib.mkIf config.services.nginx.enable { security.acme = { acceptTerms = true; - defaults.email = "contact@nixfox.ca"; + defaults.email = "contact@${config.vars.primeDomain}"; }; environment.persistence."/persist".directories = [ "/var/lib/acme" ]; }; diff --git a/modules/system/services/server/nginx/default.nix b/modules/system/services/server/nginx/default.nix index 2325e731..0981fe41 100644 --- a/modules/system/services/server/nginx/default.nix +++ b/modules/system/services/server/nginx/default.nix @@ -2,23 +2,21 @@ { imports = [ ./acme - ./hosts - ./rtmp ./user ]; - options.services.webserver.enable = lib.mkEnableOption "Nginx webpages"; - config = lib.mkIf config.services.nginx.enable { services.nginx = { - recommendedTlsSettings = true; - recommendedOptimisation = true; + recommendedBrotliSettings = true; recommendedGzipSettings = true; + recommendedOptimisation = true; recommendedProxySettings = true; + recommendedTlsSettings = true; }; networking.firewall.allowedTCPPorts = [ - 80 - 443 + config.services.nginx.defaultHTTPListenPort + config.services.nginx.defaultSSLListenPort ]; + environment.persistence."/persist".directories = [ "/var/www" ]; }; } diff --git a/modules/system/services/server/nginx/hosts/default.nix b/modules/system/services/server/nginx/hosts/default.nix deleted file mode 100644 index aef9846f..00000000 --- a/modules/system/services/server/nginx/hosts/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, lib, ... }: -{ - imports = [ - ./files - ./nixfox - ]; - - environment.persistence."/persist".directories = lib.mkIf config.services.webserver.enable [ "/var/www" ]; -} diff --git a/modules/system/services/server/nginx/hosts/files/default.nix b/modules/system/services/server/nginx/hosts/files/default.nix deleted file mode 100644 index 882ffebe..00000000 --- a/modules/system/services/server/nginx/hosts/files/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, ... }: -{ - services.nginx.virtualHosts."jimbosfiles.com" = lib.mkIf config.services.webserver.enable { - enableACME = true; - addSSL = true; - globalRedirect = "www.nixfox.ca"; - }; -} diff --git a/modules/system/services/server/nginx/rtmp/default.nix b/modules/system/services/server/nginx/rtmp/default.nix deleted file mode 100644 index 4a619e05..00000000 --- a/modules/system/services/server/nginx/rtmp/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - config = lib.mkIf config.services.webserver.enable { - services.nginx = { - additionalModules = with pkgs.nginxModules; [ rtmp ]; - appendConfig = '' - rtmp { - server { - listen 1935; - chunk_size 4096; - allow publish all; - application stream { - record off; - live on; - allow play all; - hls on; - hls_path /var/www/landing-page/streams/hls/; - hls_fragment_naming system; - hls_fragment 3; - hls_playlist_length 40; - } - } - } - ''; - }; - networking.firewall.extraInputRules = "ip saddr { 11.0.0.0/8, ${config.secrets.ips.luna}, ${config.secrets.ips.corn} } tcp dport 1935 accept"; - systemd.services.nginx.serviceConfig.ReadWritePaths = [ "/var/www/landing-page/streams/hls/" ]; - }; -} diff --git a/modules/system/services/server/owncast/default.nix b/modules/system/services/server/owncast/default.nix index b98f402c..4f620795 100644 --- a/modules/system/services/server/owncast/default.nix +++ b/modules/system/services/server/owncast/default.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, nodes, ... }: { imports = [ ./nginx ]; @@ -7,7 +7,11 @@ port = 8060; rtmp-port = 1945; }; - networking.firewall.extraInputRules = "ip saddr 11.0.0.0/8 tcp dport 1945 accept"; + networking.firewall.extraInputRules = let + targetHosts = lib.attrValues (lib.mapAttrs (_: node: node.config.deployment.targetHost) nodes); + in '' + ip6 saddr { ${lib.concatStringsSep ", " targetHosts} } tcp dport ${toString config.services.owncast.rtmp-port} accept + ''; environment.persistence."/persist".directories = [ "/var/lib/owncast" ]; }; } diff --git a/modules/system/services/server/owncast/nginx/default.nix b/modules/system/services/server/owncast/nginx/default.nix index abc052ff..47fcaae0 100644 --- a/modules/system/services/server/owncast/nginx/default.nix +++ b/modules/system/services/server/owncast/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."live.nixfox.ca" = lib.mkIf config.services.owncast.enable { + services.nginx.virtualHosts."live.${config.vars.primeDomain}" = lib.mkIf config.services.owncast.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/transmission/default.nix b/modules/system/services/server/transmission/default.nix index 50d2abb2..78f2411b 100644 --- a/modules/system/services/server/transmission/default.nix +++ b/modules/system/services/server/transmission/default.nix @@ -4,6 +4,7 @@ config = lib.mkIf config.services.transmission.enable { services.transmission = { + package = pkgs.transmission_4; credentialsFile = pkgs.writeText "credentials" config.secrets.transmissionCredFile; openPeerPorts = true; settings = { diff --git a/modules/system/services/server/transmission/nginx/default.nix b/modules/system/services/server/transmission/nginx/default.nix index c4c737ab..5a66482f 100644 --- a/modules/system/services/server/transmission/nginx/default.nix +++ b/modules/system/services/server/transmission/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."tor.nixfox.ca" = lib.mkIf config.services.transmission.enable { + services.nginx.virtualHosts."tor.${config.vars.primeDomain}" = lib.mkIf config.services.transmission.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/services/server/vaultwarden/default.nix b/modules/system/services/server/vaultwarden/default.nix index 928b3458..d46dd0ac 100644 --- a/modules/system/services/server/vaultwarden/default.nix +++ b/modules/system/services/server/vaultwarden/default.nix @@ -4,16 +4,16 @@ config = lib.mkIf config.services.vaultwarden.enable { services.vaultwarden.config = { - domain = "https://pass.nixfox.ca"; + domain = "https://pass.${config.vars.primeDomain}"; signupsAllowed = false; rocketAddress = "127.0.0.1"; rocketPort = 8222; # Smtp email - smtpHost = "mx.nixfox.ca"; - smtpFrom = "noreply@nixfox.ca"; + smtpHost = "mx.${config.vars.mailDomain}"; + smtpFrom = "noreply@${config.vars.primeDomain}"; smtpFromName = "Vaultwarden"; - smtpUsername = "noreply@nixfox.ca"; + smtpUsername = "noreply@${config.vars.primeDomain}"; smtpPassword = config.secrets.mailPass.nixfoxNoReply; smtpSecurity = "starttls"; smtpPort = 587; diff --git a/modules/system/services/server/vaultwarden/nginx/default.nix b/modules/system/services/server/vaultwarden/nginx/default.nix index 0877413e..7ae72aeb 100644 --- a/modules/system/services/server/vaultwarden/nginx/default.nix +++ b/modules/system/services/server/vaultwarden/nginx/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts."pass.nixfox.ca" = lib.mkIf config.services.vaultwarden.enable { + services.nginx.virtualHosts."pass.${config.vars.primeDomain}" = lib.mkIf config.services.vaultwarden.enable { enableACME = true; forceSSL = true; locations."/" = { diff --git a/modules/system/settings/colmena/default.nix b/modules/system/settings/colmena/default.nix new file mode 100644 index 00000000..33e99c23 --- /dev/null +++ b/modules/system/settings/colmena/default.nix @@ -0,0 +1,7 @@ +{ config, ... }: +{ + deployment = { + allowLocalDeployment = true; + tags = config.system.nixos.tags; + }; +} diff --git a/modules/system/settings/default.nix b/modules/system/settings/default.nix index 5a196fae..0cea70d4 100644 --- a/modules/system/settings/default.nix +++ b/modules/system/settings/default.nix @@ -1,8 +1,10 @@ { ... }: { imports = [ + ./colmena ./font ./locale + ./logind ./minimal ./nix ./security diff --git a/modules/system/settings/logind/default.nix b/modules/system/settings/logind/default.nix new file mode 100644 index 00000000..78b2fd1e --- /dev/null +++ b/modules/system/settings/logind/default.nix @@ -0,0 +1,7 @@ +{ config, lib, ... }: +{ + services.logind = { + powerKey = lib.mkIf (builtins.elem "pc" config.system.nixos.tags) "suspend"; + powerKeyLongPress = "reboot"; + }; +} diff --git a/modules/system/settings/nix/cache/default.nix b/modules/system/settings/nix/cache/default.nix new file mode 100644 index 00000000..3041a621 --- /dev/null +++ b/modules/system/settings/nix/cache/default.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + nix.settings = { + substituters = [ + "https://colmena.cachix.org" + "https://nix-community.cachix.org" + ]; + trusted-public-keys = [ + "colmena.cachix.org-1:7BzpDnjjH8ki2CT3f6GdOk7QAzPOl+1t3LvTLXqYcSg=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + }; +} diff --git a/modules/system/settings/nix/channels/default.nix b/modules/system/settings/nix/channels/default.nix index 965eafe3..b81caa1f 100644 --- a/modules/system/settings/nix/channels/default.nix +++ b/modules/system/settings/nix/channels/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, stable, unstable, ... }: +{ config, pkgs, stable, unstable, ... }: with pkgs; { _module.args.pkgsStable = import stable { inherit (stdenv.hostPlatform) system; diff --git a/modules/system/settings/nix/default.nix b/modules/system/settings/nix/default.nix index c1115185..02cb38e6 100644 --- a/modules/system/settings/nix/default.nix +++ b/modules/system/settings/nix/default.nix @@ -1,20 +1,20 @@ { pkgs, ... }: { imports = [ + ./cache ./channels - ./gc + ./maintenence ./unfree ]; nix = { package = pkgs.lix; - settings = { - experimental-features = [ - "nix-command" - "flakes" - ]; - auto-optimise-store = true; - trusted-users = [ "@wheel" ]; - }; + settings.experimental-features = [ + "flakes" + "nix-command" + ]; }; + + # Use a newer implementation of nixos-rebuild + system.rebuild.enableNg = true; } diff --git a/modules/system/settings/nix/gc/default.nix b/modules/system/settings/nix/gc/default.nix deleted file mode 100644 index 0ec262af..00000000 --- a/modules/system/settings/nix/gc/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ ... }: -{ - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; -} diff --git a/modules/system/settings/nix/maintenence/default.nix b/modules/system/settings/nix/maintenence/default.nix new file mode 100644 index 00000000..f1b190c0 --- /dev/null +++ b/modules/system/settings/nix/maintenence/default.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + nix = let + common = { + automatic = true; + persistent = true; + }; + in { + gc = common; + optimise = common; + settings.auto-optimise-store = true; + }; +} diff --git a/modules/system/settings/security/privilege/default.nix b/modules/system/settings/security/privilege/default.nix index a2700af0..0dd9a19c 100644 --- a/modules/system/settings/security/privilege/default.nix +++ b/modules/system/settings/security/privilege/default.nix @@ -4,4 +4,9 @@ enable = true; execWheelOnly = true; }; + + # Allow root to be accessed via ssh + users.users.root.openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN3B9Uf3h5JiD2HjF/vQ5Zx9pibMgRrlf7ZoBktev9eB Warden" + ]; } diff --git a/modules/system/settings/security/rtkit/default.nix b/modules/system/settings/security/rtkit/default.nix index 31a54f74..eea12fa0 100644 --- a/modules/system/settings/security/rtkit/default.nix +++ b/modules/system/settings/security/rtkit/default.nix @@ -1,4 +1,4 @@ { config, ... }: { - security.rtkit.enable = config.system.desktop.enable; + security.rtkit.enable = builtins.elem "pc" config.system.nixos.tags; } diff --git a/modules/system/users/corn/default.nix b/modules/system/users/corn/default.nix deleted file mode 100644 index 82483f41..00000000 --- a/modules/system/users/corn/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - users.users."freecorn" = lib.mkIf config.system.extraUsers.enable { - isNormalUser = true; - createHome = true; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBCADciME1/rtWOlR2BxaAkRSgIZt61SYOgjTi6hw+yS Chinook" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICtoHVAmq8Ps7EguBsV3VY4snagzkhH6aXqwbKzuGs2H Radiant" - ]; - extraGroups = [ - "audio" - "video" - ]; - uid = 1001; - shell = pkgs.zsh; - }; - - environment.persistence."/persist".directories = [ "/home/freecorn" ]; -} diff --git a/modules/system/users/default.nix b/modules/system/users/default.nix index 138e7f2e..f882f271 100644 --- a/modules/system/users/default.nix +++ b/modules/system/users/default.nix @@ -1,6 +1,8 @@ -{ lib, ... }: +{ ... }: { - imports = [ ./main ]; - - options.system.extraUsers.enable = lib.mkEnableOption "Enable a shared system"; + imports = [ + ./freecorn + ./luna + ./main + ]; } diff --git a/modules/system/users/freecorn/default.nix b/modules/system/users/freecorn/default.nix new file mode 100644 index 00000000..16e7253a --- /dev/null +++ b/modules/system/users/freecorn/default.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: +let + user = "freecorn"; +in { + config = lib.mkIf (builtins.elem "extra-users" config.system.nixos.tags) { + users.users.${user} = { + isNormalUser = true; + createHome = true; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBCADciME1/rtWOlR2BxaAkRSgIZt61SYOgjTi6hw+yS Chinook" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICtoHVAmq8Ps7EguBsV3VY4snagzkhH6aXqwbKzuGs2H Radiant" + ]; + shell = pkgs.zsh; + uid = 1001; + }; + + environment.persistence."/persist".directories = [ "/home/${user}" ]; + }; +} diff --git a/modules/system/users/luna/default.nix b/modules/system/users/luna/default.nix index 683b8015..234d98a6 100644 --- a/modules/system/users/luna/default.nix +++ b/modules/system/users/luna/default.nix @@ -1,17 +1,17 @@ { config, lib, ... }: -{ - users.users."luna" = lib.mkIf config.system.extraUsers.enable { - isNormalUser = true; - createHome = true; - openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDJ3hzXkv5MVuGZy4HqfEZD0Ck7ZKiLeVmUTFzGSwZkumCpwX/zirD/tY4SNutPczhhYNn1jwkwnnyCwgkaQ7QWBs72G0opmjXDcSqxXJskSKYgjnUHoPV8uAcMwp5C5GNlwo3DFKXc1c7Sipy1s6y9ZnoKfVmjsr0AhamnC/bHEWg8vx0zuamCzvQ5vLWfpULRKwj286f0s2xaAvYaAJwGD0QMHC0ylFYZuq7Og4HVdlnUt+40BxCi+GAQqsFd4vM+RFjZKKD7ioP5DcIDfvfvxX4UpdKtCxVjeyyF+UJpFnQKytO9HvH4H+CRSAuJ+Vguiq/F3lGhvF0yIQ9M2MD3+tl3RZAj4D6n2ew30mn+QGh2fZgC7Utuzo02pMVUzkpm+mM4x8VyESpC1AuBdh0TAKBwS3ubMpegiCWCfIbNC0CQ/zgIq/5xwhXL8zhmfQrIiULBCd1xqThye0tt7knoPZlVCzOuVYoqxYnwYYGcXhzlArrmgRquyMYHdpFd+DTzJfcQIGdT4a+s0Mc2jRa0KT3A4ZrjziP0OPMQ+cpTd1tmQdEKXN6YhB87Hp9meCefFdzGvVembose82d3BOl45+rWM2ZcH93fNguWwYX0ez8+GiGW4P+gDQcfWfQCNa1daDjgoBwjmbG5rYoS6tfLxSSvYB1YOOK9U3AlPxEuTw== luna@ThinkPad-T480-Arch" - ]; - extraGroups = [ - "audio" - "video" - ]; - uid = 1002; - }; +let + user = "luna"; +in { + config = lib.mkIf (builtins.elem "extra-users" config.system.nixos.tags) { + users.users.${user} = { + isNormalUser = true; + createHome = true; + openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDJ3hzXkv5MVuGZy4HqfEZD0Ck7ZKiLeVmUTFzGSwZkumCpwX/zirD/tY4SNutPczhhYNn1jwkwnnyCwgkaQ7QWBs72G0opmjXDcSqxXJskSKYgjnUHoPV8uAcMwp5C5GNlwo3DFKXc1c7Sipy1s6y9ZnoKfVmjsr0AhamnC/bHEWg8vx0zuamCzvQ5vLWfpULRKwj286f0s2xaAvYaAJwGD0QMHC0ylFYZuq7Og4HVdlnUt+40BxCi+GAQqsFd4vM+RFjZKKD7ioP5DcIDfvfvxX4UpdKtCxVjeyyF+UJpFnQKytO9HvH4H+CRSAuJ+Vguiq/F3lGhvF0yIQ9M2MD3+tl3RZAj4D6n2ew30mn+QGh2fZgC7Utuzo02pMVUzkpm+mM4x8VyESpC1AuBdh0TAKBwS3ubMpegiCWCfIbNC0CQ/zgIq/5xwhXL8zhmfQrIiULBCd1xqThye0tt7knoPZlVCzOuVYoqxYnwYYGcXhzlArrmgRquyMYHdpFd+DTzJfcQIGdT4a+s0Mc2jRa0KT3A4ZrjziP0OPMQ+cpTd1tmQdEKXN6YhB87Hp9meCefFdzGvVembose82d3BOl45+rWM2ZcH93fNguWwYX0ez8+GiGW4P+gDQcfWfQCNa1daDjgoBwjmbG5rYoS6tfLxSSvYB1YOOK9U3AlPxEuTw== ${user}@ThinkPad-T480-Arch" + ]; + uid = 1002; + }; - environment.persistence."/persist".directories = [ "/home/luna" ]; + environment.persistence."/persist".directories = [ "/home/${user}" ]; + }; } diff --git a/modules/system/users/main/default.nix b/modules/system/users/main/default.nix index f15624ec..dee9152e 100644 --- a/modules/system/users/main/default.nix +++ b/modules/system/users/main/default.nix @@ -1,55 +1,47 @@ { config, lib, pkgs, ... }: { - options.sysusers = lib.mkOption { - type = lib.types.attrs; + users.users."${config.vars.mainUser}" = { + isNormalUser = true; + createHome = true; + linger = true; + hashedPassword = config.secrets.accPass.main; + openssh.authorizedKeys.keyFiles = [ + ../../../../hosts/tower/id_ed25519.pub + ../../../../hosts/intuos/id_ed25519.pub + ../../../../hosts/jupiter/id_ed25519.pub + ]; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN3B9Uf3h5JiD2HjF/vQ5Zx9pibMgRrlf7ZoBktev9eB Warden" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJahAoF74BY6GCTsFkt1ADKaraFgJJozW1Y1aBTLK0j9 Pixel9" + ]; + extraGroups = [ + # Privilige + "wheel" + + # Devices + "audio" + "input" + "render" + "rtkit" + "video" + + # Virtualization + "incus-admin" + "kvm" + "libvirtd" + "qemu-libvirtd" + + # Services + "minecraft" + "nfsShare" + "nginx" + ]; + shell = pkgs.zsh; + uid = 1000; }; - config = { - sysusers.main = "bun"; - - users.users."${config.sysusers.main}" = { - isNormalUser = true; - createHome = true; - hashedPassword = config.secrets.accPass.main; - openssh.authorizedKeys.keyFiles = [ - ../../../../hosts/tower/id_ed25519.pub - - ../../../../hosts/intuos/id_ed25519.pub - ../../../../hosts/jupiter/id_ed25519.pub - ../../../../hosts/redmond/id_ed25519.pub - - ../../../../hosts/midas/id_ed25519.pub - ../../../../hosts/kitty/id_ed25519.pub - ../../../../hosts/prophet/id_ed25519.pub - ]; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKn+61Hd+nQ5tQgt4219+h/zsnej1j2dHU5uvC3k3Bnw Warden" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJahAoF74BY6GCTsFkt1ADKaraFgJJozW1Y1aBTLK0j9 Pixel9" - ]; - extraGroups = [ - "wheel" - - "audio" - "input" - "render" - "video" - - "dialout" - "disk" - "rtkit" - - "kvm" - "libvirtd" - "qemu-libvirtd" - - "minecraft" - "nfsShare" - "nginx" - ]; - uid = 1000; - shell = pkgs.zsh; - }; - - home-manager.users."${config.sysusers.main}" = import ../../../home; + home-manager.users."${config.vars.mainUser}" = { + imports = [ ../../../home ]; + home.stateVersion = lib.mkForce config.system.stateVersion; }; } diff --git a/modules/system/variables/default.nix b/modules/system/variables/default.nix new file mode 100644 index 00000000..42927b33 --- /dev/null +++ b/modules/system/variables/default.nix @@ -0,0 +1,12 @@ +{ lib, ... }: +{ + options.vars = lib.mkOption { + type = lib.types.attrs; + }; + + config.vars = { + mainUser = "bun"; + primeDomain = "nixfox.ca"; + mailDomain = "nixfox.ca"; + }; +}