Restructuring #1
							
								
								
									
										11
									
								
								default.nix
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								default.nix
									
									
									
									
									
								
							| @ -1,11 +0,0 @@ | |||||||
| { ... }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import modules |  | ||||||
|     ./modules/default.nix |  | ||||||
| 
 |  | ||||||
|     # Import custom packages |  | ||||||
|     ./pkgs/default.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
							
								
								
									
										792
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										792
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @ -1,88 +1,5 @@ | |||||||
| { | { | ||||||
|   "nodes": { |   "nodes": { | ||||||
|     "base16": { |  | ||||||
|       "inputs": { |  | ||||||
|         "fromYaml": "fromYaml" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1745523430, |  | ||||||
|         "narHash": "sha256-EAYWV+kXbwsH+8G/8UtmcunDeKwLwSOyfcmzZUkWE/c=", |  | ||||||
|         "owner": "SenchoPens", |  | ||||||
|         "repo": "base16.nix", |  | ||||||
|         "rev": "58bfe2553d937d8af0564f79d5b950afbef69717", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "SenchoPens", |  | ||||||
|         "repo": "base16.nix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "base16-fish": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1622559957, |  | ||||||
|         "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", |  | ||||||
|         "owner": "tomyun", |  | ||||||
|         "repo": "base16-fish", |  | ||||||
|         "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tomyun", |  | ||||||
|         "repo": "base16-fish", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "base16-helix": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1736852337, |  | ||||||
|         "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "base16-helix", |  | ||||||
|         "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "base16-helix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "base16-vim": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1732806396, |  | ||||||
|         "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "base16-vim", |  | ||||||
|         "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "base16-vim", |  | ||||||
|         "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "firefox-gnome-theme": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1744642301, |  | ||||||
|         "narHash": "sha256-5A6LL7T0lttn1vrKsNOKUk9V0ittdW0VEqh6AtefxJ4=", |  | ||||||
|         "owner": "rafaelmardojai", |  | ||||||
|         "repo": "firefox-gnome-theme", |  | ||||||
|         "rev": "59e3de00f01e5adb851d824cf7911bd90c31083a", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "rafaelmardojai", |  | ||||||
|         "repo": "firefox-gnome-theme", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-compat": { |     "flake-compat": { | ||||||
|       "flake": false, |       "flake": false, | ||||||
|       "locked": { |       "locked": { | ||||||
| @ -99,101 +16,6 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-compat_2": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1717312683, |  | ||||||
|         "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "flake-compat", |  | ||||||
|         "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "flake-compat", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-compat_3": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1733328505, |  | ||||||
|         "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", |  | ||||||
|         "owner": "edolstra", |  | ||||||
|         "repo": "flake-compat", |  | ||||||
|         "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "edolstra", |  | ||||||
|         "repo": "flake-compat", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-parts": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs-lib": [ |  | ||||||
|           "nixvim", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1743550720, |  | ||||||
|         "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "flake-parts", |  | ||||||
|         "rev": "c621e8422220273271f52058f618c94e405bb0f5", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "flake-parts", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-parts_2": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs-lib": [ |  | ||||||
|           "nur", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1733312601, |  | ||||||
|         "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "flake-parts", |  | ||||||
|         "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "flake-parts", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-parts_3": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs-lib": [ |  | ||||||
|           "stylix", |  | ||||||
|           "nur", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1733312601, |  | ||||||
|         "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "flake-parts", |  | ||||||
|         "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "hercules-ci", |  | ||||||
|         "repo": "flake-parts", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils": { |     "flake-utils": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "systems": "systems" |         "systems": "systems" | ||||||
| @ -212,125 +34,16 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "flake-utils_2": { |     "glue": { | ||||||
|       "inputs": { |  | ||||||
|         "systems": "systems_2" |  | ||||||
|       }, |  | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1731533236, |         "path": "./glue", | ||||||
|         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", |         "type": "path" | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "owner": "numtide", |         "path": "./glue", | ||||||
|         "repo": "flake-utils", |         "type": "path" | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "flake-utils_3": { |  | ||||||
|       "inputs": { |  | ||||||
|         "systems": [ |  | ||||||
|           "stylix", |  | ||||||
|           "systems" |  | ||||||
|         ] |  | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "parent": [] | ||||||
|         "lastModified": 1731533236, |  | ||||||
|         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "flake-utils", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "fromYaml": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1731966426, |  | ||||||
|         "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", |  | ||||||
|         "owner": "SenchoPens", |  | ||||||
|         "repo": "fromYaml", |  | ||||||
|         "rev": "106af9e2f715e2d828df706c386a685698f3223b", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "SenchoPens", |  | ||||||
|         "repo": "fromYaml", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "git-hooks": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-compat": [ |  | ||||||
|           "stylix", |  | ||||||
|           "flake-compat" |  | ||||||
|         ], |  | ||||||
|         "gitignore": "gitignore", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "stylix", |  | ||||||
|           "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": [ |  | ||||||
|           "stylix", |  | ||||||
|           "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" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "gnome-shell": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1732369855, |  | ||||||
|         "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", |  | ||||||
|         "owner": "GNOME", |  | ||||||
|         "repo": "gnome-shell", |  | ||||||
|         "rev": "dadd58f630eeea41d645ee225a63f719390829dc", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "GNOME", |  | ||||||
|         "ref": "47.2", |  | ||||||
|         "repo": "gnome-shell", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |     }, | ||||||
|     "home-manager": { |     "home-manager": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
| @ -339,11 +52,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1746040799, |         "lastModified": 1748134483, | ||||||
|         "narHash": "sha256-osgPX/SzIpkR50vev/rqoTEAVkEcOWXoQXmbzsaI4KU=", |         "narHash": "sha256-5PBK1nV8X39K3qUj8B477Aa2RdbLq3m7wRxUKRtggX4=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "rev": "5f217e5a319f6c186283b530f8c975e66c028433", |         "rev": "c1e671036224089937e111e32ea899f59181c383", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @ -352,136 +65,55 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "home-manager_2": { |     "nix-minecraft": { | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "stylix", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746040799, |  | ||||||
|         "narHash": "sha256-osgPX/SzIpkR50vev/rqoTEAVkEcOWXoQXmbzsaI4KU=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "home-manager", |  | ||||||
|         "rev": "5f217e5a319f6c186283b530f8c975e66c028433", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "home-manager", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "ixx": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-utils": [ |  | ||||||
|           "nixvim", |  | ||||||
|           "nuschtosSearch", |  | ||||||
|           "flake-utils" |  | ||||||
|         ], |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixvim", |  | ||||||
|           "nuschtosSearch", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1737371634, |  | ||||||
|         "narHash": "sha256-fTVAWzT1UMm1lT+YxHuVPtH+DATrhYfea3B0MxG/cGw=", |  | ||||||
|         "owner": "NuschtOS", |  | ||||||
|         "repo": "ixx", |  | ||||||
|         "rev": "a1176e2a10ce745ff8f63e4af124ece8fe0b1648", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NuschtOS", |  | ||||||
|         "ref": "v0.0.7", |  | ||||||
|         "repo": "ixx", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nix-matlab": { |  | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-compat": "flake-compat", |         "flake-compat": "flake-compat", | ||||||
|  |         "flake-utils": "flake-utils", | ||||||
|         "nixpkgs": [ |         "nixpkgs": [ | ||||||
|           "nixpkgs" |           "nixpkgs" | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1746111721, |         "lastModified": 1747581338, | ||||||
|         "narHash": "sha256-Jsn01TrHUZuo2IzeRkcnty+ftBcnHkbtv9NmLwdV9zk=", |         "narHash": "sha256-/+H9qce+NPsEcAC31s3pbD64nB6GKC3+3ZNLV1+tffk=", | ||||||
|         "owner": "doronbehar", |         "owner": "Jan-Bulthuis", | ||||||
|         "repo": "nix-matlab", |         "repo": "nix-minecraft", | ||||||
|         "rev": "07739cc347be4fda69deab66eea68b030e918e89", |         "rev": "44b6b40d7a3e0a114567b38a203029a5bc67e838", | ||||||
|         "type": "gitlab" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "doronbehar", |  | ||||||
|         "repo": "nix-matlab", |  | ||||||
|         "type": "gitlab" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixos-cosmic": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-compat": "flake-compat_2", |  | ||||||
|         "nixpkgs": "nixpkgs", |  | ||||||
|         "nixpkgs-stable": "nixpkgs-stable", |  | ||||||
|         "rust-overlay": "rust-overlay" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746109800, |  | ||||||
|         "narHash": "sha256-sjDpqdvbQaiA6OAsgLE4niz6hmmCpoUH0cl5zyfu6FI=", |  | ||||||
|         "owner": "lilyinstarlight", |  | ||||||
|         "repo": "nixos-cosmic", |  | ||||||
|         "rev": "9fe1aa7b6a1043003b38f36626dd29b52247d720", |  | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "owner": "lilyinstarlight", |         "owner": "Jan-Bulthuis", | ||||||
|         "repo": "nixos-cosmic", |         "repo": "nix-minecraft", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "nix-modpack": { | ||||||
|  |       "inputs": { | ||||||
|  |         "nixpkgs": [ | ||||||
|  |           "nixpkgs" | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1747559249, | ||||||
|  |         "narHash": "sha256-+ygKEGMVcXNklO4RDYSd5XzydDmQOZWcOcxYZf/PH1U=", | ||||||
|  |         "owner": "Jan-Bulthuis", | ||||||
|  |         "repo": "nix-modpack", | ||||||
|  |         "rev": "a093625c2847afc3ef257513161c7fe318c6be1c", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "Jan-Bulthuis", | ||||||
|  |         "repo": "nix-modpack", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "nixpkgs": { |     "nixpkgs": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1745930157, |         "lastModified": 1747958103, | ||||||
|         "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", |         "narHash": "sha256-qmmFCrfBwSHoWw7cVK4Aj+fns+c54EBP8cGqp/yK410=", | ||||||
|         "owner": "NixOS", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "ref": "nixos-unstable", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixpkgs-stable": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746055187, |  | ||||||
|         "narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=", |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "ref": "nixos-24.11", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixpkgs_2": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746061036, |  | ||||||
|         "narHash": "sha256-OxYwCGJf9VJ2KnUO+w/hVJVTjOgscdDg/lPv8Eus07Y=", |  | ||||||
|         "owner": "nixos", |         "owner": "nixos", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "3afd19146cac33ed242fc0fc87481c67c758a59e", |         "rev": "fe51d34885f7b5e3e7b59572796e1bcb427eccb1", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @ -491,192 +123,13 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "nixpkgs_3": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746061036, |  | ||||||
|         "narHash": "sha256-OxYwCGJf9VJ2KnUO+w/hVJVTjOgscdDg/lPv8Eus07Y=", |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "rev": "3afd19146cac33ed242fc0fc87481c67c758a59e", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "ref": "nixpkgs-unstable", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixpkgs_4": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1745930157, |  | ||||||
|         "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NixOS", |  | ||||||
|         "ref": "nixos-unstable", |  | ||||||
|         "repo": "nixpkgs", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixvim": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-parts": "flake-parts", |  | ||||||
|         "nixpkgs": "nixpkgs_3", |  | ||||||
|         "nuschtosSearch": "nuschtosSearch" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746101723, |  | ||||||
|         "narHash": "sha256-loxT2bAglD3w8XDx+7huMXQHbg07yHHHCNiCiVWneqI=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "nixvim", |  | ||||||
|         "rev": "c91753bbe57781e08226829b9e354facd50caf1b", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "nixvim", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nur": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-parts": "flake-parts_2", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ], |  | ||||||
|         "treefmt-nix": "treefmt-nix" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746118004, |  | ||||||
|         "narHash": "sha256-E5WQwA602g5qMnZDmgV7EqDAwyg4PqnoeMJAkDD1yak=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "NUR", |  | ||||||
|         "rev": "9a4aaf927694321aeedfec791dfcc7850f8503cd", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "NUR", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nur_2": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-parts": "flake-parts_3", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "stylix", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ], |  | ||||||
|         "treefmt-nix": "treefmt-nix_2" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746056780, |  | ||||||
|         "narHash": "sha256-/emueQGaoT4vu0QjU9LDOG5roxRSfdY0K2KkxuzazcM=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "NUR", |  | ||||||
|         "rev": "d476cd0972dd6242d76374fcc277e6735715c167", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "NUR", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nuschtosSearch": { |  | ||||||
|       "inputs": { |  | ||||||
|         "flake-utils": "flake-utils_2", |  | ||||||
|         "ixx": "ixx", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixvim", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1745046075, |  | ||||||
|         "narHash": "sha256-8v4y6k16Ra/fiecb4DxhsoOGtzLKgKlS+9/XJ9z0T2I=", |  | ||||||
|         "owner": "NuschtOS", |  | ||||||
|         "repo": "search", |  | ||||||
|         "rev": "066afe8643274470f4a294442aadd988356a478f", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NuschtOS", |  | ||||||
|         "repo": "search", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "root": { |     "root": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "flake-utils": "flake-utils", |         "glue": "glue", | ||||||
|         "home-manager": "home-manager", |         "home-manager": "home-manager", | ||||||
|         "nix-matlab": "nix-matlab", |         "nix-minecraft": "nix-minecraft", | ||||||
|         "nixos-cosmic": "nixos-cosmic", |         "nix-modpack": "nix-modpack", | ||||||
|         "nixpkgs": "nixpkgs_2", |         "nixpkgs": "nixpkgs" | ||||||
|         "nixvim": "nixvim", |  | ||||||
|         "nur": "nur", |  | ||||||
|         "stylix": "stylix" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "rust-overlay": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixos-cosmic", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746067100, |  | ||||||
|         "narHash": "sha256-6JeEbboDvRjLwB9kzCnmWj+f+ZnMtKOe5c2F1VBpaTs=", |  | ||||||
|         "owner": "oxalica", |  | ||||||
|         "repo": "rust-overlay", |  | ||||||
|         "rev": "026e8fedefd6b167d92ed04b195c658d95ffc7a5", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "oxalica", |  | ||||||
|         "repo": "rust-overlay", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "stylix": { |  | ||||||
|       "inputs": { |  | ||||||
|         "base16": "base16", |  | ||||||
|         "base16-fish": "base16-fish", |  | ||||||
|         "base16-helix": "base16-helix", |  | ||||||
|         "base16-vim": "base16-vim", |  | ||||||
|         "firefox-gnome-theme": "firefox-gnome-theme", |  | ||||||
|         "flake-compat": "flake-compat_3", |  | ||||||
|         "flake-utils": "flake-utils_3", |  | ||||||
|         "git-hooks": "git-hooks", |  | ||||||
|         "gnome-shell": "gnome-shell", |  | ||||||
|         "home-manager": "home-manager_2", |  | ||||||
|         "nixpkgs": "nixpkgs_4", |  | ||||||
|         "nur": "nur_2", |  | ||||||
|         "systems": "systems_3", |  | ||||||
|         "tinted-foot": "tinted-foot", |  | ||||||
|         "tinted-kitty": "tinted-kitty", |  | ||||||
|         "tinted-schemes": "tinted-schemes", |  | ||||||
|         "tinted-tmux": "tinted-tmux", |  | ||||||
|         "tinted-zed": "tinted-zed" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1746111784, |  | ||||||
|         "narHash": "sha256-94MEscICizhXBJvP5o6f9lcY2vWXTSg1XKZZbS19Yso=", |  | ||||||
|         "owner": "danth", |  | ||||||
|         "repo": "stylix", |  | ||||||
|         "rev": "716e6669a9840e4ba0d8deb6ab1d016ef01c475a", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "danth", |  | ||||||
|         "repo": "stylix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "systems": { |     "systems": { | ||||||
| @ -693,161 +146,6 @@ | |||||||
|         "repo": "default", |         "repo": "default", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |  | ||||||
|     "systems_2": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1681028828, |  | ||||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "systems_3": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1681028828, |  | ||||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "tinted-foot": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1726913040, |  | ||||||
|         "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "tinted-foot", |  | ||||||
|         "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "tinted-foot", |  | ||||||
|         "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "tinted-kitty": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1716423189, |  | ||||||
|         "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "tinted-kitty", |  | ||||||
|         "rev": "eb39e141db14baef052893285df9f266df041ff8", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "tinted-kitty", |  | ||||||
|         "rev": "eb39e141db14baef052893285df9f266df041ff8", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "tinted-schemes": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1744974599, |  | ||||||
|         "narHash": "sha256-Fg+rdGs5FAgfkYNCs74lnl8vkQmiZVdBsziyPhVqrlY=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "schemes", |  | ||||||
|         "rev": "28c26a621123ad4ebd5bbfb34ab39421c0144bdd", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "schemes", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "tinted-tmux": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1745111349, |  | ||||||
|         "narHash": "sha256-udV+nHdpqgkJI9D0mtvvAzbqubt9jdifS/KhTTbJ45w=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "tinted-tmux", |  | ||||||
|         "rev": "e009f18a01182b63559fb28f1c786eb027c3dee9", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "tinted-tmux", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "tinted-zed": { |  | ||||||
|       "flake": false, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1725758778, |  | ||||||
|         "narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=", |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "base16-zed", |  | ||||||
|         "rev": "122c9e5c0e6f27211361a04fae92df97940eccf9", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "tinted-theming", |  | ||||||
|         "repo": "base16-zed", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "treefmt-nix": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nur", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1733222881, |  | ||||||
|         "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "treefmt-nix", |  | ||||||
|         "rev": "49717b5af6f80172275d47a418c9719a31a78b53", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "treefmt-nix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "treefmt-nix_2": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "stylix", |  | ||||||
|           "nur", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1733222881, |  | ||||||
|         "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "treefmt-nix", |  | ||||||
|         "rev": "49717b5af6f80172275d47a418c9719a31a78b53", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "numtide", |  | ||||||
|         "repo": "treefmt-nix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "root": "root", |   "root": "root", | ||||||
|  | |||||||
							
								
								
									
										90
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								flake.nix
									
									
									
									
									
								
							| @ -1,88 +1,16 @@ | |||||||
| { | { | ||||||
|   description = "NixOS system"; |   description = "System configuration for NixOS"; | ||||||
| 
 | 
 | ||||||
|   inputs = { |   inputs = { | ||||||
|  |     glue.url = "./glue"; | ||||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; |     nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; | ||||||
|     home-manager = { |     home-manager.url = "github:nix-community/home-manager"; | ||||||
|       url = "github:nix-community/home-manager"; |     home-manager.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |     nix-minecraft.url = "github:Jan-Bulthuis/nix-minecraft"; | ||||||
|     }; |     nix-minecraft.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     stylix.url = "github:danth/stylix"; |     nix-modpack.url = "github:Jan-Bulthuis/nix-modpack"; | ||||||
|     nixvim.url = "github:nix-community/nixvim"; |     nix-modpack.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     nur = { |  | ||||||
|       url = "github:nix-community/NUR"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|     nix-matlab = { |  | ||||||
|       url = "gitlab:doronbehar/nix-matlab"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|     flake-utils.url = "github:numtide/flake-utils"; |  | ||||||
|     nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   outputs = |   outputs = inputs: inputs.glue inputs; | ||||||
|     { |  | ||||||
|       self, |  | ||||||
|       nixpkgs, |  | ||||||
|       home-manager, |  | ||||||
|       stylix, |  | ||||||
|       nixvim, |  | ||||||
|       nur, |  | ||||||
|       nix-matlab, |  | ||||||
|       nixos-cosmic, |  | ||||||
|       ... |  | ||||||
|     }: |  | ||||||
|     let |  | ||||||
|       mkConfig = |  | ||||||
|         system: machineConfig: userConfig: |  | ||||||
|         (nixpkgs.lib.nixosSystem { |  | ||||||
|           inherit system; |  | ||||||
|           specialArgs = { inherit system; }; |  | ||||||
|           modules = [ |  | ||||||
|             machineConfig |  | ||||||
|             home-manager.nixosModules.home-manager |  | ||||||
|             { |  | ||||||
|               nix.settings = { |  | ||||||
|                 substituters = [ "https://cosmic.cachix.org/" ]; |  | ||||||
|                 trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ]; |  | ||||||
|               }; |  | ||||||
|               machine.users = userConfig; |  | ||||||
|               home-manager.extraSpecialArgs = { inherit system; }; |  | ||||||
|               home-manager.sharedModules = [ |  | ||||||
|                 stylix.homeManagerModules.stylix |  | ||||||
|                 nixvim.homeManagerModules.nixvim |  | ||||||
|                 nur.modules.homeManager.default |  | ||||||
|                 { |  | ||||||
|                   nixpkgs.overlays = [ |  | ||||||
|                     nix-matlab.overlay |  | ||||||
|                     nixos-cosmic.overlays.default |  | ||||||
|                   ]; |  | ||||||
|                 } |  | ||||||
|               ]; |  | ||||||
|             } |  | ||||||
|           ]; |  | ||||||
|         }); |  | ||||||
|     in |  | ||||||
|     { |  | ||||||
|       nixosConfigurations = { |  | ||||||
|         "20212060" = mkConfig "x86_64-linux" ./machines/laptop.nix { |  | ||||||
|           jan = { |  | ||||||
|             sudo = true; |  | ||||||
|             configuration = ./users/jan.nix; |  | ||||||
|           }; |  | ||||||
|           berg-van-abstractie = { |  | ||||||
|             sudo = false; |  | ||||||
|             configuration = ./users/comp-prog.nix; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|         "vm-audio" = mkConfig "x86_64-linux" ./machines/vm-audio.nix { |  | ||||||
|           local = { |  | ||||||
|             sudo = true; |  | ||||||
|             configuration = ./users/server.nix; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|       lib = import ./shell-modules/default.nix self.inputs; |  | ||||||
|     }; |  | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								glue/flake.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								glue/flake.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | { | ||||||
|  |   description = "Some glue"; | ||||||
|  | 
 | ||||||
|  |   inputs = { }; | ||||||
|  | 
 | ||||||
|  |   outputs = | ||||||
|  |     inputs: | ||||||
|  |     let | ||||||
|  |       glue = import ./lib { inherit inputs; }; | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       __functor = _: glue; | ||||||
|  |     }; | ||||||
|  | } | ||||||
							
								
								
									
										173
									
								
								glue/lib/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								glue/lib/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,173 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   mkGlue = | ||||||
|  |     inputs: | ||||||
|  |     let | ||||||
|  |       flake = inputs.self; | ||||||
|  |       nixpkgs = inputs.nixpkgs; | ||||||
|  |       lib = nixpkgs.lib; | ||||||
|  | 
 | ||||||
|  |       importDir = | ||||||
|  |         path: fn: | ||||||
|  |         let | ||||||
|  |           entries = builtins.readDir path; | ||||||
|  | 
 | ||||||
|  |           # Get paths to directories | ||||||
|  |           dirs = lib.filterAttrs (_: type: type == "directory") entries; | ||||||
|  |           dirPaths = lib.mapAttrs (name: type: { | ||||||
|  |             path = "${path}/${name}"; | ||||||
|  |             type = type; | ||||||
|  |           }) dirs; | ||||||
|  | 
 | ||||||
|  |           # Get paths to nix files | ||||||
|  |           nixName = name: builtins.match "(.*)\\.nix" name; | ||||||
|  |           files = lib.filterAttrs (name: type: (type != "directory") && ((nixName name) != null)) entries; | ||||||
|  |           filePaths = lib.mapAttrs' (name: type: { | ||||||
|  |             name = builtins.head (nixName name); | ||||||
|  |             value = { | ||||||
|  |               path = "${path}/${name}"; | ||||||
|  |               type = type; | ||||||
|  |             }; | ||||||
|  |           }) files; | ||||||
|  | 
 | ||||||
|  |           combined = dirPaths // filePaths; | ||||||
|  |         in | ||||||
|  |         fn (lib.optionalAttrs (builtins.pathExists path) combined); | ||||||
|  | 
 | ||||||
|  |       # Split out into getNixFiles, getNixFilesRecursive, getDirs | ||||||
|  |       importDirRecursive = | ||||||
|  |         path: fn: | ||||||
|  |         let | ||||||
|  |           entries = importDir path lib.id; | ||||||
|  | 
 | ||||||
|  |           # Dig down recursively | ||||||
|  |           dirs = lib.filterAttrs (_: entry: entry.type == "directory") entries; | ||||||
|  |           recursedEntries = lib.mapAttrs (name: entry: (importDirRecursive entry.path lib.id)) dirs; | ||||||
|  |         in | ||||||
|  |         fn (entries // recursedEntries); | ||||||
|  | 
 | ||||||
|  |       eachSystem = fn: lib.genAttrs lib.systems.flakeExposed fn; | ||||||
|  | 
 | ||||||
|  |       systemArgs = eachSystem (system: { | ||||||
|  |         pkgs = ( | ||||||
|  |           import inputs.nixpkgs { | ||||||
|  |             inherit system; | ||||||
|  |           } | ||||||
|  |         ); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       allPackages = importDir "${flake}/packages" ( | ||||||
|  |         attrs: | ||||||
|  |         lib.mapAttrs ( | ||||||
|  |           name: entry: (if entry.type == "directory" then "${entry.path}/default.nix" else entry.path) | ||||||
|  |         ) attrs | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       packages = | ||||||
|  |         let | ||||||
|  |           # TODO: Filter out packages that are not supported on the platform? | ||||||
|  |           mkPackages = | ||||||
|  |             system: | ||||||
|  |             let | ||||||
|  |               args = systemArgs."${system}"; | ||||||
|  |               pkgs = args.pkgs; | ||||||
|  |             in | ||||||
|  |             lib.mapAttrs (name: package: pkgs.callPackage package { }) allPackages; | ||||||
|  |         in | ||||||
|  |         eachSystem mkPackages; | ||||||
|  | 
 | ||||||
|  |       overlay = final: prev: (lib.mapAttrs (name: package: prev.callPackage package { }) allPackages); | ||||||
|  | 
 | ||||||
|  |       collectEntries = | ||||||
|  |         attrs: | ||||||
|  |         lib.attrsets.collect ( | ||||||
|  |           entry: (lib.isAttrs entry) && (lib.hasAttr "path" entry) && (lib.hasAttr "type" entry) | ||||||
|  |         ) attrs; | ||||||
|  | 
 | ||||||
|  |       collectModules = | ||||||
|  |         path: | ||||||
|  |         importDirRecursive path ( | ||||||
|  |           attrs: | ||||||
|  |           map (entry: if entry.type == "directory" then entry.path + "/default.nix" else entry.path) ( | ||||||
|  |             collectEntries attrs | ||||||
|  |           ) | ||||||
|  |         ); | ||||||
|  | 
 | ||||||
|  |       nixosModules = collectModules "${flake}/modules/nixos"; | ||||||
|  |       inputNixosModules = lib.map (flake: flake.outputs.nixosModules.default) ( | ||||||
|  |         lib.filter (flake: lib.hasAttrByPath [ "outputs" "nixosModules" "default" ] flake) ( | ||||||
|  |           lib.attrValues inputs | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       homeModules = collectModules "${flake}/modules/home"; | ||||||
|  |       inputHomeModules = lib.map (flake: flake.outputs.homeManagerModules.default) ( | ||||||
|  |         lib.filter (flake: lib.hasAttrByPath [ "outputs" "homeManagerModules" "default" ] flake) ( | ||||||
|  |           lib.attrValues inputs | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       inputOverlays = lib.map (flake: flake.outputs.overlays.default) ( | ||||||
|  |         lib.filter (flake: lib.hasAttrByPath [ "outputs" "overlays" "default" ] flake) ( | ||||||
|  |           lib.attrValues inputs | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       overlayModule = | ||||||
|  |         { ... }: | ||||||
|  |         { | ||||||
|  |           nixpkgs.overlays = [ overlay ] ++ inputOverlays; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |       nixosConfigurations = importDir "${flake}/hosts" ( | ||||||
|  |         attrs: | ||||||
|  |         lib.mapAttrs ( | ||||||
|  |           name: entry: | ||||||
|  |           lib.nixosSystem { | ||||||
|  |             specialArgs = { | ||||||
|  |               inherit inputs; | ||||||
|  |             }; | ||||||
|  |             modules = | ||||||
|  |               let | ||||||
|  |                 systemPath = "${entry.path}/configuration.nix"; | ||||||
|  | 
 | ||||||
|  |                 userEntries = importDir "${entry.path}/users" lib.id; | ||||||
|  | 
 | ||||||
|  |                 usersConfiguration = lib.mapAttrs (name: entry: { | ||||||
|  |                   isNormalUser = true; | ||||||
|  |                   group = name; | ||||||
|  |                 }) userEntries; | ||||||
|  |                 groupsConfiguration = lib.mapAttrs (name: entry: { | ||||||
|  |                 }) userEntries; | ||||||
|  |                 homesConfiguration = lib.mapAttrs (name: entry: entry.path) userEntries; | ||||||
|  | 
 | ||||||
|  |                 usersModule = | ||||||
|  |                   { ... }: | ||||||
|  |                   { | ||||||
|  |                     home-manager.sharedModules = homeModules ++ inputHomeModules; | ||||||
|  |                     home-manager.useUserPackages = false; # TODO: See if this should be changed to true? | ||||||
|  |                     home-manager.useGlobalPkgs = true; | ||||||
|  |                     home-manager.users = homesConfiguration; | ||||||
|  |                     users.users = usersConfiguration; | ||||||
|  |                     users.groups = groupsConfiguration; | ||||||
|  |                   }; | ||||||
|  |               in | ||||||
|  |               [ | ||||||
|  |                 systemPath | ||||||
|  |                 overlayModule | ||||||
|  |                 usersModule | ||||||
|  |               ] | ||||||
|  |               ++ nixosModules | ||||||
|  |               ++ inputNixosModules; | ||||||
|  |           } | ||||||
|  |         ) (lib.attrsets.filterAttrs (name: entry: entry.type == "directory") attrs) | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       inherit packages nixosConfigurations; | ||||||
|  |       overlays.default = overlay; | ||||||
|  |     }; | ||||||
|  | in | ||||||
|  | mkGlue | ||||||
							
								
								
									
										35
									
								
								hosts/20212060/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								hosts/20212060/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | { flake, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # State version | ||||||
|  |   system.stateVersion = "24.05"; | ||||||
|  | 
 | ||||||
|  |   # Machine hostname | ||||||
|  |   networking.hostName = "20212060"; | ||||||
|  | 
 | ||||||
|  |   # Admin users | ||||||
|  |   users.users.jan.extraGroups = [ "wheel" ]; | ||||||
|  | 
 | ||||||
|  |   # Enable virtualisation for VMs | ||||||
|  |   virtualisation.libvirtd.enable = true; | ||||||
|  | 
 | ||||||
|  |   # Set up wstunnel client | ||||||
|  |   services.wstunnel = { | ||||||
|  |     enable = true; | ||||||
|  |     clients.wg-tunnel = { | ||||||
|  |       connectTo = "wss://tunnel.bulthuis.dev:443"; | ||||||
|  |       localToRemote = [ | ||||||
|  |         "udp://51820:10.10.40.100:51820" | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Module setup | ||||||
|  |   modules = { | ||||||
|  |     profiles.laptop.enable = true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   imports = [ | ||||||
|  |     ./hardware-configuration.nix | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								hosts/20212060/hardware-configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								hosts/20212060/hardware-configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # Machine platform | ||||||
|  |   nixpkgs.hostPlatform = "x86_64-linux"; | ||||||
|  | 
 | ||||||
|  |   # Hardware configuration | ||||||
|  |   hardware.enableRedistributableFirmware = true; | ||||||
|  |   boot.initrd.availableKernelModules = [ | ||||||
|  |     "xhci_pci" | ||||||
|  |     "nvme" | ||||||
|  |     "usb_storage" | ||||||
|  |     "sd_mod" | ||||||
|  |     "rtsx_pci_sdmmc" | ||||||
|  |   ]; | ||||||
|  |   boot.initrd.kernelModules = [ ]; | ||||||
|  |   boot.kernelModules = [ "kvm-intel" ]; | ||||||
|  |   boot.extraModulePackages = [ ]; | ||||||
|  |   hardware.cpu.intel.updateMicrocode = true; | ||||||
|  | 
 | ||||||
|  |   # Filesystems | ||||||
|  |   fileSystems."/" = { | ||||||
|  |     device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23"; | ||||||
|  |     fsType = "ext4"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   fileSystems."/boot" = { | ||||||
|  |     device = "/dev/disk/by-uuid/46BF-DE2C"; | ||||||
|  |     fsType = "vfat"; | ||||||
|  |     options = [ | ||||||
|  |       "fmask=0077" | ||||||
|  |       "dmask=0077" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Swapfile | ||||||
|  |   swapDevices = [ | ||||||
|  |     { | ||||||
|  |       device = "/var/lib/swapfile"; | ||||||
|  |       size = 16 * 1024; | ||||||
|  |     } | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								hosts/20212060/users/jan.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								hosts/20212060/users/jan.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   modules.profiles.jan.enable = true; | ||||||
|  | } | ||||||
							
								
								
									
										241
									
								
								hosts/vm-audio/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								hosts/vm-audio/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,241 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # State version | ||||||
|  |   system.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   # Machine hostname | ||||||
|  |   networking.hostName = "vm-audio"; | ||||||
|  | 
 | ||||||
|  |   # Enabled modules | ||||||
|  |   modules = { | ||||||
|  |     profiles.vm.enable = true; | ||||||
|  |     sound.enable = true; | ||||||
|  |     # spotifyd.enable = true; # TODO: Add this as a local module | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Install system packages | ||||||
|  |   environment.systemPackages = with pkgs; [ | ||||||
|  |     carla | ||||||
|  |     xpra | ||||||
|  |     alsa-utils | ||||||
|  |     pulsemixer | ||||||
|  |     adwaita-icon-theme | ||||||
|  |     open-stage-control | ||||||
|  |     carla_osc_bridge | ||||||
|  | 
 | ||||||
|  |     # Add LV2 plugins | ||||||
|  |     lsp-plugins | ||||||
|  |     airwindows-lv2 | ||||||
|  |     distrho-ports | ||||||
|  |     cardinal | ||||||
|  |     calf | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   # Setup firewall | ||||||
|  |   networking.firewall = { | ||||||
|  |     allowedTCPPorts = [ | ||||||
|  |       8080 | ||||||
|  |       10402 | ||||||
|  |       15151 | ||||||
|  |       22752 | ||||||
|  |     ]; | ||||||
|  |     allowedUDPPorts = [ | ||||||
|  |       8080 | ||||||
|  |       10402 | ||||||
|  |       15151 | ||||||
|  |       22752 | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Setup dependencies | ||||||
|  |   environment.variables.LD_LIBRARY_PATH = lib.mkForce "${lib.makeLibraryPath ( | ||||||
|  |     with pkgs; | ||||||
|  |     [ | ||||||
|  |       cairo | ||||||
|  |       pipewire.jack | ||||||
|  |     ] | ||||||
|  |   )}"; | ||||||
|  |   qt = { | ||||||
|  |     enable = true; | ||||||
|  |     style = "adwaita"; | ||||||
|  |   }; | ||||||
|  |   xdg.icons = { | ||||||
|  |     enable = true; | ||||||
|  |     fallbackCursorThemes = [ "Adwaita" ]; | ||||||
|  |   }; | ||||||
|  |   hardware.graphics.enable = true; | ||||||
|  | 
 | ||||||
|  |   # User for audio mixing | ||||||
|  |   users.users.mixer = { | ||||||
|  |     isNormalUser = true; | ||||||
|  |     group = "mixer"; | ||||||
|  |     extraGroups = [ "systemd-journal" ]; | ||||||
|  |     openssh.authorizedKeys.keys = [ | ||||||
|  |       "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKxoQSxfYqf9ITN8Fhckk8WbY4dwtBAXOhC9jxihJvq jan@bulthuis.dev" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  |   users.groups.mixer = { }; | ||||||
|  |   users.groups.audio = { | ||||||
|  |     members = [ | ||||||
|  |       "mixer" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  |   users.groups.bluetooth = { | ||||||
|  |     members = [ | ||||||
|  |       "mixer" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Xpra service | ||||||
|  |   systemd.user.services.xpra = { | ||||||
|  |     description = "Xpra Service"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.xpra}/bin/xpra start :7 --bind-tcp=0.0.0.0:15151 --daemon=no"; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Carla service | ||||||
|  |   systemd.user.services.carla = { | ||||||
|  |     description = "Carla Service"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |       "sound.target" | ||||||
|  |     ]; | ||||||
|  |     requires = [ | ||||||
|  |       "xpra.service" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.carla}/bin/carla /home/mixer/Default.carxp -platform xcb"; | ||||||
|  |       Environment = "\"DISPLAY=:7\""; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Carla service | ||||||
|  |   systemd.user.services.carla-bridge = { | ||||||
|  |     description = "Carla OSC Bridge"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |       "sound.target" | ||||||
|  |     ]; | ||||||
|  |     requires = [ | ||||||
|  |       "carla.service" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.carla_osc_bridge}/bin/carla_osc_bridge --clients \"127.0.0.1:8080\""; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Open stage control service | ||||||
|  |   systemd.user.services.osc = { | ||||||
|  |     description = "OSC Service"; | ||||||
|  |     wantedBy = [ "default.target" ]; | ||||||
|  |     after = [ | ||||||
|  |       "network.target" | ||||||
|  |     ]; | ||||||
|  |     requires = [ | ||||||
|  |       "carla.service" | ||||||
|  |     ]; | ||||||
|  |     unitConfig = { | ||||||
|  |       ConditionUser = "mixer"; | ||||||
|  |     }; | ||||||
|  |     serviceConfig = { | ||||||
|  |       ExecStart = "${pkgs.open-stage-control}/bin/open-stage-control --no-gui --send 127.0.0.1:10402 --load /home/mixer/open-stage-control/session.json --theme /home/mixer/open-stage-control/theme.css"; | ||||||
|  |       Environment = "\"ELECTRON_RUN_AS_NODE=1\""; | ||||||
|  |       Restart = "always"; | ||||||
|  |       RestartSec = 5; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Create bluetooth A2DP source | ||||||
|  |   hardware.bluetooth = { | ||||||
|  |     enable = true; | ||||||
|  |     disabledPlugins = [ "hostname" ]; | ||||||
|  |     settings.General = { | ||||||
|  |       Name = "Linox"; | ||||||
|  |       Class = "0x240414"; | ||||||
|  |       DiscoverableTimeout = 0; | ||||||
|  |       AlwaysPairable = true; | ||||||
|  |       PairableTimeout = 0; | ||||||
|  |       FastConnectable = true; | ||||||
|  |       JustWorksRepairing = "always"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   services.pipewire.wireplumber.extraConfig."50-bluetooth-a2dp" = { | ||||||
|  |     "monitor.bluez.properties" = { | ||||||
|  |       "bluez5.roles" = [ "a2dp_source" ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Create null sinks | ||||||
|  |   services.pipewire.extraConfig.pipewire."91-null-sinks" = { | ||||||
|  |     "context.objects" = [ | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "Speaker-Proxy"; | ||||||
|  |           "node.description" = "Proxy for Speaker Output"; | ||||||
|  |           "media.class" = "Audio/Sink"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "Headphone-Proxy"; | ||||||
|  |           "node.description" = "Proxy for Headphone Output"; | ||||||
|  |           "media.class" = "Audio/Sink"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "SpotifyD-Proxy"; | ||||||
|  |           "node.description" = "Proxy for SpotifyD"; | ||||||
|  |           "media.class" = "Audio/Sink"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         factory = "adapter"; | ||||||
|  |         args = { | ||||||
|  |           "factory.name" = "support.null-audio-sink"; | ||||||
|  |           "node.name" = "AnalogIn-Proxy"; | ||||||
|  |           "node.description" = "Proxy for the analog input"; | ||||||
|  |           "media.class" = "Audio/Source/Virtual"; | ||||||
|  |           "audio.position" = "L,R"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								hosts/vm-audio/users/local.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								hosts/vm-audio/users/local.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   modules.profiles.base.enable = true; | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								hosts/vm-vpn/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								hosts/vm-vpn/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # State version | ||||||
|  |   system.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   # Machine hostname | ||||||
|  |   networking.hostName = "vm-vpn"; | ||||||
|  | 
 | ||||||
|  |   # Enabled modules | ||||||
|  |   modules = { | ||||||
|  |     profiles.vm.enable = true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Setup wstunnel server | ||||||
|  |   services.wstunnel = { | ||||||
|  |     enable = true; | ||||||
|  |     servers.wg-tunnel = { | ||||||
|  |       enableHTTPS = true; | ||||||
|  |       listen = { | ||||||
|  |         host = "0.0.0.0"; | ||||||
|  |         port = 8080; | ||||||
|  |       }; | ||||||
|  |       restrictTo = [ | ||||||
|  |         { | ||||||
|  |           host = "10.10.40.100"; | ||||||
|  |           port = 51820; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |       tlsCertificate = "/var/lib/secrets/fullchain.pem"; | ||||||
|  |       tlsKey = "/var/lib/secrets/key.pem"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   networking.firewall = { | ||||||
|  |     allowedTCPPorts = [ 8080 ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								hosts/vm-vpn/users/local.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								hosts/vm-vpn/users/local.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   modules.profiles.base.enable = true; | ||||||
|  | } | ||||||
| @ -1,63 +0,0 @@ | |||||||
| { lib, ... }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import environment |  | ||||||
|     ../default.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     # State version |  | ||||||
|     system.stateVersion = "24.05"; |  | ||||||
| 
 |  | ||||||
|     # Machine hostname |  | ||||||
|     networking.hostName = "20212060"; |  | ||||||
| 
 |  | ||||||
|     # Enabled modules |  | ||||||
|     modules = { |  | ||||||
|       base.desktop.enable = true; |  | ||||||
|       bluetooth.enable = true; |  | ||||||
|       power-saving.enable = false; |  | ||||||
|       networkmanager.enable = true; |  | ||||||
|       grdp.enable = true; |  | ||||||
|       printing.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Hardware configuration |  | ||||||
|     hardware.enableRedistributableFirmware = true; |  | ||||||
|     boot.initrd.availableKernelModules = [ |  | ||||||
|       "xhci_pci" |  | ||||||
|       "nvme" |  | ||||||
|       "usb_storage" |  | ||||||
|       "sd_mod" |  | ||||||
|       "rtsx_pci_sdmmc" |  | ||||||
|     ]; |  | ||||||
|     boot.initrd.kernelModules = [ ]; |  | ||||||
|     boot.kernelModules = [ "kvm-intel" ]; |  | ||||||
|     boot.extraModulePackages = [ ]; |  | ||||||
|     hardware.cpu.intel.updateMicrocode = true; |  | ||||||
| 
 |  | ||||||
|     # Filesystems |  | ||||||
|     fileSystems."/" = { |  | ||||||
|       device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23"; |  | ||||||
|       fsType = "ext4"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     fileSystems."/boot" = { |  | ||||||
|       device = "/dev/disk/by-uuid/46BF-DE2C"; |  | ||||||
|       fsType = "vfat"; |  | ||||||
|       options = [ |  | ||||||
|         "fmask=0077" |  | ||||||
|         "dmask=0077" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Swapfile |  | ||||||
|     swapDevices = [ |  | ||||||
|       { |  | ||||||
|         device = "/var/lib/swapfile"; |  | ||||||
|         size = 16 * 1024; |  | ||||||
|       } |  | ||||||
|     ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,244 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import environment |  | ||||||
|     ./vm-base.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     # Machine hostname |  | ||||||
|     networking.hostName = "vm-audio"; |  | ||||||
| 
 |  | ||||||
|     # Enabled modules |  | ||||||
|     modules = { |  | ||||||
|       pipewire.enable = true; |  | ||||||
|       spotifyd.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Install system packages |  | ||||||
|     environment.systemPackages = with pkgs; [ |  | ||||||
|       carla |  | ||||||
|       xpra |  | ||||||
|       alsa-utils |  | ||||||
|       pulsemixer |  | ||||||
|       adwaita-icon-theme |  | ||||||
|       open-stage-control |  | ||||||
|       carla_osc_bridge |  | ||||||
| 
 |  | ||||||
|       # Add LV2 plugins |  | ||||||
|       lsp-plugins |  | ||||||
|       airwindows-lv2 |  | ||||||
|       distrho-ports |  | ||||||
|       cardinal |  | ||||||
|       calf |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Setup firewall |  | ||||||
|     networking.firewall = { |  | ||||||
|       allowedTCPPorts = [ |  | ||||||
|         8080 |  | ||||||
|         10402 |  | ||||||
|         15151 |  | ||||||
|         22752 |  | ||||||
|       ]; |  | ||||||
|       allowedUDPPorts = [ |  | ||||||
|         8080 |  | ||||||
|         10402 |  | ||||||
|         15151 |  | ||||||
|         22752 |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Setup dependencies |  | ||||||
|     environment.variables.LD_LIBRARY_PATH = lib.mkForce "${lib.makeLibraryPath ( |  | ||||||
|       with pkgs; |  | ||||||
|       [ |  | ||||||
|         cairo |  | ||||||
|         pipewire.jack |  | ||||||
|       ] |  | ||||||
|     )}"; |  | ||||||
|     qt = { |  | ||||||
|       enable = true; |  | ||||||
|       style = "adwaita"; |  | ||||||
|     }; |  | ||||||
|     xdg.icons = { |  | ||||||
|       enable = true; |  | ||||||
|       fallbackCursorThemes = [ "Adwaita" ]; |  | ||||||
|     }; |  | ||||||
|     hardware.graphics.enable = true; |  | ||||||
| 
 |  | ||||||
|     # User for audio mixing |  | ||||||
|     users.users.mixer = { |  | ||||||
|       isNormalUser = true; |  | ||||||
|       group = "mixer"; |  | ||||||
|       extraGroups = [ "systemd-journal" ]; |  | ||||||
|       openssh.authorizedKeys.keys = [ |  | ||||||
|         "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKxoQSxfYqf9ITN8Fhckk8WbY4dwtBAXOhC9jxihJvq jan@bulthuis.dev" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|     users.groups.mixer = { }; |  | ||||||
|     users.groups.audio = { |  | ||||||
|       members = [ |  | ||||||
|         "mixer" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|     users.groups.bluetooth = { |  | ||||||
|       members = [ |  | ||||||
|         "mixer" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Xpra service |  | ||||||
|     systemd.user.services.xpra = { |  | ||||||
|       description = "Xpra Service"; |  | ||||||
|       wantedBy = [ "default.target" ]; |  | ||||||
|       after = [ |  | ||||||
|         "network.target" |  | ||||||
|       ]; |  | ||||||
|       unitConfig = { |  | ||||||
|         ConditionUser = "mixer"; |  | ||||||
|       }; |  | ||||||
|       serviceConfig = { |  | ||||||
|         ExecStart = "${pkgs.xpra}/bin/xpra start :7 --bind-tcp=0.0.0.0:15151 --daemon=no"; |  | ||||||
|         Restart = "always"; |  | ||||||
|         RestartSec = 5; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Carla service |  | ||||||
|     systemd.user.services.carla = { |  | ||||||
|       description = "Carla Service"; |  | ||||||
|       wantedBy = [ "default.target" ]; |  | ||||||
|       after = [ |  | ||||||
|         "network.target" |  | ||||||
|         "sound.target" |  | ||||||
|       ]; |  | ||||||
|       requires = [ |  | ||||||
|         "xpra.service" |  | ||||||
|       ]; |  | ||||||
|       unitConfig = { |  | ||||||
|         ConditionUser = "mixer"; |  | ||||||
|       }; |  | ||||||
|       serviceConfig = { |  | ||||||
|         ExecStart = "${pkgs.carla}/bin/carla /home/mixer/Default.carxp -platform xcb"; |  | ||||||
|         Environment = "\"DISPLAY=:7\""; |  | ||||||
|         Restart = "always"; |  | ||||||
|         RestartSec = 5; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Carla service |  | ||||||
|     systemd.user.services.carla-bridge = { |  | ||||||
|       description = "Carla OSC Bridge"; |  | ||||||
|       wantedBy = [ "default.target" ]; |  | ||||||
|       after = [ |  | ||||||
|         "network.target" |  | ||||||
|         "sound.target" |  | ||||||
|       ]; |  | ||||||
|       requires = [ |  | ||||||
|         "carla.service" |  | ||||||
|       ]; |  | ||||||
|       unitConfig = { |  | ||||||
|         ConditionUser = "mixer"; |  | ||||||
|       }; |  | ||||||
|       serviceConfig = { |  | ||||||
|         ExecStart = "${pkgs.carla_osc_bridge}/bin/carla_osc_bridge --clients \"127.0.0.1:8080\""; |  | ||||||
|         Restart = "always"; |  | ||||||
|         RestartSec = 5; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Open stage control service |  | ||||||
|     systemd.user.services.osc = { |  | ||||||
|       description = "OSC Service"; |  | ||||||
|       wantedBy = [ "default.target" ]; |  | ||||||
|       after = [ |  | ||||||
|         "network.target" |  | ||||||
|       ]; |  | ||||||
|       requires = [ |  | ||||||
|         "carla.service" |  | ||||||
|       ]; |  | ||||||
|       unitConfig = { |  | ||||||
|         ConditionUser = "mixer"; |  | ||||||
|       }; |  | ||||||
|       serviceConfig = { |  | ||||||
|         ExecStart = "${pkgs.open-stage-control}/bin/open-stage-control --no-gui --send 127.0.0.1:10402 --load /home/mixer/open-stage-control/session.json --theme /home/mixer/open-stage-control/theme.css"; |  | ||||||
|         Environment = "\"ELECTRON_RUN_AS_NODE=1\""; |  | ||||||
|         Restart = "always"; |  | ||||||
|         RestartSec = 5; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Create bluetooth A2DP source |  | ||||||
|     hardware.bluetooth = { |  | ||||||
|       enable = true; |  | ||||||
|       disabledPlugins = [ "hostname" ]; |  | ||||||
|       settings.General = { |  | ||||||
|         Name = "Linox"; |  | ||||||
|         Class = "0x240414"; |  | ||||||
|         DiscoverableTimeout = 0; |  | ||||||
|         AlwaysPairable = true; |  | ||||||
|         PairableTimeout = 0; |  | ||||||
|         FastConnectable = true; |  | ||||||
|         JustWorksRepairing = "always"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|     services.pipewire.wireplumber.extraConfig."50-bluetooth-a2dp" = { |  | ||||||
|       "monitor.bluez.properties" = { |  | ||||||
|         "bluez5.roles" = [ "a2dp_source" ]; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Create null sinks |  | ||||||
|     services.pipewire.extraConfig.pipewire."91-null-sinks" = { |  | ||||||
|       "context.objects" = [ |  | ||||||
|         { |  | ||||||
|           factory = "adapter"; |  | ||||||
|           args = { |  | ||||||
|             "factory.name" = "support.null-audio-sink"; |  | ||||||
|             "node.name" = "Speaker-Proxy"; |  | ||||||
|             "node.description" = "Proxy for Speaker Output"; |  | ||||||
|             "media.class" = "Audio/Sink"; |  | ||||||
|             "audio.position" = "L,R"; |  | ||||||
|           }; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           factory = "adapter"; |  | ||||||
|           args = { |  | ||||||
|             "factory.name" = "support.null-audio-sink"; |  | ||||||
|             "node.name" = "Headphone-Proxy"; |  | ||||||
|             "node.description" = "Proxy for Headphone Output"; |  | ||||||
|             "media.class" = "Audio/Sink"; |  | ||||||
|             "audio.position" = "L,R"; |  | ||||||
|           }; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           factory = "adapter"; |  | ||||||
|           args = { |  | ||||||
|             "factory.name" = "support.null-audio-sink"; |  | ||||||
|             "node.name" = "SpotifyD-Proxy"; |  | ||||||
|             "node.description" = "Proxy for SpotifyD"; |  | ||||||
|             "media.class" = "Audio/Sink"; |  | ||||||
|             "audio.position" = "L,R"; |  | ||||||
|           }; |  | ||||||
|         } |  | ||||||
|         { |  | ||||||
|           factory = "adapter"; |  | ||||||
|           args = { |  | ||||||
|             "factory.name" = "support.null-audio-sink"; |  | ||||||
|             "node.name" = "AnalogIn-Proxy"; |  | ||||||
|             "node.description" = "Proxy for the analog input"; |  | ||||||
|             "media.class" = "Audio/Source/Virtual"; |  | ||||||
|             "audio.position" = "L,R"; |  | ||||||
|           }; |  | ||||||
|         } |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,60 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.base; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.base = { |  | ||||||
|     enable = mkEnableOption "base"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     environment.systemPackages = with pkgs; [ |  | ||||||
|       # Add base linux utilities |  | ||||||
|       git |  | ||||||
|       wget |  | ||||||
|       curl |  | ||||||
|       dig |  | ||||||
|       procps |  | ||||||
|       wireguard-tools |  | ||||||
|       usbutils |  | ||||||
|       pciutils |  | ||||||
|       zip |  | ||||||
|       unzip |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     modules = { |  | ||||||
|       # Enable base modules |  | ||||||
|       clean-tmp.enable = true; |  | ||||||
|       neovim.enable = true; |  | ||||||
|       systemd-boot.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # TODO: Remove everything below, it is here out of convenience and should be elsewhere |  | ||||||
|     # networking.nameservers = [ |  | ||||||
|     #   "9.9.9.9" |  | ||||||
|     #   "149.112.112.112" |  | ||||||
|     # ]; |  | ||||||
|     # programs.captive-browser.enable = true; |  | ||||||
|     services.resolved = { |  | ||||||
|       enable = true; |  | ||||||
|     }; |  | ||||||
|     networking.firewall.enable = true; |  | ||||||
|     modules.unfree.enable = true; |  | ||||||
|     nix.settings.experimental-features = "nix-command flakes"; |  | ||||||
|     nixpkgs.hostPlatform = "x86_64-linux"; |  | ||||||
| 
 |  | ||||||
|     console.packages = [ |  | ||||||
|       pkgs.dina-psfu |  | ||||||
|     ]; |  | ||||||
|     console.font = "dina"; |  | ||||||
|     console.earlySetup = true; |  | ||||||
|     boot.loader.timeout = 0; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,93 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.base.desktop; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.base.desktop = { |  | ||||||
|     enable = mkEnableOption "desktop"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     environment.systemPackages = with pkgs; [ |  | ||||||
|       # TODO: MOVE |  | ||||||
|       quickemu # TODO: Reenable once building this is fixed |  | ||||||
|       pdftk |  | ||||||
| 
 |  | ||||||
|       # TODO: Move to USB module |  | ||||||
|       # usbutils |  | ||||||
|       # udiskie |  | ||||||
|       # udisks |  | ||||||
|       brightnessctl |  | ||||||
| 
 |  | ||||||
|       wireshark |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Move to Realm module |  | ||||||
|     security.krb5 = { |  | ||||||
|       enable = true; |  | ||||||
|       settings = { |  | ||||||
|         libdefaults = { |  | ||||||
|           rdns = false; |  | ||||||
|         }; |  | ||||||
|         realms = { |  | ||||||
|           "GEWISWG.GEWIS.NL" = { |  | ||||||
|             kdc = [ |  | ||||||
|               "https://gewisvdesktop.gewis.nl/KdcProxy" |  | ||||||
|             ]; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     modules = { |  | ||||||
|       # Enable base modules |  | ||||||
|       base.enable = true; |  | ||||||
|       fontconfig.enable = true; |  | ||||||
|       nixgreety.enable = true; |  | ||||||
|       pipewire.enable = true; |  | ||||||
|       graphics.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     programs.dconf.enable = true; |  | ||||||
|     services.libinput.enable = true; |  | ||||||
|     networking.firewall = { |  | ||||||
|       enable = true; |  | ||||||
|       logRefusedConnections = true; |  | ||||||
|       logRefusedPackets = true; |  | ||||||
|       logReversePathDrops = true; |  | ||||||
|       logRefusedUnicastsOnly = false; |  | ||||||
|     }; |  | ||||||
|     programs.wireshark.enable = true; |  | ||||||
|     machine.sudo-groups = [ "wireshark" ]; |  | ||||||
|     services.upower.enable = true; # For battery percentage in gnome |  | ||||||
|     modules.unfree.allowedPackages = [ |  | ||||||
|       "nvidia-x11" |  | ||||||
|       "nvidia-settings" |  | ||||||
|     ]; |  | ||||||
|     networking.firewall.allowedTCPPortRanges = [ |  | ||||||
|       { |  | ||||||
|         from = 10000; |  | ||||||
|         to = 11000; |  | ||||||
|       } |  | ||||||
|     ]; |  | ||||||
|     networking.firewall.allowedUDPPortRanges = [ |  | ||||||
|       { |  | ||||||
|         from = 10000; |  | ||||||
|         to = 11000; |  | ||||||
|       } |  | ||||||
|     ]; |  | ||||||
|     security.rtkit.enable = true; |  | ||||||
|     security.polkit.enable = true; |  | ||||||
| 
 |  | ||||||
|     # TODO: Move to USB module |  | ||||||
|     # services.gvfs.enable = true; |  | ||||||
|     services.udisks2.enable = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,23 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.bluetooth; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.bluetooth = { |  | ||||||
|     enable = mkEnableOption "bluetooth"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     environment.systemPackages = with pkgs; [ bluez ]; |  | ||||||
| 
 |  | ||||||
|     hardware.bluetooth.enable = true; |  | ||||||
|     hardware.bluetooth.powerOnBoot = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.clean-tmp; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.clean-tmp = { |  | ||||||
|     enable = mkEnableOption "clean-tmp"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { boot.tmp.cleanOnBoot = true; }; |  | ||||||
| } |  | ||||||
| @ -1,37 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.silent-boot; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.silent-boot = { |  | ||||||
|     enable = mkEnableOption "silent-boot"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     boot = { |  | ||||||
|       loader.timeout = 0; |  | ||||||
| 
 |  | ||||||
|       consoleLogLevel = 0; |  | ||||||
|       initrd.verbose = false; |  | ||||||
|       initrd.checkJournalingFS = false; |  | ||||||
| 
 |  | ||||||
|       kernelParams = [ |  | ||||||
|         "quiet" |  | ||||||
|         "boot.shell_on_fail" |  | ||||||
|         "loglevel=3" |  | ||||||
|         "rd.systemd.show_status=false" |  | ||||||
|         "rd.udev.log_level=3" |  | ||||||
|         "udev.log_priority=3" |  | ||||||
|         "video=efifb:nobgrt" |  | ||||||
|         "bgrt_disable" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.brightnessctl; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.brightnessctl = { |  | ||||||
|     enable = mkEnableOption "brightnessctl"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { environment.systemPackages = [ pkgs.brightnessctl ]; }; |  | ||||||
| } |  | ||||||
| @ -1,39 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import modules |  | ||||||
|     ./base/default.nix |  | ||||||
|     ./base/desktop.nix |  | ||||||
|     ./bluetooth/default.nix |  | ||||||
|     ./boot/clean-tmp.nix |  | ||||||
|     ./boot/silent-boot.nix |  | ||||||
|     ./boot/systemd-boot.nix |  | ||||||
|     ./brightnessctl/default.nix |  | ||||||
|     ./fontconfig/default.nix |  | ||||||
|     ./graphics/default.nix |  | ||||||
|     ./grdp/default.nix |  | ||||||
|     ./greeter/greetd/default.nix |  | ||||||
|     ./greeter/greetd/nixgreety.nix |  | ||||||
|     ./greeter/greetd/tuigreet.nix |  | ||||||
|     ./greeter/ly/default.nix |  | ||||||
|     ./locale/default.nix |  | ||||||
|     ./neovim/default.nix |  | ||||||
|     ./networkmanager/default.nix |  | ||||||
|     ./power-saving/default.nix |  | ||||||
|     ./printing/default.nix |  | ||||||
|     ./sound/pipewire.nix |  | ||||||
|     ./spotifyd/default.nix |  | ||||||
|     ./ssh/default.nix |  | ||||||
|     ./users/default.nix |  | ||||||
|     ./unfree/default.nix |  | ||||||
|     ./vpn/tailscale.nix |  | ||||||
|     ./wifi/wpa_supplicant.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
| @ -1,27 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.fontconfig; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.fontconfig = { |  | ||||||
|     enable = mkEnableOption "fontconfig"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     fonts.fontconfig.enable = cfg.enable; |  | ||||||
|     fonts.enableDefaultPackages = false; |  | ||||||
|     fonts.fontconfig.defaultFonts = { |  | ||||||
|       serif = mkDefault [ ]; |  | ||||||
|       sansSerif = mkDefault [ ]; |  | ||||||
|       monospace = mkDefault [ ]; |  | ||||||
|       emoji = mkDefault [ ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,39 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.fontconfig; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.graphics = { |  | ||||||
|     enable = mkEnableOption "graphics"; |  | ||||||
|   }; |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     # TODO: Modularize further, especially modesetting should be its own module. |  | ||||||
|     # Set up graphics |  | ||||||
|     hardware.graphics.enable32Bit = true; |  | ||||||
|     hardware.graphics.enable = true; |  | ||||||
|     services.xserver.videoDrivers = [ "nvidia" ]; |  | ||||||
|     hardware.nvidia = { |  | ||||||
|       modesetting.enable = true; |  | ||||||
|       powerManagement.enable = false; |  | ||||||
|       powerManagement.finegrained = false; |  | ||||||
|       open = false; |  | ||||||
|       nvidiaSettings = true; |  | ||||||
|       package = config.boot.kernelPackages.nvidiaPackages.beta; |  | ||||||
|       prime = { |  | ||||||
|         intelBusId = "PCI:0:2:0"; |  | ||||||
|         nvidiaBusId = "PCI:1:0:0"; |  | ||||||
|         offload = { |  | ||||||
|           enable = true; |  | ||||||
|           enableOffloadCmd = true; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,50 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| { |  | ||||||
|   options.modules.grdp = { |  | ||||||
|     enable = mkEnableOption "grdp"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf config.modules.grdp.enable { |  | ||||||
|     services.gnome.gnome-remote-desktop.enable = true; |  | ||||||
|     environment.systemPackages = with pkgs; [ |  | ||||||
|       gnome-remote-desktop |  | ||||||
|       gnome-control-center |  | ||||||
|       gnome-session |  | ||||||
|       gnome-shell |  | ||||||
|       gnome-settings-daemon |  | ||||||
|       gdm |  | ||||||
|     ]; |  | ||||||
|     systemd.services."gnome-remote-desktop".wantedBy = [ "graphical.target" ]; |  | ||||||
|     networking.firewall = { |  | ||||||
|       allowedTCPPorts = [ 3389 ]; |  | ||||||
|       allowedUDPPorts = [ 3389 ]; |  | ||||||
|     }; |  | ||||||
|     services.xserver.displayManager.gdm.enable = true; |  | ||||||
|     modules.greetd.enable = mkForce false; |  | ||||||
| 
 |  | ||||||
|     # security.polkit.extraConfig = '' |  | ||||||
|     #   polkit.addRule(function(action, subject) { |  | ||||||
|     #     if (action.id == "org.gnome.controlcenter.remote-session-helper" && |  | ||||||
|     #         subject.isInGroup("wheel")) { |  | ||||||
|     #       return polkit.Result.YES; |  | ||||||
|     #     } |  | ||||||
|     #   });''; |  | ||||||
|     # programs.dconf.profiles.user.databases = [ |  | ||||||
|     #   { |  | ||||||
|     #     settings = with lib.gvariant; { |  | ||||||
|     #       "org/gnome/desktop/remote-desktop/rdp" = { |  | ||||||
|     #         enable = true; |  | ||||||
|     #         view-only = false; |  | ||||||
|     #       }; |  | ||||||
|     #     }; |  | ||||||
|     #   } |  | ||||||
|     # ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.greetd; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.greetd = { |  | ||||||
|     enable = mkEnableOption "greetd"; |  | ||||||
|     command = mkOption { |  | ||||||
|       type = types.str; |  | ||||||
|       default = ""; |  | ||||||
|       description = "Command to run to show greeter."; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     services.greetd = { |  | ||||||
|       enable = true; |  | ||||||
|       settings.default_session = { |  | ||||||
|         command = cfg.command; |  | ||||||
|         user = mkDefault "greeter"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,30 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.nixgreety; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.nixgreety = { |  | ||||||
|     enable = mkEnableOption "nixgreety"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     # Enable greetd |  | ||||||
|     modules.greetd = { |  | ||||||
|       enable = true; |  | ||||||
|       command = "${pkgs.nixgreety}/bin/nixgreety"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     services.greetd.settings.default_session.user = "root"; |  | ||||||
| 
 |  | ||||||
|     environment.systemPackages = with pkgs; [ |  | ||||||
|       nixgreety |  | ||||||
|     ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,37 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.tuigreet; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.tuigreet = { |  | ||||||
|     enable = mkEnableOption "tuigreet"; |  | ||||||
|     greeting = mkOption { |  | ||||||
|       type = types.str; |  | ||||||
|       default = "Hewwo! >_< :3"; |  | ||||||
|       description = "Greeting message to show."; |  | ||||||
|     }; |  | ||||||
|     command = mkOption { |  | ||||||
|       type = types.str; |  | ||||||
|       default = "~/.initrc"; |  | ||||||
|       description = "Command to run after logging in."; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     # Enable greetd |  | ||||||
|     modules.greetd = { |  | ||||||
|       enable = true; |  | ||||||
|       command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --greeting \"${cfg.greeting}\" --time --cmd \"${cfg.command}\" --asterisks"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Enable silent boot to prevent late log messages from messing up tuigreet |  | ||||||
|     modules.silent-boot.enable = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,30 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.ly; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.ly = { |  | ||||||
|     enable = mkEnableOption "ly"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     services.displayManager.ly = { |  | ||||||
|       enable = true; |  | ||||||
|       settings = { |  | ||||||
|         animation = "matrix"; |  | ||||||
|         animation_refresh_ms = 32; |  | ||||||
|         box_title = "Hewwo! >_< :3"; |  | ||||||
|         clear_password = true; |  | ||||||
|         load = true; |  | ||||||
|         save = true; |  | ||||||
|         xinitrc = "null"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
							
								
								
									
										81
									
								
								modules/home/desktop/gnome.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								modules/home/desktop/gnome.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.desktop.gnome; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.desktop.gnome = { | ||||||
|  |     enable = mkEnableOption "gnome"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # TODO: Enable extensions with dconf | ||||||
|  | 
 | ||||||
|  |     home.pointerCursor = { | ||||||
|  |       name = "capitaine-cursors"; | ||||||
|  |       size = 24; | ||||||
|  |       package = pkgs.capitaine-cursors; | ||||||
|  |       gtk.enable = true; | ||||||
|  |       x11.enable = true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     home.packages = | ||||||
|  |       with pkgs; | ||||||
|  |       [ | ||||||
|  |         gnome-session | ||||||
|  |         gnome-shell | ||||||
|  |         gnome-tweaks | ||||||
|  |         gnome-calculator | ||||||
|  |         snapshot | ||||||
|  |         gnome-characters | ||||||
|  |         gnome-connections | ||||||
|  |         blackbox-terminal | ||||||
|  |         baobab | ||||||
|  |         gnome-disk-utility | ||||||
|  |         papers | ||||||
|  |         nautilus | ||||||
|  |         gnome-font-viewer | ||||||
|  |         loupe | ||||||
|  |         gnome-maps | ||||||
|  |         gnome-music | ||||||
|  |         gnome-control-center | ||||||
|  |         gnome-text-editor | ||||||
|  |         showtime | ||||||
|  |         file-roller | ||||||
|  |         mission-center | ||||||
|  |         dconf-editor | ||||||
|  | 
 | ||||||
|  |         # For theming gtk3 | ||||||
|  |         adw-gtk3 | ||||||
|  |       ] | ||||||
|  |       ++ (with pkgs.gnomeExtensions; [ | ||||||
|  |         gsconnect | ||||||
|  |         disable-workspace-animation | ||||||
|  |         wallpaper-slideshow | ||||||
|  |         media-progress | ||||||
|  |         # luminus-desktop | ||||||
|  |       ]); | ||||||
|  | 
 | ||||||
|  |     # Enable and set the gtk themes | ||||||
|  |     gtk = { | ||||||
|  |       enable = true; | ||||||
|  |       gtk3.extraConfig = { | ||||||
|  |         gtk-theme-name = "adw-gtk3"; | ||||||
|  |       }; | ||||||
|  |       gtk4.extraConfig = { | ||||||
|  |         gtk-theme-name = "Adwaita"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Set the theme with dconf | ||||||
|  |     dconf.settings."org/gnome/desktop/interface" = { | ||||||
|  |       gtk-theme = "adw-gtk3"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -15,11 +15,6 @@ in | |||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     # Allow unfree |  | ||||||
|     modules.unfree.allowedPackages = [ |  | ||||||
|       "vscode-extension-ms-vscode-cpptools" |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Gitignore additions |     # Gitignore additions | ||||||
|     modules.git.ignores = [ |     modules.git.ignores = [ | ||||||
|       ".ccls-cache" |       ".ccls-cache" | ||||||
| @ -48,8 +43,8 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { |     # programs.nixvim = { | ||||||
|       plugins.lsp.servers.ccls.enable = true; |     #   plugins.lsp.servers.ccls.enable = true; | ||||||
|     }; |     # }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -37,6 +37,6 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { }; |     # programs.nixvim = { }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -33,6 +33,6 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { }; |     # programs.nixvim = { }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -39,6 +39,6 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { }; |     # programs.nixvim = { }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -53,8 +53,8 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { |     # programs.nixvim = { | ||||||
| 
 | 
 | ||||||
|     }; |     # }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -27,11 +27,6 @@ in | |||||||
|     # Development packages |     # Development packages | ||||||
|     home.packages = [ ]; |     home.packages = [ ]; | ||||||
| 
 | 
 | ||||||
|     # Allow unfree |  | ||||||
|     modules.unfree.allowedPackages = [ |  | ||||||
|       "vscode-extension-MS-python-vscode-pylance" |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # VSCode configuration |     # VSCode configuration | ||||||
|     programs.vscode = { |     programs.vscode = { | ||||||
|       profiles.default = { |       profiles.default = { | ||||||
| @ -52,6 +47,6 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { }; |     # programs.nixvim = { }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -50,10 +50,10 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { |     # programs.nixvim = { | ||||||
|       plugins.rustaceanvim = { |     #   plugins.rustaceanvim = { | ||||||
|         enable = true; |     #     enable = true; | ||||||
|       }; |     #   }; | ||||||
|     }; |     # }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -39,31 +39,31 @@ in | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Neovim configuration |     # Neovim configuration | ||||||
|     programs.nixvim = { |     # programs.nixvim = { | ||||||
|       extraConfigVim = '' |     #   extraConfigVim = '' | ||||||
|         " Enforce latexmk |     #     " Enforce latexmk | ||||||
|         let g:vimtex_compiler_method = 'latexmk' |     #     let g:vimtex_compiler_method = 'latexmk' | ||||||
| 
 | 
 | ||||||
|         " Set latexmk compilation settings |     #     " Set latexmk compilation settings | ||||||
|         let g:vimtex_compiler_latexmk = { |     #     let g:vimtex_compiler_latexmk = { | ||||||
|           \ 'options': [ |     #       \ 'options': [ | ||||||
|           \   '-shell-escape', |     #       \   '-shell-escape', | ||||||
|           \   '-verbose', |     #       \   '-verbose', | ||||||
|           \   '-file-line-error', |     #       \   '-file-line-error', | ||||||
|           \   '-synctex=1', |     #       \   '-synctex=1', | ||||||
|           \   '-interaction=nonstopmode', |     #       \   '-interaction=nonstopmode', | ||||||
|           \ ], |     #       \ ], | ||||||
|           \} |     #       \} | ||||||
|       ''; |     #   ''; | ||||||
| 
 | 
 | ||||||
|       # Vimtex plugin |     #   # Vimtex plugin | ||||||
|       plugins.vimtex = { |     #   plugins.vimtex = { | ||||||
|         enable = true; |     #     enable = true; | ||||||
|         texlivePackage = null; |     #     texlivePackage = null; | ||||||
|         settings = { |     #     settings = { | ||||||
|           view_method = "zathura"; |     #       view_method = "zathura"; | ||||||
|         }; |     #     }; | ||||||
|       }; |     #   }; | ||||||
|     }; |     # }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -20,10 +20,6 @@ in | |||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     modules.unfree.allowedPackages = [ |  | ||||||
|       "mathematica" |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     home.packages = [ |     home.packages = [ | ||||||
|       my-mathematica |       my-mathematica | ||||||
|     ]; |     ]; | ||||||
							
								
								
									
										190
									
								
								modules/home/development/neovim.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								modules/home/development/neovim.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,190 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.neovim; | ||||||
|  |   # theme = config.desktop.theming; | ||||||
|  |   # colors = theme.colors; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.neovim = { | ||||||
|  |     enable = mkEnableOption "neovim"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # programs.nixvim = { | ||||||
|  |     #   enable = true; | ||||||
|  |     #   defaultEditor = true; | ||||||
|  |     #   viAlias = true; | ||||||
|  |     #   vimAlias = true; | ||||||
|  | 
 | ||||||
|  |     #   # extraPackages = with pkgs; [ ]; | ||||||
|  | 
 | ||||||
|  |     #   opts = { | ||||||
|  |     #     number = true; | ||||||
|  |     #     relativenumber = true; | ||||||
|  | 
 | ||||||
|  |     #     signcolumn = "yes"; | ||||||
|  | 
 | ||||||
|  |     #     ignorecase = true; | ||||||
|  |     #     smartcase = true; | ||||||
|  | 
 | ||||||
|  |     #     tabstop = 4; | ||||||
|  |     #     shiftwidth = 4; | ||||||
|  |     #     softtabstop = 0; | ||||||
|  |     #     expandtab = true; | ||||||
|  |     #     smarttab = true; | ||||||
|  | 
 | ||||||
|  |     #     list = true; | ||||||
|  |     #     listchars = "tab:»┈«,trail:·,extends:→,precedes:←,nbsp:␣"; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   diagnostic.settings = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #     signs = true; | ||||||
|  |     #     underline = true; | ||||||
|  |     #     update_in_insert = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   extraConfigLua = '' | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignError", | ||||||
|  |     #       {text = "", texthl = "DiagnosticSignError"}) | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignWarn", | ||||||
|  |     #       {text = "", texthl = "DiagnosticSignWarn"}) | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignInfo", | ||||||
|  |     #       {text = "", texthl = "DiagnosticSignInfo"}) | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignHint", | ||||||
|  |     #       {text = "💡", texthl = "DiagnosticSignHint"}) | ||||||
|  |     #   ''; | ||||||
|  | 
 | ||||||
|  |     #   keymaps = [ | ||||||
|  |     #     # Save shortcut | ||||||
|  |     #     { | ||||||
|  |     #       action = ":update<CR>"; | ||||||
|  |     #       key = "<C-s>"; | ||||||
|  |     #       mode = "n"; | ||||||
|  |     #     } | ||||||
|  |     #     { | ||||||
|  |     #       action = "<C-o>:update<CR>"; | ||||||
|  |     #       key = "<C-s>"; | ||||||
|  |     #       mode = "i"; | ||||||
|  |     #     } | ||||||
|  | 
 | ||||||
|  |     #     # Neo tree | ||||||
|  |     #     { | ||||||
|  |     #       action = ":Neotree action=focus reveal toggle<CR>"; | ||||||
|  |     #       key = "<leader>n"; | ||||||
|  |     #       mode = "n"; | ||||||
|  |     #       options.silent = true; | ||||||
|  |     #     } | ||||||
|  |     #   ]; | ||||||
|  | 
 | ||||||
|  |     #   autoCmd = [ | ||||||
|  |     #     { | ||||||
|  |     #       desc = "Automatic formatting"; | ||||||
|  |     #       event = "BufWritePre"; | ||||||
|  |     #       callback = { | ||||||
|  |     #         __raw = '' | ||||||
|  |     #           function() | ||||||
|  |     #             vim.lsp.buf.format { | ||||||
|  |     #               async = false, | ||||||
|  |     #             } | ||||||
|  |     #           end | ||||||
|  |     #         ''; | ||||||
|  |     #       }; | ||||||
|  |     #     } | ||||||
|  |     #   ]; | ||||||
|  | 
 | ||||||
|  |     #   # highlight = { | ||||||
|  |     #   #   Comment = { | ||||||
|  |     #   #     italic = true; | ||||||
|  |     #   #     fg = theme.schemeColors.withHashtag.base03; # TODO: Come up with a good name colors.muted maybe? | ||||||
|  |     #   #   }; | ||||||
|  |     #   # }; | ||||||
|  | 
 | ||||||
|  |     #   plugins.lsp = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   #plugins.treesitter = { | ||||||
|  |     #   #  enable = true; | ||||||
|  |     #   #}; | ||||||
|  | 
 | ||||||
|  |     #   plugins.cmp = { | ||||||
|  |     #     enable = true; | ||||||
|  | 
 | ||||||
|  |     #     settings = { | ||||||
|  |     #       mapping = { | ||||||
|  |     #         "<C-Space>" = "cmp.mapping.complete()"; | ||||||
|  |     #         "<C-d>" = "cmp.mapping.scroll_docs(-4)"; | ||||||
|  |     #         "<C-e>" = "cmp.mapping.close()"; | ||||||
|  |     #         "<C-f>" = "cmp.mapping.scroll_docs(4)"; | ||||||
|  |     #         "<CR>" = "cmp.mapping.confirm({ select = true })"; | ||||||
|  |     #         "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; | ||||||
|  |     #         "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; | ||||||
|  |     #       }; | ||||||
|  |     #       sources = [ | ||||||
|  |     #         { name = "path"; } | ||||||
|  |     #         { name = "nvim_lsp"; } | ||||||
|  |     #       ]; | ||||||
|  |     #     }; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   plugins.web-devicons = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   plugins.neo-tree = { | ||||||
|  |     #     enable = true; | ||||||
|  | 
 | ||||||
|  |     #     closeIfLastWindow = true; | ||||||
|  |     #     window = { | ||||||
|  |     #       width = 30; | ||||||
|  |     #       autoExpandWidth = true; | ||||||
|  |     #     }; | ||||||
|  | 
 | ||||||
|  |     #     extraOptions = { | ||||||
|  |     #       default_component_configs.git_status.symbols = { | ||||||
|  |     #         # Change type | ||||||
|  |     #         added = "+"; | ||||||
|  |     #         deleted = "✕"; | ||||||
|  |     #         modified = "✦"; | ||||||
|  |     #         renamed = "→"; | ||||||
|  | 
 | ||||||
|  |     #         # Status type | ||||||
|  |     #         untracked = "?"; | ||||||
|  |     #         ignored = "▫"; | ||||||
|  |     #         unstaged = "□"; | ||||||
|  |     #         staged = "■"; | ||||||
|  |     #         conflict = "‼"; | ||||||
|  |     #       }; | ||||||
|  |     #     }; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   #plugins.cmp-nvim-lsp.enable = true; | ||||||
|  | 
 | ||||||
|  |     #   plugins.gitsigns = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #     settings.current_line_blame = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   #plugins.copilot-vim = { | ||||||
|  |     #   #  enable = true; | ||||||
|  |     #   #}; | ||||||
|  | 
 | ||||||
|  |     #   # plugins.vimtex = { | ||||||
|  |     #   #   enable = true; | ||||||
|  |     #   #   texlivePackage = null; | ||||||
|  |     #   #   settings = { | ||||||
|  |     #   #     view_method = "zathura"; | ||||||
|  |     #   #   }; | ||||||
|  |     #   # }; | ||||||
|  |     # }; | ||||||
|  |     # programs.neovim.defaultEditor = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										99
									
								
								modules/home/development/vscode.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								modules/home/development/vscode.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | |||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.vscode; | ||||||
|  |   # theme = config.desktop.theming; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.vscode = { | ||||||
|  |     enable = mkEnableOption "vscode"; | ||||||
|  |     # codeFont = mkOption { | ||||||
|  |     #   type = types.anything; | ||||||
|  |     #   default = theme.fonts.pkgs."Fira Code"; | ||||||
|  |     # }; | ||||||
|  |     # fallbackFont = mkOption { | ||||||
|  |     #   type = types.anything; | ||||||
|  |     #   default = theme.fonts.pkgs."Symbols Nerd Font Mono"; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # TODO: Fix theming | ||||||
|  |     # desktop.theming.fonts.extraFonts = [ cfg.codeFont ]; | ||||||
|  | 
 | ||||||
|  |     programs.vscode = { | ||||||
|  |       enable = true; | ||||||
|  | 
 | ||||||
|  |       mutableExtensionsDir = false; | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           eamodio.gitlens | ||||||
|  |           ms-vscode.hexeditor | ||||||
|  |           mkhl.direnv | ||||||
|  |           usernamehw.errorlens | ||||||
|  |           gruntfuggly.todo-tree | ||||||
|  |           github.copilot | ||||||
|  |           github.copilot-chat | ||||||
|  |           tomoki1207.pdf | ||||||
|  |           ms-vsliveshare.vsliveshare | ||||||
|  |           ms-vscode-remote.remote-ssh | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = | ||||||
|  |           let | ||||||
|  |             # font-family = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'"; | ||||||
|  |             # TODO: Move the conversion factor to theme settings | ||||||
|  |             # font-size = mkForce cfg.codeFont.recommendedSize; # Convert pt to px | ||||||
|  |           in | ||||||
|  |           { | ||||||
|  |             # Font setup | ||||||
|  |             # "editor.fontFamily" = font-family; | ||||||
|  |             # "editor.inlayHints.fontFamily" = font-family; | ||||||
|  |             # "editor.inlineSuggest.fontFamily" = font-family; | ||||||
|  |             # "editor.fontSize" = font-size; | ||||||
|  |             # "editor.fontLigatures" = true; | ||||||
|  |             # "terminal.integrated.fontFamily" = font-family; | ||||||
|  |             # "terminal.integrated.fontSize" = font-size; | ||||||
|  |             # "chat.editor.fontFamily" = font-family; # TODO: Change this font to the standard UI font | ||||||
|  |             # "chat.editor.fontSize" = font-size; | ||||||
|  |             # "debug.console.fontFamily" = font-family; | ||||||
|  |             # "debug.console.fontSize" = font-size; | ||||||
|  |             # "scm.inputFontFamily" = font-family; # TODO: Change this font to the standard UI font | ||||||
|  |             # "scm.inputFontSize" = font-size; | ||||||
|  |             # "markdown.preview.fontFamily" = mkForce theme.fonts.sansSerif.name; # TODO: Change this font to the standard UI font | ||||||
|  |             # "markdown.preview.fontSize" = mkForce theme.fonts.sansSerif.recommendedSize; | ||||||
|  | 
 | ||||||
|  |             # Formatting | ||||||
|  |             "editor.formatOnSave" = true; | ||||||
|  |             "editor.tabSize" = 4; | ||||||
|  | 
 | ||||||
|  |             # Layout | ||||||
|  |             "window.menuBarVisibility" = "hidden"; | ||||||
|  | 
 | ||||||
|  |             # Git settings | ||||||
|  |             "git.autofetch" = true; | ||||||
|  |             "git.enableSmartCommit" = false; | ||||||
|  |             "git.suggestSmartCommit" = false; | ||||||
|  | 
 | ||||||
|  |             # Disable update notifications | ||||||
|  |             "update.mode" = "none"; | ||||||
|  | 
 | ||||||
|  |             # Set themes | ||||||
|  |             "window.autoDetectColorScheme" = true; | ||||||
|  | 
 | ||||||
|  |             # TODO: Move to direnv module | ||||||
|  |             # Ignore direnv folder | ||||||
|  |             "files.exclude" = { | ||||||
|  |               ".direnv" = true; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										31
									
								
								modules/home/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								modules/home/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.base; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.base = { | ||||||
|  |     enable = mkEnableOption "Base home-manager profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     modules = { | ||||||
|  |       # btop.enable = true; | ||||||
|  |       direnv.enable = true; | ||||||
|  |       fish.enable = true; | ||||||
|  |       # scripts.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Development | ||||||
|  |       # neovim.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Languages | ||||||
|  |       nix.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								modules/home/profiles/gnome.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								modules/home/profiles/gnome.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.gnome; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.gnome = { | ||||||
|  |     enable = mkEnableOption "Graphical GNOME environment"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       firefox # TODO: Move to dediated module | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     modules = { | ||||||
|  |       profiles.base.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Desktop environment | ||||||
|  |       desktop.gnome.enable = true; | ||||||
|  |       # desktop.tiling.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Browser | ||||||
|  |       # firefox = { | ||||||
|  |       #   enable = true; | ||||||
|  |       #   default = false; | ||||||
|  |       # }; | ||||||
|  |       # qutebrowser = { | ||||||
|  |       #   enable = true; | ||||||
|  |       #   default = true; | ||||||
|  |       # }; | ||||||
|  | 
 | ||||||
|  |       # Tools | ||||||
|  |       # obsidian.enable = true; | ||||||
|  |       # zathura.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Development | ||||||
|  |       # neovim.enable = true; | ||||||
|  |       vscode.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										86
									
								
								modules/home/profiles/jan.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								modules/home/profiles/jan.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.jan; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.jan = { | ||||||
|  |     enable = mkEnableOption "Jan's personal profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       libreoffice-still | ||||||
|  |       remmina | ||||||
|  |       thunderbird | ||||||
|  |       signal-desktop | ||||||
|  |       prusa-slicer | ||||||
|  |       freecad-wayland | ||||||
|  |       inkscape | ||||||
|  |       ente-auth | ||||||
|  |       bitwarden | ||||||
|  |       carla | ||||||
|  |       winbox | ||||||
|  |       whatsapp-for-linux | ||||||
|  |       discord | ||||||
|  |       steam | ||||||
|  |       spotify | ||||||
|  |       # feishin # TODO: Fix or replace as insecure | ||||||
|  |       eduvpn-client | ||||||
|  |       river # TODO: Move | ||||||
|  |       ryubing | ||||||
|  |       bottles | ||||||
|  |       prismlauncher | ||||||
|  |       foliate | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     modules = { | ||||||
|  |       profiles.gnome.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Gaming | ||||||
|  |       # retroarch.enable = true; | ||||||
|  |       # ryujinx.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Tools | ||||||
|  |       git = { | ||||||
|  |         enable = true; | ||||||
|  |         user = "Jan-Bulthuis"; | ||||||
|  |         email = "git@bulthuis.dev"; | ||||||
|  |         # TODO: Move | ||||||
|  |         ignores = [ | ||||||
|  |           ".envrc" | ||||||
|  |           ".direnv" | ||||||
|  |           "flake.nix" | ||||||
|  |           "flake.lock" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |       xpra = { | ||||||
|  |         enable = true; | ||||||
|  |         hosts = [ | ||||||
|  |           "mixer@10.20.60.251" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       # Development | ||||||
|  |       # docker.enable = true; | ||||||
|  |       # matlab.enable = true; | ||||||
|  |       mathematica.enable = true; | ||||||
|  | 
 | ||||||
|  |       # Languages | ||||||
|  |       haskell.enable = false; | ||||||
|  |       js.enable = true; | ||||||
|  |       nix.enable = true; | ||||||
|  |       rust.enable = true; | ||||||
|  |       python.enable = true; | ||||||
|  |       cpp.enable = true; | ||||||
|  |       tex.enable = true; | ||||||
|  |       jupyter.enable = false; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -11,11 +11,17 @@ in | |||||||
| { | { | ||||||
|   options.modules.bash = { |   options.modules.bash = { | ||||||
|     enable = mkEnableOption "bash"; |     enable = mkEnableOption "bash"; | ||||||
|  |     aliases = mkOption { | ||||||
|  |       type = types.attrsOf types.str; | ||||||
|  |       default = { | ||||||
|  |         "..." = "cd ../.."; | ||||||
|  |       }; | ||||||
|  |       description = "Shell aliases"; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   config.programs.bash = { |   config.programs.bash = { | ||||||
|     enable = cfg.enable; |     enable = cfg.enable; | ||||||
| 
 |     shellAliases = cfg.aliases; | ||||||
|     shellAliases = config.modules.shell.aliases; |  | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
							
								
								
									
										26
									
								
								modules/home/utilities/direnv.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								modules/home/utilities/direnv.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.direnv; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.direnv = { | ||||||
|  |     enable = mkEnableOption "direnv"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     programs.direnv = { | ||||||
|  |       enable = true; | ||||||
|  |       nix-direnv.enable = true; | ||||||
|  |     }; | ||||||
|  |     modules.git.ignores = [ | ||||||
|  |       ".direnv" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -12,12 +12,6 @@ in | |||||||
| { | { | ||||||
|   options.modules.fish = { |   options.modules.fish = { | ||||||
|     enable = mkEnableOption "fish"; |     enable = mkEnableOption "fish"; | ||||||
| 
 |  | ||||||
|     plugins = { |  | ||||||
|       done = mkEnableOption "done"; |  | ||||||
|       fzf = mkEnableOption "fzf"; |  | ||||||
|       grc = mkEnableOption "grc"; |  | ||||||
|     }; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
| @ -36,28 +30,28 @@ in | |||||||
|     programs.fish = { |     programs.fish = { | ||||||
|       enable = true; |       enable = true; | ||||||
| 
 | 
 | ||||||
|       shellAliases = config.modules.shell.aliases; |       shellAliases = config.modules.bash.aliases; | ||||||
| 
 | 
 | ||||||
|       plugins = [ |       plugins = [ | ||||||
|         (mkIf cfg.plugins.done { |         { | ||||||
|           name = "done"; |           name = "done"; | ||||||
|           src = pkgs.fishPlugins.done.src; |           src = pkgs.fishPlugins.done.src; | ||||||
|         }) |         } | ||||||
|         (mkIf cfg.plugins.fzf { |         { | ||||||
|           name = "fzf"; |           name = "fzf"; | ||||||
|           src = pkgs.fishPlugins.fzf-fish.src; |           src = pkgs.fishPlugins.fzf-fish.src; | ||||||
|         }) |         } | ||||||
|         (mkIf cfg.plugins.grc { |         { | ||||||
|           name = "grc"; |           name = "grc"; | ||||||
|           src = pkgs.fishPlugins.grc.src; |           src = pkgs.fishPlugins.grc.src; | ||||||
|         }) |         } | ||||||
|       ]; |       ]; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Fish plugin dependencies |     # Fish plugin dependencies | ||||||
|     home.packages = with pkgs; [ |     home.packages = with pkgs; [ | ||||||
|       (mkIf cfg.plugins.fzf fzf) |       fzf | ||||||
|       (mkIf cfg.plugins.grc grc) |       grc | ||||||
|     ]; |     ]; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -1,14 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   config = { |  | ||||||
|     time.timeZone = "Europe/Amsterdam"; |  | ||||||
|     i18n.defaultLocale = "en_US.UTF-8"; |  | ||||||
|     console.keyMap = "us"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,23 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.neovim; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.neovim = { |  | ||||||
|     enable = mkEnableOption "neovim"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     programs.neovim = { |  | ||||||
|       enable = true; |  | ||||||
|       defaultEditor = true; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,29 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.networkmanager; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.networkmanager = { |  | ||||||
|     enable = mkEnableOption "networkmanager"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     machine.sudo-groups = [ "networkmanager" ]; |  | ||||||
|     networking = { |  | ||||||
|       networkmanager = { |  | ||||||
|         enable = true; |  | ||||||
|         wifi.powersave = true; |  | ||||||
|       }; |  | ||||||
|       firewall = { |  | ||||||
|         # Fix for wireguard |  | ||||||
|         checkReversePath = false; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
							
								
								
									
										18
									
								
								modules/nixos/bluetooth.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								modules/nixos/bluetooth.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.bluetooth; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.bluetooth = { | ||||||
|  |     enable = mkEnableOption "bluetooth"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Enable bluetooth | ||||||
|  |     hardware.bluetooth = { | ||||||
|  |       enable = true; | ||||||
|  |       powerOnBoot = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -1,21 +1,17 @@ | |||||||
| { | { lib, config, ... }: | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| let | let | ||||||
|   cfg = config.modules.systemd-boot; |   cfg = config.modules.bootloader; | ||||||
| in | in | ||||||
| { | { | ||||||
|   options.modules.systemd-boot = { |   options.modules.bootloader = { | ||||||
|     enable = mkEnableOption "systemd-boot"; |     enable = mkEnableOption "bootloader"; | ||||||
|   }; |   }; | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|  |     # Bootloader | ||||||
|     boot.loader = { |     boot.loader = { | ||||||
|  |       timeout = 0; | ||||||
|       systemd-boot.enable = true; |       systemd-boot.enable = true; | ||||||
|       systemd-boot.editor = false; |       systemd-boot.editor = false; | ||||||
|       efi.canTouchEfiVariables = true; |       efi.canTouchEfiVariables = true; | ||||||
							
								
								
									
										35
									
								
								modules/nixos/fonts.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								modules/nixos/fonts.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.fonts; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.fonts = { | ||||||
|  |     enable = mkEnableOption "fonts"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     console.packages = [ | ||||||
|  |       pkgs.dina-psfu | ||||||
|  |     ]; | ||||||
|  |     console.font = "dina"; | ||||||
|  |     console.earlySetup = true; | ||||||
|  | 
 | ||||||
|  |     # TODO: Disable default fonts, fonts should be managed per user | ||||||
|  |     # fonts.enableDefaultPackages = false; | ||||||
|  |     # fonts.fontconfig = { | ||||||
|  |     #   enable = true; | ||||||
|  |     #   defaultFonts = { | ||||||
|  |     #     serif = mkDefault [ ]; | ||||||
|  |     #     sansSerif = mkDefault [ ]; | ||||||
|  |     #     monospace = mkDefault [ ]; | ||||||
|  |     #     emoji = mkDefault [ ]; | ||||||
|  |     #   }; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										79
									
								
								modules/nixos/gnome.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								modules/nixos/gnome.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,79 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.gnome; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.gnome = { | ||||||
|  |     enable = mkEnableOption "gnome"; | ||||||
|  |     # TODO: Add RDP toggle | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Enable GDM and Gnome | ||||||
|  |     services.xserver.enable = true; | ||||||
|  |     services.xserver.displayManager.gdm.enable = true; | ||||||
|  |     services.xserver.desktopManager.gnome.enable = true; | ||||||
|  |     services.gnome.core-utilities.enable = false; | ||||||
|  |     services.gnome.games.enable = false; | ||||||
|  |     services.gnome.core-developer-tools.enable = false; | ||||||
|  |     environment.gnome.excludePackages = with pkgs; [ | ||||||
|  |       adwaita-icon-theme | ||||||
|  |       (derivation { name = "nixos-background-info"; }) | ||||||
|  |       gnome-backgrounds | ||||||
|  |       gnome-bluetooth | ||||||
|  |       gnome-color-manager | ||||||
|  |       gnome-control-center | ||||||
|  |       gnome-shell-extensions | ||||||
|  |       gnome-tour | ||||||
|  |       gnome-user-docs | ||||||
|  |       glib | ||||||
|  |       gnome-menus | ||||||
|  |       gtk3.out | ||||||
|  |       xdg-user-dirs | ||||||
|  |       xdg-user-dirs-gtk | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Enable Gnome Remote Desktop | ||||||
|  |     services.gnome.gnome-remote-desktop.enable = true; | ||||||
|  |     systemd.services."gnome-remote-desktop".wantedBy = [ "graphical.target" ]; | ||||||
|  |     networking.firewall = { | ||||||
|  |       allowedTCPPorts = [ | ||||||
|  |         3389 | ||||||
|  |         3390 | ||||||
|  |       ]; | ||||||
|  |       allowedUDPPorts = [ | ||||||
|  |         3389 | ||||||
|  |         3390 | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # For GSConnect/KDE Connect | ||||||
|  |     # TODO: Move to host config? | ||||||
|  |     networking.firewall = { | ||||||
|  |       allowedTCPPortRanges = [ | ||||||
|  |         { | ||||||
|  |           from = 1714; | ||||||
|  |           to = 1764; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |       allowedUDPPortRanges = [ | ||||||
|  |         { | ||||||
|  |           from = 1714; | ||||||
|  |           to = 1764; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Enable dependencies | ||||||
|  |     modules = { | ||||||
|  |       networkmanager.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								modules/nixos/graphics.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/nixos/graphics.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.graphics; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.graphics = { | ||||||
|  |     enable = mkEnableOption "graphics"; | ||||||
|  |     # TODO: Add toggle for hybrid graphics | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     hardware.graphics.enable = true; | ||||||
|  |     hardware.graphics.enable32Bit = true; | ||||||
|  |     services.xserver.videoDrivers = [ "nvidia" ]; | ||||||
|  |     # TODO: Add nvidia settings back in | ||||||
|  |     # TODO: Move to nvidia module | ||||||
|  |     hardware.nvidia = { | ||||||
|  |       open = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								modules/nixos/networkmanager.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								modules/nixos/networkmanager.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.networkmanager; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.networkmanager = { | ||||||
|  |     enable = mkEnableOption "networkmanager"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # TODO: Add sudo users to the networkmanager group? | ||||||
|  |     networking.networkmanager.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								modules/nixos/power-saving.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/nixos/power-saving.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.power-saving; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.power-saving = { | ||||||
|  |     enable = mkEnableOption "power saving"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Setup power management | ||||||
|  |     powerManagement.enable = true; | ||||||
|  |     services.thermald.enable = true; | ||||||
|  |     services.power-profiles-daemon.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Enable wifi power saving | ||||||
|  |     networking.networkmanager.wifi.powersave = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -1,8 +1,4 @@ | |||||||
| { | { lib, config, ... }: | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| let | let | ||||||
| @ -12,16 +8,18 @@ in | |||||||
|   options.modules.printing = { |   options.modules.printing = { | ||||||
|     enable = mkEnableOption "printing"; |     enable = mkEnableOption "printing"; | ||||||
|   }; |   }; | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     services.printing = { |     # Enable CUPS | ||||||
|       enable = true; |     services.printing.enable = true; | ||||||
|       # drivers = with pkgs; []; | 
 | ||||||
|     }; |     # Enable Avahi to auto-detect network printers | ||||||
|     services.avahi = { |     services.avahi = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       nssmdns4 = true; |       nssmdns4 = true; | ||||||
|       openFirewall = true; |       openFirewall = true; | ||||||
|     }; |     }; | ||||||
|  | 
 | ||||||
|  |     # For SMB network printers | ||||||
|  |     services.samba.enable = true; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
							
								
								
									
										61
									
								
								modules/nixos/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								modules/nixos/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | { | ||||||
|  |   mkModule, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.base; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.base = { | ||||||
|  |     enable = mkEnableOption "base profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     modules = { | ||||||
|  |       bootloader.enable = mkDefault true; | ||||||
|  |       ssh.enable = mkDefault true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Localization | ||||||
|  |     time.timeZone = "Europe/Amsterdam"; | ||||||
|  |     i18n.defaultLocale = "en_US.UTF-8"; | ||||||
|  |     console.keyMap = "us"; | ||||||
|  | 
 | ||||||
|  |     # Enable neovim | ||||||
|  |     programs.neovim = { | ||||||
|  |       enable = true; | ||||||
|  |       defaultEditor = true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Allow unfree packages | ||||||
|  |     nixpkgs.config.allowUnfree = true; | ||||||
|  | 
 | ||||||
|  |     # Enable the usage of flakes | ||||||
|  |     nix.settings.experimental-features = [ | ||||||
|  |       "nix-command" | ||||||
|  |       "flakes" | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Clean tmp | ||||||
|  |     boot.tmp.cleanOnBoot = true; | ||||||
|  | 
 | ||||||
|  |     # Base packages | ||||||
|  |     environment.systemPackages = with pkgs; [ | ||||||
|  |       git | ||||||
|  |       wget | ||||||
|  |       curl | ||||||
|  |       dig | ||||||
|  |       procps | ||||||
|  |       wireguard-tools | ||||||
|  |       usbutils | ||||||
|  |       pciutils | ||||||
|  |       zip | ||||||
|  |       unzip | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								modules/nixos/profiles/desktop.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								modules/nixos/profiles/desktop.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.desktop; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.desktop = { | ||||||
|  |     enable = mkEnableOption "desktop profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     modules = { | ||||||
|  |       profiles.base.enable = mkDefault true; | ||||||
|  |       fonts.enable = mkDefault true; | ||||||
|  |       graphics.enable = mkDefault true; | ||||||
|  |       gnome.enable = mkDefault true; # TODO: Rename to display manager? | ||||||
|  |       networkmanager.enable = mkDefault true; | ||||||
|  |       printing.enable = mkDefault true; | ||||||
|  |       sound.enable = mkDefault true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								modules/nixos/profiles/laptop.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								modules/nixos/profiles/laptop.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.laptop; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.laptop = { | ||||||
|  |     enable = mkEnableOption "laptop profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Setup modules | ||||||
|  |     modules = { | ||||||
|  |       profiles.desktop.enable = mkDefault true; | ||||||
|  |       bluetooth.enable = mkDefault true; | ||||||
|  |       power-saving.enable = mkDefault true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Add packages | ||||||
|  |     environment.systemPackages = with pkgs; [ | ||||||
|  |       brightnessctl | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -1,27 +1,33 @@ | |||||||
| { lib, ... }: |  | ||||||
| 
 |  | ||||||
| { | { | ||||||
|   imports = [ |   mkModule, | ||||||
|     # Import environment |   pkgs, | ||||||
|     ../default.nix |   lib, | ||||||
|   ]; |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
| 
 | 
 | ||||||
|   config = { | with lib; | ||||||
|     # State version | let | ||||||
|     system.stateVersion = "24.11"; |   cfg = config.modules.profiles.vm; | ||||||
| 
 | in | ||||||
|     # Machine hostname | { | ||||||
|     networking.hostName = lib.mkDefault "vm-base"; |   options.modules.profiles.vm = { | ||||||
|  |     enable = mkEnableOption "Base VM profile"; | ||||||
|  |   }; | ||||||
| 
 | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|     # Enabled modules |     # Enabled modules | ||||||
|     modules = { |     modules = { | ||||||
|       base.enable = true; |       profiles.base.enable = true; | ||||||
|       ssh.enable = true; |       ssh.enable = true; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     # Enable qemu guest agent |     # Enable qemu guest agent | ||||||
|     services.qemuGuest.enable = true; |     services.qemuGuest.enable = true; | ||||||
| 
 | 
 | ||||||
|  |     # Machine platform | ||||||
|  |     nixpkgs.hostPlatform = "x86_64-linux"; | ||||||
|  | 
 | ||||||
|     # Hardware configuration |     # Hardware configuration | ||||||
|     hardware.enableRedistributableFirmware = true; |     hardware.enableRedistributableFirmware = true; | ||||||
|     boot.initrd.availableKernelModules = [ |     boot.initrd.availableKernelModules = [ | ||||||
| @ -1,21 +1,15 @@ | |||||||
| { | { lib, config, ... }: | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| let | let | ||||||
|   cfg = config.modules.pipewire; |   cfg = config.modules.sound; | ||||||
| in | in | ||||||
| { | { | ||||||
|   options.modules.pipewire = { |   options.modules.sound = { | ||||||
|     enable = mkEnableOption "pipewire"; |     enable = mkEnableOption "sound"; | ||||||
|   }; |   }; | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     security.rtkit.enable = true; |     # Enable pipewire | ||||||
|     services.pipewire = { |     services.pipewire = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       alsa.enable = true; |       alsa.enable = true; | ||||||
| @ -23,5 +17,8 @@ in | |||||||
|       pulse.enable = true; |       pulse.enable = true; | ||||||
|       jack.enable = true; |       jack.enable = true; | ||||||
|     }; |     }; | ||||||
|  | 
 | ||||||
|  |     # Recommended by wiki, allows user processes to use realtime kernel | ||||||
|  |     security.rtkit.enable = true; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -1,9 +1,4 @@ | |||||||
| { | { lib, config, ... }: | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| let | let | ||||||
| @ -13,8 +8,8 @@ in | |||||||
|   options.modules.ssh = { |   options.modules.ssh = { | ||||||
|     enable = mkEnableOption "ssh"; |     enable = mkEnableOption "ssh"; | ||||||
|   }; |   }; | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     services.openssh.enable = true; |     services.openssh.enable = true; | ||||||
|  |     # TODO: Is this default configuration secure? | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
| @ -1,36 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.power-saving; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.power-saving = { |  | ||||||
|     enable = mkEnableOption "power-saving"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     powerManagement.enable = true; |  | ||||||
|     services.thermald.enable = true; |  | ||||||
|     services.tlp = { |  | ||||||
|       enable = true; |  | ||||||
| 
 |  | ||||||
|       settings = { |  | ||||||
|         CPU_SCALING_GOVERNOR_ON_AC = "performance"; |  | ||||||
|         CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; |  | ||||||
| 
 |  | ||||||
|         CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; |  | ||||||
|         CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; |  | ||||||
| 
 |  | ||||||
|         CPU_MIN_PERF_ON_AC = 0; |  | ||||||
|         CPU_MAX_PERF_ON_AC = 100; |  | ||||||
|         CPU_MIN_PERF_ON_BAT = 0; |  | ||||||
|         CPU_MAX_PERF_ON_BAT = 20; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,64 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.spotifyd; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.spotifyd = { |  | ||||||
|     enable = mkEnableOption "spotifyd"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     # User for spotifyd |  | ||||||
|     users.users.mixer = { |  | ||||||
|       group = "mixer"; |  | ||||||
|     }; |  | ||||||
|     users.groups.mixer = { }; |  | ||||||
| 
 |  | ||||||
|     # Spotifyd service |  | ||||||
|     systemd.user.services.spotifyd = { |  | ||||||
|       description = "SpotifyD Service"; |  | ||||||
|       wantedBy = [ "default.target" ]; |  | ||||||
|       after = [ |  | ||||||
|         "network.target" |  | ||||||
|         "sound.target" |  | ||||||
|       ]; |  | ||||||
|       unitConfig = { |  | ||||||
|         ConditionUser = "mixer"; # TODO: Allow user configuration |  | ||||||
|       }; |  | ||||||
|       serviceConfig = { |  | ||||||
|         ExecStart = "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path /etc/spotifyd/spotifyd.conf"; |  | ||||||
|         Restart = "always"; |  | ||||||
|         RestartSec = 5; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Set up config |  | ||||||
|     environment.etc = { |  | ||||||
|       "spotifyd/spotifyd.conf" = { |  | ||||||
|         source = ./spotifyd.conf; |  | ||||||
|         mode = "0444"; |  | ||||||
|         user = "mixer"; # TODO: Make user configurable |  | ||||||
|         group = "mixer"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Set up firewall |  | ||||||
|     networking.firewall = { |  | ||||||
|       allowedTCPPorts = [ |  | ||||||
|         5353 |  | ||||||
|         5454 |  | ||||||
|       ]; |  | ||||||
|       allowedUDPPorts = [ |  | ||||||
|         5353 |  | ||||||
|         5454 |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,118 +0,0 @@ | |||||||
| [global] |  | ||||||
| 
 |  | ||||||
| #---------# |  | ||||||
| # GENERAL # |  | ||||||
| #---------# |  | ||||||
| 
 |  | ||||||
| # The name that gets displayed under the connect tab on |  | ||||||
| # official clients. |  | ||||||
| device_name = "Linox" |  | ||||||
| 
 |  | ||||||
| # The displayed device type in Spotify clients. |  | ||||||
| # Can be unknown, computer, tablet, smartphone, speaker, t_v, |  | ||||||
| # a_v_r (Audio/Video Receiver), s_t_b (Set-Top Box), and audio_dongle. |  | ||||||
| device_type = "a_v_r" |  | ||||||
| 
 |  | ||||||
| # The directory used to store credentials and audio cache. |  | ||||||
| # Default: infers a sensible cache directory (e.g. on Linux: $XDG_CACHE_HOME) |  | ||||||
| # |  | ||||||
| # Note: The file path does not get expanded. Environment variables and |  | ||||||
| # shell placeholders like $HOME or ~ don't work! |  | ||||||
| #cache_path = "/full/path/to/cache/directory" |  | ||||||
| 
 |  | ||||||
| # If set to true, audio data does NOT get cached. |  | ||||||
| # In this case, the cache is only used for credentials. |  | ||||||
| #no_audio_cache = true |  | ||||||
| 
 |  | ||||||
| # The maximal size of the cache directory in bytes |  | ||||||
| # The example value corresponds to ~ 1GB |  | ||||||
| #max_cache_size = 1000000000 |  | ||||||
| 
 |  | ||||||
| # If set to true, `spotifyd` tries to bind to dbus (default is the session bus) |  | ||||||
| # and expose MPRIS controls. When running headless, without the session bus, |  | ||||||
| # you should set this to false, to avoid errors. If you still want to use MPRIS, |  | ||||||
| # have a look at the `dbus_type` option. |  | ||||||
| use_mpris = false |  | ||||||
| 
 |  | ||||||
| # The bus to bind to with the MPRIS interface. |  | ||||||
| # Possible values: "session", "system" |  | ||||||
| # The system bus can be used if no graphical session is available |  | ||||||
| # (e.g. on headless systems) but you still want to be able to use MPRIS. |  | ||||||
| # NOTE: You might need to add appropriate policies to allow spotifyd to |  | ||||||
| # own the name. |  | ||||||
| #dbus_type = "session" |  | ||||||
| 
 |  | ||||||
| #-----------# |  | ||||||
| # DISCOVERY # |  | ||||||
| #-----------# |  | ||||||
| 
 |  | ||||||
| # If set to true, this disables zeroconf discovery. |  | ||||||
| # This can be useful, if one prefers to run a single-user instance. |  | ||||||
| #disable_discovery = false |  | ||||||
| 
 |  | ||||||
| # The port at which `spotifyd` is going to offer its service over the network (TCP). |  | ||||||
| # If not set, a random port > 1024 is used. For the service to be discoverable on the |  | ||||||
| # local network via mDNS, both the mDNS port (5353 UDP) and the random or fixed |  | ||||||
| # zeroconf port need to be allowed through any active firewall. |  | ||||||
| zeroconf_port = 5454 |  | ||||||
| 
 |  | ||||||
| #-------# |  | ||||||
| # AUDIO # |  | ||||||
| #-------# |  | ||||||
| 
 |  | ||||||
| # The audio backend used to play music. To get |  | ||||||
| # a list of possible backends, run `spotifyd --help`. |  | ||||||
| #backend = "alsa" # use portaudio for macOS [homebrew] |  | ||||||
| backend = "pulseaudio" |  | ||||||
| 
 |  | ||||||
| # The alsa audio device to stream audio. To get a |  | ||||||
| # list of valid devices, run `aplay -L`, |  | ||||||
| #device = "default"  # omit for macOS |  | ||||||
| device = "SpotifyD-Proxy" |  | ||||||
| 
 |  | ||||||
| # The PCM sample format to use. Possible values  |  | ||||||
| # are F32, S32, S24, S24_3, S16.  |  | ||||||
| # Change this value if you encounter errors like |  | ||||||
| # "Alsa error PCM open ALSA function 'snd_pcm_hw_params_set_format' failed with error 'EINVAL: Invalid argument'" |  | ||||||
| #audio_format = "S16" |  | ||||||
| 
 |  | ||||||
| # The volume controller. Each one behaves different to |  | ||||||
| # volume increases. For possible values, run |  | ||||||
| # `spotifyd --help`. |  | ||||||
| #volume_controller = "softvol"  # use softvol for macOS |  | ||||||
| 
 |  | ||||||
| # ! Only relevant for ALSA ! |  | ||||||
| # The alsa control device. By default this is the same |  | ||||||
| # name as the `device` field. |  | ||||||
| #control = "default" |  | ||||||
| 
 |  | ||||||
| # ! Only relevant for ALSA ! |  | ||||||
| # The alsa mixer used by `spotifyd`. |  | ||||||
| #mixer = "PCM"  # omit for macOS |  | ||||||
| 
 |  | ||||||
| # The audio bitrate. 96, 160 or 320 kbit/s |  | ||||||
| #bitrate = 160 |  | ||||||
| 
 |  | ||||||
| # Volume on startup between 0 and 100 |  | ||||||
| #initial_volume = 90 |  | ||||||
| initial_volume = 100 |  | ||||||
| 
 |  | ||||||
| # If set to true, enables volume normalisation between songs. |  | ||||||
| # volume_normalisation = true |  | ||||||
| 
 |  | ||||||
| # The normalisation pregain that is applied for each song. |  | ||||||
| #normalisation_pregain = -10 |  | ||||||
| 
 |  | ||||||
| #-------ä |  | ||||||
| # OTHER # |  | ||||||
| #-------# |  | ||||||
| 
 |  | ||||||
| # After the music playback has ended, start playing similar songs based on the previous tracks. |  | ||||||
| # By default, `spotifyd` infers this setting from the user settings. |  | ||||||
| autoplay = true |  | ||||||
| 
 |  | ||||||
| # A command that gets executed in your shell after each song changes. |  | ||||||
| #on_song_change_hook = "echo \"hook executed on $PLAYER_EVENT\"" |  | ||||||
| 
 |  | ||||||
| # The proxy `spotifyd` will use to connect to spotify. |  | ||||||
| #proxy = "http://proxy.example.org:8080" |  | ||||||
| @ -1,24 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.unfree; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.unfree = { |  | ||||||
|     enable = mkEnableOption "unfree"; |  | ||||||
|     allowedPackages = mkOption { |  | ||||||
|       type = types.listOf types.str; |  | ||||||
|       default = [ ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) cfg.allowedPackages; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,79 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   # User configuration |  | ||||||
|   userModule = types.submodule { |  | ||||||
|     options = { |  | ||||||
|       sudo = mkOption { |  | ||||||
|         type = types.bool; |  | ||||||
|         default = false; |  | ||||||
|         example = true; |  | ||||||
|         description = "Whether the user is allowed sudo access."; |  | ||||||
|       }; |  | ||||||
|       configuration = mkOption { |  | ||||||
|         type = types.path; |  | ||||||
|         default = ./users/base.nix; |  | ||||||
|         description = "What home manager configuration to use for this user."; |  | ||||||
|       }; |  | ||||||
|       desktopInit = mkOption { |  | ||||||
|         type = types.lines; |  | ||||||
|         default = ""; |  | ||||||
|         description = "Bash script to execute after initial log in."; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import systemwide configuration |  | ||||||
|     ./systemwide.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   options = { |  | ||||||
|     machine.sudo-groups = mkOption { |  | ||||||
|       type = types.listOf types.str; |  | ||||||
|       default = [ ]; |  | ||||||
|       description = "Groups assigned to sudo users."; |  | ||||||
|     }; |  | ||||||
|     machine.users = mkOption { |  | ||||||
|       type = types.attrsOf userModule; |  | ||||||
|       default = { }; |  | ||||||
|       description = "Users configured on this system."; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     # Add required home manager modules |  | ||||||
|     home-manager.sharedModules = [ |  | ||||||
|       # Modules |  | ||||||
|       ../../user-modules/default.nix |  | ||||||
| 
 |  | ||||||
|       # Custom packages |  | ||||||
|       ../../pkgs/default.nix |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # Create users |  | ||||||
|     users.users = attrsets.concatMapAttrs (name: value: { |  | ||||||
|       ${name} = { |  | ||||||
|         isNormalUser = true; |  | ||||||
|         extraGroups = mkIf value.sudo ( |  | ||||||
|           [ |  | ||||||
|             "wheel" |  | ||||||
|           ] |  | ||||||
|           ++ config.machine.sudo-groups |  | ||||||
|         ); |  | ||||||
|       }; |  | ||||||
|     }) config.machine.users; |  | ||||||
| 
 |  | ||||||
|     # Create home manager configuration for users |  | ||||||
|     home-manager.users = attrsets.concatMapAttrs (name: value: { |  | ||||||
|       ${name} = value.configuration; |  | ||||||
|     }) config.machine.users; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,42 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   moduleFiles = [ |  | ||||||
|     ../../user-modules/desktop/systemwide.nix |  | ||||||
|     ../../user-modules/development/systemwide.nix |  | ||||||
|     ../../user-modules/gaming/systemwide.nix |  | ||||||
|     ../../user-modules/keyring/systemwide.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   moduleConfig = lists.foldr (file: acc: recursiveUpdate acc (import file)) { } moduleFiles; |  | ||||||
| 
 |  | ||||||
|   moduleNames = attrNames moduleConfig; |  | ||||||
| 
 |  | ||||||
|   mkModule = |  | ||||||
|     name: moduleConfig: |  | ||||||
|     { pkgs, ... }: |  | ||||||
|     { |  | ||||||
|       config = |  | ||||||
|         mkIf |  | ||||||
|           (any ( |  | ||||||
|             user: |  | ||||||
|             ( |  | ||||||
|               config.home-manager.users.${user}.modules.${name}.enable |  | ||||||
|               || (any (specialisation: specialisation.configuration.modules.${name}.enable) ( |  | ||||||
|                 attrValues config.home-manager.users.${user}.specialisation |  | ||||||
|               )) |  | ||||||
|             ) |  | ||||||
|           ) (attrNames config.home-manager.users)) |  | ||||||
|           (if (isAttrs moduleConfig) then moduleConfig else (moduleConfig { inherit config pkgs; })); |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|   imports = map (name: mkModule name moduleConfig."${name}") moduleNames; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   imports = imports; |  | ||||||
| } |  | ||||||
| @ -1,23 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.tailscale; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.tailscale = { |  | ||||||
|     enable = mkEnableOption "tailscale"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     services.tailscale = { |  | ||||||
|       enable = true; |  | ||||||
|       useRoutingFeatures = "client"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,24 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.wpa_supplicant; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.wpa_supplicant = { |  | ||||||
|     enable = mkEnableOption "wpa_supplicant"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     networking.wireless = { |  | ||||||
|       enable = true; |  | ||||||
|       userControlled.enable = true; |  | ||||||
|       allowAuxiliaryImperativeNetworks = true; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,21 +0,0 @@ | |||||||
| { |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   overlay = final: prev: { |  | ||||||
|     dina-psfu = prev.callPackage ./fonts/dina-psfu.nix { }; |  | ||||||
|     ttf2psf = prev.callPackage ./fonts/ttf2psf.nix { }; |  | ||||||
|     wqy-zenhei = prev.callPackage ./fonts/wqy-zenhei.nix { }; |  | ||||||
|     wqy-microhei = prev.callPackage ./fonts/wqy-microhei.nix { }; |  | ||||||
|     wqy-bitmapsong = prev.callPackage ./fonts/wqy-bitmapsong.nix { }; |  | ||||||
| 
 |  | ||||||
|     wprs = prev.callPackage ./programs/wprs/default.nix { }; |  | ||||||
|     nixgreety = prev.callPackage ./programs/nixgreety.nix { }; |  | ||||||
|     carla_osc_bridge = prev.callPackage ./programs/carla_osc_bridge.nix { }; |  | ||||||
|     # ly = prev.callPackage ./programs/ly/default.nix { }; |  | ||||||
|   }; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   nixpkgs.overlays = [ overlay ]; |  | ||||||
| } |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| pkgs.stdenv.mkDerivation { |  | ||||||
|   pname = "ttf2psf"; |  | ||||||
|   version = "1.0.0"; |  | ||||||
| 
 |  | ||||||
|   src = pkgs.fetchFromGitHub { |  | ||||||
|     owner = "NateChoe1"; |  | ||||||
|     repo = "ttf2psf"; |  | ||||||
|     rev = "8db09d05385f595c320eccae4c48ff4393ca5bde"; |  | ||||||
|     sha256 = "v52TZp+GyXHBAMsIoHFA8ZIMPsDVls13WW29vpesCig="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   buildInputs = with pkgs; [ |  | ||||||
|     pkg-config |  | ||||||
|     freetype |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   buildPhase = '' |  | ||||||
|     make build/ttf2psf |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   installPhase = '' |  | ||||||
|     install -Dm 755 -t $out/bin build/ttf2psf |  | ||||||
|     install -Dm 644 -t $out/share/ttf2psf data/*.* |  | ||||||
|     install -Dm 644 -t $out/share/ttf2psf/fontsets data/fontsets/* |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| pkgs.stdenv.mkDerivation rec { |  | ||||||
|   pname = "wqy-bitmapsong-pcf"; |  | ||||||
|   version = "1.0.0-RC1"; |  | ||||||
| 
 |  | ||||||
|   src = pkgs.fetchurl { |  | ||||||
|     url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz"; |  | ||||||
|     hash = "sha256-0uvwkRUbvJ0remTnlP8dElRjaBVd6iukNYBTE/CTO7s="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   buildInputs = [ pkgs.fontforge ]; |  | ||||||
|   buildPhase = '' |  | ||||||
|     newName() { |  | ||||||
|     test "''${1:5:1}" = i && _it=Italic || _it= |  | ||||||
|     case ''${1:6:3} in |  | ||||||
|         400) test -z $it && _weight=Medium ;; |  | ||||||
|         700) _weight=Bold ;; |  | ||||||
|     esac |  | ||||||
|     _pt=''${1%.pcf} |  | ||||||
|     _pt=''${_pt#*-} |  | ||||||
|     echo "WenQuanYi_Bitmap_Song$_weight$_it$_pt" |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     for i in *.pcf; do |  | ||||||
|     fontforge -lang=ff -c "Open(\"$i\"); Generate(\"$(newName $i).otb\")" |  | ||||||
|     done |  | ||||||
|   ''; |  | ||||||
|   installPhase = '' |  | ||||||
|     install -Dm644 *.otb -t $out/share/fonts/ |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| pkgs.stdenv.mkDerivation rec { |  | ||||||
|   pname = "wqy-microhei"; |  | ||||||
|   version = "0.2.0-beta"; |  | ||||||
| 
 |  | ||||||
|   src = pkgs.fetchurl { |  | ||||||
|     url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz"; |  | ||||||
|     hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   installPhase = '' |  | ||||||
|     runHook preInstall |  | ||||||
| 
 |  | ||||||
|     install -Dm644 *.ttc -t $out/share/fonts/ |  | ||||||
| 
 |  | ||||||
|     runHook postInstall |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| pkgs.stdenv.mkDerivation rec { |  | ||||||
|   pname = "wqy-zenhei"; |  | ||||||
|   version = "0.9.45"; |  | ||||||
| 
 |  | ||||||
|   src = pkgs.fetchurl { |  | ||||||
|     url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz"; |  | ||||||
|     hash = "sha256-5LfjBkdb+UJ9F1dXjw5FKJMMhMROqj8WfUxC8RDuddY="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   installPhase = '' |  | ||||||
|     runHook preInstall |  | ||||||
| 
 |  | ||||||
|     install -Dm644 *.ttc -t $out/share/fonts/ |  | ||||||
| 
 |  | ||||||
|     runHook postInstall |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
| @ -1,19 +0,0 @@ | |||||||
| { pkgs, ... }: |  | ||||||
| 
 |  | ||||||
| with pkgs; |  | ||||||
| rustPlatform.buildRustPackage { |  | ||||||
|   pname = "carla_osc_bridge"; |  | ||||||
|   version = "master"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitea { |  | ||||||
|     domain = "git.bulthuis.dev"; |  | ||||||
|     owner = "Jan"; |  | ||||||
|     repo = "carla_osc_bridge"; |  | ||||||
|     rev = "c037e2d2a1b29b785d8acc10fa0cb761afdb3fcf"; |  | ||||||
|     hash = "sha256-Wvdfm+4dfygZwkvaUhO9w7DrrUl3ZYvtD7nYrPSD0eA="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   cargoHash = "sha256-s1ZKbhHudgPOy7613zbT8TkbM6B7oloLEuTYHoWjX5o="; |  | ||||||
| 
 |  | ||||||
|   useFetchCargoVendor = true; |  | ||||||
| } |  | ||||||
| @ -1,47 +0,0 @@ | |||||||
| { |  | ||||||
|   stdenv, |  | ||||||
|   lib, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   linux-pam, |  | ||||||
|   libxcb, |  | ||||||
|   makeBinaryWrapper, |  | ||||||
|   zig_0_12, |  | ||||||
|   callPackage, |  | ||||||
|   nixosTests, |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| stdenv.mkDerivation { |  | ||||||
|   pname = "ly"; |  | ||||||
|   version = "1.0.2"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "peterc-s"; |  | ||||||
|     repo = "ly"; |  | ||||||
|     rev = "e6d8bea236dd0097adb1c22e9a23d95102ebe9d9"; |  | ||||||
|     sha256 = "w9YdNVD+8UhrEbPJ7xqsd/WoxU2rlo2GXFtc9JpWHxo="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     makeBinaryWrapper |  | ||||||
|     zig_0_12.hook |  | ||||||
|   ]; |  | ||||||
|   buildInputs = [ |  | ||||||
|     libxcb |  | ||||||
|     linux-pam |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   postPatch = '' |  | ||||||
|     ln -s ${callPackage ./deps.nix { }} $ZIG_GLOBAL_CACHE_DIR/p |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   passthru.tests = { inherit (nixosTests) ly; }; |  | ||||||
| 
 |  | ||||||
|   meta = with lib; { |  | ||||||
|     description = "TUI display manager"; |  | ||||||
|     license = licenses.wtfpl; |  | ||||||
|     homepage = "https://github.com/fairyglade/ly"; |  | ||||||
|     maintainers = [ maintainers.vidister ]; |  | ||||||
|     platforms = platforms.linux; |  | ||||||
|     mainProgram = "ly"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,110 +0,0 @@ | |||||||
| # generated by zon2nix (https://github.com/Cloudef/zig2nix) |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   linkFarm, |  | ||||||
|   fetchurl, |  | ||||||
|   fetchgit, |  | ||||||
|   runCommandLocal, |  | ||||||
|   zig, |  | ||||||
|   name ? "zig-packages", |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   unpackZigArtifact = |  | ||||||
|     { name, artifact }: |  | ||||||
|     runCommandLocal name { nativeBuildInputs = [ zig ]; } '' |  | ||||||
|       hash="$(zig fetch --global-cache-dir "$TMPDIR" ${artifact})" |  | ||||||
|       mv "$TMPDIR/p/$hash" "$out" |  | ||||||
|       chmod 755 "$out" |  | ||||||
|     ''; |  | ||||||
| 
 |  | ||||||
|   fetchZig = |  | ||||||
|     { |  | ||||||
|       name, |  | ||||||
|       url, |  | ||||||
|       hash, |  | ||||||
|     }: |  | ||||||
|     let |  | ||||||
|       artifact = fetchurl { inherit url hash; }; |  | ||||||
|     in |  | ||||||
|     unpackZigArtifact { inherit name artifact; }; |  | ||||||
| 
 |  | ||||||
|   fetchGitZig = |  | ||||||
|     { |  | ||||||
|       name, |  | ||||||
|       url, |  | ||||||
|       hash, |  | ||||||
|     }: |  | ||||||
|     let |  | ||||||
|       parts = lib.splitString "#" url; |  | ||||||
|       base = lib.elemAt parts 0; |  | ||||||
|       rev = lib.elemAt parts 1; |  | ||||||
|     in |  | ||||||
|     fetchgit { |  | ||||||
|       inherit name rev hash; |  | ||||||
|       url = base; |  | ||||||
|       deepClone = false; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|   fetchZigArtifact = |  | ||||||
|     { |  | ||||||
|       name, |  | ||||||
|       url, |  | ||||||
|       hash, |  | ||||||
|     }: |  | ||||||
|     let |  | ||||||
|       parts = lib.splitString "://" url; |  | ||||||
|       proto = lib.elemAt parts 0; |  | ||||||
|       path = lib.elemAt parts 1; |  | ||||||
|       fetcher = { |  | ||||||
|         "git+http" = fetchGitZig { |  | ||||||
|           inherit name hash; |  | ||||||
|           url = "http://${path}"; |  | ||||||
|         }; |  | ||||||
|         "git+https" = fetchGitZig { |  | ||||||
|           inherit name hash; |  | ||||||
|           url = "https://${path}"; |  | ||||||
|         }; |  | ||||||
|         http = fetchZig { |  | ||||||
|           inherit name hash; |  | ||||||
|           url = "http://${path}"; |  | ||||||
|         }; |  | ||||||
|         https = fetchZig { |  | ||||||
|           inherit name hash; |  | ||||||
|           url = "https://${path}"; |  | ||||||
|         }; |  | ||||||
|         file = unpackZigArtifact { |  | ||||||
|           inherit name; |  | ||||||
|           artifact = /. + path; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     in |  | ||||||
|     fetcher.${proto}; |  | ||||||
| in |  | ||||||
| linkFarm name [ |  | ||||||
|   { |  | ||||||
|     name = "122062d301a203d003547b414237229b09a7980095061697349f8bef41be9c30266b"; |  | ||||||
|     path = fetchZigArtifact { |  | ||||||
|       name = "clap"; |  | ||||||
|       url = "https://github.com/Hejsil/zig-clap/archive/refs/tags/0.9.1.tar.gz"; |  | ||||||
|       hash = "sha256-7qxm/4xb+58MGG+iUzssUtR97OG2dRjAqyS0BAet4HY="; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|   { |  | ||||||
|     name = "12209b971367b4066d40ecad4728e6fdffc4cc4f19356d424c2de57f5b69ac7a619a"; |  | ||||||
|     path = fetchZigArtifact { |  | ||||||
|       name = "zigini"; |  | ||||||
|       url = "https://github.com/Kawaii-Ash/zigini/archive/0bba97a12582928e097f4074cc746c43351ba4c8.tar.gz"; |  | ||||||
|       hash = "sha256-OdaJ5tqmk2MPwaAbpK4HRD/CcQCN+Cjj8U63BqUcFMs="; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
|   { |  | ||||||
|     name = "1220b0979ea9891fa4aeb85748fc42bc4b24039d9c99a4d65d893fb1c83e921efad8"; |  | ||||||
|     path = fetchZigArtifact { |  | ||||||
|       name = "ini"; |  | ||||||
|       url = "https://github.com/ziglibs/ini/archive/e18d36665905c1e7ba0c1ce3e8780076b33e3002.tar.gz"; |  | ||||||
|       hash = "sha256-RQ6OPJBqqH7PCL+xiI58JT7vnIo6zbwpLWn+byZO5iM="; |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
| ] |  | ||||||
| @ -1,19 +0,0 @@ | |||||||
| { pkgs, ... }: |  | ||||||
| 
 |  | ||||||
| with pkgs; |  | ||||||
| rustPlatform.buildRustPackage { |  | ||||||
|   pname = "nixgreety"; |  | ||||||
|   version = "master"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitea { |  | ||||||
|     domain = "git.bulthuis.dev"; |  | ||||||
|     owner = "Jan"; |  | ||||||
|     repo = "nixgreety"; |  | ||||||
|     rev = "c7278a910a0238a53f23fe9a0ae881802a4bcb31"; |  | ||||||
|     hash = "sha256-kZB+iEFIDJ8pOJetu4Isu4oaktgIn14D4PcpDXLOXA8="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   cargoHash = "sha256-pklKVzYoChRqPZ/D3BsMGnaBFd615TKbvoAy7iU8UtA="; |  | ||||||
| 
 |  | ||||||
|   useFetchCargoVendor = true; |  | ||||||
| } |  | ||||||
							
								
								
									
										2431
									
								
								pkgs/programs/wprs/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2431
									
								
								pkgs/programs/wprs/Cargo.lock
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,50 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   rustPlatform, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   pkg-config, |  | ||||||
|   libxkbcommon, |  | ||||||
|   python3, |  | ||||||
|   runCommand, |  | ||||||
|   wprs, |  | ||||||
| }: |  | ||||||
| rustPlatform.buildRustPackage { |  | ||||||
|   pname = "wprs"; |  | ||||||
|   version = "0-unstable-2025-04-16"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "wayland-transpositor"; |  | ||||||
|     repo = "wprs"; |  | ||||||
|     rev = "dfc1385bcb73734cd0d05a7e353522983c236562"; |  | ||||||
|     hash = "sha256-MrfYrKAVFoT453B2zED6Ax2coZ/KZ7CWYdZCx469Q/4="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     pkg-config |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   buildInputs = [ |  | ||||||
|     libxkbcommon |  | ||||||
|     (python3.withPackages (pp: with pp; [ psutil ])) |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   useFetchCargoVendor = true; |  | ||||||
|   cargoHash = "sha256-01PTfgDeagC72z8XADXEn5Aio6UWQAAYgDP4zKFTPpY="; |  | ||||||
| 
 |  | ||||||
|   preFixup = '' |  | ||||||
|     cp  wprs "$out/bin/wprs" |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   passthru.tests.sanity = runCommand "wprs-sanity" { nativeBuildInputs = [ wprs ]; } '' |  | ||||||
|     ${wprs}/bin/wprs -h > /dev/null && touch $out |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   meta = with lib; { |  | ||||||
|     description = "rootless remote desktop access for remote Wayland"; |  | ||||||
|     license = licenses.asl20; |  | ||||||
|     maintainers = with maintainers; [ mksafavi ]; |  | ||||||
|     platforms = [ "x86_64-linux" ]; # The aarch64-linux support is not implemented in upstream yet. Also, the darwin platform is not supported as it requires wayland. |  | ||||||
|     homepage = "https://github.com/wayland-transpositor/wprs"; |  | ||||||
|     mainProgram = "wprs"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,54 +0,0 @@ | |||||||
| { |  | ||||||
|   nixpkgs, |  | ||||||
|   flake-utils, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   imports = [ |  | ||||||
|     ./shell.nix |  | ||||||
|     ./languages/python.nix |  | ||||||
|     ./languages/rust.nix |  | ||||||
|     ./utilities/cuda.nix |  | ||||||
|     ./utilities/jupyter.nix |  | ||||||
|   ]; |  | ||||||
| in |  | ||||||
| { |  | ||||||
| 
 |  | ||||||
|   mkShell = |  | ||||||
|     attrs: |  | ||||||
|     (flake-utils.lib.eachDefaultSystem ( |  | ||||||
|       system: |  | ||||||
|       let |  | ||||||
|         pkgs = import nixpkgs { |  | ||||||
|           inherit system; |  | ||||||
|           config.allowUnfree = true; |  | ||||||
|         }; |  | ||||||
|         evaluated = |  | ||||||
|           (nixpkgs.lib.evalModules { |  | ||||||
|             modules = [ attrs ] ++ imports; |  | ||||||
|             specialArgs = { |  | ||||||
|               pkgs = pkgs; |  | ||||||
|             }; |  | ||||||
|           }).config; |  | ||||||
|         recUpdate = nixpkgs.lib.recursiveUpdate; |  | ||||||
|         libPackages = evaluated.libPackages pkgs; |  | ||||||
|         shell = recUpdate { |  | ||||||
|           env = |  | ||||||
|             evaluated.env |  | ||||||
|             // ( |  | ||||||
|               if (libPackages != [ ]) then |  | ||||||
|                 { |  | ||||||
|                   LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath libPackages; |  | ||||||
|                 } |  | ||||||
|               else |  | ||||||
|                 { } |  | ||||||
|             ); |  | ||||||
|           packages = evaluated.packages ++ (evaluated.extraPackages pkgs) ++ libPackages; |  | ||||||
|         } evaluated.override; |  | ||||||
|       in |  | ||||||
|       { |  | ||||||
|         devShells.default = pkgs.mkShell shell; |  | ||||||
|       } |  | ||||||
|     )); |  | ||||||
| } |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   packages = config.python.packages; |  | ||||||
|   pythonPackage = pkgs.python3.withPackages packages; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.python = { |  | ||||||
|     enable = mkEnableOption "Python"; |  | ||||||
|     packages = mkOption { |  | ||||||
|       type = types.functionTo (types.listOf types.package) // { |  | ||||||
|         merge = |  | ||||||
|           loc: defs: p: |  | ||||||
|           lib.concatMap (def: (def.value p)) defs; |  | ||||||
|       }; |  | ||||||
|       default = p: [ ]; |  | ||||||
|       description = "Python packages to install"; |  | ||||||
|     }; |  | ||||||
|     # TODO: Add option to directly read from requirements.txt, maybe with mach-nix |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf config.python.enable { |  | ||||||
|     packages = [ |  | ||||||
|       pythonPackage |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     env.PYTHONINTERPRETER = "${pythonPackage}/bin/python"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,37 +0,0 @@ | |||||||
| { |  | ||||||
|   pkgs, |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   rustPackage = pkgs.rustc; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.rust = { |  | ||||||
|     enable = mkEnableOption "Rust"; |  | ||||||
|     # TODO: Add option to specify toolchain file |  | ||||||
|     # See https://ayats.org/blog/nix-rustup |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf config.rust.enable { |  | ||||||
|     packages = with pkgs; [ |  | ||||||
|       rustPackage |  | ||||||
|       cargo |  | ||||||
|       clippy |  | ||||||
|       rustfmt |  | ||||||
|       cargo-audit |  | ||||||
| 
 |  | ||||||
|       bacon |  | ||||||
|       evcxr |  | ||||||
| 
 |  | ||||||
|       # TODO: Might be needed for bindgen |  | ||||||
|       # rustPlatform.bindgenHook |  | ||||||
|       # pkg-config |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     # env.RUST_SRC_PATH = "${rustPackage}/lib/rustlib/src/rust/library"; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,43 +0,0 @@ | |||||||
| { lib, ... }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| { |  | ||||||
|   options = { |  | ||||||
|     env = mkOption { |  | ||||||
|       type = types.attrsOf types.str; |  | ||||||
|       default = { }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     packages = mkOption { |  | ||||||
|       type = types.listOf types.package; |  | ||||||
|       default = [ ]; |  | ||||||
|       description = "Packages to install"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     extraPackages = mkOption { |  | ||||||
|       type = types.functionTo (types.listOf types.package) // { |  | ||||||
|         merge = |  | ||||||
|           loc: defs: p: |  | ||||||
|           lib.concatMap (def: (def.value p)) defs; |  | ||||||
|       }; |  | ||||||
|       default = p: [ ]; |  | ||||||
|       description = "Extra packages to install"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     libPackages = mkOption { |  | ||||||
|       type = types.functionTo (types.listOf types.package) // { |  | ||||||
|         merge = |  | ||||||
|           loc: defs: p: |  | ||||||
|           lib.concatMap (def: (def.value p)) defs; |  | ||||||
|       }; |  | ||||||
|       default = p: [ ]; |  | ||||||
|       description = "Packages to install and add to library path"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     override = mkOption { |  | ||||||
|       type = types.attrs; |  | ||||||
|       default = { }; |  | ||||||
|       description = "Settings in the mkShell call to override"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,15 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| { |  | ||||||
|   options.cuda = { |  | ||||||
|     enable = mkEnableOption "CUDA"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf config.cuda.enable { |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| { |  | ||||||
|   options.jupyter = { |  | ||||||
|     enable = mkEnableOption "Jupyter"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf config.jupyter.enable { |  | ||||||
|     python.enable = mkDefault true; |  | ||||||
|     python.packages = |  | ||||||
|       p: with p; [ |  | ||||||
|         jupyter |  | ||||||
|         notebook |  | ||||||
|         ipykernel |  | ||||||
|       ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,28 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.bluetuith; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.bluetuith = { |  | ||||||
|     enable = mkEnableOption "bluetuith"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     home.packages = with pkgs; [ bluetuith ]; |  | ||||||
| 
 |  | ||||||
|     # Add nix tree |  | ||||||
|     xdg.desktopEntries.bluetuith = { |  | ||||||
|       exec = "${pkgs.bluetuith}/bin/bluetuith"; |  | ||||||
|       name = "Bluetuith"; |  | ||||||
|       terminal = true; |  | ||||||
|       type = "Application"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     ./firefox/default.nix |  | ||||||
|     ./qutebrowser/default.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   options.default.browser = mkOption { |  | ||||||
|     type = types.str; |  | ||||||
|     default = ""; |  | ||||||
|     description = "Default browser"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     xdg.mimeApps = { |  | ||||||
|       enable = true; |  | ||||||
| 
 |  | ||||||
|       defaultApplications = { |  | ||||||
|         "text/html" = "${config.default.browser}"; |  | ||||||
|         "x-scheme-handler/http" = "${config.default.browser}"; |  | ||||||
|         "x-scheme-handler/https" = "${config.default.browser}"; |  | ||||||
|         "x-scheme-handler/about" = "${config.default.browser}"; |  | ||||||
|         "x-scheme-handler/unknown" = "${config.default.browser}"; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,76 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.firefox; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.firefox = { |  | ||||||
|     enable = lib.mkEnableOption "firefox"; |  | ||||||
|     default = lib.mkEnableOption "default"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = lib.mkIf cfg.enable { |  | ||||||
|     default.browser = mkIf cfg.default "firefox.desktop"; |  | ||||||
| 
 |  | ||||||
|     programs.firefox = { |  | ||||||
|       enable = true; |  | ||||||
| 
 |  | ||||||
|       policies = { |  | ||||||
|         AppAutoUpdate = false; |  | ||||||
|         BlockAboutAddons = false; |  | ||||||
|         BlockAboutConfig = true; |  | ||||||
|         BlockAboutProfiles = true; |  | ||||||
|         DisableAppUpdate = true; |  | ||||||
|         DisableFeedbackCommands = true; |  | ||||||
|         DisableMasterPasswordCreation = true; |  | ||||||
|         DisablePocket = true; |  | ||||||
|         DisableProfileImport = true; |  | ||||||
|         DisableProfileRefresh = true; |  | ||||||
|         DisableSetDesktopBackground = true; |  | ||||||
|         DisableTelemetry = true; |  | ||||||
|         DisplayBookmarksToolbar = "never"; |  | ||||||
|         DisplayMenuBar = "never"; |  | ||||||
|         DNSOverHTTPS = { |  | ||||||
|           Enabled = false; |  | ||||||
|         }; |  | ||||||
|         DontCheckDefaultBrowser = true; |  | ||||||
|         PasswordManagerEnabled = false; |  | ||||||
|         TranslateEnabled = true; |  | ||||||
|         UseSystemPrintDialog = true; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       profiles.nixos = { |  | ||||||
|         search.default = "ddg"; |  | ||||||
| 
 |  | ||||||
|         extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ |  | ||||||
|           ublock-origin |  | ||||||
|         ]; |  | ||||||
| 
 |  | ||||||
|         # Theming |  | ||||||
|         userChrome = readFile ( |  | ||||||
|           pkgs.replaceVars ./userChrome.css { |  | ||||||
|             colors = config.desktop.theming.colorsCSS; |  | ||||||
|           } |  | ||||||
|         ); |  | ||||||
| 
 |  | ||||||
|         settings = { |  | ||||||
|           "browser.tabs.inTitlebar" = 0; |  | ||||||
|           "extensions.autoDisableScopes" = 0; |  | ||||||
|           "devtools.chrome.enabled" = true; |  | ||||||
|           "devtools.debugger.remote-enabled" = true; |  | ||||||
|           "toolkit.legacyUserProfileCustomizations.stylesheets" = true; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         # Force overwriting configuration file |  | ||||||
|         search.force = true; |  | ||||||
|         containersForce = true; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,73 +0,0 @@ | |||||||
| /* Import theme colors */ |  | ||||||
| @colors@ |  | ||||||
| 
 |  | ||||||
| /* Configure titlebar */ |  | ||||||
| #titlebar { |  | ||||||
|     /* Add consistent margins to tab bar */ |  | ||||||
|     padding: 0 2px !important; |  | ||||||
| 
 |  | ||||||
|     /* Add emphasized color to background of tab bar */ |  | ||||||
|     background-color: var(--nix-color-bg-status) !important; |  | ||||||
| 
 |  | ||||||
|     /* Set correct text color */ |  | ||||||
|     color: var(--nix-color-fg) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .tab-background:is([selected], [multiselected]) { |  | ||||||
|     /* Set correct background color */ |  | ||||||
|     background-color: var(--nix-color-bg) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .tab-content { |  | ||||||
|     /* Set correct text color */ |  | ||||||
|     color: var(--nix-color-fg) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* Configure navigation bar */ |  | ||||||
| #nav-bar { |  | ||||||
|     /* Set correct background color */ |  | ||||||
|     background-color: var(--nix-color-bg) !important; |  | ||||||
| 
 |  | ||||||
|     /* Set correct text color */ |  | ||||||
|     color: var(--nix-color-fg) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #urlbar { |  | ||||||
|     /* Set correct text color */ |  | ||||||
|     color: var(--nix-color-fg) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #urlbar[open]>#urlbar-background { |  | ||||||
|     /* Set correct background color when opened */ |  | ||||||
|     background-color: var(--nix-color-bg) !important; |  | ||||||
| 
 |  | ||||||
|     /* Use same box-shadow as tabs when opened */ |  | ||||||
|     border: none !important; |  | ||||||
|     box-shadow: 0 0 4px rgba(0, 0, 0, .4) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #urlbar[focused]:not([suppress-focus-border])>#urlbar-background { |  | ||||||
|     /* Set better outline for focused urlbar */ |  | ||||||
|     outline-color: var(--nix-color-border-focused) !important; |  | ||||||
|     outline-width: 1px !important; |  | ||||||
|     outline-offset: 0 !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #urlbar-background { |  | ||||||
|     /* Set the correct background color */ |  | ||||||
|     background-color: var(--nix-color-bg-status) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* Configure popups */ |  | ||||||
| panelview { |  | ||||||
|     /* Set correct background color for popups */ |  | ||||||
|     background-color: var(--nix-color-bg) !important; |  | ||||||
| 
 |  | ||||||
|     /* Set correct text color */ |  | ||||||
|     color: var(--nix-color-fg) !important; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| menupopup { |  | ||||||
|     /* Set correct background color for context menus */ |  | ||||||
|     --panel-background: var(--nix-color-bg) !important; |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.qutebrowser; |  | ||||||
|   theme = config.desktop.theming; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.qutebrowser = { |  | ||||||
|     enable = mkEnableOption "qutebrowser"; |  | ||||||
|     default = mkEnableOption "default"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     default.browser = mkIf cfg.default "org.qutebrowser.qutebrowser.desktop"; |  | ||||||
| 
 |  | ||||||
|     programs.qutebrowser = { |  | ||||||
|       enable = true; |  | ||||||
| 
 |  | ||||||
|       extraConfig = '' |  | ||||||
|         config.set("completion.web_history.max_items", 256) |  | ||||||
|         config.set("colors.webpage.darkmode.enabled", False) |  | ||||||
|         config.set("colors.webpage.preferred_color_scheme", "${if theme.darkMode then "dark" else "light"}") |  | ||||||
|         config.set("fonts.default_family", "${theme.fonts.interface.name}") |  | ||||||
|         config.set("fonts.default_size", "${toString theme.fonts.interface.recommendedSize}pt") |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,368 +0,0 @@ | |||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.btop; |  | ||||||
|   colors = config.desktop.theming.schemeColors; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.btop = { |  | ||||||
|     enable = mkEnableOption "btop"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     home.packages = with pkgs; [ btop ]; |  | ||||||
| 
 |  | ||||||
|     xdg.configFile."btop/btop.conf" = { |  | ||||||
|       enable = true; |  | ||||||
|       text = '' |  | ||||||
|         #? Config file for btop v. 1.4.0 |  | ||||||
| 
 |  | ||||||
|         #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. |  | ||||||
|         #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" |  | ||||||
|         color_theme = "nixos" |  | ||||||
| 
 |  | ||||||
|         #* If the theme set background should be shown, set to False if you want terminal background transparency. |  | ||||||
|         theme_background = True |  | ||||||
| 
 |  | ||||||
|         #* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. |  | ||||||
|         truecolor = True |  | ||||||
| 
 |  | ||||||
|         #* Set to true to force tty mode regardless if a real tty has been detected or not. |  | ||||||
|         #* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. |  | ||||||
|         force_tty = False |  | ||||||
| 
 |  | ||||||
|         #* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. |  | ||||||
|         #* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. |  | ||||||
|         #* Use whitespace " " as separator between different presets. |  | ||||||
|         #* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" |  | ||||||
|         presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" |  | ||||||
| 
 |  | ||||||
|         #* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. |  | ||||||
|         #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. |  | ||||||
|         vim_keys = False |  | ||||||
| 
 |  | ||||||
|         #* Rounded corners on boxes, is ignored if TTY mode is ON. |  | ||||||
|         rounded_corners = False |  | ||||||
| 
 |  | ||||||
|         #* Default symbols to use for graph creation, "braille", "block" or "tty". |  | ||||||
|         #* "braille" offers the highest resolution but might not be included in all fonts. |  | ||||||
|         #* "block" has half the resolution of braille but uses more common characters. |  | ||||||
|         #* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. |  | ||||||
|         #* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. |  | ||||||
|         graph_symbol = "braille" |  | ||||||
| 
 |  | ||||||
|         # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". |  | ||||||
|         graph_symbol_cpu = "default" |  | ||||||
| 
 |  | ||||||
|         # Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". |  | ||||||
|         graph_symbol_gpu = "default" |  | ||||||
| 
 |  | ||||||
|         # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". |  | ||||||
|         graph_symbol_mem = "default" |  | ||||||
| 
 |  | ||||||
|         # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". |  | ||||||
|         graph_symbol_net = "default" |  | ||||||
| 
 |  | ||||||
|         # Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". |  | ||||||
|         graph_symbol_proc = "default" |  | ||||||
| 
 |  | ||||||
|         #* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. |  | ||||||
|         shown_boxes = "cpu net proc mem" |  | ||||||
| 
 |  | ||||||
|         #* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. |  | ||||||
|         update_ms = 500 |  | ||||||
| 
 |  | ||||||
|         #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", |  | ||||||
|         #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. |  | ||||||
|         proc_sorting = "cpu lazy" |  | ||||||
| 
 |  | ||||||
|         #* Reverse sorting order, True or False. |  | ||||||
|         proc_reversed = False |  | ||||||
| 
 |  | ||||||
|         #* Show processes as a tree. |  | ||||||
|         proc_tree = False |  | ||||||
| 
 |  | ||||||
|         #* Use the cpu graph colors in the process list. |  | ||||||
|         proc_colors = True |  | ||||||
| 
 |  | ||||||
|         #* Use a darkening gradient in the process list. |  | ||||||
|         proc_gradient = True |  | ||||||
| 
 |  | ||||||
|         #* If process cpu usage should be of the core it's running on or usage of the total available cpu power. |  | ||||||
|         proc_per_core = False |  | ||||||
| 
 |  | ||||||
|         #* Show process memory as bytes instead of percent. |  | ||||||
|         proc_mem_bytes = True |  | ||||||
| 
 |  | ||||||
|         #* Show cpu graph for each process. |  | ||||||
|         proc_cpu_graphs = True |  | ||||||
| 
 |  | ||||||
|         #* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) |  | ||||||
|         proc_info_smaps = False |  | ||||||
| 
 |  | ||||||
|         #* Show proc box on left side of screen instead of right. |  | ||||||
|         proc_left = False |  | ||||||
| 
 |  | ||||||
|         #* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). |  | ||||||
|         proc_filter_kernel = False |  | ||||||
| 
 |  | ||||||
|         #* In tree-view, always accumulate child process resources in the parent process. |  | ||||||
|         proc_aggregate = False |  | ||||||
| 
 |  | ||||||
|         #* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. |  | ||||||
|         #* Select from a list of detected attributes from the options menu. |  | ||||||
|         cpu_graph_upper = "Auto" |  | ||||||
| 
 |  | ||||||
|         #* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. |  | ||||||
|         #* Select from a list of detected attributes from the options menu. |  | ||||||
|         cpu_graph_lower = "Auto" |  | ||||||
| 
 |  | ||||||
|         #* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". |  | ||||||
|         show_gpu_info = "Auto" |  | ||||||
| 
 |  | ||||||
|         #* Toggles if the lower CPU graph should be inverted. |  | ||||||
|         cpu_invert_lower = True |  | ||||||
| 
 |  | ||||||
|         #* Set to True to completely disable the lower CPU graph. |  | ||||||
|         cpu_single_graph = False |  | ||||||
| 
 |  | ||||||
|         #* Show cpu box at bottom of screen instead of top. |  | ||||||
|         cpu_bottom = False |  | ||||||
| 
 |  | ||||||
|         #* Shows the system uptime in the CPU box. |  | ||||||
|         show_uptime = True |  | ||||||
| 
 |  | ||||||
|         #* Show cpu temperature. |  | ||||||
|         check_temp = True |  | ||||||
| 
 |  | ||||||
|         #* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. |  | ||||||
|         cpu_sensor = "Auto" |  | ||||||
| 
 |  | ||||||
|         #* Show temperatures for cpu cores also if check_temp is True and sensors has been found. |  | ||||||
|         show_coretemp = True |  | ||||||
| 
 |  | ||||||
|         #* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. |  | ||||||
|         #* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. |  | ||||||
|         #* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. |  | ||||||
|         #* Example: "4:0 5:1 6:3" |  | ||||||
|         cpu_core_map = "" |  | ||||||
| 
 |  | ||||||
|         #* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". |  | ||||||
|         temp_scale = "celsius" |  | ||||||
| 
 |  | ||||||
|         #* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. |  | ||||||
|         base_10_sizes = False |  | ||||||
| 
 |  | ||||||
|         #* Show CPU frequency. |  | ||||||
|         show_cpu_freq = True |  | ||||||
| 
 |  | ||||||
|         #* Draw a clock at top of screen, formatting according to strftime, empty string to disable. |  | ||||||
|         #* Special formatting: /host = hostname | /user = username | /uptime = system uptime |  | ||||||
|         clock_format = "%X" |  | ||||||
| 
 |  | ||||||
|         #* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. |  | ||||||
|         background_update = True |  | ||||||
| 
 |  | ||||||
|         #* Custom cpu model name, empty string to disable. |  | ||||||
|         custom_cpu_name = "" |  | ||||||
| 
 |  | ||||||
|         #* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". |  | ||||||
|         #* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". |  | ||||||
|         disks_filter = "" |  | ||||||
| 
 |  | ||||||
|         #* Show graphs instead of meters for memory values. |  | ||||||
|         mem_graphs = True |  | ||||||
| 
 |  | ||||||
|         #* Show mem box below net box instead of above. |  | ||||||
|         mem_below_net = False |  | ||||||
| 
 |  | ||||||
|         #* Count ZFS ARC in cached and available memory. |  | ||||||
|         zfs_arc_cached = True |  | ||||||
| 
 |  | ||||||
|         #* If swap memory should be shown in memory box. |  | ||||||
|         show_swap = True |  | ||||||
| 
 |  | ||||||
|         #* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. |  | ||||||
|         swap_disk = True |  | ||||||
| 
 |  | ||||||
|         #* If mem box should be split to also show disks info. |  | ||||||
|         show_disks = True |  | ||||||
| 
 |  | ||||||
|         #* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. |  | ||||||
|         only_physical = True |  | ||||||
| 
 |  | ||||||
|         #* Read disks list from /etc/fstab. This also disables only_physical. |  | ||||||
|         use_fstab = True |  | ||||||
| 
 |  | ||||||
|         #* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) |  | ||||||
|         zfs_hide_datasets = False |  | ||||||
| 
 |  | ||||||
|         #* Set to true to show available disk space for privileged users. |  | ||||||
|         disk_free_priv = False |  | ||||||
| 
 |  | ||||||
|         #* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. |  | ||||||
|         show_io_stat = True |  | ||||||
| 
 |  | ||||||
|         #* Toggles io mode for disks, showing big graphs for disk read/write speeds. |  | ||||||
|         io_mode = True |  | ||||||
| 
 |  | ||||||
|         #* Set to True to show combined read/write io graphs in io mode. |  | ||||||
|         io_graph_combined = False |  | ||||||
| 
 |  | ||||||
|         #* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". |  | ||||||
|         #* Example: "/mnt/media:100 /:20 /boot:1". |  | ||||||
|         io_graph_speeds = "" |  | ||||||
| 
 |  | ||||||
|         #* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. |  | ||||||
|         net_download = 100 |  | ||||||
| 
 |  | ||||||
|         net_upload = 100 |  | ||||||
| 
 |  | ||||||
|         #* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. |  | ||||||
|         net_auto = True |  | ||||||
| 
 |  | ||||||
|         #* Sync the auto scaling for download and upload to whichever currently has the highest scale. |  | ||||||
|         net_sync = True |  | ||||||
| 
 |  | ||||||
|         #* Starts with the Network Interface specified here. |  | ||||||
|         net_iface = "" |  | ||||||
| 
 |  | ||||||
|         #* Show battery stats in top right if battery is present. |  | ||||||
|         show_battery = False |  | ||||||
| 
 |  | ||||||
|         #* Which battery to use if multiple are present. "Auto" for auto detection. |  | ||||||
|         selected_battery = "Auto" |  | ||||||
| 
 |  | ||||||
|         #* Show power stats of battery next to charge indicator. |  | ||||||
|         show_battery_watts = True |  | ||||||
| 
 |  | ||||||
|         #* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". |  | ||||||
|         #* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. |  | ||||||
|         log_level = "WARNING" |  | ||||||
| 
 |  | ||||||
|         #* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. |  | ||||||
|         nvml_measure_pcie_speeds = True |  | ||||||
| 
 |  | ||||||
|         #* Horizontally mirror the GPU graph. |  | ||||||
|         gpu_mirror_graph = True |  | ||||||
| 
 |  | ||||||
|         #* Custom gpu0 model name, empty string to disable. |  | ||||||
|         custom_gpu_name0 = "" |  | ||||||
| 
 |  | ||||||
|         #* Custom gpu1 model name, empty string to disable. |  | ||||||
|         custom_gpu_name1 = "" |  | ||||||
| 
 |  | ||||||
|         #* Custom gpu2 model name, empty string to disable. |  | ||||||
|         custom_gpu_name2 = "" |  | ||||||
| 
 |  | ||||||
|         #* Custom gpu3 model name, empty string to disable. |  | ||||||
|         custom_gpu_name3 = "" |  | ||||||
| 
 |  | ||||||
|         #* Custom gpu4 model name, empty string to disable. |  | ||||||
|         custom_gpu_name4 = "" |  | ||||||
| 
 |  | ||||||
|         #* Custom gpu5 model name, empty string to disable. |  | ||||||
|         custom_gpu_name5 = "" |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     xdg.configFile."btop/themes/nixos.theme" = { |  | ||||||
|       enable = true; |  | ||||||
|       text = with colors; '' |  | ||||||
|         # Main background, empty for terminal default, need to be empty if you want transparent background |  | ||||||
|         theme[main_bg]="#${base00}" |  | ||||||
| 
 |  | ||||||
|         # Main text color |  | ||||||
|         theme[main_fg]="#${base05}" |  | ||||||
| 
 |  | ||||||
|         # Title color for boxes |  | ||||||
|         theme[title]="#${base05}" |  | ||||||
| 
 |  | ||||||
|         # Highlight color for keyboard shortcuts |  | ||||||
|         theme[hi_fg]="#${base0D}" |  | ||||||
| 
 |  | ||||||
|         # Background color of selected item in processes box |  | ||||||
|         theme[selected_bg]="#${base03}" |  | ||||||
| 
 |  | ||||||
|         # Foreground color of selected item in processes box |  | ||||||
|         theme[selected_fg]="#${base0D}" |  | ||||||
| 
 |  | ||||||
|         # Color of inactive/disabled text |  | ||||||
|         theme[inactive_fg]="#8c8fa1" |  | ||||||
| 
 |  | ||||||
|         # Color of text appearing on top of graphs, i.e uptime and current network graph scaling |  | ||||||
|         theme[graph_text]="#${base06}" |  | ||||||
| 
 |  | ||||||
|         # Background color of the percentage meters |  | ||||||
|         theme[meter_bg]="#${base03}" |  | ||||||
| 
 |  | ||||||
|         # Misc colors for processes box including mini cpu graphs, details memory graph and details status text |  | ||||||
|         theme[proc_misc]="#${base06}" |  | ||||||
| 
 |  | ||||||
|         # CPU, Memory, Network, Proc box outline colors |  | ||||||
|         theme[cpu_box]="#${base0E}" #Mauve |  | ||||||
|         theme[mem_box]="#${base0B}" #Green |  | ||||||
|         theme[net_box]="#e64553" #Maroon |  | ||||||
|         theme[proc_box]="#${colors.base0D}" #Blue |  | ||||||
| 
 |  | ||||||
|         # Box divider line and small boxes line color |  | ||||||
|         theme[div_line]="#9ca0b0" |  | ||||||
| 
 |  | ||||||
|         # Temperature graph color (Green -> Yellow -> Red) |  | ||||||
|         theme[temp_start]="#${base0B}" |  | ||||||
|         theme[temp_mid]="#${base0A}" |  | ||||||
|         theme[temp_end]="#${base08}" |  | ||||||
| 
 |  | ||||||
|         # CPU graph colors (Teal -> Lavender) |  | ||||||
|         theme[cpu_start]="#${base0C}" |  | ||||||
|         theme[cpu_mid]="#209fb5" |  | ||||||
|         theme[cpu_end]="#${base07}" |  | ||||||
| 
 |  | ||||||
|         # Mem/Disk free meter (Mauve -> Lavender -> Blue) |  | ||||||
|         theme[free_start]="#${base0E}" |  | ||||||
|         theme[free_mid]="#${base07}" |  | ||||||
|         theme[free_end]="#${base0D}" |  | ||||||
| 
 |  | ||||||
|         # Mem/Disk cached meter (Sapphire -> Lavender) |  | ||||||
|         theme[cached_start]="#209fb5" |  | ||||||
|         theme[cached_mid]="#${base0D}" |  | ||||||
|         theme[cached_end]="#${base07}" |  | ||||||
| 
 |  | ||||||
|         # Mem/Disk available meter (Peach -> Red) |  | ||||||
|         theme[available_start]="#${base09}" |  | ||||||
|         theme[available_mid]="#e64553" |  | ||||||
|         theme[available_end]="#${base08}" |  | ||||||
| 
 |  | ||||||
|         # Mem/Disk used meter (Green -> Sky) |  | ||||||
|         theme[used_start]="#${base0B}" |  | ||||||
|         theme[used_mid]="#${base0C}" |  | ||||||
|         theme[used_end]="#04a5e5" |  | ||||||
| 
 |  | ||||||
|         # Download graph colors (Peach -> Red) |  | ||||||
|         theme[download_start]="#${base09}" |  | ||||||
|         theme[download_mid]="#e64553" |  | ||||||
|         theme[download_end]="#${base08}" |  | ||||||
| 
 |  | ||||||
|         # Upload graph colors (Green -> Sky) |  | ||||||
|         theme[upload_start]="#${base0B}" |  | ||||||
|         theme[upload_mid]="#${base0C}" |  | ||||||
|         theme[upload_end]="#04a5e5" |  | ||||||
| 
 |  | ||||||
|         # Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) |  | ||||||
|         theme[process_start]="#209fb5" |  | ||||||
|         theme[process_mid]="#${base07}" |  | ||||||
|         theme[process_end]="#${base0E}" |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     modules.shell.aliases = { |  | ||||||
|       top = "btop"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @ -1,42 +0,0 @@ | |||||||
| { |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import all modules |  | ||||||
|     ./bluetuith/default.nix |  | ||||||
|     ./browser/default.nix |  | ||||||
|     ./btop/default.nix |  | ||||||
|     ./desktop/default.nix |  | ||||||
|     ./development/default.nix |  | ||||||
|     ./discord/default.nix |  | ||||||
|     ./eduvpn/default.nix |  | ||||||
|     ./feishin/default.nix |  | ||||||
|     ./fontconfig/default.nix |  | ||||||
|     ./gaming/default.nix |  | ||||||
|     ./git/default.nix |  | ||||||
|     ./keyring/default.nix |  | ||||||
|     ./mako/default.nix |  | ||||||
|     ./neovim/default.nix |  | ||||||
|     ./obsidian/default.nix |  | ||||||
|     ./rofi/default.nix |  | ||||||
|     ./rofi/rofi-rbw.nix |  | ||||||
|     ./scripts/default.nix |  | ||||||
|     ./shell/default.nix |  | ||||||
|     ./shell/bash.nix |  | ||||||
|     ./shell/fish.nix |  | ||||||
|     ./spotify/default.nix |  | ||||||
|     ./terminal/default.nix |  | ||||||
|     ./terminal/foot/default.nix |  | ||||||
|     ./vscode/default.nix |  | ||||||
|     ./whatsapp/default.nix |  | ||||||
|     ./wprs/default.nix |  | ||||||
|     ./winbox/default.nix |  | ||||||
|     ./xpra/default.nix |  | ||||||
|     ./zathura/default.nix |  | ||||||
| 
 |  | ||||||
|     # Import unfree helper |  | ||||||
|     ../modules/unfree/default.nix |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
| @ -1,164 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| let |  | ||||||
|   cfg = config.modules.waybar; |  | ||||||
|   theme = config.desktop.theming; |  | ||||||
|   colors = theme.colors; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|   options.modules.waybar = { |  | ||||||
|     enable = mkEnableOption "waybar"; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   config = mkIf cfg.enable { |  | ||||||
|     home.packages = with pkgs; [ |  | ||||||
|       pulsemixer |  | ||||||
|       playerctl |  | ||||||
|       networkmanagerapplet # TODO: Move |  | ||||||
|     ]; |  | ||||||
| 
 |  | ||||||
|     modules.desktop.reloadScript = '' |  | ||||||
|       # if ${pkgs.procps}/bin/pgrep waybar; then |  | ||||||
|       #   ${pkgs.procps}/bin/pkill waybar |  | ||||||
|       # fi |  | ||||||
|       ${pkgs.waybar}/bin/waybar & |  | ||||||
|     ''; |  | ||||||
| 
 |  | ||||||
|     programs.waybar = { |  | ||||||
|       enable = true; |  | ||||||
|       systemd.enable = false; |  | ||||||
|       settings = { |  | ||||||
|         mainBar = { |  | ||||||
|           layer = "top"; |  | ||||||
|           spacing = 16; |  | ||||||
|           modules-left = [ "river/tags" ]; |  | ||||||
|           modules-center = [ |  | ||||||
|             #"river/window" |  | ||||||
|             "mpris" |  | ||||||
|           ]; |  | ||||||
|           modules-right = [ |  | ||||||
|             "tray" |  | ||||||
|             "bluetooth" |  | ||||||
|             "network" |  | ||||||
|             "pulseaudio" |  | ||||||
|             "battery" |  | ||||||
|             "clock" |  | ||||||
|           ]; |  | ||||||
|           "river/window" = { |  | ||||||
|             max-length = 50; |  | ||||||
|           }; |  | ||||||
|           "river/tags" = { |  | ||||||
|             tag-labels = [ |  | ||||||
|               "一" |  | ||||||
|               "二" |  | ||||||
|               "三" |  | ||||||
|               "四" |  | ||||||
|               "五" |  | ||||||
|               "六" |  | ||||||
|               "七" |  | ||||||
|               "八" |  | ||||||
|               "九" |  | ||||||
|             ]; |  | ||||||
|             disable-click = false; |  | ||||||
|           }; |  | ||||||
|           network = { |  | ||||||
|             tooltip = false; |  | ||||||
|             on-click = "wpa_gui"; |  | ||||||
|             format-wifi = "直 {essid}"; # Spacing achieved using "Thin Space" |  | ||||||
|             format-ethernet = "TODO"; |  | ||||||
|             format-disconnected = "睊"; |  | ||||||
|           }; |  | ||||||
|           pulseaudio = { |  | ||||||
|             tooltip = false; |  | ||||||
|             format = "{icon}   {volume}%"; # Spacing achieved using "Thin Space" |  | ||||||
|             #format-muted = ""; |  | ||||||
|             format-muted = "{icon}  --%"; # Spacing achieved using "Thin Space" |  | ||||||
|             format-icons = { |  | ||||||
|               #headphone = ""; |  | ||||||
|               #default = [ "" "" ]; |  | ||||||
|               headphone = ""; |  | ||||||
|               headphone-muted = ""; |  | ||||||
|               default = [ |  | ||||||
|                 "" |  | ||||||
|                 "" |  | ||||||
|                 "" |  | ||||||
|               ]; |  | ||||||
|             }; |  | ||||||
|           }; |  | ||||||
|           battery = { |  | ||||||
|             format = "{icon} {capacity}%"; # Spacing achieved using "Thin Space" |  | ||||||
|             format-charging = " {capacity}%"; # Spacing achieved using "Thin Space" |  | ||||||
|             #format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ]; |  | ||||||
|             format-icons = [ |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|               "" |  | ||||||
|             ]; |  | ||||||
|             interval = 1; |  | ||||||
|           }; |  | ||||||
|           clock = { |  | ||||||
|             #format = " {:%H:%M}"; |  | ||||||
|             #format = "   {:%H:%M}"; # Spacing achieved using "Thin Space" |  | ||||||
|             format = "{:%H:%M}"; |  | ||||||
|           }; |  | ||||||
|           mpris = { |  | ||||||
|             format = "{dynamic}"; |  | ||||||
|             tooltip-format = ""; |  | ||||||
|             interval = 1; |  | ||||||
|           }; |  | ||||||
|           bluetooth = { |  | ||||||
|             tooltip = false; |  | ||||||
|             format = "  {status}"; # Spacing achieved using "Thin Space" |  | ||||||
|             format-connected = "  {device_alias}"; # Spacing achieved using "Thin Space" |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|       # TODO: Replace base03 color with named color |  | ||||||
|       style = '' |  | ||||||
|         window#waybar { |  | ||||||
|           color: #${colors.fg}; |  | ||||||
|           background-color: #${colors.bg}; |  | ||||||
|           border-style: none none solid none; |  | ||||||
|           border-width: ${toString theme.layout.borderSize}px; |  | ||||||
|           border-color: #${colors.border-unfocused}; |  | ||||||
|           font-size: 12px; |  | ||||||
|           font-family: "${theme.fonts.monospace.name}"; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         .modules-right { |  | ||||||
|           margin: 0 8px 0 0; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         #tags button { |  | ||||||
|           color: #${theme.schemeColors.base03}; |  | ||||||
|           padding: 0 5px 1px 5px; |  | ||||||
|           border-radius: 0; |  | ||||||
|           font-size: 16px; |  | ||||||
|           font-family: "wenquanyi bitmap song"; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         #tags button.occupied { |  | ||||||
|           color: #${colors.fg}; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         #tags button.focused { |  | ||||||
|           color: #${colors.accent}; |  | ||||||
|         } |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user