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