diff --git a/README.md b/README.md index 6f6e4db2..87fdf860 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-shell -p disko --run "sudo disko --mode destroy,format,mount ./disko.nix"`` to format the disk with Disko. +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. 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 1a7b3ce5..67ff2a5c 100644 --- a/flake.lock +++ b/flake.lock @@ -2,9 +2,7 @@ "nodes": { "blender": { "inputs": { - "nixpkgs": [ - "unstable" - ] + "nixpkgs": "nixpkgs" }, "locked": { "dir": "blender", @@ -39,12 +37,18 @@ } }, "crane": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1748970125, - "narHash": "sha256-UDyigbDGv8fvs9aS95yzFfOKkEjx1LO3PL3DsKopohA=", + "lastModified": 1717535930, + "narHash": "sha256-1hZ/txnbd/RmiBPNUs7i8UQw2N89uAK3UzrGAWdnFfU=", "owner": "ipetkov", "repo": "crane", - "rev": "323b5746d89e04b22554b061522dfce9e4c49b18", + "rev": "55e7754ec31dac78980c8be45f8a28e80e370946", "type": "github" }, "original": { @@ -60,11 +64,11 @@ ] }, "locked": { - "lastModified": 1749436314, - "narHash": "sha256-CqmqU5FRg5AadtIkxwu8ulDSOSoIisUMZRLlcED3Q5w=", + "lastModified": 1746411114, + "narHash": "sha256-mLlkVX1kKbAa/Ns5u26wDYw4YW4ziMFM21fhtRmfirU=", "owner": "nix-community", "repo": "disko", - "rev": "dfa4d1b9c39c0342ef133795127a3af14598017a", + "rev": "b5d1320ebc2f34dbea4655f95167f55e2130cdb3", "type": "github" }, "original": { @@ -76,11 +80,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { @@ -92,11 +96,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { @@ -108,11 +112,11 @@ "flake-compat_3": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "type": "github" }, "original": { @@ -129,11 +133,11 @@ ] }, "locked": { - "lastModified": 1749398372, - "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", "type": "github" }, "original": { @@ -168,11 +172,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -199,32 +203,6 @@ "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": [ @@ -247,28 +225,6 @@ "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": [ @@ -276,16 +232,16 @@ ] }, "locked": { - "lastModified": 1749154018, - "narHash": "sha256-gjN3j7joRvT3a8Zgcylnd4NFsnXeDBumqiu4HmY1RIg=", + "lastModified": 1746171682, + "narHash": "sha256-EyXUNSa+H+YvGVuQJP1nZskXAowxKYp79RNUsNdQTj4=", "owner": "nix-community", "repo": "home-manager", - "rev": "7aae0ee71a17b19708b93b3ed448a1a0952bf111", + "rev": "50eee705bbdbac942074a8c120e8194185633675", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.05", + "ref": "release-24.11", "repo": "home-manager", "type": "github" } @@ -313,11 +269,11 @@ ] }, "locked": { - "lastModified": 1749495634, - "narHash": "sha256-NPifVq2XZGRCsLBoUt6M5YUTiIh23+ubq57w7mSODt8=", + "lastModified": 1746158343, + "narHash": "sha256-i/1os9oEq0m/Da4FTdSqKUdI4+wzrvoDTuk1/dHSVDc=", "owner": "Jovian-Experiments", "repo": "Jovian-NixOS", - "rev": "c40d2f31f92571bf341497884174a132829ef0fc", + "rev": "8b45a8efb2829adf2996b51965ada1e4620631ac", "type": "github" }, "original": { @@ -331,6 +287,7 @@ "crane": "crane", "flake-compat": "flake-compat", "flake-parts": "flake-parts", + "flake-utils": "flake-utils", "nixpkgs": [ "stable" ], @@ -338,15 +295,16 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1749471908, - "narHash": "sha256-uGfPqd43KTomeIVWUzHu3hGLWFsqYibhWLt2OaRic28=", + "lastModified": 1718178907, + "narHash": "sha256-eSZyrQ9uoPB9iPQ8Y5H7gAmAgAvCw3InStmU3oEjqsE=", "owner": "nix-community", "repo": "lanzaboote", - "rev": "00292388ad3b497763b81568d6ee5e1c4a2bcf85", + "rev": "b627ccd97d0159214cee5c7db1412b75e4be6086", "type": "github" }, "original": { "owner": "nix-community", + "ref": "v0.4.1", "repo": "lanzaboote", "type": "github" } @@ -355,23 +313,22 @@ "inputs": { "blobs": "blobs", "flake-compat": "flake-compat_2", - "git-hooks": "git-hooks", "nixpkgs": [ "stable" ], - "nixpkgs-25_05": "nixpkgs-25_05" + "nixpkgs-24_11": "nixpkgs-24_11" }, "locked": { - "lastModified": 1747965231, - "narHash": "sha256-BW3ktviEhfCN/z3+kEyzpDKAI8qFTwO7+S0NVA0C90o=", + "lastModified": 1746469806, + "narHash": "sha256-kL3cc25sc0x+6gBZYjuE4566RT1E3XLQs4V8sl7D+VE=", "owner": "simple-nixos-mailserver", "repo": "nixos-mailserver", - "rev": "53007af63fade28853408370c4c600a63dd97f41", + "rev": "14857a0309d7bbdf7c51bbfa309d0d13448ae77e", "type": "gitlab" }, "original": { "owner": "simple-nixos-mailserver", - "ref": "nixos-25.05", + "ref": "nixos-24.11", "repo": "nixos-mailserver", "type": "gitlab" } @@ -380,16 +337,14 @@ "inputs": { "flake-compat": "flake-compat_3", "flake-utils": "flake-utils_2", - "nixpkgs": [ - "stable" - ] + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1749607590, - "narHash": "sha256-vvu9zoaYuuPIGG9YKRBMNqOELGN+x2qHbEK6PrZ/Ky0=", + "lastModified": 1746324578, + "narHash": "sha256-VUSIQ2W1Q3YgGvX3M4jPwIi3iIApdPHabhdrVjVgnwE=", "owner": "Infinidoge", "repo": "nix-minecraft", - "rev": "83aaf9c7e3caa39608992e723cfb997624920a35", + "rev": "9e7fd83ba3b25b6f03561a5b7f8ea74b70296816", "type": "github" }, "original": { @@ -420,18 +375,64 @@ "type": "github" } }, - "nixpkgs-25_05": { + "nixpkgs": { "locked": { - "lastModified": 1747610100, - "narHash": "sha256-rpR5ZPMkWzcnCcYYo3lScqfuzEw5Uyfh+R0EKZfroAc=", + "lastModified": 1733808091, + "narHash": "sha256-KWwINTQelKOoQgrXftxoqxmKFZb9pLVfnRvK270nkVk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ca49c4304acf0973078db0a9d200fd2bae75676d", + "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", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.05", + "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", "repo": "nixpkgs", "type": "github" } @@ -445,11 +446,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1749614785, - "narHash": "sha256-yn6eDwnUr9vZYpneg+XNh0/tC1KA9a+yXxvFMEzOfco=", + "lastModified": 1746568792, + "narHash": "sha256-e3QkOhtYJUlMLGCVUmQWULtVDokSJqud0VmPZoRj4s0=", "owner": "nix-community", "repo": "NUR", - "rev": "14f8439ad1190d3dd09f9fcc6a033d9710d68806", + "rev": "29d16321b0f48ad0d24c3eaf5656adfaaf99d19e", "type": "github" }, "original": { @@ -468,14 +469,15 @@ "nixpkgs": [ "lanzaboote", "nixpkgs" - ] + ], + "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1747372754, - "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", + "lastModified": 1717664902, + "narHash": "sha256-7XfBuLULizXjXfBYy/VV+SpYMHreNRHk9nKMsm1bgb4=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", + "rev": "cc4d466cb1254af050ff7bdf47f6d404a7c646d1", "type": "github" }, "original": { @@ -488,7 +490,6 @@ "inputs": { "blender": "blender", "disko": "disko", - "flake-utils": "flake-utils", "hm": "hm", "impermanence": "impermanence", "jovian": "jovian", @@ -502,17 +503,21 @@ }, "rust-overlay": { "inputs": { + "flake-utils": [ + "lanzaboote", + "flake-utils" + ], "nixpkgs": [ "lanzaboote", "nixpkgs" ] }, "locked": { - "lastModified": 1749436897, - "narHash": "sha256-OkDtaCGQQVwVFz5HWfbmrMJR99sFIMXHCHEYXzUJEJY=", + "lastModified": 1717813066, + "narHash": "sha256-wqbRwq3i7g5EHIui0bIi84mdqZ/It1AXBSLJ5tafD28=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e7876c387e35dc834838aff254d8e74cf5bd4f19", + "rev": "6dc3e45fe4aee36efeed24d64fc68b1f989d5465", "type": "github" }, "original": { @@ -523,16 +528,16 @@ }, "stable": { "locked": { - "lastModified": 1750005367, - "narHash": "sha256-h/aac1dGLhS3qpaD2aZt25NdKY7b+JT0ZIP2WuGsJMU=", + "lastModified": 1746422338, + "narHash": "sha256-NTtKOTLQv6dPfRe00OGSywg37A1FYqldS6xiNmqBUYc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6c64dabd3aa85e0c02ef1cdcb6e1213de64baee3", + "rev": "5b35d248e9206c1f3baf8de6a7683fee126364aa", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-25.05", + "ref": "nixos-24.11", "type": "indirect" } }, @@ -589,11 +594,11 @@ }, "unstable": { "locked": { - "lastModified": 1749794982, - "narHash": "sha256-Kh9K4taXbVuaLC0IL+9HcfvxsSUx8dPB5s5weJcc9pc=", + "lastModified": 1746461020, + "narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee930f9755f58096ac6e8ca94a1887e0534e2d81", + "rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 03a9d53f..48728d61 100644 --- a/flake.nix +++ b/flake.nix @@ -1,12 +1,9 @@ { inputs = { # General inputs - stable.url = "nixpkgs/nixos-25.05"; + stable.url = "nixpkgs/nixos-24.11"; unstable.url = "nixpkgs/nixos-unstable"; - # Flake helpers - flake-utils.url = "github:numtide/flake-utils"; - # System inputs disko = { url = "github:nix-community/disko"; @@ -16,7 +13,7 @@ impermanence.url = "github:nix-community/impermanence"; lanzaboote = { - url = "github:nix-community/lanzaboote"; + url = "github:nix-community/lanzaboote/v0.4.1"; inputs.nixpkgs.follows = "stable"; }; @@ -28,98 +25,72 @@ # Service inputs mailserver = { - url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-25.05"; + url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.11"; inputs.nixpkgs.follows = "stable"; }; - minecraft = { - url = "github:Infinidoge/nix-minecraft"; - inputs.nixpkgs.follows = "stable"; - }; + minecraft.url = "github:Infinidoge/nix-minecraft"; # Home inputs hm = { - url = "github:nix-community/home-manager/release-25.05"; + url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "stable"; }; - nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "unstable"; }; - # Specific apps - blender = { - url = "github:edolstra/nix-warez?dir=blender"; - inputs.nixpkgs.follows = "unstable"; - }; + blender.url = "github:edolstra/nix-warez?dir=blender"; }; - outputs = inputs: with inputs; + outputs = { + stable, + unstable, - { - colmena = { - meta = { - # Info - description = "The Bun Systems"; - name = "bunhive"; + disko, + impermanence, + lanzaboote, - # NixPKGs - nixpkgs = import stable { - overlays = [ - blender.overlays.default - minecraft.overlay - ]; - system = "x86_64-linux"; - }; + mailserver, + minecraft, - specialArgs = inputs; + jovian, - # Use a different Nixpkgs import on some systems - nodeNixpkgs.jupiter = import unstable { system = "x86_64-linux"; }; - }; + hm, + nur, + blender, + ... + }@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 ]; + let + mkNix = modules: channel: channel.lib.nixosSystem { + inherit modules; + specialArgs = inputs; }; - } - - // flake-utils.lib.eachDefaultSystemPassThrough (system: let - mkHome = extraModules: hm.lib.homeManagerConfiguration { - modules = [ - ./modules/home - { targets.genericLinux.enable = true; } - ] ++ extraModules; + mkHome = modules: channel: arch: hm.lib.homeManagerConfiguration { + inherit modules; + pkgs = builtins.getAttr arch channel.legacyPackages; extraSpecialArgs = inputs; - pkgs = builtins.getAttr system stable.legacyPackages; }; in { - homeConfigurations = { - default = mkHome [ ]; - desktop = mkHome [{ home.guifull.enable = true; }]; + # 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"; + }; + }; } diff --git a/hosts/detritus/boot/default.nix b/hosts/detritus/boot/default.nix deleted file mode 100644 index a0b1cae3..00000000 --- a/hosts/detritus/boot/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ pkgs, ... }: -{ - boot = { - kernelPackages = pkgs.linuxPackages_hardened; - loader.limine.enable = true; - }; -} diff --git a/hosts/detritus/default.nix b/hosts/detritus/default.nix deleted file mode 100644 index 010d2eca..00000000 --- a/hosts/detritus/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ ... }: -{ - 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 deleted file mode 100644 index 09ce1b53..00000000 --- a/hosts/detritus/disko/default.nix +++ /dev/null @@ -1,99 +0,0 @@ -{ 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 deleted file mode 100644 index 63042a0a..00000000 --- a/hosts/detritus/filesystems/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ ... }: -{ - 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 deleted file mode 100644 index 73a80f35..00000000 --- a/hosts/detritus/hardware/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ 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 deleted file mode 100644 index 2d553d61..00000000 --- a/hosts/flight/boot/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ 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 deleted file mode 100644 index fe3b545a..00000000 --- a/hosts/flight/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ ... }: -{ - 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 deleted file mode 100644 index 8a568d0f..00000000 --- a/hosts/flight/filesystems/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ 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 deleted file mode 100644 index fa1b984c..00000000 --- a/hosts/flight/hardware/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ 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 deleted file mode 100644 index 7bccd4b8..00000000 --- a/hosts/flight/root/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ 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 deleted file mode 100644 index e408de6a..00000000 --- a/hosts/flight/user/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ 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 deleted file mode 100644 index 1919dae1..00000000 --- a/hosts/hidden/boot/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ 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 deleted file mode 100644 index c0da8fb6..00000000 --- a/hosts/hidden/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ ... }: -{ - 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/hidden/hardware/default.nix b/hosts/hidden/hardware/default.nix deleted file mode 100644 index 93d299a4..00000000 --- a/hosts/hidden/hardware/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ 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 deleted file mode 100644 index e1b677cd..00000000 --- a/hosts/hidden/services/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ 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 deleted file mode 100644 index 60e0e93a..00000000 --- a/hosts/hidden/user/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ 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 84a34f0c..f6458c21 100644 --- a/hosts/intuos/boot/default.nix +++ b/hosts/intuos/boot/default.nix @@ -1,6 +1,7 @@ -{ ... }: +{ 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 4e3a9f3b..ceea57fa 100644 --- a/hosts/intuos/default.nix +++ b/hosts/intuos/default.nix @@ -3,14 +3,16 @@ imports = [ ./boot ./disko + ./filesystems ./hardware ./user + ../../modules/system ]; + networking.hostName = "intuos"; + system = { - nixos.tags = [ "pc" ]; + desktop.enable = true; 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 e204a376..4d195170 100644 --- a/hosts/intuos/disko/default.nix +++ b/hosts/intuos/disko/default.nix @@ -1,15 +1,16 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; device = "/dev/sda"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,12 +28,12 @@ size = "100%"; content = { type = "luks"; - name = "${name}-disk"; + name = "${config.networking.hostName}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -42,7 +43,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/intuos/filesystems/default.nix b/hosts/intuos/filesystems/default.nix new file mode 100644 index 00000000..e17b5eec --- /dev/null +++ b/hosts/intuos/filesystems/default.nix @@ -0,0 +1,32 @@ +{ 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 bf6c9f70..a6b9aa1b 100644 --- a/hosts/intuos/hardware/default.nix +++ b/hosts/intuos/hardware/default.nix @@ -1,4 +1,4 @@ -{ modulesPath, ... }: +{ config, lib, modulesPath, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; @@ -16,7 +16,6 @@ kernelModules = [ "kvm-intel" ]; }; - hardware.cpu.intel.updateMicrocode = true; - - nixpkgs.hostPlatform = "x86_64-linux"; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/intuos/user/default.nix b/hosts/intuos/user/default.nix index 256a66ed..b609338c 100644 --- a/hosts/intuos/user/default.nix +++ b/hosts/intuos/user/default.nix @@ -1,7 +1,8 @@ -{ config, ... }: +{ config, lib, ... }: { - home-manager.users."${config.vars.mainUser}".home = { + home-manager.users."${config.sysusers.main}".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 17b17837..3cf63f7f 100644 --- a/hosts/jupiter/boot/default.nix +++ b/hosts/jupiter/boot/default.nix @@ -1,8 +1,8 @@ -{ pkgsStable, ... }: +{ pkgs, ... }: { boot = { - kernelPackages = pkgsStable.linuxPackages_6_14; - loader.limine.enable = true; + kernelPackages = pkgs.linuxPackages_latest; + loader.systemd-boot.enable = true; plymouth.enable = true; }; } diff --git a/hosts/jupiter/default.nix b/hosts/jupiter/default.nix index 7271d00e..fb5554d1 100644 --- a/hosts/jupiter/default.nix +++ b/hosts/jupiter/default.nix @@ -8,14 +8,14 @@ ./jovian ./services ./user + ../../modules/system ]; + networking.hostName = "jupiter"; + system = { - nixos.tags = [ "pc" ]; + desktop.enable = true; + steamdeck.enable = true; 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 abb7808a..900c8a59 100644 --- a/hosts/jupiter/disko/default.nix +++ b/hosts/jupiter/disko/default.nix @@ -1,15 +1,16 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; device = "/dev/nvme0n1"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,7 +28,7 @@ size = "100%"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -36,7 +37,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/jupiter/filesystems/default.nix b/hosts/jupiter/filesystems/default.nix index 7f734c26..7c1feb2d 100644 --- a/hosts/jupiter/filesystems/default.nix +++ b/hosts/jupiter/filesystems/default.nix @@ -1,13 +1,11 @@ { 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 811cc7c9..a3e7b2bf 100644 --- a/hosts/jupiter/hardware/default.nix +++ b/hosts/jupiter/hardware/default.nix @@ -1,4 +1,4 @@ -{ modulesPath, ... }: +{ config, lib, modulesPath, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; @@ -15,7 +15,6 @@ kernelModules = [ "kvm-amd" ]; }; - hardware.cpu.amd.updateMicrocode = true; - - nixpkgs.hostPlatform = "x86_64-linux"; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/jupiter/jovian/default.nix b/hosts/jupiter/jovian/default.nix index b8d075e9..fa5ecf0c 100644 --- a/hosts/jupiter/jovian/default.nix +++ b/hosts/jupiter/jovian/default.nix @@ -1,12 +1,16 @@ { config, lib, pkgs, jovian, ... }: { - imports = [ ./desktop ]; + imports = [ jovian.nixosModules.jovian ]; - config = lib.mkIf config.jovian.steam.enable { + options.system.steamdeck.enable = lib.mkEnableOption "Jovian NixOS environment"; + + config = lib.mkIf config.system.steamdeck.enable { jovian = { steam = { + enable = true; autoStart = true; - user = config.vars.mainUser; + desktopSession = "gnome"; + user = config.sysusers.main; }; decky-loader = { enable = true; @@ -18,46 +22,80 @@ }; }; - # Evil kernel boot.kernelPackages = lib.mkForce pkgs.linuxPackages_jovian; - programs.steam.extest.enable = true; + programs.steam = { + extest.enable = true; + localNetworkGameTransfers.openFirewall = true; + remotePlay.openFirewall = true; + }; - hardware.xone.enable = true; + services = { + keyd.enable = lib.mkForce false; + tlp.enable = lib.mkForce false; + xserver.desktopManager.gnome.enable = true; + }; - # Use networkmanager for ui compatibility networking = { networkmanager.enable = true; wireless.enable = lib.mkForce false; }; - # Disable conflicting services - services = { - keyd.enable = lib.mkForce false; - tlp.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 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.jovian.steam.enable = lib.mkForce false; + specialisation.desktop.configuration.config.system.steamdeck.enable = lib.mkForce false; }; } diff --git a/hosts/jupiter/jovian/desktop/default.nix b/hosts/jupiter/jovian/desktop/default.nix deleted file mode 100644 index 8c9655dd..00000000 --- a/hosts/jupiter/jovian/desktop/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ 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 3ead25ff..f633f5d2 100644 --- a/hosts/jupiter/services/default.nix +++ b/hosts/jupiter/services/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - config = lib.mkIf (!config.jovian.steam.enable) { + config = lib.mkIf (!config.system.steamdeck.enable) { networking.useNetworkd = lib.mkForce false; services.globalprotect.enable = true; @@ -9,5 +9,12 @@ 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 43b57345..e4b30d0b 100644 --- a/hosts/jupiter/user/default.nix +++ b/hosts/jupiter/user/default.nix @@ -1,8 +1,11 @@ -{ config, ... }: +{ config, lib, ... }: { - home-manager.users."${config.vars.mainUser}".home = { - guifull.enable = true; + home-manager.users."${config.sysusers.main}".home = { + desktop.enable = true; + gaming.enable = true; + production.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 a0b1cae3..e21b5c06 100644 --- a/hosts/kitty/boot/default.nix +++ b/hosts/kitty/boot/default.nix @@ -2,6 +2,6 @@ { boot = { kernelPackages = pkgs.linuxPackages_hardened; - loader.limine.enable = true; + loader.systemd-boot.enable = true; }; } diff --git a/hosts/kitty/default.nix b/hosts/kitty/default.nix index a2fb8126..64f97ede 100644 --- a/hosts/kitty/default.nix +++ b/hosts/kitty/default.nix @@ -6,16 +6,20 @@ ./filesystems ./hardware ./network - ./services + ./user + ../../modules/system ]; + networking = { + hostName = "kitty"; + hostId = "8745e22e"; + }; + system = { - nixos.tags = [ - "extra-users" - "server" - ]; + server.enable = true; + extraUsers.enable = true; stateVersion = "24.11"; }; - deployment.targetHost = "53f:dc2d:80c9:3ca2:4b15:ef4d:38a0:c868"; + services.nfs.server.enable = true; } diff --git a/hosts/kitty/disko/default.nix b/hosts/kitty/disko/default.nix index 5959c753..2191e808 100644 --- a/hosts/kitty/disko/default.nix +++ b/hosts/kitty/disko/default.nix @@ -1,15 +1,16 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; - device = "/dev/disk/by-id/ata-KINGSTON_SA400S37120G_50026B7783DBB232"; + device = "/dev/sda"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,7 +28,7 @@ size = "100%"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -36,7 +37,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/kitty/filesystems/default.nix b/hosts/kitty/filesystems/default.nix index 0e452e07..29880794 100644 --- a/hosts/kitty/filesystems/default.nix +++ b/hosts/kitty/filesystems/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, ... }: { fileSystems = { "/persist/storage" = { @@ -9,5 +9,23 @@ "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 64943f7a..3e917a7a 100644 --- a/hosts/kitty/hardware/default.nix +++ b/hosts/kitty/hardware/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, lib, ... }: { boot.initrd = { availableKernelModules = [ @@ -9,7 +9,6 @@ kernelModules = [ "dm-snapshot" ]; }; - hardware.cpu.intel.updateMicrocode = true; - - nixpkgs.hostPlatform = "x86_64-linux"; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/kitty/id_ed25519.pub b/hosts/kitty/id_ed25519.pub new file mode 100644 index 00000000..0b6823a8 --- /dev/null +++ b/hosts/kitty/id_ed25519.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDOBa+Wz1FqFEnMeXflP0CPt2wnN819T+FdSCIwFLJjN diff --git a/hosts/kitty/network/default.nix b/hosts/kitty/network/default.nix index 4518518c..7775a2fe 100644 --- a/hosts/kitty/network/default.nix +++ b/hosts/kitty/network/default.nix @@ -2,13 +2,21 @@ { networking = { interfaces."eno1".ipv4.addresses = [{ - address = "11.2.0.1"; + address = "10.2.0.2"; prefixLength = 8; }]; defaultGateway = { - address = "11.1.0.1"; + address = "10.1.0.1"; interface = "eno1"; }; - hostId = "8745e22e"; + + vlans.internal = { + id=100; + interface="eno1"; + }; + interfaces.internal.ipv4.addresses = [{ + address = "11.0.0.2"; + prefixLength = 8; + }]; }; } diff --git a/hosts/kitty/services/default.nix b/hosts/kitty/services/default.nix deleted file mode 100644 index a330605b..00000000 --- a/hosts/kitty/services/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: -{ - 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 new file mode 100644 index 00000000..9366cadc --- /dev/null +++ b/hosts/kitty/user/default.nix @@ -0,0 +1,6 @@ +{ 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 7ae69555..766fb372 100644 --- a/hosts/midas/default.nix +++ b/hosts/midas/default.nix @@ -7,12 +7,17 @@ ./hardware ./network ./services + ./user + ../../modules/system ]; - system = { - nixos.tags = [ "server" ]; - stateVersion = "24.11"; + networking = { + hostName = "midas"; + hostId = "38ba3f57"; }; - deployment.targetHost = "538:e163:87ba:f847:3646:18b6:6b01:d8f8"; + system = { + server.enable = true; + stateVersion = "24.11"; + }; } diff --git a/hosts/midas/disko/default.nix b/hosts/midas/disko/default.nix index 7978befb..60e95465 100644 --- a/hosts/midas/disko/default.nix +++ b/hosts/midas/disko/default.nix @@ -1,15 +1,16 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; - device = "/dev/disk/by-id/nvme-eui.00080d03001365cc"; + device = "/dev/nvme0n1"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,12 +28,12 @@ size = "100%"; content = { type = "luks"; - name = "${name}-disk"; + name = "${config.networking.hostName}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -42,7 +43,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/midas/filesystems/default.nix b/hosts/midas/filesystems/default.nix index 3048a803..0abb186a 100644 --- a/hosts/midas/filesystems/default.nix +++ b/hosts/midas/filesystems/default.nix @@ -10,5 +10,14 @@ "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 d3f129ad..19194610 100644 --- a/hosts/midas/hardware/default.nix +++ b/hosts/midas/hardware/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, lib, ... }: { boot.initrd = { availableKernelModules = [ @@ -10,7 +10,6 @@ kernelModules = [ "dm-snapshot" ]; }; - hardware.cpu.intel.updateMicrocode = true; - - nixpkgs.hostPlatform = "x86_64-linux"; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/midas/id_ed25519.pub b/hosts/midas/id_ed25519.pub new file mode 100644 index 00000000..082fe2e0 --- /dev/null +++ b/hosts/midas/id_ed25519.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFGHaxdTeC1xnTx2BY5LLR5LxhdSkmYoWuOeEuRIz0k diff --git a/hosts/midas/network/default.nix b/hosts/midas/network/default.nix index 909a3623..17b47f4f 100644 --- a/hosts/midas/network/default.nix +++ b/hosts/midas/network/default.nix @@ -2,13 +2,45 @@ { networking = { interfaces."enp0s31f6".ipv4.addresses = [{ - address = "11.2.0.1"; + address = "10.2.0.1"; prefixLength = 8; }]; defaultGateway = { - address = "11.1.0.1"; + address = "10.1.0.1"; interface = "enp0s31f6"; }; - hostId = "38ba3f57"; + + 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 + } + ''; + }; }; + + # 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 cddcad85..683391b3 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 deleted file mode 100644 index 99142a59..00000000 --- a/hosts/midas/services/nginx/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ ... }: -{ - imports = [ ./nixfox ]; - - services.nginx.enable = true; -} diff --git a/hosts/midas/user/default.nix b/hosts/midas/user/default.nix new file mode 100644 index 00000000..9366cadc --- /dev/null +++ b/hosts/midas/user/default.nix @@ -0,0 +1,6 @@ +{ 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 5c3db6a2..e21b5c06 100644 --- a/hosts/prophet/boot/default.nix +++ b/hosts/prophet/boot/default.nix @@ -1,8 +1,7 @@ { pkgs, ... }: { boot = { - binfmt.emulatedSystems = [ "x86_64-linux" ]; kernelPackages = pkgs.linuxPackages_hardened; - loader.limine.enable = true; + loader.systemd-boot.enable = true; }; } diff --git a/hosts/prophet/default.nix b/hosts/prophet/default.nix index 5f2196a5..cafc1fea 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 = { - nixos.tags = [ "server" ]; + server.enable = true; 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 aad74c04..4961d53b 100644 --- a/hosts/prophet/disko/default.nix +++ b/hosts/prophet/disko/default.nix @@ -1,15 +1,16 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; - device = "/dev/disk/by-id/scsi-3609c958403f14cd29ff94a5a2e405cc2"; + device = "/dev/nvme0n1"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,7 +28,7 @@ size = "100%"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -36,7 +37,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/prophet/filesystems/default.nix b/hosts/prophet/filesystems/default.nix index dda781b9..f3943967 100644 --- a/hosts/prophet/filesystems/default.nix +++ b/hosts/prophet/filesystems/default.nix @@ -1,13 +1,11 @@ { ... }: { - 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 3e057fc7..4b2b3178 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 = "aarch64-linux"; + nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; } diff --git a/hosts/prophet/id_ed25519.pub b/hosts/prophet/id_ed25519.pub new file mode 100644 index 00000000..0d58d2b8 --- /dev/null +++ b/hosts/prophet/id_ed25519.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDXU+mo+lkFaGBV7wuzrGnlII15YS3/MkkG3KmGJRT0j diff --git a/hosts/prophet/services/default.nix b/hosts/prophet/services/default.nix index 71ffb3cf..1c8b896a 100644 --- a/hosts/prophet/services/default.nix +++ b/hosts/prophet/services/default.nix @@ -2,10 +2,9 @@ { 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 new file mode 100644 index 00000000..9366cadc --- /dev/null +++ b/hosts/prophet/user/default.nix @@ -0,0 +1,6 @@ +{ 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 new file mode 100644 index 00000000..9a94a6b2 --- /dev/null +++ b/hosts/redmond/boot/default.nix @@ -0,0 +1,12 @@ +{ 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 new file mode 100644 index 00000000..cdaa5afc --- /dev/null +++ b/hosts/redmond/default.nix @@ -0,0 +1,19 @@ +{ lib, ... }: +{ + imports = [ + ./boot + ./disko + ./filesystems + ./hardware + ./network + ./user + ../../modules/system + ]; + + networking.hostName = "redmond"; + + system = { + desktop.enable = true; + stateVersion = "24.05"; + }; +} diff --git a/hosts/hidden/disko/default.nix b/hosts/redmond/disko/default.nix similarity index 72% rename from hosts/hidden/disko/default.nix rename to hosts/redmond/disko/default.nix index 60a3aa22..4ebcb697 100644 --- a/hosts/hidden/disko/default.nix +++ b/hosts/redmond/disko/default.nix @@ -1,15 +1,16 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; - device = "/dev/sda"; + device = "/dev/nvme0n1"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,12 +28,12 @@ size = "100%"; content = { type = "luks"; - name = "${name}-disk"; + name = "${config.networking.hostName}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -42,7 +43,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { @@ -53,35 +54,25 @@ subvolumes = { "/root" = { mountpoint = "/"; - mountOptions = [ - "compress=zstd" - "ssd" - ]; + mountOptions = [ "compress=zstd" ]; }; "/prev" = { mountpoint = "/prev"; mountOptions = [ "compress=zstd" "noexec" - "ssd" ]; }; "/nix" = { mountpoint = "/nix"; - mountOptions = [ - "compress=zstd" - "ssd" - ]; + mountOptions = [ "compress=zstd" ]; }; - # Impermanence - "/persist" = { - mountpoint = "/persist"; - mountOptions = [ - "compress=zstd" - "ssd" - ]; - }; + # Impermanence + "/persist" = { + mountpoint = "/persist"; + mountOptions = [ "compress=zstd" ]; + }; "/persist/.snapshots" = { }; "/persist/home" = { }; "/persist/home/.snapshots" = { }; @@ -89,7 +80,7 @@ }; }; swap = { - size = "2G"; + size = "8G"; content = { type = "swap"; discardPolicy = "both"; diff --git a/hosts/redmond/filesystems/default.nix b/hosts/redmond/filesystems/default.nix new file mode 100644 index 00000000..ddaa83f9 --- /dev/null +++ b/hosts/redmond/filesystems/default.nix @@ -0,0 +1,11 @@ +{ 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 new file mode 100644 index 00000000..8d652d04 --- /dev/null +++ b/hosts/redmond/hardware/default.nix @@ -0,0 +1,23 @@ +{ 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 new file mode 100644 index 00000000..5319a978 --- /dev/null +++ b/hosts/redmond/id_ed25519.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICHJ2Gy1Gaq96K85zOSfgWzGY0rIaUcqGS7Si5Nvzg+n diff --git a/hosts/redmond/network/default.nix b/hosts/redmond/network/default.nix new file mode 100644 index 00000000..f87dee8a --- /dev/null +++ b/hosts/redmond/network/default.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + 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 new file mode 100644 index 00000000..fed1d317 --- /dev/null +++ b/hosts/redmond/user/default.nix @@ -0,0 +1,7 @@ +{ 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 a71f03cf..8c5668af 100644 --- a/hosts/tower/boot/default.nix +++ b/hosts/tower/boot/default.nix @@ -1,12 +1,19 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgsUnstable, ... }: 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 = { - kernelPackages = pkgs.linuxPackages_6_14; + # Latest kernel and IOMMU isolation + kernelPackages = pkgsUnstable.linuxPackages_latest; kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:1f82,10de:10fa" ]; # Load into GPU before video driver @@ -21,5 +28,8 @@ in { }; # Use second GPU on boot - specialisation.gputwo.configuration.boot.kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:2504,10de:228e" ]; + specialisation.gputwo.configuration = { + boot.kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:2504,10de:228e" ]; + environment.sessionVariables.WLR_RENDERER = lib.mkForce "gles2"; + }; } diff --git a/hosts/tower/default.nix b/hosts/tower/default.nix index bb1ea3e0..362aba9c 100644 --- a/hosts/tower/default.nix +++ b/hosts/tower/default.nix @@ -5,15 +5,18 @@ ./disko ./filesystems ./hardware + ./network ./user + ../../modules/system ]; + networking.hostName = "tower"; + system = { - nixos.tags = [ "pc" ]; + desktop.enable = true; + nvidia.enable = true; 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 72540892..a5d6345a 100644 --- a/hosts/tower/disko/default.nix +++ b/hosts/tower/disko/default.nix @@ -1,15 +1,17 @@ -{ config, name, ... }: +{ config, disko, ... }: { + imports = [ disko.nixosModules.disko ]; + disko.devices = { disk = { - "${name}" = { + "${config.networking.hostName}" = { type = "disk"; - device = "/dev/disk/by-id/nvme-INTEL_SSDPEKNU512GZ_BTKA20550TKC512A"; + device = "/dev/nvme0n1"; + imageSize = "32G"; content = { type = "gpt"; partitions = { boot = { - priority = 1; size = "1M"; type = "EF02"; }; @@ -27,12 +29,12 @@ size = "100%"; content = { type = "luks"; - name = "${name}-disk"; + name = "${config.networking.hostName}-disk"; settings.allowDiscards = true; passwordFile = "/tmp/secret.key"; content = { type = "lvm_pv"; - vg = "${name}"; + vg = "${config.networking.hostName}"; }; }; }; @@ -42,7 +44,7 @@ }; lvm_vg = { - "${name}" = { + "${config.networking.hostName}" = { type = "lvm_vg"; lvs = { root = { diff --git a/hosts/tower/filesystems/default.nix b/hosts/tower/filesystems/default.nix index 0f983e1b..18b0e1ac 100644 --- a/hosts/tower/filesystems/default.nix +++ b/hosts/tower/filesystems/default.nix @@ -1,34 +1,26 @@ -{ ... }: +{ config, ... }: { fileSystems = { # Games and such "/mnt/Linux1" = { - device = "/dev/disk/by-label/Linux1"; - fsType = "btrfs"; + device = "/dev/disk/by-uuid/b2901f8c-ffda-4b88-bb63-a9ea0c96ccb4"; + fsType = "ext4"; options = [ "nofail" "nosuid" ]; }; "/mnt/Linux2" = { - device = "/dev/disk/by-label/Linux2"; - fsType = "btrfs"; + device = "/dev/disk/by-uuid/f08e4f38-162c-402f-ba2a-5925151b78bf"; + fsType = "ext4"; options = [ "nofail" "nosuid" ]; }; "/mnt/Linux3" = { - device = "/dev/disk/by-label/Linux3"; - fsType = "btrfs"; - options = [ - "nofail" - "nosuid" - ]; - }; - "/mnt/Linux4" = { - device = "/dev/disk/by-label/Linux4"; - fsType = "btrfs"; + device = "/dev/disk/by-uuid/e7bc75bd-c371-4b28-b212-7be9b1fad339"; + fsType = "ext4"; options = [ "nofail" "nosuid" @@ -45,5 +37,34 @@ "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 a374acd5..4ee8328d 100644 --- a/hosts/tower/hardware/default.nix +++ b/hosts/tower/hardware/default.nix @@ -1,4 +1,4 @@ -{ modulesPath, ... }: +{ config, lib, modulesPath, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; @@ -16,9 +16,6 @@ kernelModules = [ "kvm-amd" ]; }; - services.xserver.videoDrivers = [ "nvidia" ]; - - hardware.cpu.amd.updateMicrocode = true; - - nixpkgs.hostPlatform = "x86_64-linux"; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/tower/network/default.nix b/hosts/tower/network/default.nix new file mode 100644 index 00000000..a14294f2 --- /dev/null +++ b/hosts/tower/network/default.nix @@ -0,0 +1,24 @@ +{ ... }: +{ + 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 bdfb086b..9c6469d4 100644 --- a/hosts/tower/user/default.nix +++ b/hosts/tower/user/default.nix @@ -1,4 +1,9 @@ -{ config, ... }: +{ config, lib, ... }: { - home-manager.users."${config.vars.mainUser}".home.guifull.enable = true; + home-manager.users."${config.sysusers.main}".home = { + desktop.enable = true; + gaming.enable = true; + production.enable = true; + stateVersion = lib.mkForce config.system.stateVersion; + }; } diff --git a/modules/home/default.nix b/modules/home/default.nix index c1e04428..ed97b6a8 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -1,13 +1,20 @@ { lib, ... }: { imports = [ - ./profiles ./programs ./services ./settings + ./user ./variables ./wms ]; - config.home.stateVersion = "25.05"; + 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"; } diff --git a/modules/home/profiles/default.nix b/modules/home/profiles/default.nix deleted file mode 100644 index 4c658ec6..00000000 --- a/modules/home/profiles/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ 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 deleted file mode 100644 index a322678d..00000000 --- a/modules/home/profiles/guifull/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ 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 a1974e51..27f704d5 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.vars.fonts.mono}:size=14.7"; + font = "${config.look.fonts.mono}:size=14.7"; }; colors = { alpha = "0.85"; - background = config.vars.colors.dark; + background = config.look.colors.dark; regular0 = "3f3f3f"; regular1 = "cc0000"; regular2 = "4e9a06"; @@ -29,10 +29,7 @@ bright7 = "ffffff"; }; cursor.style = "beam"; - key-bindings = { - search-start = "Control+f"; - show-urls-launch = "Control+s"; - }; + key-bindings.search-start = "Control+f"; }; }; } diff --git a/modules/home/programs/gui/librewolf/default.nix b/modules/home/programs/gui/librewolf/default.nix index 6e208d51..8f5291be 100644 --- a/modules/home/programs/gui/librewolf/default.nix +++ b/modules/home/programs/gui/librewolf/default.nix @@ -1,78 +1,60 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgs, nur, ... }: { config = lib.mkIf config.home.desktop.enable { programs.firefox = { enable = true; package = pkgs.librewolf; - profiles.default = { - isDefault = true; + 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; + ''; - containersForce = true; - containers = { - home = { - color = "purple"; - icon = "fruit"; - id = 1; - }; - school = { - color = "red"; - icon = "briefcase"; - id = 2; - }; - }; - - bookmarks = { + # Profile settings + commonExtensions = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + darkreader + return-youtube-dislikes + simple-tab-groups + sponsorblock + ublock-origin + violentmonkey + ]; + commonSearch = { force = true; - 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"; - } + default = "Ecosia"; + order = [ + "Ecosia" + "NixPKGs" + "MyNixOS" + "YouTube" + "Spotify" ]; - }; - - 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 = [{ @@ -82,8 +64,7 @@ }]; definedAliases = [ "@e" ]; }; - - "nixpkgs" = { + "NixPKGs" = { urls = [{ template = "https://search.nixos.org/packages"; params = [ @@ -99,8 +80,7 @@ }]; definedAliases = [ "@p" ]; }; - - "mynixos" = { + "MyNixOS" = { urls = [{ template = "https://mynixos.com/search"; params = [{ @@ -110,8 +90,7 @@ }]; definedAliases = [ "@my" ]; }; - - "youtube" = { + "YouTube" = { urls = [{ template = "https://www.youtube.com/results"; params = [{ @@ -121,17 +100,13 @@ }]; definedAliases = [ "@y" ]; }; - - "spotify" = { + "Spotify" = { urls = [{ template = "https://open.spotify.com/search/{searchTerms}"; }]; definedAliases = [ "@s" ]; }; }; }; - - settings = { - force = true; - + commonSettings = { # Generic "browser.download.useDownloadDir" = true; "browser.shell.checkDefaultBrowser" = false; @@ -146,9 +121,9 @@ "webgl.disabled" = false; # Fonts - "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; + "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; # Theming and visibility "browser.aboutConfig.showWarning" = false; @@ -168,45 +143,47 @@ "browser.newtabpage.enabled" = false; # Safe browsing - "browser.safebrowsing.blockedURIs.enabled" = false; "browser.safebrowsing.downloads.enabled" = false; - "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; - "browser.safebrowsing.downloads.remote.block_uncommon" = false; "browser.safebrowsing.downloads.remote.enabled" = false; + "browser.safebrowsing.downloads.remote.block_uncommon" = false; + "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; "browser.safebrowsing.malware.enabled" = false; "browser.safebrowsing.phishing.enabled" = false; - "browser.safebrowsing.provider.google.gethashURL" = false; - "browser.safebrowsing.provider.google.updateURL" = 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; # 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.clearOnShutdown.cookies" = false; - "privacy.clearOnShutdown_v2.cookiesAndStorage" = false; + "privacy.resistFingerprinting" = true; + "privacy.firstparty.isolate" = true; "privacy.fingerprintingProtection" = true; "privacy.globalprivacycontrol.enabled" = true; "privacy.globalprivacycontrol.functionality.enabled" = true; - "privacy.resistFingerprinting" = true; + "privacy.clearOnShutdown.cookies" = false; + "privacy.clearOnShutdown_v2.cookiesAndStorage" = false; # Tracking URL blocking - "urlclassifier.features.socialtracking.skipURLs" = "*.instagram.com, *.twitter.com, *.twimg.com"; "urlclassifier.trackingSkipURLs" = "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com"; + "urlclassifier.features.socialtracking.skipURLs" = "*.instagram.com, *.twitter.com, *.twimg.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; @@ -232,28 +209,40 @@ "services.sync.engine.addresses.available" = false; "svg.context-properties.content.enabled" = true; }; - - 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}'; + in { + Main = { + id = 0; + isDefault = true; + extensions = commonExtensions; + search = commonSearch; + settings = commonSettings; + userChrome = '' + ${themeMain} + ${themeFont} ${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"; - persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = [ "browser/.mozilla/firefox/default" ]; + 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" ]; }; }; } diff --git a/modules/home/programs/gui/obs/default.nix b/modules/home/programs/gui/obs/default.nix index bb593e4c..950c8bb8 100644 --- a/modules/home/programs/gui/obs/default.nix +++ b/modules/home/programs/gui/obs/default.nix @@ -12,8 +12,6 @@ ]; }; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "data/${removePrefix "${homeDirectory}/" configHome}/obs-studio" ]; + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".config/obs-studio" ]; }; } diff --git a/modules/home/programs/gui/thunderbird/default.nix b/modules/home/programs/gui/thunderbird/default.nix index e7c67571..21c23773 100644 --- a/modules/home/programs/gui/thunderbird/default.nix +++ b/modules/home/programs/gui/thunderbird/default.nix @@ -3,43 +3,62 @@ config = lib.mkIf config.home.desktop.enable { programs.thunderbird = { enable = config.home.desktop.enable; - profiles.default = { - isDefault = true; - settings = { - "general.autoScroll" = true; - "browser.download.promptForDownload" = true; + profiles = { + Main = { + isDefault = true; + userContent = '' + *{scrollbar-width:none !important} + ''; + settings = { + "general.autoScroll" = 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.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; + "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"; - "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; + "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; - "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; + "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; + }; }; }; }; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = [ "browser/.thunderbird/default" ]; + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".thunderbird" ]; }; } diff --git a/modules/home/programs/misc/avtools/default.nix b/modules/home/programs/misc/avtools/default.nix index 31838e31..6f4d9356 100644 --- a/modules/home/programs/misc/avtools/default.nix +++ b/modules/home/programs/misc/avtools/default.nix @@ -1,14 +1,13 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgs, pkgsUnstable, ... }: { config = lib.mkIf config.home.desktop.enable { - home.packages = with pkgs; [ + home.packages = (with pkgs; [ ffmpeg ffmpegthumbnailer playerctl puddletag pulsemixer - spotdl - ]; + ]) ++ (with pkgsUnstable; [ 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 53448024..98f32035 100644 --- a/modules/home/programs/misc/gaming/emulators/default.nix +++ b/modules/home/programs/misc/gaming/emulators/default.nix @@ -1,11 +1,14 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgs, pkgsUnstable, ... }: { - home.packages = with pkgs; lib.mkIf config.home.gaming.enable [ - azahar - cemu - dolphin-emu-beta - duckstation - pcsx2 - ryubing - ]; + config = lib.mkIf config.home.gaming.enable { + home.packages = (with pkgs; [ + cemu + dolphin-emu-beta + duckstation + pcsx2 + ]) ++ (with pkgsUnstable; [ + azahar + ryubing + ]); + }; } diff --git a/modules/home/programs/misc/gaming/launchers/default.nix b/modules/home/programs/misc/gaming/launchers/default.nix index 2cc451d0..9f0a8e44 100644 --- a/modules/home/programs/misc/gaming/launchers/default.nix +++ b/modules/home/programs/misc/gaming/launchers/default.nix @@ -8,22 +8,11 @@ steam steam-run-free ]; - 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"; - } - ]; - }; + persistence."/persist${config.home.homeDirectory}".directories = [ + ".config/heroic" + ".local/share/PrismLauncher" + ".local/share/Steam" + ]; }; nixpkgs.allowUnfreePackages = [ diff --git a/modules/home/programs/misc/general/default.nix b/modules/home/programs/misc/general/default.nix index f8e7530e..6c023524 100644 --- a/modules/home/programs/misc/general/default.nix +++ b/modules/home/programs/misc/general/default.nix @@ -6,10 +6,9 @@ qbittorrent 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" - ]; + persistence."/persist${config.home.homeDirectory}".directories = [ + ".config/qBittorrent" + ".config/vesktop" + ]; }; } diff --git a/modules/home/programs/misc/headless/default.nix b/modules/home/programs/misc/headless/default.nix index e36efce0..43d8e3f0 100644 --- a/modules/home/programs/misc/headless/default.nix +++ b/modules/home/programs/misc/headless/default.nix @@ -2,7 +2,6 @@ { 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 a7b62231..ea3a1c3b 100644 --- a/modules/home/programs/misc/production/default.nix +++ b/modules/home/programs/misc/production/default.nix @@ -8,11 +8,10 @@ blender_4_4 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" - ]; + persistence."/persist${config.home.homeDirectory}".directories = [ + ".config/audacity" + ".config/blender" + ".local/share/krita" + ]; }; } diff --git a/modules/home/programs/misc/school/default.nix b/modules/home/programs/misc/school/default.nix index d43655ec..35452156 100644 --- a/modules/home/programs/misc/school/default.nix +++ b/modules/home/programs/misc/school/default.nix @@ -6,16 +6,13 @@ 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 5fbad56b..6d8f3522 100644 --- a/modules/home/programs/terminal/default.nix +++ b/modules/home/programs/terminal/default.nix @@ -7,15 +7,14 @@ ./eza ./fastfetch ./git - ./gpg ./lazygit ./ncmpcpp ./neovim + ./nh ./nix-index ./ranger - ./ssh + ./tmux ./yt-dlp - ./zellij ./zoxide ./zsh ]; diff --git a/modules/home/programs/terminal/direnv/default.nix b/modules/home/programs/terminal/direnv/default.nix index c0858a93..b71ece6d 100644 --- a/modules/home/programs/terminal/direnv/default.nix +++ b/modules/home/programs/terminal/direnv/default.nix @@ -1,11 +1,7 @@ -{ 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 new file mode 100644 index 00000000..cae0ed27 --- /dev/null +++ b/modules/home/programs/terminal/fastfetch/configs/config.jsonc @@ -0,0 +1,97 @@ +{ + "$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/smallfetch/small.jsonc b/modules/home/programs/terminal/fastfetch/configs/small.jsonc similarity index 100% rename from modules/home/programs/terminal/fastfetch/smallfetch/small.jsonc rename to modules/home/programs/terminal/fastfetch/configs/small.jsonc diff --git a/modules/home/programs/terminal/fastfetch/default.nix b/modules/home/programs/terminal/fastfetch/default.nix index 19f7b068..ecaf8e3b 100644 --- a/modules/home/programs/terminal/fastfetch/default.nix +++ b/modules/home/programs/terminal/fastfetch/default.nix @@ -1,108 +1,8 @@ -{ ... }: +{ pkgs, ... }: { - imports = [ ./smallfetch ]; + programs.fastfetch.enable = true; - programs.fastfetch = { - enable = true; - settings = with builtins; { - logo = { - source = "xenia"; - color = { - "1" = "1;97"; - "2" = "red"; - "3" = "yellow"; - }; - }; + home.packages = with pkgs; [ (writeScriptBin "smallfetch" "fastfetch --config ~/.config/fastfetch/small.jsonc") ]; - 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"; + xdg.configFile."fastfetch".source = ./configs; } diff --git a/modules/home/programs/terminal/fastfetch/smallfetch/default.nix b/modules/home/programs/terminal/fastfetch/smallfetch/default.nix deleted file mode 100644 index fcd5fddd..00000000 --- a/modules/home/programs/terminal/fastfetch/smallfetch/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ 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/gpg/default.nix b/modules/home/programs/terminal/gpg/default.nix deleted file mode 100644 index dfd108be..00000000 --- a/modules/home/programs/terminal/gpg/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ 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 cd0059c1..45a9411d 100644 --- a/modules/home/programs/terminal/lazygit/default.nix +++ b/modules/home/programs/terminal/lazygit/default.nix @@ -1,7 +1,5 @@ -{ config, lib, ... }: +{ config, ... }: { programs.lazygit.enable = true; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" stateHome}/lazygit" ]; + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".local/state/lazygit" ]; } diff --git a/modules/home/programs/terminal/neovim/default.nix b/modules/home/programs/terminal/neovim/default.nix index f07a4f3b..3040b096 100644 --- a/modules/home/programs/terminal/neovim/default.nix +++ b/modules/home/programs/terminal/neovim/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, 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.vars.colors.mid} - hi Pmenu guibg=#${config.vars.colors.mid} + hi Visual guibg=#${config.look.colors.mid} + hi Pmenu guibg=#${config.look.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=${config.xdg.dataHome}/nvim/undo + set undodir=$HOME/.local/share/nvim/undo set undolevels=100 set undoreload=10000 @@ -115,8 +115,6 @@ home = { sessionVariables.MANPAGER = "nvim +Man!"; - persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" dataHome}/nvim/undo" ]; + persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/nvim/undo" ]; }; } diff --git a/modules/home/programs/terminal/nh/default.nix b/modules/home/programs/terminal/nh/default.nix new file mode 100644 index 00000000..52aa9908 --- /dev/null +++ b/modules/home/programs/terminal/nh/default.nix @@ -0,0 +1,7 @@ +{ 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 4cd34016..58f33a55 100644 --- a/modules/home/programs/terminal/nix-index/default.nix +++ b/modules/home/programs/terminal/nix-index/default.nix @@ -1,8 +1,6 @@ -{ config, lib, ... }: +{ config, ... }: { programs.nix-index.enable = true; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" cacheHome}/nix-index" ]; + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".cache/nix-index" ]; } diff --git a/modules/home/programs/terminal/ranger/default.nix b/modules/home/programs/terminal/ranger/default.nix index 0cc9a969..d6d55b5d 100644 --- a/modules/home/programs/terminal/ranger/default.nix +++ b/modules/home/programs/terminal/ranger/default.nix @@ -1,8 +1,8 @@ -{ config, lib, pkgs, pkgsUnstable, ... }: +{ config, pkgsStable, ... }: { programs.ranger = { enable = true; - package = pkgsUnstable.ranger; + package = pkgsStable.ranger; settings = { preview_images = true; preview_images_method = "sixel"; @@ -94,30 +94,33 @@ # Ranger's bookmarks and necessary tools home = { - file = with lib; with config.home; with config.xdg; with config.xdg.userDirs; with config.xdg.userDirs.extraConfig; { - "${removePrefix "${homeDirectory}/" dataHome}/ranger/bookmarks".text = '' + file = { + ".local/share/ranger/bookmarks".text = '' # Local files - 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} + 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 w:/mnt # Remote files - 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 + 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 ''; }; - packages = with pkgs; [ poppler_utils ]; + packages = with pkgsStable; [ + imagemagick + poppler_utils + ]; }; } diff --git a/modules/home/programs/terminal/ssh/default.nix b/modules/home/programs/terminal/ssh/default.nix deleted file mode 100644 index a154ecbe..00000000 --- a/modules/home/programs/terminal/ssh/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ 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 new file mode 100644 index 00000000..338fa76e --- /dev/null +++ b/modules/home/programs/terminal/tmux/default.nix @@ -0,0 +1,24 @@ +{ ... }: +{ + 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 deleted file mode 100644 index 2b0546b6..00000000 --- a/modules/home/programs/terminal/zellij/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ 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 e6d3cb37..ee6e4704 100644 --- a/modules/home/programs/terminal/zoxide/default.nix +++ b/modules/home/programs/terminal/zoxide/default.nix @@ -1,11 +1,9 @@ -{ config, lib, ... }: +{ config, ... }: { programs.zoxide.enable = true; home = { shellAliases.cd = "z"; - persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" dataHome}/zoxide" ]; + persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/zoxide" ]; }; } diff --git a/modules/home/programs/terminal/zsh/default.nix b/modules/home/programs/terminal/zsh/default.nix index db1ee096..b9f9780b 100644 --- a/modules/home/programs/terminal/zsh/default.nix +++ b/modules/home/programs/terminal/zsh/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, pkgs, ... }: { programs.zsh = { enable = true; @@ -16,18 +16,15 @@ }; history = { append = true; - expireDuplicatesFirst = true; ignoreAllDups = true; ignoreSpace = true; path = "$ZDOTDIR/.zsh_history"; }; - initContent = '' + initExtra = '' smallfetch source ${pkgs.zsh-you-should-use}/share/zsh/plugins/you-should-use/you-should-use.plugin.zsh ''; }; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" configHome}/zsh" ]; + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".config/zsh" ]; } diff --git a/modules/home/services/default.nix b/modules/home/services/default.nix index 7a788ba1..8bbdeef3 100644 --- a/modules/home/services/default.nix +++ b/modules/home/services/default.nix @@ -2,6 +2,7 @@ { imports = [ ./easyeffects + ./gpg ./mpd ./playerctl ]; diff --git a/modules/home/services/gpg/default.nix b/modules/home/services/gpg/default.nix new file mode 100644 index 00000000..a6cbd32b --- /dev/null +++ b/modules/home/services/gpg/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + services.gpg-agent = { + enable = true; + enableSshSupport = true; + }; +} diff --git a/modules/home/services/mpd/default.nix b/modules/home/services/mpd/default.nix index e842508a..e862bd2b 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.xdg.userDirs.extraConfig.XDG_NETWORK_DIR}/Midas/Music/NixBops"; + musicDirectory = "${config.home.homeDirectory}/Network/Midas/Music/NixBops"; playlistDirectory = "${config.services.mpd.musicDirectory}/Playlists"; extraConfig = '' audio_output { @@ -18,8 +18,6 @@ mpd-discord-rpc.enable = true; }; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" dataHome}/mpd" ]; + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".local/share/mpd" ]; }; } diff --git a/modules/home/settings/aliases/default.nix b/modules/home/settings/aliases/default.nix index e4d5ff4d..ff62e202 100644 --- a/modules/home/settings/aliases/default.nix +++ b/modules/home/settings/aliases/default.nix @@ -2,10 +2,13 @@ { 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 4d547cc2..b6ff65ef 100644 --- a/modules/home/settings/cursor/default.nix +++ b/modules/home/settings/cursor/default.nix @@ -1,11 +1,10 @@ { 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 69c88c4b..38cda938 100644 --- a/modules/home/settings/dconf/default.nix +++ b/modules/home/settings/dconf/default.nix @@ -8,8 +8,7 @@ uris = [ "qemu:///system" ]; }; }; - home.persistence."${config.xdg.userDirs.extraConfig.XDG_PERSIST_DIR}".directories = - with lib; with config.home; with config.xdg; - [ "state/${removePrefix "${homeDirectory}/" configHome}/dconf" ]; + + home.persistence."/persist${config.home.homeDirectory}".directories = [ ".config/dconf" ]; }; } diff --git a/modules/home/settings/default.nix b/modules/home/settings/default.nix index 59cfe345..ffe0fbb4 100644 --- a/modules/home/settings/default.nix +++ b/modules/home/settings/default.nix @@ -9,9 +9,7 @@ ./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 395aeef2..0ad9bae1 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.vars.fonts.main ]; - monospace = [ config.vars.fonts.mono ]; + sansSerif = [ config.look.fonts.main ]; + monospace = [ config.look.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 e1fd0145..d7cae882 100644 --- a/modules/home/settings/fonts/packages/default.nix +++ b/modules/home/settings/fonts/packages/default.nix @@ -1,14 +1,11 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgsStable, ... }: { - 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 - ]); - }; + 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" ]; }) + ]); } diff --git a/modules/home/settings/gtk/bookmarks/default.nix b/modules/home/settings/gtk/bookmarks/default.nix index 904aabfd..57d2d2c7 100644 --- a/modules/home/settings/gtk/bookmarks/default.nix +++ b/modules/home/settings/gtk/bookmarks/default.nix @@ -5,8 +5,7 @@ "file://${config.home.homeDirectory}/Downloads" "file://${config.home.homeDirectory}/Documents" "file://${config.home.homeDirectory}/Videos" - "file://${config.home.homeDirectory}/Photos" - "file://${config.home.homeDirectory}/Photos/Screenshots" - "file:///network" + "file://${config.home.homeDirectory}/Pictures/Screenshots" + "file:///etc/nixos" ]; } diff --git a/modules/home/settings/gtk/theme/default.nix b/modules/home/settings/gtk/theme/default.nix index 9b7f6719..34918d00 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.vars.fonts.main; + name = config.look.fonts.main; size = 11; }; theme = { @@ -21,7 +21,7 @@ iconTheme = { name = "Papirus-Dark"; package = papirus-icon-theme.override { - color = config.vars.colors.folder; + color = config.look.colors.folder; }; }; }; diff --git a/modules/home/settings/impermanence/default.nix b/modules/home/settings/impermanence/default.nix index 99ef68af..39181199 100644 --- a/modules/home/settings/impermanence/default.nix +++ b/modules/home/settings/impermanence/default.nix @@ -1,24 +1,22 @@ { config, lib, impermanence, ... }: { - imports = [ impermanence.homeManagerModules.default ]; + imports = [ impermanence.homeManagerModules.impermanence ]; - 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" + home.persistence."/persist${config.home.homeDirectory}" = { + directories = [ + "Keepers" + "Projects" + + ".ssh" + ".gnupg" ] ++ (if config.home.desktop.enable then [ - "dirs/${strip documents}" - "dirs/${strip pictures}" - "dirs/${strip videos}" + "Documents" + "Photos" + "Videos" + "Games" - "state/${strip config.xdg.stateHome}/wireplumber" + ".local/state/wireplumber" ] else []); + allowOther = false; }; } diff --git a/modules/home/settings/nix/channels/default.nix b/modules/home/settings/nix/channels/default.nix index 0273e22d..499e5afd 100644 --- a/modules/home/settings/nix/channels/default.nix +++ b/modules/home/settings/nix/channels/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, stable, unstable, ... }: +{ config, lib, 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 627937f5..21ba02ba 100644 --- a/modules/home/settings/nix/default.nix +++ b/modules/home/settings/nix/default.nix @@ -6,7 +6,7 @@ ]; nix = { - package = lib.mkForce pkgs.nix; + package = lib.mkForce pkgs.lix; 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 41d21c96..8c0a288a 100644 --- a/modules/home/settings/nix/unfree/default.nix +++ b/modules/home/settings/nix/unfree/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: -{ - options.nixpkgs.allowUnfreePackages = with lib; mkOption { +with lib; { + options.nixpkgs.allowUnfreePackages = mkOption { type = types.listOf types.str; default = []; }; diff --git a/modules/home/settings/nixgl/default.nix b/modules/home/settings/nixgl/default.nix deleted file mode 100644 index 539ad99f..00000000 --- a/modules/home/settings/nixgl/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ 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 b5fd1884..8c32d581 100644 --- a/modules/home/settings/qt/default.nix +++ b/modules/home/settings/qt/default.nix @@ -2,7 +2,6 @@ { qt = { enable = config.home.desktop.enable; - platformTheme.name = "gtk"; - style.name = "gtk2"; + platformTheme.name = "gtk3"; }; } diff --git a/modules/home/settings/xdg/default.nix b/modules/home/settings/xdg/default.nix index daa8a344..25fda81c 100644 --- a/modules/home/settings/xdg/default.nix +++ b/modules/home/settings/xdg/default.nix @@ -1,8 +1,9 @@ -{ config, ... }: +{ ... }: { - imports = [ ./dirs ]; - - xdg.enable = config.home.desktop.enable; + imports = [ + ./defaults + ./folders + ]; home.preferXdgDirectories = true; } diff --git a/modules/home/settings/xdg/defaults/default.nix b/modules/home/settings/xdg/defaults/default.nix new file mode 100644 index 00000000..b8ba593b --- /dev/null +++ b/modules/home/settings/xdg/defaults/default.nix @@ -0,0 +1,11 @@ +{ ... }: +{ + 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 deleted file mode 100644 index 5473ab0a..00000000 --- a/modules/home/settings/xdg/dirs/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ 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 new file mode 100644 index 00000000..470cd693 --- /dev/null +++ b/modules/home/settings/xdg/folders/default.nix @@ -0,0 +1,13 @@ +{ 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/settings/user/default.nix b/modules/home/user/default.nix similarity index 100% rename from modules/home/settings/user/default.nix rename to modules/home/user/default.nix diff --git a/modules/home/variables/border/default.nix b/modules/home/variables/border/default.nix deleted file mode 100644 index 938c98b5..00000000 --- a/modules/home/variables/border/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - vars.border = rec { - int = 3; - string = toString int; - }; -} diff --git a/modules/home/variables/default.nix b/modules/home/variables/default.nix index 675dee94..2a4872ac 100644 --- a/modules/home/variables/default.nix +++ b/modules/home/variables/default.nix @@ -1,14 +1,8 @@ -{ lib, ... }: +{ ... }: { imports = [ - ./border - ./colors ./displays - ./fonts + ./look ./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 44f7e4eb..8d1fc828 100644 --- a/modules/home/variables/displays/default.nix +++ b/modules/home/variables/displays/default.nix @@ -1,12 +1,18 @@ -{ ... }: +{ config, lib, ... }: { - vars.displays = { - tower1 = "Microstep MSI G24C 0000000000001"; - tower2 = "Dell Inc. DELL P2214H KW14V4965YKS"; - tower3 = "Eizo Nanao Corporation CG223W 23252050"; - tower4 = "Sony SONY TV 0x01010101"; + options.displays = lib.mkOption { + type = lib.types.attrs; + }; - intuos1 = "Wacom Tech Cintiq W1310 MIRACULIX"; - intuos2 = "BNQ BenQ GW2270 6CH00781019"; + config.displays = { + tower1 = "Microstep MSI G24C 0000000000001"; + tower2 = "BNQ BenQ GW2270 6CH00781019"; + tower3 = "Eizo Nanao Corporation CG223W 23252050"; + tower4 = "Samsung Electric Company SAMSUNG Unknown"; + + jupiter = "Valve Corporation ANX7530 U 0x00000001"; + + estradiol1 = "Dell Inc. DELL P2214H KW14V4965YKS"; + estradiol2 = "HannStar Display Corp iP192A 051AW1WY03797"; }; } diff --git a/modules/home/variables/fonts/default.nix b/modules/home/variables/fonts/default.nix deleted file mode 100644 index a9a26c8b..00000000 --- a/modules/home/variables/fonts/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - 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 new file mode 100644 index 00000000..8ffa16e4 --- /dev/null +++ b/modules/home/variables/look/border/default.nix @@ -0,0 +1,11 @@ +{ 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/colors/default.nix b/modules/home/variables/look/colors/default.nix similarity index 71% rename from modules/home/variables/colors/default.nix rename to modules/home/variables/look/colors/default.nix index b15c1a34..e75d1e6a 100644 --- a/modules/home/variables/colors/default.nix +++ b/modules/home/variables/look/colors/default.nix @@ -1,6 +1,10 @@ -{ ... }: +{ config, lib, ... }: { - vars.colors = { + options.look.colors = lib.mkOption { + type = lib.types.attrs; + }; + + config.look.colors = { prime = "3823C4"; #3823C4 accent = "1B1F59"; #1B1F59 split = "555B9E"; #555B9E diff --git a/modules/home/variables/look/default.nix b/modules/home/variables/look/default.nix new file mode 100644 index 00000000..a5930b9c --- /dev/null +++ b/modules/home/variables/look/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + imports = [ + ./border + ./colors + ./fonts + ]; +} diff --git a/modules/home/variables/look/fonts/default.nix b/modules/home/variables/look/fonts/default.nix new file mode 100644 index 00000000..b8cc234c --- /dev/null +++ b/modules/home/variables/look/fonts/default.nix @@ -0,0 +1,11 @@ +{ 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 80875cb0..ead54949 100644 --- a/modules/home/variables/workspaces/default.nix +++ b/modules/home/variables/workspaces/default.nix @@ -1,6 +1,10 @@ -{ ... }: +{ config, lib, ... }: { - vars.ws = { + options.ws = lib.mkOption { + type = lib.types.attrs; + }; + + config.ws = { w0 = "0"; w1 = "1"; w2 = "2"; diff --git a/modules/home/wms/programs/default.nix b/modules/home/wms/programs/default.nix index 924e4a0b..4828dc84 100644 --- a/modules/home/wms/programs/default.nix +++ b/modules/home/wms/programs/default.nix @@ -4,11 +4,9 @@ ./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 235b9aa9..d592d646 100644 --- a/modules/home/wms/programs/kanshi/default.nix +++ b/modules/home/wms/programs/kanshi/default.nix @@ -2,91 +2,65 @@ { services.kanshi = { enable = config.home.desktop.enable; - settings = with config.vars.displays; [ - # Outputs + settings = [ { output = { - criteria = tower1; - adaptiveSync = true; + criteria = config.displays.tower1; mode = "1920x1080@143.979996Hz"; }; } { output = { - criteria = tower3; - mode = "1680x1050@59.883"; - transform = "90"; + criteria = config.displays.jupiter; + mode = "800x1280@59.99900"; + transform = "270"; + scale = 1.15; }; } - - # Profiles { profile = { - name = "tower-tv"; + name = "primary"; outputs = [ { - criteria = tower1; + criteria = config.displays.tower1; position = "3840,405"; - status = "enable"; } { - criteria = tower2; + criteria = config.displays.tower2; position = "1920,405"; - status = "enable"; } { - criteria = tower3; + criteria = config.displays.tower3; position = "5760,0"; - status = "enable"; + transform = "90"; } { - criteria = tower4; + criteria = config.displays.tower4; position = "0,405"; - status = "enable"; } ]; }; } { profile = { - name = "tower"; + name = "estradiol"; outputs = [ { - 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; + criteria = config.displays.estradiol1; position = "0,0"; } + { + criteria = config.displays.estradiol2; + position = "1920,0"; + scale = 0.85; + } + { + criteria = "eDP-1"; + status = "disable"; + } ]; }; } - { profile = { name = "docked"; @@ -102,22 +76,6 @@ ]; }; } - - { - 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 1e689e1e..065026c7 100644 --- a/modules/home/wms/programs/mako/default.nix +++ b/modules/home/wms/programs/mako/default.nix @@ -2,26 +2,22 @@ { services.mako = { enable = config.home.desktop.enable; - 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; - }; + 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 + ''; }; } diff --git a/modules/home/wms/programs/portals/default.nix b/modules/home/wms/programs/portals/default.nix deleted file mode 100644 index b54c9d9f..00000000 --- a/modules/home/wms/programs/portals/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ 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 bcdaddf5..a32f7076 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.vars.fonts.main} 14"; + font = "${config.look.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.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}"; + 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}"; selected-normal-foreground = mkLiteral "#FFFFFF"; - 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"; + 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"; }; "#window" = { background-color = mkLiteral "@background"; width = 500; - border = mkLiteral "${config.vars.border.string}"; + border = mkLiteral "${config.look.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 cfc82d5b..95efb373 100644 --- a/modules/home/wms/programs/rofi/scripts/default.nix +++ b/modules/home/wms/programs/rofi/scripts/default.nix @@ -2,26 +2,18 @@ { 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 ca361fd9..33b18cfa 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.vars.colors.prime}FF"; - wrong = "#${config.vars.colors.split}FF"; - verifying = "#${config.vars.colors.accent}FF"; + default = "#${config.look.colors.prime}FF"; + wrong = "#${config.look.colors.split}FF"; + verifying = "#${config.look.colors.accent}FF"; blank = "#00000000"; clear = "#FFFFFF22"; text = "#FFFFFFFF"; @@ -12,8 +12,8 @@ in { package = pkgs.swaylock-effects; settings = { clock = true; - image = ".wallpapers/lock.png"; - font = config.vars.fonts.main; + image = builtins.toString ./lock.png; + font = config.look.fonts.main; font-size = 30; timestr = "%I:%M%p"; datestr = "%a %b %d %Y"; diff --git a/modules/home/wms/programs/wallpapers/photos/lock.png b/modules/home/wms/programs/swaylock/lock.png similarity index 100% rename from modules/home/wms/programs/wallpapers/photos/lock.png rename to modules/home/wms/programs/swaylock/lock.png diff --git a/modules/home/wms/programs/wallpapers/default.nix b/modules/home/wms/programs/wallpapers/default.nix deleted file mode 100644 index 9077d586..00000000 --- a/modules/home/wms/programs/wallpapers/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, ... }: -{ - imports = [ ./wpaperd ]; - - config = lib.mkIf config.home.desktop.enable { - home.file.".wallpapers".source = ./photos; - }; -} diff --git a/modules/home/wms/programs/wallpapers/wpaperd/default.nix b/modules/home/wms/programs/wallpapers/wpaperd/default.nix deleted file mode 100644 index 98892d90..00000000 --- a/modules/home/wms/programs/wallpapers/wpaperd/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ 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 1ddb8963..da9d4eff 100644 --- a/modules/home/wms/programs/waybar/default.nix +++ b/modules/home/wms/programs/waybar/default.nix @@ -1,244 +1,222 @@ { config, lib, pkgs, ... }: { programs.waybar = let - commonModules = { - "sway/workspaces" = { - format = "{name}"; - enable-bar-scroll = true; - disable-scroll-wraparound = true; - numeric-first = true; - warp-on-scroll = false; - }; + workspaceModule = { + format = "{name}"; + enable-bar-scroll = true; + disable-scroll-wraparound = true; + numeric-first = true; + warp-on-scroll = false; + }; - "sway/window" = { - icon = true; - icon-size = 15; - all-outputs = true; - tooltip = false; + windowModule = { + icon = true; + icon-size = 15; + all-outputs = true; + tooltip = false; + rewrite = { + "(.*) — LibreWolf" = " $1"; + "LibreWolf" = " Firefox"; + "(.*) - LibreWolf — Firefox" = "󰗃 $1"; }; + }; - "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}" + pulseModule = { + format = "{icon} {volume}%"; + format-bluetooth = "{icon} {volume}%"; + format-muted = " muted"; + format-icons = { + headphone = "󰋋 "; + headset = "󰋋 "; + default = [ + " " + " " ]; - interval = 2; - max-length = 30; }; + 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" ]; + }; - "custom/notifs" = with pkgs; { - exec = pkgs.writeScript "notificationScript.sh" '' - #!/bin/sh + # Monitoring + cpuModule = { + format = " {usage}%"; + interval = 3; + }; - SED="${gnused}/bin/sed" - MAKOCTL="${mako}/bin/makoctl" + ramModule = { + format = " {used}G"; + tooltip = false; + interval = 3; + }; - # Extract the second line after "default" - mode=$(echo "$($MAKOCTL mode)" | $SED -n '/default/{n;p}') + 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}') - # Print the notification status with the tooltip - if [[ "$mode" == "do-not-disturb" ]]; then - printf '{"text":"󱆥 Off","class":"disabled","tooltip":"Notifications Disabled."}' + 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 - printf '{"text":" On","tooltip":"Notifications Enabled."}'; + # Convert MB to GiB + vram_usage_gib=$(bc <<< "scale=2; $vram_usage_mb / 1024") + vram_usage_display="$(echo $vram_usage_gib)G" 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 = [ - "" - "" - "" - "" - "" - ]; - }; - - "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"; + + # 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; }; + format = "{icon} {capacity}%"; + format-icons = [ + "" + "" + "" + "" + "" + ]; }; in { enable = config.home.desktop.enable; - systemd.enable = true; settings = { - displayPrimary = commonModules // { + displayPrimary = { name = "bar1"; position = "top"; layer = "top"; output = [ - "!${config.vars.displays.tower2}" - "!${config.vars.displays.tower3}" - "!${config.vars.displays.intuos2}" + "!${config.displays.tower2}" + "!${config.displays.tower3}" + "!${config.displays.estradiol2}" "*" ]; modules-left = [ @@ -247,10 +225,9 @@ ]; modules-right = [ "pulseaudio" - "mpris" + "mpd" "custom/notifs" - "idle_inhibitor" - "custom/weather" + "custom/weather2" "cpu" "memory" "custom/vram" @@ -264,16 +241,33 @@ "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 = commonModules // { + displaySecondary = { name = "bar2"; position = "top"; layer = "top"; output = [ - config.vars.displays.tower2 - config.vars.displays.tower3 - config.vars.displays.intuos2 + config.displays.tower2 + config.displays.tower3 + config.displays.estradiol2 ]; modules-left = [ "sway/workspaces" @@ -286,6 +280,15 @@ "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; }; }; @@ -294,16 +297,29 @@ border: 0; border-radius: 0; min-height: 0; + font-family: ${config.look.fonts.main}, ${config.look.fonts.mono}; font-size: 15.5px; - color: #${config.vars.colors.text}; + 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; } - - #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; @@ -311,30 +327,70 @@ min-width: 20px; } #workspaces button.visible, #workspaces button.active { - border-bottom: 3px solid #${config.vars.colors.prime}; - background: #${config.vars.colors.mid}; + border-bottom: 3px solid #${config.look.colors.prime}; + background: #${config.look.colors.mid}; } #workspaces button.urgent { - border-bottom: 3px solid #${config.vars.colors.urgent}; + border-bottom: 3px solid #${config.look.colors.urgent}; } #workspaces button:hover { box-shadow: none; - background: #${config.vars.colors.light}; + 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; } - - #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 f0570187..ddb9303e 100644 --- a/modules/home/wms/sway/autostart/default.nix +++ b/modules/home/wms/sway/autostart/default.nix @@ -1,17 +1,24 @@ { ... }: { - 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"; } + wayland.windowManager.sway.config = { + bars = [{ command = "waybar"; }]; - # Daemons and tray - { command = "kanshictl reload"; always = true; } - { command = "wayland-pipewire-idle-inhibit"; } + startup = [ + # Scratchpads + { command = "foot -a btop -T Gotop btop"; } + { command = "foot -a music -T Music ncmpcpp"; } + { command = "foot -a sound -T Sound pulsemixer"; } - # Foreground - { command = "thunderbird"; } - { command = "vesktop"; } - ]; + # Daemons and tray + { + command = "kanshictl reload"; + always = true; + } + { command = "wayland-pipewire-idle-inhibit"; } + + # Foreground + { command = "thunderbird"; } + { command = "vesktop"; } + ]; + }; } diff --git a/modules/home/wms/sway/extra/default.nix b/modules/home/wms/sway/extra/default.nix index 2a879219..9a0ae172 100644 --- a/modules/home/wms/sway/extra/default.nix +++ b/modules/home/wms/sway/extra/default.nix @@ -2,5 +2,6 @@ { 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 ffd9e6e2..f8bd83b4 100644 --- a/modules/home/wms/sway/hotkeys/default.nix +++ b/modules/home/wms/sway/hotkeys/default.nix @@ -8,11 +8,12 @@ in { # Hotkeys modifier = "${primeMod}"; - keybindings = with config.vars.ws; { + keybindings = { ## Launchers - # Browser - "${primeMod}+F1" = ''exec librewolf | notify-send "Browser"''; + # 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"''; # Virtual machines "${primeMod}+F4" = ''exec virt-manager | notify-send "Virtual Machines"''; @@ -78,50 +79,50 @@ "${primeMod}+Shift+r" = ''reload''; # Switch to workspaces - "${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}''; + "${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}''; # Switch to alternate workspaces - "${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}''; + "${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}''; # Move window to and focus workspace - "${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}''; + "${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}''; # Move window to and focus alternate workspace - "${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}''; + "${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}''; # Change focused window "${primeMod}+h" = ''focus left''; @@ -147,7 +148,6 @@ # 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 7b27d603..512ce6de 100644 --- a/modules/home/wms/sway/inputs/default.nix +++ b/modules/home/wms/sway/inputs/default.nix @@ -1,12 +1,13 @@ -{ 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"; - "type:touch".map_to_output = ''"${config.vars.displays.intuos1}"''; - - # Wildcard, affects everything + "9610:4103:SINOWEALTH_Game_Mouse" = { + pointer_accel = "-0.9"; + }; + "9639:64097:Compx_2.4G_Receiver_Mouse" = { + pointer_accel = "-0.82"; + }; "*" = { accel_profile = "flat"; dwt = "disabled"; diff --git a/modules/home/wms/sway/outputs/default.nix b/modules/home/wms/sway/outputs/default.nix index cd954b47..a287851f 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 = with config.vars.ws; with config.vars.displays; let + workspaceOutputAssign = let workspaces1 = [ - "0:${w0}" - "1:${w1}" - "2:${w2}" - "3:${w3}" - "11:${w1a}" - "22:${w2a}" - "33:${w3a}" + "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}" ]; workspaces2 = [ - "4:${w4}" - "5:${w5}" - "6:${w6}" - "44:${w4a}" - "55:${w5a}" + "4:${config.ws.w4}" + "5:${config.ws.w5}" + "6:${config.ws.w6}" + "44:${config.ws.w4a}" + "55:${config.ws.w5a}" ]; workspaces3 = [ - "7:${w7}" - "8:${w8}" - "9:${w9}" - "77:${w7a}" - "88:${w8a}" + "7:${config.ws.w7}" + "8:${config.ws.w8}" + "9:${config.ws.w9}" + "77:${config.ws.w7a}" + "88:${config.ws.w8a}" ]; workspaces4 = [ - "66:${w6a}" - "99:${w9a}" + "66:${config.ws.w6a}" + "99:${config.ws.w9a}" ]; assign = output: workspaces: map (workspace: { inherit workspace; inherit output; }) workspaces; in - (assign "${tower1}" workspaces1) ++ - (assign "${tower2}" workspaces2) ++ - (assign "${tower3}" workspaces3) ++ - (assign "${tower4}" workspaces4) ++ + (assign "${config.displays.tower1}" workspaces1) ++ + (assign "${config.displays.tower2}" workspaces2) ++ + (assign "${config.displays.tower3}" workspaces3) ++ + (assign "${config.displays.tower3}" workspaces4) ++ - (assign "${intuos2}" workspaces1) ++ - (assign "${intuos2}" workspaces2) ++ - (assign "${intuos1}" workspaces3) ++ - (assign "${intuos1}" workspaces4); + (assign "${config.displays.estradiol1}" workspaces1) ++ + (assign "${config.displays.estradiol1}" workspaces2) ++ + (assign "${config.displays.estradiol1}" workspaces4) ++ + (assign "${config.displays.estradiol2}" workspaces3); }; } diff --git a/modules/home/wms/sway/rules/default.nix b/modules/home/wms/sway/rules/default.nix index 8d213281..392dbe0f 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 = with config.vars.ws; { - defaultWorkspace = "workspace 1:${w1}"; + wayland.windowManager.sway.config = { + defaultWorkspace = "workspace 1:${config.ws.w1}"; focus = { mouseWarping = "container"; @@ -34,7 +34,7 @@ # Give apps that don't have them borders { criteria = { con_mark = "giveborder"; }; - command = ''border pixel ${config.vars.border.string}''; + command = ''border pixel ${config.look.border.string}''; } { criteria = { class = "steam"; }; @@ -55,23 +55,23 @@ ]; }; assigns = { - # Browser - "1:${w1}" = [{ app_id = "librewolf"; }]; + # Browsers + "1:${config.ws.w1}" = [{ app_id = "MainBrowser"; }]; + "11:${config.ws.w1a}" = [{ app_id = "AltBrowser"; }]; # Communication - "7:${w7}" = [ + "7:${config.ws.w7}" = [ { app_id = "teams-for-linux"; } { app_id = "vesktop"; } - { class = "vesktop"; } ]; - "9:${w9}" = [{ app_id = "thunderbird"; }]; + "9:${config.ws.w9}" = [{ app_id = "thunderbird"; }]; # Etc - "2:${w2}" = [ + "2:${config.ws.w2}" = [ { class = "steam"; } { app_id = "heroic"; } ]; - "44:${w4a}" = [{ app_id = "com.obsproject.Studio"; }]; + "44:${config.ws.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 6c042bdb..a5eb5980 100644 --- a/modules/home/wms/sway/theme/default.nix +++ b/modules/home/wms/sway/theme/default.nix @@ -3,49 +3,47 @@ wayland.windowManager.sway.config = { colors = { focused = { - border = "#${config.vars.colors.prime}"; - background = "#${config.vars.colors.prime}"; + border = "#${config.look.colors.prime}"; + background = "#${config.look.colors.prime}"; text = "#FFFFFF"; - indicator = "#${config.vars.colors.actSplit}"; - childBorder = "#${config.vars.colors.prime}"; + indicator = "#${config.look.colors.actSplit}"; + childBorder = "#${config.look.colors.prime}"; }; focusedInactive = { - 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}"; + 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}"; }; unfocused = { - 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}"; + 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}"; }; 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}"; + 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}"; }; }; - bars = [ ]; - fonts = { - names = [ config.vars.fonts.main ]; + names = [ config.look.fonts.main ]; size = 10.5; }; window = { - border = config.vars.border.int; + border = config.look.border.int; hideEdgeBorders = "smart"; }; floating = { - border = config.vars.border.int; + border = config.look.border.int; titlebar = false; }; @@ -53,5 +51,14 @@ 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/home/wms/programs/wallpapers/photos/1.png b/modules/home/wms/sway/theme/wallpapers/1.png similarity index 100% rename from modules/home/wms/programs/wallpapers/photos/1.png rename to modules/home/wms/sway/theme/wallpapers/1.png diff --git a/modules/home/wms/programs/wallpapers/photos/2.png b/modules/home/wms/sway/theme/wallpapers/2.png similarity index 100% rename from modules/home/wms/programs/wallpapers/photos/2.png rename to modules/home/wms/sway/theme/wallpapers/2.png diff --git a/modules/home/wms/programs/wallpapers/photos/3.png b/modules/home/wms/sway/theme/wallpapers/3.png similarity index 100% rename from modules/home/wms/programs/wallpapers/photos/3.png rename to modules/home/wms/sway/theme/wallpapers/3.png diff --git a/modules/system/default.nix b/modules/system/default.nix index 6040e075..4d9fa244 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -1,4 +1,4 @@ -{ config, name, ... }: +{ lib, ... }: { imports = [ ./devices @@ -7,8 +7,10 @@ ./services ./settings ./users - ./variables ]; - networking.hostName = name; + options.system = with lib; { + desktop.enable = mkEnableOption "Desktop apps and services"; + server.enable = mkEnableOption "Server apps and services"; + }; } diff --git a/modules/system/devices/audio/default.nix b/modules/system/devices/audio/default.nix index 4d66e614..08950259 100644 --- a/modules/system/devices/audio/default.nix +++ b/modules/system/devices/audio/default.nix @@ -1,13 +1,13 @@ { config, ... }: { services.pipewire = { - enable = builtins.elem "pc" config.system.nixos.tags; + enable = config.system.desktop.enable; + wireplumber.extraConfig."wireplumber.settings"."bluetooth.autoswitch-to-headset-profile" = false; 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 e735bf31..b6885d45 100644 --- a/modules/system/devices/bluetooth/default.nix +++ b/modules/system/devices/bluetooth/default.nix @@ -1,6 +1,6 @@ -{ config, lib, ... }: +{ config, lib, pkgs, ... }: { - config = lib.mkIf (builtins.elem "pc" config.system.nixos.tags) { + config = lib.mkIf config.system.desktop.enable { hardware.bluetooth = { enable = true; settings = { @@ -8,7 +8,9 @@ Policy.AutoEnable = "true"; }; }; - - environment.persistence."/persist".directories = [ "/var/lib/bluetooth" ]; + environment = { + systemPackages = with pkgs; [ bluetui ]; + persistence."/persist".directories = [ "/var/lib/bluetooth" ]; + }; }; } diff --git a/modules/system/devices/boot/default.nix b/modules/system/devices/boot/default.nix index 9a139f45..15adb99c 100644 --- a/modules/system/devices/boot/default.nix +++ b/modules/system/devices/boot/default.nix @@ -1,16 +1,19 @@ -{ lib, pkgs, ... }: +{ ... }: { imports = [ + ./grub ./lanzaboote - ./limine ./plymouth ./services + ./systemd ]; boot = { + kernelParams = [ "nouveau.config=NvGspRm=1" ]; blacklistedKernelModules = [ "pcspkr" ]; - kernel.sysctl."vm.max_map_count" = 2147483642; - kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; - loader.systemd-boot.editor = false; + kernel.sysctl = { + "vm.max_map_count" = 2147483642; + "kernel.sysrq" = 1; + }; }; } diff --git a/modules/system/devices/boot/grub/default.nix b/modules/system/devices/boot/grub/default.nix new file mode 100644 index 00000000..99105e9c --- /dev/null +++ b/modules/system/devices/boot/grub/default.nix @@ -0,0 +1,8 @@ +{ 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 796a3a40..b3eb4940 100644 --- a/modules/system/devices/boot/lanzaboote/default.nix +++ b/modules/system/devices/boot/lanzaboote/default.nix @@ -1,5 +1,7 @@ -{ config, pkgs, ... }: +{ config, pkgs, lanzaboote, ... }: { + 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 deleted file mode 100644 index 20024f19..00000000 --- a/modules/system/devices/boot/limine/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ 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 1586477a..96773c96 100644 --- a/modules/system/devices/boot/plymouth/default.nix +++ b/modules/system/devices/boot/plymouth/default.nix @@ -1,14 +1,16 @@ { config, lib, ... }: { config.boot = lib.mkIf config.boot.plymouth.enable { - consoleLogLevel = 0; + loader.timeout = lib.mkForce 0; + consoleLogLevel = lib.mkForce 0; initrd.verbose = false; kernelParams = [ - "loglevel=3" "quiet" + "splash" + "boot.shell_on_fail" + "loglevel=3" "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 632066ed..44d2a1b7 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, name, ... }: +{ config, ... }: { 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/${name}/root /mnt + mount -t btrfs /dev/${config.networking.hostName}/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 new file mode 100644 index 00000000..bc13baff --- /dev/null +++ b/modules/system/devices/boot/systemd/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + boot.loader.systemd-boot = { + editor = false; + graceful = true; + }; +} diff --git a/modules/system/devices/default.nix b/modules/system/devices/default.nix index a99c9a26..0ccbcf4d 100644 --- a/modules/system/devices/default.nix +++ b/modules/system/devices/default.nix @@ -7,7 +7,6 @@ ./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 20d77e04..8a6e5943 100644 --- a/modules/system/devices/disks/filesystems/default.nix +++ b/modules/system/devices/disks/filesystems/default.nix @@ -2,22 +2,17 @@ { boot = { supportedFilesystems = { - ntfs = builtins.elem "pc" config.system.nixos.tags; - zfs = builtins.elem "server" config.system.nixos.tags; + ntfs = config.system.desktop.enable; + zfs = config.system.server.enable; }; swraid = { - enable = builtins.elem "server" config.system.nixos.tags; + enable = config.system.server.enable; mdadmConf = "MAILADDR contact@nixfox.ca"; }; }; - services = { - btrfs.autoScrub = { - enable = (config.fileSystems."/".fsType == "btrfs"); - interval = "weekly"; - }; + services = lib.mkIf config.environment.persistence."/persist".enable { + btrfs.autoScrub.enable = true; 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 8f6d1794..9c555679 100644 --- a/modules/system/devices/disks/impermanence/default.nix +++ b/modules/system/devices/disks/impermanence/default.nix @@ -1,17 +1,12 @@ -{ ... }: +{ impermanence, ... }: { + imports = [ impermanence.nixosModules.impermanence ]; + environment.persistence."/persist" = { hideMounts = true; directories = [ "/storage" - { - directory = "/var/lib/nixos"; - mode = "0700"; - } - { - directory = "/var/lib/nixos-containers"; - mode = "0700"; - } + "/var/lib/nixos" ]; files = [ "/etc/machine-id" ]; }; diff --git a/modules/system/devices/networking/default.nix b/modules/system/devices/networking/default.nix index 6046a291..8e6944f9 100644 --- a/modules/system/devices/networking/default.nix +++ b/modules/system/devices/networking/default.nix @@ -1,9 +1,6 @@ { config, ... }: { imports = [ - ./hosts - ./mounts - ./mycelium ./nameservers ./wireless ]; @@ -19,9 +16,4 @@ 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 deleted file mode 100644 index c2f38678..00000000 --- a/modules/system/devices/networking/hosts/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ 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 deleted file mode 100644 index b8e7913a..00000000 --- a/modules/system/devices/networking/mounts/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ 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 deleted file mode 100644 index 72f637f8..00000000 --- a/modules/system/devices/networking/mycelium/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ ... }: -{ - 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 eab13bb7..2bddfeef 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 = true; + enable = config.system.desktop.enable; userControlled.enable = true; }; } diff --git a/modules/system/devices/printing/default.nix b/modules/system/devices/printing/default.nix index a57dbaff..8ea5eed7 100644 --- a/modules/system/devices/printing/default.nix +++ b/modules/system/devices/printing/default.nix @@ -2,7 +2,7 @@ { services = { printing = { - enable = builtins.elem "pc" config.system.nixos.tags; + enable = config.system.desktop.enable; drivers = with pkgs; [ hplip ]; }; avahi = { diff --git a/modules/system/devices/tlp/default.nix b/modules/system/devices/tlp/default.nix deleted file mode 100644 index 694db2be..00000000 --- a/modules/system/devices/tlp/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ 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 728dba1e..37191c01 100644 --- a/modules/system/devices/udev/default.nix +++ b/modules/system/devices/udev/default.nix @@ -1,7 +1,6 @@ -{ pkgs, ... }: +{ config, lib, pkgs, ... }: { - services.udev.packages = with pkgs; [ - android-udev-rules + services.udev.packages = with pkgs; lib.mkIf config.system.desktop.enable [ game-devices-udev-rules ]; } diff --git a/modules/system/devices/video/amd/default.nix b/modules/system/devices/video/amd/default.nix deleted file mode 100644 index 8d349fec..00000000 --- a/modules/system/devices/video/amd/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ ... }: -{ - 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 d4d981ae..de825e6f 100644 --- a/modules/system/devices/video/default.nix +++ b/modules/system/devices/video/default.nix @@ -1,12 +1,9 @@ { config, pkgs, ... }: { - imports = [ - ./amd - ./nvidia - ]; + imports = [ ./nvidia ]; hardware.graphics = { - enable = builtins.elem "pc" config.system.nixos.tags; + enable = config.system.desktop.enable; 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 ebc7cd42..f9d10a1c 100644 --- a/modules/system/devices/video/nvidia/default.nix +++ b/modules/system/devices/video/nvidia/default.nix @@ -1,23 +1,20 @@ { config, lib, ... }: { - boot.kernelParams = [ - "nouveau.config=NvGspRm=1" # Use high power mode for Nouveau - "nvidia_drm.fbdev=1" # Fix framebuffer - ]; + options.system.nvidia.enable = lib.mkEnableOption "Nvidia graphic drivers"; - 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; - }; + config = lib.mkIf config.system.nvidia.enable { + hardware.nvidia = { + modesetting.enable = true; + nvidiaSettings = false; + open = true; + }; - nixpkgs = { - allowUnfreePackages = [ "nvidia-x11" ]; - config.nvidia.acceptLicense = true; - }; + boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; # Framebuffer fixes TTY access - specialisation = lib.mkIf (lib.elem "nvidia" config.services.xserver.videoDrivers) { - nouveau.configuration.config.services.xserver.videoDrivers = lib.mkForce [ "nouveau" ]; + services.xserver.videoDrivers = [ "nvidia" ]; + + nixpkgs.allowUnfreePackages = [ "nvidia-x11" ]; + + specialisation.nouveau.configuration.config.system.nvidia.enable = lib.mkForce false; }; } diff --git a/modules/system/programs/desktops/default.nix b/modules/system/programs/desktops/default.nix index 39b1ab5c..d693bd1b 100644 --- a/modules/system/programs/desktops/default.nix +++ b/modules/system/programs/desktops/default.nix @@ -1,7 +1,9 @@ { config, lib, ... }: { - config = lib.mkIf (builtins.elem "pc" config.system.nixos.tags) { + config = lib.mkIf config.system.desktop.enable { 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 44949786..e9a4ae97 100644 --- a/modules/system/programs/gaming/default.nix +++ b/modules/system/programs/gaming/default.nix @@ -1,14 +1,7 @@ { config, ... }: { programs.gamemode = { - 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; - }; - }; + enable = config.system.desktop.enable; + settings.general.renice = 10; }; } diff --git a/modules/system/programs/home-manager/default.nix b/modules/system/programs/home-manager/default.nix index b72752ef..d7e2ce31 100644 --- a/modules/system/programs/home-manager/default.nix +++ b/modules/system/programs/home-manager/default.nix @@ -1,5 +1,7 @@ -{ stable, unstable, blender, impermanence, nur, ... }: +{ hm, 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 d5dac7fb..604943ab 100644 --- a/modules/system/programs/udevil/default.nix +++ b/modules/system/programs/udevil/default.nix @@ -1,4 +1,4 @@ -{ ... }: +{ config, ... }: { - programs.udevil.enable = true; + programs.udevil.enable = config.system.desktop.enable; } diff --git a/modules/system/secrets/default.nix b/modules/system/secrets/default.nix index 0ba12e4d..61e1b921 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 23f458ad..69744caa 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 1fbfcf57..5b57ebba 100644 --- a/modules/system/services/general/default.nix +++ b/modules/system/services/general/default.nix @@ -4,9 +4,10 @@ ./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 c1cf9e25..585e7f35 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 (builtins.elem "pc" config.system.nixos.tags) { + config = lib.mkIf config.system.desktop.enable { 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 0ff033dc..8cb556dd 100644 --- a/modules/system/services/general/libvirtd/default.nix +++ b/modules/system/services/general/libvirtd/default.nix @@ -14,16 +14,13 @@ }; }; - # Isolate devices into more IOMMU groups - boot.kernelParams = [ - "pcie_acs_override=downstream,multifunction" - "pci=routeirq" + programs.virt-manager.enable = true; + + networking.firewall.trustedInterfaces = [ + "virbr0" + "virbr1" ]; - # 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 new file mode 100644 index 00000000..4bdecd68 --- /dev/null +++ b/modules/system/services/general/portals/default.nix @@ -0,0 +1,7 @@ +{ 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 3616641c..7169d070 100644 --- a/modules/system/services/general/ssh/default.nix +++ b/modules/system/services/general/ssh/default.nix @@ -1,28 +1,17 @@ -{ ... }: +{ 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 acc00f8c..15f4349d 100644 --- a/modules/system/services/general/ssh/fail2ban/default.nix +++ b/modules/system/services/general/ssh/fail2ban/default.nix @@ -4,6 +4,7 @@ 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 new file mode 100644 index 00000000..4b030f55 --- /dev/null +++ b/modules/system/services/general/tlp/default.nix @@ -0,0 +1,4 @@ +{ 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 deleted file mode 100644 index e7541157..00000000 --- a/modules/system/services/general/vmware/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ 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 922c774b..16760fe1 100644 --- a/modules/system/services/server/cfdyndns/default.nix +++ b/modules/system/services/server/cfdyndns/default.nix @@ -1,7 +1,4 @@ -{ config, lib, ... }: +{ config, pkgs, ... }: { - 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" ]; - }; + services.cloudflare-dyndns.apiTokenFile = "${pkgs.writeText "cloudflareapikey" config.secrets.flareApiKey}"; } diff --git a/modules/system/services/server/default.nix b/modules/system/services/server/default.nix index 59510325..6e2a762f 100644 --- a/modules/system/services/server/default.nix +++ b/modules/system/services/server/default.nix @@ -3,10 +3,9 @@ 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 34b29076..37ce0176 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.${config.vars.primeDomain}"; - ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}:443"; + DOMAIN = "git.nixfox.ca"; + ROOT_URL = "https://git.nixfox.ca:443"; HTTP_PORT = 3110; SSH_PORT = 2299; START_SSH_SERVER = true; }; mailer = { ENABLED = true; - SMTP_ADDR = "mx.${config.vars.mailDomain}"; - FROM = "NixFox Git "; - USER = "noreply@${config.vars.primeDomain}"; + SMTP_ADDR = "mx.nixfox.ca"; + FROM = "NixFox Git "; + USER = "noreply@nixfox.ca"; PASSWD = config.secrets.mailPass.nixfoxNoReply; PROTOCOL = "smtps"; }; @@ -32,7 +32,7 @@ networking.firewall.allowedTCPPorts = [ 2299 ]; - services.cloudflare-dyndns.domains = [ config.services.forgejo.settings.server.DOMAIN ]; + services.cloudflare-dyndns.domains = [ "git.nixfox.ca" ]; 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 a40ab52b..5428884a 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."${config.services.forgejo.settings.server.DOMAIN}" = lib.mkIf config.services.forgejo.enable { + services.nginx.virtualHosts."git.nixfox.ca" = 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 deleted file mode 100644 index c2be42e0..00000000 --- a/modules/system/services/server/hedgedoc/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ 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 deleted file mode 100644 index 9848af75..00000000 --- a/modules/system/services/server/hedgedoc/nginx/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ 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 453f339f..ec3dce64 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.${config.vars.primeDomain}"; + hostname = "radio.nixfox.ca"; admin = { - user = "admin"; + user = config.sysusers.main; password = config.secrets.cast.adminPass; }; extraConf = '' @@ -17,7 +17,7 @@ ${config.secrets.cast.sourcePass} Canada - contact@${config.vars.primeDomain} + contact@nixfox.ca ''; }; } diff --git a/modules/system/services/server/icecast/liquidsoap/nixbops/default.nix b/modules/system/services/server/icecast/liquidsoap/nixbops/default.nix index d26b68b3..8d200cb7 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", "/network/Midas/Music/NixBops")) + stream = mksafe(playlist(mode='randomize', reload=1, reload_mode="rounds", "/storage/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 36e22aef..6f520910 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", "/network/Midas/Music/Scrap")) + stream = mksafe(playlist(mode='randomize', reload=1, reload_mode="rounds", "/storage/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 120cbb66..6573d11f 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."${config.services.icecast.hostname}" = lib.mkIf config.services.icecast.enable { + services.nginx.virtualHosts."radio.nixfox.ca" = 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 deleted file mode 100644 index db07d144..00000000 --- a/modules/system/services/server/incus/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ 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 550749ae..26d20ab9 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.${config.vars.primeDomain}" = lib.mkIf config.services.jellyfin.enable { + services.nginx.virtualHosts."jelly.nixfox.ca" = 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 new file mode 100644 index 00000000..2cc6ed6d --- /dev/null +++ b/modules/system/services/server/lemmy/default.nix @@ -0,0 +1,22 @@ +{ 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 new file mode 100644 index 00000000..0ab2106e --- /dev/null +++ b/modules/system/services/server/lemmy/nginx/default.nix @@ -0,0 +1,7 @@ +{ 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 744cde04..b2edc8eb 100644 --- a/modules/system/services/server/mailserver/default.nix +++ b/modules/system/services/server/mailserver/default.nix @@ -1,75 +1,11 @@ -{ config, lib, pkgs, mailserver, ... }: +{ lib, ... }: { imports = [ ./go-autoconfig ./radicale ./roundcube - mailserver.nixosModule + ./simplenix ]; - 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" - ]; - }; + options.services.mailserver.enable = lib.mkEnableOption "Simple NixOS Mailserver"; } diff --git a/modules/system/services/server/mailserver/go-autoconfig/default.nix b/modules/system/services/server/mailserver/go-autoconfig/default.nix index 6854adb1..740a3fb6 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.mailserver.enable { + services = lib.mkIf config.services.mailserver.enable { go-autoconfig = { enable = true; settings = { service_addr = ":1323"; - domain = "autoconfig.${config.vars.mailDomain}"; + domain = "autoconfig.nixfox.ca"; imap = { - server = "mx.${config.vars.mailDomain}"; + server = "mx.nixfox.ca"; port = 143; }; smtp = { - server = "mx.${config.vars.mailDomain}"; + server = "mx.nixfox.ca"; 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 d612fce4..1bb0d687 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.${config.vars.mailDomain}" = lib.mkIf config.services.go-autoconfig.enable { + services.nginx.virtualHosts."autoconfig.nixfox.ca" = 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 f553819b..148d064f 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.mailserver.enable { + config = lib.mkIf config.services.mailserver.enable { services = { radicale = { enable = true; @@ -19,7 +19,7 @@ htpasswd_encryption = "bcrypt"; }; }; - cloudflare-dyndns.domains = [ "cal.${config.vars.mailDomain}" ]; + cloudflare-dyndns.domains = [ "cal.nixfox.ca" ]; }; 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 8d70efbf..d6e1a5be 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.${config.vars.mailDomain}" = lib.mkIf config.services.radicale.enable { + services.nginx.virtualHosts."cal.nixfox.ca" = lib.mkIf config.services.go-autoconfig.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 c4fc9784..f1d8d44c 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.mailserver.enable { + config = lib.mkIf config.services.mailserver.enable { services.roundcube = { enable = true; - hostName = "mail.${config.vars.mailDomain}"; + hostName = "mail.nixfox.ca"; extraConfig = '' - $config['smtp_server'] = "tls://mx.${config.vars.mailDomain}"; + $config['smtp_server'] = "tls://mx.nixfox.ca"; $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 new file mode 100644 index 00000000..2e022966 --- /dev/null +++ b/modules/system/services/server/mailserver/simplenix/default.nix @@ -0,0 +1,72 @@ +{ 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 9cc7bee6..7a8786b2 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.${config.vars.primeDomain}"; + localDomain = "social.nixfox.ca"; streamingProcesses = 4; configureNginx = true; smtp = { createLocally = false; - host = "mx.${config.vars.mailDomain}"; + host = "mx.nixfox.ca"; port = 587; authenticate = true; - fromAddress = "NixFox Mastodon "; - user = "noreply@${config.vars.primeDomain}"; + fromAddress = "NixFox Mastodon "; + user = "noreply@nixfox.ca"; 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 9ef549de..6f98c201 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.${config.vars.primeDomain}"; + realm = "turn.nixfox.ca"; 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 c0466107..f73bb312 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.${config.vars.primeDomain}" = { + services.nginx.virtualHosts."turn.nixfox.ca" = { enableACME = true; forceSSL = true; listen = [{ @@ -12,9 +12,11 @@ locations."/".proxyPass = "http://127.0.0.1:1380"; }; - security.acme.certs."turn.${config.vars.primeDomain}" = { - group = "turnserver"; - postRun = "systemctl restart coturn.service"; + security.acme.certs = { + "turn.nixfox.ca" = { + 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 a1ba1067..5e8492a4 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.${config.vars.primeDomain}"; - server_name = "matrix.${config.vars.primeDomain}"; + base_url = "https://matrix.nixfox.ca"; + server_name = "matrix.nixfox.ca"; }; branding = { - 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"; + auth_header_logo_url = "https://www.nixfox.ca/images/copyright/profile.png"; + #welcome_background_url = "https://www.nixfox.ca/images/backgrounds/template-background.png"; }; - embedded_pages.home_url = "https://www.${config.vars.primeDomain}/"; + embedded_pages.home_url = "https://www.nixfox.ca/"; 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 86c601a3..1c085eb3 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.${config.vars.primeDomain}" = lib.mkIf config.services.matrix-synapse.enable { + services.nginx.virtualHosts."chat.nixfox.ca" = 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 40f890a3..342fff38 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 = "${config.vars.primeDomain}"; - public_baseurl = "https://matrix.${config.vars.primeDomain}"; + server_name = "nixfox.ca"; + public_baseurl = "https://matrix.nixfox.ca"; suppress_key_server_warning = true; # Email notifications about account status email = { - smtp_host = "mx.${config.vars.mailDomain}"; - smtp_user = "noreply@${config.vars.primeDomain}"; + notif_from = "NixFox Matrix "; + smtp_host = "mx.nixfox.ca"; + smtp_user = "noreply@nixfox.ca"; 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 dd71d56d..c5d9d5fe 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.${config.vars.primeDomain}" = lib.mkIf config.services.matrix-synapse.enable { + services.nginx.virtualHosts."matrix.nixfox.ca" = 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 da5539fa..a2a9131b 100644 --- a/modules/system/services/server/minecraft/default.nix +++ b/modules/system/services/server/minecraft/default.nix @@ -3,12 +3,16 @@ imports = [ ./common ./servers + minecraft.nixosModules.minecraft-servers ]; config = lib.mkIf config.services.minecraft-servers.enable { - services.minecraft-servers.eula = true; + nixpkgs = { + overlays = [ minecraft.overlay ]; + allowUnfreePackages = [ "minecraft-server" ]; + }; - nixpkgs.allowUnfreePackages = [ "minecraft-server" ]; + services.minecraft-servers.eula = true; 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 5f9c1e68..d6525204 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.blockworld.enable [ "bloxel.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/cornworld/default.nix b/modules/system/services/server/minecraft/servers/cornworld/default.nix index 28161ebc..fafef772 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.cornworld.enable [ "corn.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/default.nix b/modules/system/services/server/minecraft/servers/default.nix index 5eab36e7..b7088614 100644 --- a/modules/system/services/server/minecraft/servers/default.nix +++ b/modules/system/services/server/minecraft/servers/default.nix @@ -6,6 +6,7 @@ ./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 da6bcdc9..f3d13191 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.dewdemolisher.enable [ "dew.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/johnside/default.nix b/modules/system/services/server/minecraft/servers/johnside/default.nix index 0c8933af..c65ff0ce 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.johnside.enable [ "john.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/marsh/default.nix b/modules/system/services/server/minecraft/servers/marsh/default.nix index f6a3030d..4bdbbd2e 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.marsh.enable [ "marsh.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/roguecraft/default.nix b/modules/system/services/server/minecraft/servers/roguecraft/default.nix new file mode 100644 index 00000000..b7a15a0e --- /dev/null +++ b/modules/system/services/server/minecraft/servers/roguecraft/default.nix @@ -0,0 +1,36 @@ +{ 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 12ae26a7..956f84ec 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.skyblock.enable [ "skyblock.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/uberbeta/default.nix b/modules/system/services/server/minecraft/servers/uberbeta/default.nix index ef58b477..6f3b3dc5 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.${config.vars.primeDomain}" ]; + cloudflare-dyndns.domains = lib.mkIf config.services.minecraft-servers.servers.uberbeta.enable [ "beta.nixfox.ca" ]; }; } diff --git a/modules/system/services/server/minecraft/servers/velocity/default.nix b/modules/system/services/server/minecraft/servers/velocity/default.nix index 099eb183..c358006e 100644 --- a/modules/system/services/server/minecraft/servers/velocity/default.nix +++ b/modules/system/services/server/minecraft/servers/velocity/default.nix @@ -12,6 +12,10 @@ 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 87bfffda..20408682 100644 --- a/modules/system/services/server/nextcloud/default.nix +++ b/modules/system/services/server/nextcloud/default.nix @@ -7,23 +7,22 @@ config = lib.mkIf config.services.nextcloud.enable { services.nextcloud = { - package = pkgs.nextcloud31; - hostName = "files.${config.vars.primeDomain}"; + package = pkgs.nextcloud30; + hostName = "files.nixfox.ca"; https = true; config = { - adminuser = "admin"; + adminuser = config.sysusers.main; 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.${config.vars.mailDomain}"; - mail_domain = "${config.vars.primeDomain}"; + mail_smtphost = "mx.nixfox.ca"; + mail_domain = "nixfox.ca"; mail_from_address = "noreply"; mail_smtpauth = "true"; - mail_smtpname = "noreply@${config.vars.primeDomain}"; + mail_smtpname = "noreply@nixfox.ca"; 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 5cc87b9a..5212d535 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.${config.vars.primeDomain}" = lib.mkIf config.services.nextcloud.enable { + services.nginx.virtualHosts."files.nixfox.ca" = 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 236a7147..b08ba2a4 100644 --- a/modules/system/services/server/nfs/default.nix +++ b/modules/system/services/server/nfs/default.nix @@ -1,13 +1,9 @@ -{ config, lib, nodes, ... }: +{ config, lib, ... }: { imports = [ ./user ]; config = lib.mkIf config.services.nfs.server.enable { services.nfs.server.exports = "/storage *(rw)"; - 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 - ''; + networking.firewall.extraInputRules = "ip saddr { 10.0.0.0/8, 11.0.0.0/8, ${config.secrets.ips.bun} } 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 941c8a64..a88a2b7b 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@${config.vars.primeDomain}"; + defaults.email = "contact@nixfox.ca"; }; 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 0981fe41..2325e731 100644 --- a/modules/system/services/server/nginx/default.nix +++ b/modules/system/services/server/nginx/default.nix @@ -2,21 +2,23 @@ { imports = [ ./acme + ./hosts + ./rtmp ./user ]; + options.services.webserver.enable = lib.mkEnableOption "Nginx webpages"; + config = lib.mkIf config.services.nginx.enable { services.nginx = { - recommendedBrotliSettings = true; - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; recommendedTlsSettings = true; + recommendedOptimisation = true; + recommendedGzipSettings = true; + recommendedProxySettings = true; }; networking.firewall.allowedTCPPorts = [ - config.services.nginx.defaultHTTPListenPort - config.services.nginx.defaultSSLListenPort + 80 + 443 ]; - 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 new file mode 100644 index 00000000..aef9846f --- /dev/null +++ b/modules/system/services/server/nginx/hosts/default.nix @@ -0,0 +1,9 @@ +{ 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 new file mode 100644 index 00000000..882ffebe --- /dev/null +++ b/modules/system/services/server/nginx/hosts/files/default.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: +{ + services.nginx.virtualHosts."jimbosfiles.com" = lib.mkIf config.services.webserver.enable { + enableACME = true; + addSSL = true; + globalRedirect = "www.nixfox.ca"; + }; +} diff --git a/hosts/midas/services/nginx/nixfox/default.nix b/modules/system/services/server/nginx/hosts/nixfox/default.nix similarity index 90% rename from hosts/midas/services/nginx/nixfox/default.nix rename to modules/system/services/server/nginx/hosts/nixfox/default.nix index c8264276..adbcbd1c 100644 --- a/hosts/midas/services/nginx/nixfox/default.nix +++ b/modules/system/services/server/nginx/hosts/nixfox/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: { - services.nginx.virtualHosts = { + services.nginx.virtualHosts = lib.mkIf config.services.webserver.enable { "www.nixfox.ca" = { enableACME = true; addSSL = true; diff --git a/modules/system/services/server/nginx/rtmp/default.nix b/modules/system/services/server/nginx/rtmp/default.nix new file mode 100644 index 00000000..4a619e05 --- /dev/null +++ b/modules/system/services/server/nginx/rtmp/default.nix @@ -0,0 +1,29 @@ +{ 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 4f620795..b98f402c 100644 --- a/modules/system/services/server/owncast/default.nix +++ b/modules/system/services/server/owncast/default.nix @@ -1,4 +1,4 @@ -{ config, lib, nodes, ... }: +{ config, lib, ... }: { imports = [ ./nginx ]; @@ -7,11 +7,7 @@ port = 8060; rtmp-port = 1945; }; - 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 - ''; + networking.firewall.extraInputRules = "ip saddr 11.0.0.0/8 tcp dport 1945 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 47fcaae0..abc052ff 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.${config.vars.primeDomain}" = lib.mkIf config.services.owncast.enable { + services.nginx.virtualHosts."live.nixfox.ca" = 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 78f2411b..50d2abb2 100644 --- a/modules/system/services/server/transmission/default.nix +++ b/modules/system/services/server/transmission/default.nix @@ -4,7 +4,6 @@ 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 5a66482f..c4c737ab 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.${config.vars.primeDomain}" = lib.mkIf config.services.transmission.enable { + services.nginx.virtualHosts."tor.nixfox.ca" = 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 d46dd0ac..928b3458 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.${config.vars.primeDomain}"; + domain = "https://pass.nixfox.ca"; signupsAllowed = false; rocketAddress = "127.0.0.1"; rocketPort = 8222; # Smtp email - smtpHost = "mx.${config.vars.mailDomain}"; - smtpFrom = "noreply@${config.vars.primeDomain}"; + smtpHost = "mx.nixfox.ca"; + smtpFrom = "noreply@nixfox.ca"; smtpFromName = "Vaultwarden"; - smtpUsername = "noreply@${config.vars.primeDomain}"; + smtpUsername = "noreply@nixfox.ca"; 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 7ae72aeb..0877413e 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.${config.vars.primeDomain}" = lib.mkIf config.services.vaultwarden.enable { + services.nginx.virtualHosts."pass.nixfox.ca" = 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 deleted file mode 100644 index 33e99c23..00000000 --- a/modules/system/settings/colmena/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, ... }: -{ - deployment = { - allowLocalDeployment = true; - tags = config.system.nixos.tags; - }; -} diff --git a/modules/system/settings/default.nix b/modules/system/settings/default.nix index 0cea70d4..5a196fae 100644 --- a/modules/system/settings/default.nix +++ b/modules/system/settings/default.nix @@ -1,10 +1,8 @@ { ... }: { imports = [ - ./colmena ./font ./locale - ./logind ./minimal ./nix ./security diff --git a/modules/system/settings/logind/default.nix b/modules/system/settings/logind/default.nix deleted file mode 100644 index 78b2fd1e..00000000 --- a/modules/system/settings/logind/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ 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 deleted file mode 100644 index 3041a621..00000000 --- a/modules/system/settings/nix/cache/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ ... }: -{ - 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 b81caa1f..965eafe3 100644 --- a/modules/system/settings/nix/channels/default.nix +++ b/modules/system/settings/nix/channels/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, stable, unstable, ... }: +{ config, lib, 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 02cb38e6..c1115185 100644 --- a/modules/system/settings/nix/default.nix +++ b/modules/system/settings/nix/default.nix @@ -1,20 +1,20 @@ { pkgs, ... }: { imports = [ - ./cache ./channels - ./maintenence + ./gc ./unfree ]; nix = { package = pkgs.lix; - settings.experimental-features = [ - "flakes" - "nix-command" - ]; + settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + auto-optimise-store = true; + trusted-users = [ "@wheel" ]; + }; }; - - # 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 new file mode 100644 index 00000000..0ec262af --- /dev/null +++ b/modules/system/settings/nix/gc/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + 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 deleted file mode 100644 index f1b190c0..00000000 --- a/modules/system/settings/nix/maintenence/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ ... }: -{ - 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 0dd9a19c..a2700af0 100644 --- a/modules/system/settings/security/privilege/default.nix +++ b/modules/system/settings/security/privilege/default.nix @@ -4,9 +4,4 @@ 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 eea12fa0..31a54f74 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 = builtins.elem "pc" config.system.nixos.tags; + security.rtkit.enable = config.system.desktop.enable; } diff --git a/modules/system/users/corn/default.nix b/modules/system/users/corn/default.nix new file mode 100644 index 00000000..82483f41 --- /dev/null +++ b/modules/system/users/corn/default.nix @@ -0,0 +1,19 @@ +{ 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 f882f271..138e7f2e 100644 --- a/modules/system/users/default.nix +++ b/modules/system/users/default.nix @@ -1,8 +1,6 @@ -{ ... }: +{ lib, ... }: { - imports = [ - ./freecorn - ./luna - ./main - ]; + imports = [ ./main ]; + + options.system.extraUsers.enable = lib.mkEnableOption "Enable a shared system"; } diff --git a/modules/system/users/freecorn/default.nix b/modules/system/users/freecorn/default.nix deleted file mode 100644 index 16e7253a..00000000 --- a/modules/system/users/freecorn/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ 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 234d98a6..683b8015 100644 --- a/modules/system/users/luna/default.nix +++ b/modules/system/users/luna/default.nix @@ -1,17 +1,17 @@ { config, lib, ... }: -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/${user}" ]; +{ + 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; }; + + environment.persistence."/persist".directories = [ "/home/luna" ]; } diff --git a/modules/system/users/main/default.nix b/modules/system/users/main/default.nix index dee9152e..f15624ec 100644 --- a/modules/system/users/main/default.nix +++ b/modules/system/users/main/default.nix @@ -1,47 +1,55 @@ { config, lib, pkgs, ... }: { - 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; + options.sysusers = lib.mkOption { + type = lib.types.attrs; }; - home-manager.users."${config.vars.mainUser}" = { - imports = [ ../../../home ]; - home.stateVersion = lib.mkForce config.system.stateVersion; + 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; }; } diff --git a/modules/system/variables/default.nix b/modules/system/variables/default.nix deleted file mode 100644 index 42927b33..00000000 --- a/modules/system/variables/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ lib, ... }: -{ - options.vars = lib.mkOption { - type = lib.types.attrs; - }; - - config.vars = { - mainUser = "bun"; - primeDomain = "nixfox.ca"; - mailDomain = "nixfox.ca"; - }; -}