many improvements
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | [submodule "secrets"] | ||||||
|  | 	path = secrets | ||||||
|  | 	url = ssh://git@git.kluster.moll.re:2222/remoll/nixos-secrets.git | ||||||
							
								
								
									
										14
									
								
								.sops.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.sops.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | # This example uses YAML anchors which allows reuse of multiple keys | ||||||
|  | # without having to repeat yourself. | ||||||
|  | # Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml | ||||||
|  | # for a more complex example. | ||||||
|  | keys: | ||||||
|  |   - &remy_usb age1027e2vu808mvf95m4f0am3aeg88n8vgzt56s04ndpkgm7awzeajspxl6tu | ||||||
|  |   - &remy_yoga age1t2stzdjfwrtekk23w43623fdvt9awdujth765f8l6mu9g6l4537q4gw8d0 | ||||||
|  |   # - &admin_bob age12zlz6lvcdk6eqaewfylg35w0syh58sm7gh53q5vvn7hd7c6nngyseftjxl | ||||||
|  | creation_rules: | ||||||
|  |   - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ | ||||||
|  |     key_groups: | ||||||
|  |     - age: | ||||||
|  |       - *remy_usb | ||||||
|  |       - *remy_yoga | ||||||
| @@ -67,7 +67,6 @@ TODO - disable root user | |||||||
| - https://github.com/anotherhadi/nixy | - https://github.com/anotherhadi/nixy | ||||||
| - https://github.com/Numb-0/nix-0 | - https://github.com/Numb-0/nix-0 | ||||||
| - https://github.com/Frost-Phoenix/nixos-config | - https://github.com/Frost-Phoenix/nixos-config | ||||||
| - https://github.com/elifouts/Dotfiles |  | ||||||
| - https://github.com/nomadics9/nixcfg | - https://github.com/nomadics9/nixcfg | ||||||
| - https://github.com/Daholli/nixos-config | - https://github.com/Daholli/nixos-config | ||||||
| - https://github.com/khaneliman/khanelinix | - https://github.com/khaneliman/khanelinix | ||||||
| @@ -78,3 +77,10 @@ TODO - disable root user | |||||||
| - https://github.com/luisnquin/nixos-config | - https://github.com/luisnquin/nixos-config | ||||||
| - https://gitlab.com/fisuri/dotfiles | - https://gitlab.com/fisuri/dotfiles | ||||||
| - https://github.com/NobbZ/nixos-config | - https://github.com/NobbZ/nixos-config | ||||||
|  | - https://code.maralorn.de/maralorn/config/ | ||||||
|  | - https://github.com/sameemul-haque/dotfiles | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #### Hyprland specific | ||||||
|  | - https://github.com/elifouts/Dotfiles | ||||||
|  | - https://github.com/Abhra00/hyprdots | ||||||
|   | |||||||
							
								
								
									
										182
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										182
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @@ -20,11 +20,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1745357003, |         "lastModified": 1749155310, | ||||||
|         "narHash": "sha256-jYwzQkv1r7HN/4qrAuKp+NR4YYNp2xDrOX5O9YVqkWo=", |         "narHash": "sha256-t0HfHg/1+TbSra5s6nNM0o4tnb3uqWedShSpZXsUMYY=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "aquamarine", |         "repo": "aquamarine", | ||||||
|         "rev": "a19cf76ee1a15c1c12083fa372747ce46387289f", |         "rev": "94981cf75a9f11da0b6dd6a1abbd7c50a36ab2d3", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -279,16 +279,16 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747331121, |         "lastModified": 1749154018, | ||||||
|         "narHash": "sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8=", |         "narHash": "sha256-gjN3j7joRvT3a8Zgcylnd4NFsnXeDBumqiu4HmY1RIg=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "rev": "1eec32f0efe3b830927989767a9e6ece0d82d608", |         "rev": "7aae0ee71a17b19708b93b3ed448a1a0952bf111", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "ref": "release-24.11", |         "ref": "release-25.05", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
| @@ -323,11 +323,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747747328, |         "lastModified": 1743604125, | ||||||
|         "narHash": "sha256-3Gc5CqAJqpvI4gIU1Oxbl5w440b+rY9HvDzs5C0ChBA=", |         "narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=", | ||||||
|         "owner": "nix-community", |         "owner": "nix-community", | ||||||
|         "repo": "home-manager", |         "repo": "home-manager", | ||||||
|         "rev": "65d2282ff6cf560f54997013bd1e575fbd0a7ebf", |         "rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -352,11 +352,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1745948457, |         "lastModified": 1749155331, | ||||||
|         "narHash": "sha256-lzTV10FJTCGNtMdgW5YAhCAqezeAzKOd/97HbQK8GTU=", |         "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprcursor", |         "repo": "hyprcursor", | ||||||
|         "rev": "ac903e80b33ba6a88df83d02232483d99f327573", |         "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -381,11 +381,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1745015490, |         "lastModified": 1749238452, | ||||||
|         "narHash": "sha256-apEJ9zoSzmslhJ2vOKFcXTMZLUFYzh1ghfB6Rbw3Low=", |         "narHash": "sha256-8qiKEWcxUrjpUpK+WyFNg/72C8rp70LUuyTD23T+SdQ=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprgraphics", |         "repo": "hyprgraphics", | ||||||
|         "rev": "60754910946b4e2dc1377b967b7156cb989c5873", |         "rev": "c7225d73755a6c4c7c72f4d4f3925ea426e325a8", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -410,11 +410,11 @@ | |||||||
|         "xdph": "xdph" |         "xdph": "xdph" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747503792, |         "lastModified": 1750106438, | ||||||
|         "narHash": "sha256-Okd5cu0jxGa+x4xpfMX9S8QH/zddaFUQvw97V6H2W3E=", |         "narHash": "sha256-zaTFR6NLaXkveEGl2kdl4UlvT7eHm3cYSbgSkibCO+M=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "Hyprland", |         "repo": "Hyprland", | ||||||
|         "rev": "705b97c4ac93148820012c701fe39445cf76a590", |         "rev": "0ece4af36a988ad06b28ed666011d84372d9e4dc", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -435,11 +435,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1743714874, |         "lastModified": 1749046714, | ||||||
|         "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", |         "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprland-protocols", |         "repo": "hyprland-protocols", | ||||||
|         "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", |         "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -467,11 +467,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1737634706, |         "lastModified": 1749154592, | ||||||
|         "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", |         "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprland-qt-support", |         "repo": "hyprland-qt-support", | ||||||
|         "rev": "8810df502cdee755993cb803eba7b23f189db795", |         "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -503,11 +503,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1745951494, |         "lastModified": 1749155776, | ||||||
|         "narHash": "sha256-2dModE32doiyQMmd6EDAQeZnz+5LOs6KXyE0qX76WIg=", |         "narHash": "sha256-t1PM0wxQLQwv2F2AW23uA7pm5giwmcgYEWbNIRct9r4=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprland-qtutils", |         "repo": "hyprland-qtutils", | ||||||
|         "rev": "4be1d324faf8d6e82c2be9f8510d299984dfdd2e", |         "rev": "396e8aa1c06274835b69da7f9a015fff9a9b7522", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -532,11 +532,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1746655412, |         "lastModified": 1749145882, | ||||||
|         "narHash": "sha256-kVQ0bHVtX6baYxRWWIh4u3LNJZb9Zcm2xBeDPOGz5BY=", |         "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprlang", |         "repo": "hyprlang", | ||||||
|         "rev": "557241780c179cf7ef224df392f8e67dab6cef83", |         "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -557,11 +557,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1746635225, |         "lastModified": 1749819919, | ||||||
|         "narHash": "sha256-W9G9bb0zRYDBRseHbVez0J8qVpD5QbizX67H/vsudhM=", |         "narHash": "sha256-7F/KG8dwSH9JXdlpOVrEEArS+PJSn0iEnx5eVCk89/I=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprutils", |         "repo": "hyprutils", | ||||||
|         "rev": "674ea57373f08b7609ce93baff131117a0dfe70d", |         "rev": "57ab2a867d8b554ad89f29060c15efd11631db91", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -582,11 +582,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1739870480, |         "lastModified": 1749145760, | ||||||
|         "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", |         "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "hyprwayland-scanner", |         "repo": "hyprwayland-scanner", | ||||||
|         "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", |         "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -613,11 +613,11 @@ | |||||||
|     }, |     }, | ||||||
|     "nixpkgs": { |     "nixpkgs": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747327360, |         "lastModified": 1749794982, | ||||||
|         "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", |         "narHash": "sha256-Kh9K4taXbVuaLC0IL+9HcfvxsSUx8dPB5s5weJcc9pc=", | ||||||
|         "owner": "NixOS", |         "owner": "NixOS", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", |         "rev": "ee930f9755f58096ac6e8ca94a1887e0534e2d81", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -629,11 +629,11 @@ | |||||||
|     }, |     }, | ||||||
|     "nixpkgs-unstable": { |     "nixpkgs-unstable": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747327360, |         "lastModified": 1749794982, | ||||||
|         "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", |         "narHash": "sha256-Kh9K4taXbVuaLC0IL+9HcfvxsSUx8dPB5s5weJcc9pc=", | ||||||
|         "owner": "nixos", |         "owner": "nixos", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", |         "rev": "ee930f9755f58096ac6e8ca94a1887e0534e2d81", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -645,16 +645,16 @@ | |||||||
|     }, |     }, | ||||||
|     "nixpkgs_2": { |     "nixpkgs_2": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747335874, |         "lastModified": 1750005367, | ||||||
|         "narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=", |         "narHash": "sha256-h/aac1dGLhS3qpaD2aZt25NdKY7b+JT0ZIP2WuGsJMU=", | ||||||
|         "owner": "nixos", |         "owner": "nixos", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858", |         "rev": "6c64dabd3aa85e0c02ef1cdcb6e1213de64baee3", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|         "owner": "nixos", |         "owner": "nixos", | ||||||
|         "ref": "nixos-24.11", |         "ref": "nixos-25.05", | ||||||
|         "repo": "nixpkgs", |         "repo": "nixpkgs", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
| @@ -685,11 +685,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747372754, |         "lastModified": 1749636823, | ||||||
|         "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", |         "narHash": "sha256-WUaIlOlPLyPgz9be7fqWJA5iG6rHcGRtLERSCfUDne4=", | ||||||
|         "owner": "cachix", |         "owner": "cachix", | ||||||
|         "repo": "git-hooks.nix", |         "repo": "git-hooks.nix", | ||||||
|         "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", |         "rev": "623c56286de5a3193aa38891a6991b28f9bab056", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -705,11 +705,32 @@ | |||||||
|         "nix-flatpak": "nix-flatpak", |         "nix-flatpak": "nix-flatpak", | ||||||
|         "nixpkgs": "nixpkgs_2", |         "nixpkgs": "nixpkgs_2", | ||||||
|         "nixpkgs-unstable": "nixpkgs-unstable", |         "nixpkgs-unstable": "nixpkgs-unstable", | ||||||
|  |         "sops-nix": "sops-nix", | ||||||
|         "stylix": "stylix", |         "stylix": "stylix", | ||||||
|         "superfreq": "superfreq", |         "watt": "watt", | ||||||
|         "zen-browser": "zen-browser" |         "zen-browser": "zen-browser" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "sops-nix": { | ||||||
|  |       "inputs": { | ||||||
|  |         "nixpkgs": [ | ||||||
|  |           "nixpkgs" | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1750119275, | ||||||
|  |         "narHash": "sha256-Rr7Pooz9zQbhdVxux16h7URa6mA80Pb/G07T4lHvh0M=", | ||||||
|  |         "owner": "Mic92", | ||||||
|  |         "repo": "sops-nix", | ||||||
|  |         "rev": "77c423a03b9b2b79709ea2cb63336312e78b72e2", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "Mic92", | ||||||
|  |         "repo": "sops-nix", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "stylix": { |     "stylix": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "base16": "base16", |         "base16": "base16", | ||||||
| @@ -729,11 +750,11 @@ | |||||||
|         "tinted-tmux": "tinted-tmux" |         "tinted-tmux": "tinted-tmux" | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747543250, |         "lastModified": 1747771231, | ||||||
|         "narHash": "sha256-NuT/y8zMRFG0I3KeMSLxCXCO/d9TEEB0ZTXcYdYENWw=", |         "narHash": "sha256-DYdmj22ZvkN5x9/VtdV5Wnze+UaPuboYraCPnOWn6u4=", | ||||||
|         "owner": "danth", |         "owner": "danth", | ||||||
|         "repo": "stylix", |         "repo": "stylix", | ||||||
|         "rev": "5ff94fe0108bb361bddfbe1541713c93f369554a", |         "rev": "66f554e4e32d804bcf2c007a7b7efef04a3773b0", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -743,26 +764,6 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "superfreq": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1747578749, |  | ||||||
|         "narHash": "sha256-MR8NuCe3Xq2MNLPdKE3+4VVw2e+UlwwDTM3U3RMJRig=", |  | ||||||
|         "owner": "NotAShelf", |  | ||||||
|         "repo": "superfreq", |  | ||||||
|         "rev": "6bdbc7e0ecd06866b940765942c6abe2fbad5ec7", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "NotAShelf", |  | ||||||
|         "repo": "superfreq", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "systems": { |     "systems": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1689347949, |         "lastModified": 1689347949, | ||||||
| @@ -843,6 +844,27 @@ | |||||||
|         "type": "github" |         "type": "github" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "watt": { | ||||||
|  |       "inputs": { | ||||||
|  |         "nixpkgs": [ | ||||||
|  |           "nixpkgs" | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1749377316, | ||||||
|  |         "narHash": "sha256-hw3rL4rlIlYJMTeE7DlQ3lRhQDJURAhE+PC/NT4VAAQ=", | ||||||
|  |         "owner": "NotAShelf", | ||||||
|  |         "repo": "watt", | ||||||
|  |         "rev": "154724c7b1bd49654ea55df719e1eb3219ec2000", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "NotAShelf", | ||||||
|  |         "ref": "v0.3.2", | ||||||
|  |         "repo": "watt", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "xdph": { |     "xdph": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "hyprland-protocols": [ |         "hyprland-protocols": [ | ||||||
| @@ -871,11 +893,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1745871725, |         "lastModified": 1749490041, | ||||||
|         "narHash": "sha256-M24SNc2flblWGXFkGQfqSlEOzAGZnMc9QG3GH4K/KbE=", |         "narHash": "sha256-R9Dn9IyUdPaJHD2Oqd7XJnnxpka6M6UYw4Ld0iA46HM=", | ||||||
|         "owner": "hyprwm", |         "owner": "hyprwm", | ||||||
|         "repo": "xdg-desktop-portal-hyprland", |         "repo": "xdg-desktop-portal-hyprland", | ||||||
|         "rev": "76bbf1a6b1378e4ab5230bad00ad04bc287c969e", |         "rev": "3cf35e178bc192ee51e3fddfd69e531e2c106a30", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
| @@ -892,11 +914,11 @@ | |||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1747747949, |         "lastModified": 1750130285, | ||||||
|         "narHash": "sha256-Ax1S/YaEovDKz9M71AweVpDxqJiTn/tHowbbUTb4gSo=", |         "narHash": "sha256-fauK56RkWQcNaDOehxxE2lcmNG0Vi++4KWlFQIJm4QE=", | ||||||
|         "owner": "0xc000022070", |         "owner": "0xc000022070", | ||||||
|         "repo": "zen-browser-flake", |         "repo": "zen-browser-flake", | ||||||
|         "rev": "5f7f77c79f1e7512ead0bed4e8b4bbcef8d80b38", |         "rev": "00b7edda741d3380fa123f053efd59774361d888", | ||||||
|         "type": "github" |         "type": "github" | ||||||
|       }, |       }, | ||||||
|       "original": { |       "original": { | ||||||
|   | |||||||
							
								
								
									
										44
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								flake.nix
									
									
									
									
									
								
							| @@ -2,10 +2,10 @@ | |||||||
|   description = "Nix config entry point"; |   description = "Nix config entry point"; | ||||||
|  |  | ||||||
|   inputs = { |   inputs = { | ||||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; |     nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; | ||||||
|     nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; |     nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; | ||||||
|     # Home manager |     # Home manager | ||||||
|     home-manager.url = "github:nix-community/home-manager/release-24.11"; |     home-manager.url = "github:nix-community/home-manager/release-25.05"; | ||||||
|     home-manager.inputs.nixpkgs.follows = "nixpkgs"; |     home-manager.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     # Managing flatpak apps |     # Managing flatpak apps | ||||||
|     nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1"; |     nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.4.1"; | ||||||
| @@ -19,10 +19,14 @@ | |||||||
|     zen-browser.inputs.nixpkgs.follows = "nixpkgs"; |     zen-browser.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|  |  | ||||||
|     # power management |     # power management | ||||||
|     superfreq = { |     watt = { | ||||||
|       url = "github:NotAShelf/superfreq"; |       url = "github:NotAShelf/watt/?ref=v0.3.2"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |       inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     # secrets | ||||||
|  |     sops-nix.url = "github:Mic92/sops-nix"; | ||||||
|  |     sops-nix.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   outputs = { |   outputs = { | ||||||
| @@ -30,6 +34,7 @@ | |||||||
|     nixpkgs, |     nixpkgs, | ||||||
|     home-manager, |     home-manager, | ||||||
|     stylix, |     stylix, | ||||||
|  |     sops-nix, | ||||||
|     ... |     ... | ||||||
|   } @ inputs: |   } @ inputs: | ||||||
|     let |     let | ||||||
| @@ -45,7 +50,7 @@ | |||||||
|       modules = [ |       modules = [ | ||||||
|         ./hosts/spectre-x360-2018 |         ./hosts/spectre-x360-2018 | ||||||
|         stylix.nixosModules.stylix |         stylix.nixosModules.stylix | ||||||
|         inputs.superfreq.nixosModules.default |         inputs.watt.nixosModules.default | ||||||
|         home-manager.nixosModules.home-manager |         home-manager.nixosModules.home-manager | ||||||
|           { |           { | ||||||
|             home-manager.useGlobalPkgs = true; |             home-manager.useGlobalPkgs = true; | ||||||
| @@ -66,9 +71,9 @@ | |||||||
|       specialArgs = { inherit inputs; }; |       specialArgs = { inherit inputs; }; | ||||||
|  |  | ||||||
|       modules = [ |       modules = [ | ||||||
|         ./hosts/lenovo-yoga-usb |         ./hosts/mobile-usb | ||||||
|         stylix.nixosModules.stylix |         stylix.nixosModules.stylix | ||||||
|         inputs.superfreq.nixosModules.default |         inputs.watt.nixosModules.default | ||||||
|         home-manager.nixosModules.home-manager |         home-manager.nixosModules.home-manager | ||||||
|           { |           { | ||||||
|             home-manager.useGlobalPkgs = true; |             home-manager.useGlobalPkgs = true; | ||||||
| @@ -76,7 +81,7 @@ | |||||||
|             home-manager.extraSpecialArgs = { inherit inputs; }; |             home-manager.extraSpecialArgs = { inherit inputs; }; | ||||||
|  |  | ||||||
|             home-manager.users.remy.imports = [ |             home-manager.users.remy.imports = [ | ||||||
|               ./users/remy_yoga-usb |               ./users/remy_usb | ||||||
|               inputs.nix-flatpak.homeManagerModules.nix-flatpak |               inputs.nix-flatpak.homeManagerModules.nix-flatpak | ||||||
|             ]; |             ]; | ||||||
|           } |           } | ||||||
| @@ -84,6 +89,29 @@ | |||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     nixosConfigurations.nyx = nixpkgs.lib.nixosSystem { | ||||||
|  |       system = "x86_64-linux"; | ||||||
|  |       specialArgs = { inherit inputs; }; | ||||||
|  |  | ||||||
|  |       modules = [ | ||||||
|  |         ./hosts/yoga-7-pro | ||||||
|  |         sops-nix.nixosModules.sops | ||||||
|  |         stylix.nixosModules.stylix | ||||||
|  |         inputs.watt.nixosModules.default | ||||||
|  |         home-manager.nixosModules.home-manager | ||||||
|  |           { | ||||||
|  |             home-manager.useGlobalPkgs = true; | ||||||
|  |             home-manager.useUserPackages = true; | ||||||
|  |             home-manager.extraSpecialArgs = { inherit inputs; }; | ||||||
|  |  | ||||||
|  |             home-manager.users.remy.imports = [ | ||||||
|  |               ./users/remy_yoga | ||||||
|  |               inputs.nix-flatpak.homeManagerModules.nix-flatpak | ||||||
|  |             ]; | ||||||
|  |           } | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     # nixosConfigurations.raspberry-pi = nixpkgs.lib.nixosSystem { |     # nixosConfigurations.raspberry-pi = nixpkgs.lib.nixosSystem { | ||||||
|     #   system = "aarch64-linux"; |     #   system = "aarch64-linux"; | ||||||
|     #   modules = [ |     #   modules = [ | ||||||
|   | |||||||
| @@ -1,52 +0,0 @@ | |||||||
| # Edit this configuration file to define what should be installed on |  | ||||||
| # your system. Help is available in the configuration.nix(5) man page, on |  | ||||||
| # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). |  | ||||||
|  |  | ||||||
| { config, lib, pkgs, ... }: |  | ||||||
|  |  | ||||||
| { |  | ||||||
|   imports = |  | ||||||
|     [ # Include the results of the hardware scan. |  | ||||||
|       ./hardware-configuration.nix |  | ||||||
|     ]; |  | ||||||
|  |  | ||||||
|   # Use the "experimental" flakes for cleaner config |  | ||||||
|   nix.settings.experimental-features = [ "nix-command" "flakes" ]; |  | ||||||
|   nixpkgs.config.allowUnfree = true; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   # Use latest kernel. |  | ||||||
|   boot.kernelPackages = pkgs.linuxPackages_latest; |  | ||||||
|  |  | ||||||
|   networking.hostName = "nichts"; |  | ||||||
|   # Pick only one of the below networking options. |  | ||||||
|   # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant. |  | ||||||
|   # networking.networkmanager.enable = true;  # Easiest to use and most distros use this by default. |  | ||||||
|  |  | ||||||
|   # Set your time zone. |  | ||||||
|   time.timeZone = "Europe/Berlin"; |  | ||||||
|  |  | ||||||
|   # Configure network proxy if necessary |  | ||||||
|   # networking.proxy.default = "http://user:password@proxy:port/"; |  | ||||||
|   # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; |  | ||||||
|  |  | ||||||
|   #   # Select internationalisation properties. |  | ||||||
|   i18n.defaultLocale = "en_US.UTF-8"; |  | ||||||
|   # i18n.supportedLocales = [ "en_US.UTF-8" "de_DE.UTF-8" ]; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   # Define a user account. Don't forget to set a password with ‘passwd’. |  | ||||||
|   users.users.remy = { |  | ||||||
|     isNormalUser = true; |  | ||||||
|     extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. |  | ||||||
|   }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   networking.networkmanager.wifi.powersave = true; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . |  | ||||||
|   system.stateVersion = "24.05"; # Did you read the comment? |  | ||||||
| } |  | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								hosts/mobile-usb/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								hosts/mobile-usb/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | # Edit this configuration file to define what should be installed on | ||||||
|  | # your system. Help is available in the configuration.nix(5) man page, on | ||||||
|  | # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). | ||||||
|  |  | ||||||
|  | { config, lib, pkgs, ... }: | ||||||
|  |  | ||||||
|  | { | ||||||
|  |   # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . | ||||||
|  |   system.stateVersion = "24.05"; # Did you read the comment? | ||||||
|  | } | ||||||
| @@ -1,15 +1,24 @@ | |||||||
| {lib, config, options, pkgs, ...}: | {lib, config, options, pkgs, ...}: | ||||||
| { | { | ||||||
|  |     config = { | ||||||
|  |         nix-config = { | ||||||
|  |             networking.hostName = "nichts"; | ||||||
|  | 
 | ||||||
|  |             userName = "remy"; | ||||||
|  |         }; | ||||||
|  |     }; | ||||||
| 
 | 
 | ||||||
|     # Merge the configuration and hardware configuration |     # Merge the configuration and hardware configuration | ||||||
|     imports = [ |     imports = [ | ||||||
|         ./configuration.nix |         ./configuration.nix | ||||||
|         ./hardware-configuration.nix |         ./hardware-configuration.nix | ||||||
|  | 
 | ||||||
|         ../../modules/nixos/bluetooth.nix |         ../../modules/nixos/bluetooth.nix | ||||||
|         ../../modules/nixos/flakes.nix |         ../../modules/nixos/flakes.nix | ||||||
|         ../../modules/nixos/flatpak.nix |         ../../modules/nixos/flatpak.nix | ||||||
|         ../../modules/nixos/fonts.nix |         ../../modules/nixos/fonts.nix | ||||||
|         ../../modules/nixos/hyprland.nix |         ../../modules/nixos/hyprland.nix | ||||||
|  |         ../../modules/nixos/language.nix | ||||||
|         ../../modules/nixos/ld.nix |         ../../modules/nixos/ld.nix | ||||||
|         ../../modules/nixos/monitoring.nix |         ../../modules/nixos/monitoring.nix | ||||||
|         ../../modules/nixos/networking.nix |         ../../modules/nixos/networking.nix | ||||||
| @@ -19,7 +28,11 @@ | |||||||
|         ../../modules/nixos/power.nix |         ../../modules/nixos/power.nix | ||||||
|         ../../modules/nixos/stylix.nix |         ../../modules/nixos/stylix.nix | ||||||
|         ../../modules/nixos/usb_config.nix |         ../../modules/nixos/usb_config.nix | ||||||
|  |         ../../modules/nixos/user.nix | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|         ../../utils/binary-cache.nix |         ../../utils/binary-cache.nix | ||||||
|         ../../utils/garbage-collection.nix |         ../../utils/garbage-collection.nix | ||||||
|  |         ../../utils/unfree.nix | ||||||
|     ]; |     ]; | ||||||
| } | } | ||||||
| @@ -8,9 +8,9 @@ | |||||||
|     [ (modulesPath + "/installer/scan/not-detected.nix") |     [ (modulesPath + "/installer/scan/not-detected.nix") | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|   boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "sdhci_pci" ]; |   boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ]; | ||||||
|   boot.initrd.kernelModules = [ ]; |   boot.initrd.kernelModules = [ ]; | ||||||
|   boot.kernelModules = [ "kvm-amd" ]; |   boot.kernelModules = [ ]; | ||||||
|   boot.extraModulePackages = [ ]; |   boot.extraModulePackages = [ ]; | ||||||
| 
 | 
 | ||||||
|   fileSystems."/" = |   fileSystems."/" = | ||||||
							
								
								
									
										14
									
								
								hosts/yoga-7-pro/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								hosts/yoga-7-pro/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | Installed using | ||||||
|  | ``` | ||||||
|  | > sudo nixos-install --root /tmp/new-install/ --flake .#nyx --impure --no-root-passwd | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | where `/tmp/new-install` was the moint point of the target FS. | ||||||
|  |  | ||||||
|  | The root user is effectively deactivated, hence the additional setup: | ||||||
|  | - users are part of the `wheel` group | ||||||
|  | - password needs to be set before first boot: | ||||||
|  |     - `nix-enter --root /tmp/new-install` | ||||||
|  |     - `passwd <username>` | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								hosts/yoga-7-pro/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								hosts/yoga-7-pro/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | # Edit this configuration file to define what should be installed on | ||||||
|  | # your system. Help is available in the configuration.nix(5) man page, on | ||||||
|  | # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). | ||||||
|  |  | ||||||
|  | { config, lib, pkgs, ... }: | ||||||
|  |  | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   boot.loader = { | ||||||
|  |     systemd-boot.enable = true; | ||||||
|  |     timeout = 0; | ||||||
|  |     efi.canTouchEfiVariables = true; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   # cause it is so inconveniently located | ||||||
|  |   services.logind.powerKey = "ignore"; | ||||||
|  |   services.logind.lidSwitch = "sleep"; | ||||||
|  |   services.logind.lidSwitchDocked = "ignore"; | ||||||
|  |  | ||||||
|  |   # requires too many shenanigans so I just install using --no-root-passwd | ||||||
|  |   # users.users.root.hashedPassword = "!"; | ||||||
|  |  | ||||||
|  |   nixpkgs.config.allowUnfree = true; | ||||||
|  |  | ||||||
|  |   # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . | ||||||
|  |   system.stateVersion = "24.05"; # Did you read the comment? | ||||||
|  | } | ||||||
							
								
								
									
										37
									
								
								hosts/yoga-7-pro/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								hosts/yoga-7-pro/default.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | { | ||||||
|  |     config = { | ||||||
|  |         nix-config = { | ||||||
|  |             networking.hostName = "nyx"; | ||||||
|  |  | ||||||
|  |             userName = "remy"; | ||||||
|  |         }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     # Merge the configuration and hardware configuration | ||||||
|  |     imports = [ | ||||||
|  |         ./configuration.nix | ||||||
|  |         ./hardware-configuration.nix | ||||||
|  |  | ||||||
|  |         ../../modules/nixos/backup.nix | ||||||
|  |         ../../modules/nixos/bluetooth.nix | ||||||
|  |         ../../modules/nixos/flakes.nix | ||||||
|  |         ../../modules/nixos/flatpak.nix | ||||||
|  |         ../../modules/nixos/fonts.nix | ||||||
|  |         ../../modules/nixos/hyprland.nix | ||||||
|  |         ../../modules/nixos/language.nix | ||||||
|  |         ../../modules/nixos/ld.nix | ||||||
|  |         ../../modules/nixos/monitoring.nix | ||||||
|  |         ../../modules/nixos/networking.nix | ||||||
|  |         ../../modules/nixos/nh.nix | ||||||
|  |         ../../modules/nixos/pipewire.nix | ||||||
|  |         ../../modules/nixos/podman.nix | ||||||
|  |         ../../modules/nixos/power.nix | ||||||
|  |         ../../modules/nixos/stylix.nix | ||||||
|  |         ../../modules/nixos/user.nix | ||||||
|  |  | ||||||
|  |         ../../utils/binary-cache.nix | ||||||
|  |         ../../utils/garbage-collection.nix | ||||||
|  |         ../../utils/unfree.nix | ||||||
|  |     ]; | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										59
									
								
								hosts/yoga-7-pro/hardware-configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								hosts/yoga-7-pro/hardware-configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | # Do not modify this file!  It was generated by ‘nixos-generate-config’ | ||||||
|  | # and may be overwritten by future invocations.  Please make changes | ||||||
|  | # to /etc/nixos/configuration.nix instead. | ||||||
|  | { config, lib, pkgs, modulesPath, ... }: | ||||||
|  |  | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     [ (modulesPath + "/installer/scan/not-detected.nix") | ||||||
|  |     ]; | ||||||
|  |  | ||||||
|  |   boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ]; | ||||||
|  |   boot.initrd.kernelModules = [ ]; | ||||||
|  |   boot.kernelModules = [ "kvm-amd" ]; | ||||||
|  |   boot.extraModulePackages = [ ]; | ||||||
|  |  | ||||||
|  |   fileSystems."/" = | ||||||
|  |     { device = "/dev/disk/by-uuid/1ea0784c-4eeb-46f1-a0ae-f6b311b27bd1"; | ||||||
|  |       fsType = "btrfs"; | ||||||
|  |       options = [ "subvol=@" ]; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |   boot.initrd.luks.devices."luks-root" = { | ||||||
|  |     device = "/dev/disk/by-uuid/8832c090-9ca7-4a9c-8cfd-cf43cb59b3d3"; | ||||||
|  |     crypttabExtraOpts = [ "fido2-token=auto" ]; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   fileSystems."/boot" = | ||||||
|  |     { device = "/dev/disk/by-uuid/86C2-FD4D"; | ||||||
|  |       fsType = "vfat"; | ||||||
|  |       options = [ "fmask=0022" "dmask=0022" ]; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |   fileSystems."/home" = | ||||||
|  |     { device = "/dev/disk/by-uuid/1ea0784c-4eeb-46f1-a0ae-f6b311b27bd1"; | ||||||
|  |       fsType = "btrfs"; | ||||||
|  |       options = [ "subvol=@home" ]; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |   # TODO - only enable this if the user remy exists | ||||||
|  |   fileSystems."/home/${config.nix-config.userName}/scratch" = | ||||||
|  |     { device = "/dev/disk/by-uuid/1ea0784c-4eeb-46f1-a0ae-f6b311b27bd1"; | ||||||
|  |       fsType = "btrfs"; | ||||||
|  |       options = [ "subvol=@scratch" ]; | ||||||
|  |       # TODO make it owned by the user | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |   swapDevices = [ ]; | ||||||
|  |  | ||||||
|  |   # Enables DHCP on each ethernet and wireless interface. In case of scripted networking | ||||||
|  |   # (the default) this is the recommended approach. When using systemd-networkd it's | ||||||
|  |   # still possible to use this option, but it's recommended to use it in conjunction | ||||||
|  |   # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. | ||||||
|  |   networking.useDHCP = lib.mkDefault true; | ||||||
|  |   # networking.interfaces.wireguard-home.useDHCP = lib.mkDefault true; | ||||||
|  |   # networking.interfaces.wlp192s0.useDHCP = lib.mkDefault true; | ||||||
|  |  | ||||||
|  |   nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; | ||||||
|  |   hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; | ||||||
|  | } | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| {pkgs, ...}: |  | ||||||
| { |  | ||||||
|   # Add a udev rule that launches a backup using restic when a specific USB device (the backup drive) is plugged in |  | ||||||
|  |  | ||||||
|   environment.systemPackages = with pkgs; [ |  | ||||||
|       restic |  | ||||||
|   ]; |  | ||||||
|  |  | ||||||
|   # the udev rule: |  | ||||||
|   services.udev.extraRules = '' |  | ||||||
|     ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="backup-restic", TAG+="systemd", ENV{SYSTEMD_WANTS}="backup-restic.service" |  | ||||||
|   ''; |  | ||||||
|  |  | ||||||
|   # the systemd service: |  | ||||||
|   systemd.services.backup-restic = { |  | ||||||
|     description = "Backup using restic (triggered when USB drive is plugged in)"; |  | ||||||
|     after = [ "local-fs.target" ]; |  | ||||||
|     wantedBy = [ "multi-user.target" ]; |  | ||||||
|     serviceConfig = { |  | ||||||
|       Type = "oneshot"; |  | ||||||
|       # TODO: adapt command |  | ||||||
|       ExecStart = "${pkgs.restic}/bin/restic backup /home/username"; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @@ -28,9 +28,9 @@ | |||||||
|     profiles.default = { |     profiles.default = { | ||||||
|       search = { |       search = { | ||||||
|         force = true; |         force = true; | ||||||
|         default = "DuckDuckGo"; |         default = "ddg"; | ||||||
|         privateDefault = "DuckDuckGo"; |         privateDefault = "ddg"; | ||||||
|         order = ["DuckDuckGo" "Google"]; |         order = ["ddg" "google"]; | ||||||
|       }; |       }; | ||||||
|       settings = { |       settings = { | ||||||
|         "browser.startup.homepage" = "about:home"; |         "browser.startup.homepage" = "about:home"; | ||||||
|   | |||||||
| @@ -1,63 +1,16 @@ | |||||||
| {pkgs, ...}: | {pkgs, ...}: | ||||||
| { | let | ||||||
|   programs.vscode = { |   baseExtensions = with pkgs.vscode-extensions; [ | ||||||
|     enable = true; |  | ||||||
|     # install vscode in a FHS environment to allow extensions with prebuilt binaries |  | ||||||
|     # package = pkgs.vscode.fhs; |  | ||||||
|  |  | ||||||
|     # profiles = { |  | ||||||
|     #   default = { |  | ||||||
|     extensions = with pkgs.vscode-extensions; [ |  | ||||||
|     # QOL |     # QOL | ||||||
|     mhutchie.git-graph |     mhutchie.git-graph | ||||||
|     redhat.vscode-yaml |     redhat.vscode-yaml | ||||||
|     github.copilot |     github.copilot | ||||||
|  |     github.copilot-chat | ||||||
|  |  | ||||||
|       # python |     # Nix environment selector | ||||||
|       ms-python.python |     arrterian.nix-env-selector | ||||||
|       ms-python.isort |  | ||||||
|       ms-python.debugpy |  | ||||||
|       ms-python.vscode-pylance |  | ||||||
|       # ms-toolsai.jupyter |  | ||||||
|       # ms-toolsai.vscode-jupyter-slideshow |  | ||||||
|       # ms-toolsai.jupyter-renderers |  | ||||||
|  |  | ||||||
|       # Nix language |  | ||||||
|       jnoortheen.nix-ide |  | ||||||
|  |  | ||||||
|       # typst |  | ||||||
|       myriad-dreamin.tinymist |  | ||||||
|     ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ |  | ||||||
|       { |  | ||||||
|         name = "jupyter"; |  | ||||||
|         publisher = "ms-toolsai"; |  | ||||||
|         version = "2025.3.2025032101"; |  | ||||||
|         sha256 = "sha256-s2qEUl9J6EOije6MasZOnHErYs3NYXBqLSfMT03vEH0="; |  | ||||||
|       } |  | ||||||
|       { |  | ||||||
|         name = "jupyter-hub"; |  | ||||||
|         publisher = "ms-toolsai"; |  | ||||||
|         version = "2024.10.1002831100"; |  | ||||||
|         sha256 = "sha256-5IRczwXbYkDdYEOXvQnnH+HJNLvsRsrZ6fnoVCveqrs="; |  | ||||||
|       } |  | ||||||
|   ]; |   ]; | ||||||
|  |   baseSettings = { | ||||||
|     keybindings = [ |  | ||||||
|       # comment/uncomment line |  | ||||||
|       { |  | ||||||
|         key = "ctrl+#"; |  | ||||||
|         command = "editor.action.commentLine"; |  | ||||||
|         when = "editorTextFocus"; |  | ||||||
|       } |  | ||||||
|       # run code cell in jupyter |  | ||||||
|       { |  | ||||||
|         key = "ctrl+enter"; |  | ||||||
|         command = "jupyter.runCell"; |  | ||||||
|         when = "editorTextFocus && editorHasSelection && jupyter.notebookEditorFocused"; |  | ||||||
|       } |  | ||||||
|     ]; |  | ||||||
|  |  | ||||||
|     userSettings = { |  | ||||||
|     # visual |     # visual | ||||||
|     "window.menuBarVisibility" = "toggle"; |     "window.menuBarVisibility" = "toggle"; | ||||||
|  |  | ||||||
| @@ -70,7 +23,6 @@ | |||||||
|     "telemetry.enableTelemetry" = false; |     "telemetry.enableTelemetry" = false; | ||||||
|     "redhat.telemetry.enabled" = false; |     "redhat.telemetry.enabled" = false; | ||||||
|  |  | ||||||
|  |  | ||||||
|     # editor QOL |     # editor QOL | ||||||
|     "security.workspace.trust.untrustedFiles" = "open"; |     "security.workspace.trust.untrustedFiles" = "open"; | ||||||
|     "editor.wordWrap" = "on"; |     "editor.wordWrap" = "on"; | ||||||
| @@ -95,14 +47,12 @@ | |||||||
|     "update.showReleaseNotes" = false; |     "update.showReleaseNotes" = false; | ||||||
|     "terminal.external.linuxExec" = "kitty"; |     "terminal.external.linuxExec" = "kitty"; | ||||||
|     "workbench.startupEditor" = "newUntitledFile"; |     "workbench.startupEditor" = "newUntitledFile"; | ||||||
|       # "workbench.colorTheme" = "Default Light+"; |  | ||||||
|  |  | ||||||
|     # Extension management |     # Extension management | ||||||
|     "extensions.autoCheckUpdates" = false; |     "extensions.autoCheckUpdates" = false; | ||||||
|     "extensions.autoUpdate" = false; |     "extensions.autoUpdate" = false; | ||||||
|     "extensions.ignoreRecommendations" = true; |     "extensions.ignoreRecommendations" = true; | ||||||
|  |  | ||||||
|  |  | ||||||
|     # git |     # git | ||||||
|     "git.ignoreMissingGitWarning" = true; |     "git.ignoreMissingGitWarning" = true; | ||||||
|     "git.confirmSync" = false; |     "git.confirmSync" = false; | ||||||
| @@ -121,6 +71,90 @@ | |||||||
|  |  | ||||||
|     # Python |     # Python | ||||||
|     "python.terminal.activateEnvironment" = false; # let nix-shell handle this |     "python.terminal.activateEnvironment" = false; # let nix-shell handle this | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   baseKeybindings = [ | ||||||
|  |     # comment/uncomment line | ||||||
|  |     { | ||||||
|  |       key = "ctrl+[Backslash]"; # was ctrl+# but vscode reads the key differently apparently | ||||||
|  |       command = "editor.action.commentLine"; | ||||||
|  |       when = "editorTextFocus"; | ||||||
|  |     } | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   programs.vscode = { | ||||||
|  |     enable = true; | ||||||
|  |     # install vscode in a FHS environment to allow extensions with prebuilt binaries | ||||||
|  |     # package = pkgs.vscode.fhs; | ||||||
|  |  | ||||||
|  |     profiles.default = { | ||||||
|  |       userSettings = baseSettings // { | ||||||
|  |         "window.newWindowProfile" = "development"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     profiles.development = { | ||||||
|  |       extensions = baseExtensions ++ (with pkgs.vscode-extensions; [ | ||||||
|  |         # python | ||||||
|  |         ms-python.python | ||||||
|  |         ms-python.isort | ||||||
|  |         ms-python.debugpy | ||||||
|  |         ms-python.vscode-pylance | ||||||
|  |  | ||||||
|  |         # nix language | ||||||
|  |         jnoortheen.nix-ide | ||||||
|  |  | ||||||
|  |         # Flutter and co | ||||||
|  |         dart-code.flutter | ||||||
|  |         dart-code.dart-code | ||||||
|  |  | ||||||
|  |       ]); | ||||||
|  |  | ||||||
|  |       keybindings = baseKeybindings; | ||||||
|  |  | ||||||
|  |       userSettings = baseSettings; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     profiles.science = { | ||||||
|  |       extensions = baseExtensions ++ (with pkgs.vscode-extensions; [ | ||||||
|  |         # python + jupyter | ||||||
|  |         ms-python.python | ||||||
|  |         ms-python.isort | ||||||
|  |         ms-python.debugpy | ||||||
|  |         ms-python.vscode-pylance | ||||||
|  |         ms-toolsai.vscode-jupyter-slideshow | ||||||
|  |         ms-toolsai.jupyter-renderers | ||||||
|  |  | ||||||
|  |         # Typst | ||||||
|  |         myriad-dreamin.tinymist | ||||||
|  |       ])  ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ | ||||||
|  |         { | ||||||
|  |           name = "jupyter"; | ||||||
|  |           publisher = "ms-toolsai"; | ||||||
|  |           version = "2025.3.2025032101"; | ||||||
|  |           sha256 = "sha256-s2qEUl9J6EOije6MasZOnHErYs3NYXBqLSfMT03vEH0="; | ||||||
|  |         } | ||||||
|  |         { | ||||||
|  |           name = "jupyter-hub"; | ||||||
|  |           publisher = "ms-toolsai"; | ||||||
|  |           version = "2024.10.1002831100"; | ||||||
|  |           sha256 = "sha256-5IRczwXbYkDdYEOXvQnnH+HJNLvsRsrZ6fnoVCveqrs="; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |  | ||||||
|  |       keybindings = baseKeybindings ++ [ | ||||||
|  |         # run code cell in jupyter | ||||||
|  |         { | ||||||
|  |           key = "ctrl+enter"; | ||||||
|  |           command = "jupyter.runcurrentcell"; | ||||||
|  |           when = "editorTextFocus && isWorkspaceTrusted && jupyter.hascodecells && !editorHasSelection && !isCompositeNotebook && !notebookEditorFocused"; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |  | ||||||
|  |       userSettings = baseSettings // { | ||||||
|         "jupyter.disableJupyterAutoStart" = true; |         "jupyter.disableJupyterAutoStart" = true; | ||||||
|         "jupyter.askForKernelRestart" = false; |         "jupyter.askForKernelRestart" = false; | ||||||
|         "workbench.editorAssociations" = { |         "workbench.editorAssociations" = { | ||||||
| @@ -135,7 +169,6 @@ | |||||||
|             "unpkg.com" |             "unpkg.com" | ||||||
|         ]; |         ]; | ||||||
|  |  | ||||||
|  |  | ||||||
|         # Typst |         # Typst | ||||||
|         "[typst]" = { |         "[typst]" = { | ||||||
|             "editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?"; |             "editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?"; | ||||||
| @@ -147,7 +180,13 @@ | |||||||
|         "tinymist.fontPaths" = [ |         "tinymist.fontPaths" = [ | ||||||
|             "./font" |             "./font" | ||||||
|         ]; |         ]; | ||||||
|  |         "workbench.colorCustomizations" = { | ||||||
|  |           "statusBar.background" = "#003f9293"; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |   }; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								modules/home-manager/directories.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/home-manager/directories.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | { config, pkgs, ... }: | ||||||
|  | { | ||||||
|  |   # Set up essential directories in the home directory | ||||||
|  |   # TODO | ||||||
|  |   # home.file."Dev".directory = true; | ||||||
|  |   # home.file."owncloud".directory = true; | ||||||
|  |  | ||||||
|  |   # Set XDG user directories | ||||||
|  |   xdg.userDirs = { | ||||||
|  |     enable = true; | ||||||
|  |     createDirectories = true; | ||||||
|  |     documents = "${config.home.homeDirectory}/Documents"; | ||||||
|  |     download = "${config.home.homeDirectory}/Downloads"; | ||||||
|  |     pictures = "${config.home.homeDirectory}/Pictures";# | ||||||
|  |     # do not create the following | ||||||
|  |     desktop = null; | ||||||
|  |     music = null; | ||||||
|  |     publicShare = null; | ||||||
|  |     templates = null; | ||||||
|  |     videos = null; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @@ -3,5 +3,9 @@ | |||||||
|   home.packages = [ |   home.packages = [ | ||||||
|     # pdf viewer |     # pdf viewer | ||||||
|     pkgs.papers |     pkgs.papers | ||||||
|  |     # image viewer | ||||||
|  |     pkgs.loupe | ||||||
|  |     # video player | ||||||
|  |     pkgs.showtime | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,8 +11,6 @@ | |||||||
|   ]; |   ]; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   programs.fish = { |   programs.fish = { | ||||||
|     enable = true; |     enable = true; | ||||||
|     # enableCompletion = true; |     # enableCompletion = true; | ||||||
| @@ -28,6 +26,11 @@ | |||||||
|       } |       } | ||||||
|       # add others here |       # add others here | ||||||
|     ]; |     ]; | ||||||
|  |  | ||||||
|  |     functions = { | ||||||
|  |       # disable the fish greeting | ||||||
|  |       fish_greeting = ""; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,5 +14,7 @@ | |||||||
|     "io.podman_desktop.PodmanDesktop" |     "io.podman_desktop.PodmanDesktop" | ||||||
|     "org.pipewire.Helvum" |     "org.pipewire.Helvum" | ||||||
|     "im.riot.Riot" |     "im.riot.Riot" | ||||||
|  |     "com.valvesoftware.Steam" | ||||||
|  |     "org.prismlauncher.PrismLauncher" | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +0,0 @@ | |||||||
| {inputs, pkgs, ...}: |  | ||||||
| { |  | ||||||
|     # Put a cursor theme to the location expected by the hyprland window manager |  | ||||||
|     # TODO |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -1,8 +1,6 @@ | |||||||
| { | { | ||||||
|   imports = [ |   imports = [ | ||||||
|     # ./better-control.nix |     ./hyprland | ||||||
|     ./cursor.nix |  | ||||||
|     ./hyprland-customization.nix |  | ||||||
|     ./hyprpaper.nix |     ./hyprpaper.nix | ||||||
|     ./hyprlock.nix |     ./hyprlock.nix | ||||||
|     ./hypridle.nix |     ./hypridle.nix | ||||||
|   | |||||||
| @@ -4,29 +4,37 @@ | |||||||
|     enable = true; |     enable = true; | ||||||
|     settings = { |     settings = { | ||||||
|       general = { |       general = { | ||||||
|         lock_cmd = "pidof hyprlock || hyprlock";     # avoid starting multiple hyprlock instances. |         # avoid starting multiple hyprlock instances. | ||||||
|  |         before_sleep_cmd = "pidof hyprlock || hyprlock --immediate-render --no-fade-in"; | ||||||
|  |         lock_cmd = "pidof hyprlock || hyprlock --immediate-render --no-fade-in"; | ||||||
|         after_sleep_cmd = "hyprctl dispatch dpms on"; |         after_sleep_cmd = "hyprctl dispatch dpms on"; | ||||||
|         ignore_dbus_inhibit = false; |         ignore_dbus_inhibit = false; | ||||||
|       }; |       }; | ||||||
|  |  | ||||||
|       listener = [ |       listener = [ | ||||||
|         { |         { | ||||||
|           # dim screen after 4 minutes |           # turn off keyboard backlight after 20 seconds | ||||||
|           timeout = 240; |           timeout = 10; | ||||||
|           on-timeout = "brightnessctl -s set 10"; |           on-timeout = "brightnessctl -d platform::kbd_backlight -s set 0"; | ||||||
|           # set monitor backlight to minimum, avoid 0 on OLED monitor. |           # restore keyboard backlight on resume to previous level. | ||||||
|  |           on-resume = "brightnessctl -d platform::kbd_backlight -r"; | ||||||
|  |         } | ||||||
|  |         { | ||||||
|  |           # dim screen after 2 minutes | ||||||
|  |           timeout = 120; | ||||||
|  |           on-timeout = "brightnessctl -s set 2"; | ||||||
|           on-resume = "brightnessctl -r"; |           on-resume = "brightnessctl -r"; | ||||||
|           # monitor backlight restore. |           # monitor backlight restore. | ||||||
|         } |         } | ||||||
|         { |         { | ||||||
|           # lock screen after 5 minutes |           # lock screen after 10 minutes | ||||||
|           timeout = 300; |           timeout = 600; | ||||||
|           on-timeout = "loginctl lock-session && hyprctl dispatch dpms off"; |           on-timeout = "loginctl lock-session && hyprctl dispatch dpms off"; | ||||||
|           on-resume = "hyprctl dispatch dpms on"; |           on-resume = "hyprctl dispatch dpms on"; | ||||||
|         } |         } | ||||||
|         { |         { | ||||||
|           # suspend after 10 minutes |           # suspend after 15 minutes | ||||||
|           timeout = 600; |           timeout = 900; | ||||||
|           on-timeout = "systemctl suspend"; |           on-timeout = "systemctl suspend"; | ||||||
|           on-resume = "hyprctl dispatch dpms on"; |           on-resume = "hyprctl dispatch dpms on"; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -1,251 +0,0 @@ | |||||||
| {inputs, pkgs, lib, config, ...}: |  | ||||||
| let |  | ||||||
|   cfg = config.nix-config.hypr; |  | ||||||
| in |  | ||||||
| { |  | ||||||
|  |  | ||||||
|   options = { |  | ||||||
|     nix-config.hypr.internal-screen.resolution = lib.mkOption { type = lib.types.str; }; |  | ||||||
|     nix-config.hypr.internal-screen.scale = lib.mkOption { type = lib.types.str; }; |  | ||||||
|     nix-config.hypr.browser = lib.mkOption { |  | ||||||
|       type = lib.types.str; |  | ||||||
|       default = "firefox"; |  | ||||||
|       description = "The browser to use in Hyprland."; |  | ||||||
|     }; |  | ||||||
|     nix-config.hypr.launcher-cmd = lib.mkOption { |  | ||||||
|       type = lib.types.str; |  | ||||||
|       default = "wofi --show drun -n"; |  | ||||||
|       description = "The command to launch the application launcher in Hyprland."; |  | ||||||
|     }; |  | ||||||
|     nix-config.hypr.ide = lib.mkOption { |  | ||||||
|       type = lib.types.str; |  | ||||||
|       default = "code"; |  | ||||||
|       description = "The IDE to use in Hyprland."; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
|  |  | ||||||
|   config = { |  | ||||||
|     home.packages = [ |  | ||||||
|       pkgs.hyprshot |  | ||||||
|       pkgs.nautilus |  | ||||||
|       pkgs.gnome-control-center |  | ||||||
|       pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth |  | ||||||
|       pkgs.brightnessctl |  | ||||||
|       pkgs.cliphist |  | ||||||
|       pkgs.wl-clipboard |  | ||||||
|       pkgs.gcr # Provides org.gnome.keyring.SystemPrompter |  | ||||||
|     ]; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     # Also use gnome keyring |  | ||||||
|     services.gnome-keyring.enable = true; |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     wayland.windowManager.hyprland = { |  | ||||||
|       enable = true; |  | ||||||
|       systemd.enable = true; |  | ||||||
|       settings = { |  | ||||||
|         "$mod" = "SUPER"; |  | ||||||
|  |  | ||||||
|         # Global bindings |  | ||||||
|         bind = [ |  | ||||||
|           # Launch applications |  | ||||||
|           "$mod, space, exec, ${cfg.launcher-cmd}" |  | ||||||
|           "$mod, return, exec, kitty" |  | ||||||
|           "$mod, b, exec, ${cfg.browser}" |  | ||||||
|           "$mod, s, exec, ${cfg.ide}" |  | ||||||
|           "$mod, e, exec, nautilus" |  | ||||||
|  |  | ||||||
|           # Lock screen |  | ||||||
|           "$mod, l, exec, hyprlock" |  | ||||||
|  |  | ||||||
|           # Clipboard management |  | ||||||
|           "$mod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy" |  | ||||||
|  |  | ||||||
|           # Close window |  | ||||||
|           "$mod, Q, killactive," |  | ||||||
|           "$mod+Shift, Q, exit," # this is the true kill |  | ||||||
|  |  | ||||||
|           # Toggle Floating and reduce size |  | ||||||
|           "$mod, f, togglefloating," |  | ||||||
|           "$mod, f, resizeactive, 50% 50%," |  | ||||||
|           # Toggle fullscreen |  | ||||||
|           "$mod+Shift, f, fullscreen," |  | ||||||
|  |  | ||||||
|           # Alt-tab alternative |  | ||||||
|           "$mod, Tab, cyclenext," |  | ||||||
|           "$mod, Tab, bringactivetotop," |  | ||||||
|  |  | ||||||
|           # Move the window |  | ||||||
|           "$mod+Shift, left, movewindow, l" |  | ||||||
|           "$mod+Shift, right, movewindow, r" |  | ||||||
|           "$mod+Shift, up, movewindow, u" |  | ||||||
|           "$mod+Shift, down, movewindow, d" |  | ||||||
|  |  | ||||||
|           "$mod+Ctrl, left, movetoworkspace, -1" |  | ||||||
|           "$mod+Ctrl, right, movetoworkspace, +1" |  | ||||||
|  |  | ||||||
|           # Switch workspace |  | ||||||
|           "$mod+Alt, left, workspace, -1" |  | ||||||
|           "$mod+Alt, right, workspace, +1" |  | ||||||
|  |  | ||||||
|           # Screenshot |  | ||||||
|           "$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots" |  | ||||||
|           "$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots" |  | ||||||
|  |  | ||||||
|         ]; |  | ||||||
|  |  | ||||||
|         # repeatable bindings |  | ||||||
|         binde = [ |  | ||||||
|           # Fn keys |  | ||||||
|           ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" |  | ||||||
|           ", XF86MonBrightnessUp, exec, brightnessctl set +5%" |  | ||||||
|           ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" |  | ||||||
|           ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-" |  | ||||||
|           ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" |  | ||||||
|  |  | ||||||
|           # Reshape the window in focus |  | ||||||
|           "$mod, MINUS, resizeactive, -2% -2%" |  | ||||||
|           "$mod, KP_Subtract, resizeactive, -2% -2%" |  | ||||||
|           "$mod, PLUS, resizeactive, 2% 2%" |  | ||||||
|           "$mod, KP_Add, resizeactive, 2% 2%" |  | ||||||
|         ]; |  | ||||||
|  |  | ||||||
|         # lock-screen bindings |  | ||||||
|         bindl = [ |  | ||||||
|           # on lid close, lock the screen |  | ||||||
|           # if another monitor is connected, only turn the internal monitor off and don't lock the screen |  | ||||||
|           ", switch:on:Lid Switch, exec, hyprctl dispatch dpms off eDP-1" |  | ||||||
|           # if there is no active monitor, perform a screen lock |  | ||||||
|           ", switch:on:Lid Switch, exec, hyprctl monitors | grep 'dpmsStatus: 1' || hyprlock" |  | ||||||
|           ", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1" |  | ||||||
|         ]; |  | ||||||
|  |  | ||||||
|         # bindr = [ |  | ||||||
|         #     # Overview |  | ||||||
|         #   "$mod, , overview:toggle" |  | ||||||
|         # ]; |  | ||||||
|  |  | ||||||
|         bindm = [ |  | ||||||
|           # move the window |  | ||||||
|           "$mod, mouse:272, movewindow" |  | ||||||
|         ]; |  | ||||||
|  |  | ||||||
|         exec-once = [ |  | ||||||
|           "gnome-keyring-daemon --start --components=secrets" |  | ||||||
|           # "${pkgs.hyprpaper}/bin/hyprpaper" |  | ||||||
|           # hyprpaper is handled as its own service |  | ||||||
|           "${pkgs.waybar}/bin/waybar" |  | ||||||
|           # listen to clipboard events and send them to cliphist |  | ||||||
|           "wl-paste --watch cliphist store" |  | ||||||
|           "${pkgs.waybar}/bin/hypridle" |  | ||||||
|           "hyprpaper" |  | ||||||
|           # # Fixes cursor themes in gnome apps under hyprland |  | ||||||
|           # "gsettings set org.gnome.desktop.interface cursor-theme '${config.home.pointerCursor.name}'" |  | ||||||
|           # "gsettings set org.gnome.desktop.interface cursor-size ${toString home.pointerCursor.size}" |  | ||||||
|           "${pkgs.owncloud-client}" |  | ||||||
|         ]; |  | ||||||
|  |  | ||||||
|         general = { |  | ||||||
|           resize_on_border = true; |  | ||||||
|           gaps_in = 5; |  | ||||||
|           gaps_out = 5; |  | ||||||
|           border_size = 1; |  | ||||||
|           "col.active_border" = "rgb(98971A) rgb(CC241D) 45deg"; |  | ||||||
|           layout = "master"; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         misc = { |  | ||||||
|           # disable refreshs when nothing is going on |  | ||||||
|           vfr = false; |  | ||||||
|           disable_hyprland_logo = true; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         input = { |  | ||||||
|           kb_layout = "de"; |  | ||||||
|           # remap caps lock to ctrl |  | ||||||
|           kb_options = "ctrl:nocaps"; |  | ||||||
|           numlock_by_default = true; |  | ||||||
|           # mouse input should be unchanged |  | ||||||
|           natural_scroll = false; |  | ||||||
|           sensitivity = 0.3; |  | ||||||
|           touchpad = { |  | ||||||
|             disable_while_typing = false; |  | ||||||
|             natural_scroll = true; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         device = { |  | ||||||
|           name = "syna329a:00-06cb:cd4f-touchpad"; |  | ||||||
|           sensitivity = 0.5; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         gestures = { |  | ||||||
|           workspace_swipe = true; |  | ||||||
|           workspace_swipe_fingers = 4; |  | ||||||
|           workspace_swipe_touch = true; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         decoration = { |  | ||||||
|           rounding = 7; |  | ||||||
|           # active_opacity = 0.95; |  | ||||||
|           inactive_opacity = 0.9; |  | ||||||
|  |  | ||||||
|           shadow = { |  | ||||||
|             enabled = false; |  | ||||||
|           }; |  | ||||||
|  |  | ||||||
|           # blur is set on a per-program basis |  | ||||||
|           windowrulev2 = [ |  | ||||||
|             # kitty should behave like a floating window |  | ||||||
|             "animation popin, class:kitty" |  | ||||||
|             "move cursor -50% -50%, class:kitty" |  | ||||||
|             "float, class:kitty" |  | ||||||
|             "size 50% 50%, class:kitty" |  | ||||||
|  |  | ||||||
|             # some more floating windows |  | ||||||
|             "float, class:org.gnome.Settings" |  | ||||||
|             "float, class:desktopclient.owncloud.com" |  | ||||||
|             "float, class:org.keepassxc.KeePassXC" |  | ||||||
|  |  | ||||||
|           ]; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         monitor = [ |  | ||||||
|           # the internal monitor, always at the "center" |  | ||||||
|           "eDP-1, ${cfg.internal-screen.resolution}, 0x0, ${cfg.internal-screen.scale}" |  | ||||||
|  |  | ||||||
|           # Samsung monitors at irchel (matching the description) |  | ||||||
|           # "desc:Samsung Electric Company LS27D80xU HK7X800803, 3840x2160, auto-up, 1.8" |  | ||||||
|           "desc:Samsung Electric Company LS27D80xU HNAX600169, 2560x1440@59.95, auto-up, 1" |  | ||||||
|  |  | ||||||
|           ", preferred, auto-up, auto" # automatically add any newly detected monitor |  | ||||||
|         ]; |  | ||||||
|  |  | ||||||
|         xwayland = { |  | ||||||
|           enabled = false; |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         env = [ |  | ||||||
|           # force apps to use wayland |  | ||||||
|           "NIXOS_OZONE_WL, 1" |  | ||||||
|           "ELECTRON_OZONE_PLATFORM_HINT, wayland" |  | ||||||
|           # set the scale factor for GDK apps |  | ||||||
|           "GDK_SCALE, 1.7" |  | ||||||
|           # set the scale factor for QT apps |  | ||||||
|           "QT_SCALE_FACTOR, 1.7" |  | ||||||
|           # set the scale factor for GTK apps |  | ||||||
|         ]; |  | ||||||
|       }; |  | ||||||
|  |  | ||||||
|       plugins = [ |  | ||||||
|         # Global overview |  | ||||||
|         pkgs.hyprlandPlugins.hyprspace |  | ||||||
|         # Touch gestures |  | ||||||
|         pkgs.hyprlandPlugins.hyprgrass |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     services.swaync.enable = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
							
								
								
									
										30
									
								
								modules/home-manager/hypr/hyprland/autostart.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								modules/home-manager/hypr/hyprland/autostart.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | {inputs, pkgs, lib, config, ...}: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.hypr; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options = { | ||||||
|  |     nix-config.hypr.autostartApps = lib.mkOption { | ||||||
|  |       type = lib.types.listOf lib.types.str; | ||||||
|  |       default = [ | ||||||
|  |         "gnome-keyring-daemon --start --components=secrets" | ||||||
|  |         "wl-paste --watch cliphist store" | ||||||
|  |         "${lib.getExe pkgs.waybar}" | ||||||
|  |         "${lib.getExe pkgs.hypridle}" | ||||||
|  |         "${pkgs.owncloud-client}" | ||||||
|  |         "${lib.getExe pkgs.keepassxc}" | ||||||
|  |       ]; | ||||||
|  |       description = "List of applications to start automatically in Hyprland."; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|  |     wayland.windowManager.hyprland = { | ||||||
|  |       enable = true; | ||||||
|  |       systemd.enable = true; | ||||||
|  |       settings = { | ||||||
|  |         exec-once = cfg.autostartApps; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								modules/home-manager/hypr/hyprland/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								modules/home-manager/hypr/hyprland/default.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ./autostart.nix | ||||||
|  |     ./general.nix | ||||||
|  |     ./keybinds.nix | ||||||
|  |     ./layouts.nix | ||||||
|  |     ./packages.nix | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										133
									
								
								modules/home-manager/hypr/hyprland/general.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								modules/home-manager/hypr/hyprland/general.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | |||||||
|  | {inputs, pkgs, lib, config, ...}: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.hypr; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options = { | ||||||
|  |     nix-config.hypr.internal-screen.resolution = lib.mkOption { type = lib.types.str; }; | ||||||
|  |     nix-config.hypr.internal-screen.scale = lib.mkOption { type = lib.types.str; }; | ||||||
|  |     nix-config.hypr.browser = lib.mkOption { | ||||||
|  |       type = lib.types.str; | ||||||
|  |       default = "firefox"; | ||||||
|  |       description = "The browser to use in Hyprland."; | ||||||
|  |     }; | ||||||
|  |     nix-config.hypr.ide = lib.mkOption { | ||||||
|  |       type = lib.types.str; | ||||||
|  |       default = "code"; | ||||||
|  |       description = "The IDE to use in Hyprland."; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|  |     wayland.windowManager.hyprland = { | ||||||
|  |       enable = true; | ||||||
|  |       systemd.enable = true; | ||||||
|  |       settings = { | ||||||
|  |         general = { | ||||||
|  |           resize_on_border = true; | ||||||
|  |           gaps_in = 5; | ||||||
|  |           gaps_out = 5; | ||||||
|  |           border_size = 1; | ||||||
|  |           "col.active_border" = "rgb(98971A) rgb(CC241D) 45deg"; | ||||||
|  |           layout = "master"; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |       input = { | ||||||
|  |         kb_layout = "de"; | ||||||
|  |         # remap caps lock to ctrl | ||||||
|  |         kb_options = "ctrl:nocaps"; | ||||||
|  |         numlock_by_default = true; | ||||||
|  |         # mouse input should be unchanged | ||||||
|  |         natural_scroll = false; | ||||||
|  |         sensitivity = 0.3; | ||||||
|  |         touchpad = { | ||||||
|  |           disable_while_typing = false; | ||||||
|  |           natural_scroll = true; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       device = { | ||||||
|  |         name = "syna329a:00-06cb:cd4f-touchpad"; | ||||||
|  |         sensitivity = 0.5; | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       gestures = { | ||||||
|  |         workspace_swipe = true; | ||||||
|  |         workspace_swipe_fingers = 4; | ||||||
|  |         workspace_swipe_touch = true; | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       decoration = { | ||||||
|  |         rounding = 7; | ||||||
|  |         # active_opacity = 0.95; | ||||||
|  |         inactive_opacity = 0.9; | ||||||
|  |  | ||||||
|  |         shadow = { | ||||||
|  |           enabled = false; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         # blur = { | ||||||
|  |         #   enabled = true; | ||||||
|  |         #   size = 5; | ||||||
|  |         #   passes = 2; | ||||||
|  |         # }; | ||||||
|  |  | ||||||
|  |         # blur is set on a per-program basis | ||||||
|  |         windowrulev2 = [ | ||||||
|  |           # kitty should behave like a floating window | ||||||
|  |           "animation popin, class:kitty" | ||||||
|  |           "move cursor -50% -50%, class:kitty" | ||||||
|  |           "float, class:kitty" | ||||||
|  |           "size 50% 50%, class:kitty" | ||||||
|  |  | ||||||
|  |           # blur the launcher background | ||||||
|  |           # "blur 10, class:${config.nix-config.launcher.name}" | ||||||
|  |  | ||||||
|  |           # some more floating windows | ||||||
|  |           "float, class:org.gnome.Settings" | ||||||
|  |           "float, class:desktopclient.owncloud.com" | ||||||
|  |           "float, class:org.keepassxc.KeePassXC" | ||||||
|  |           "float, title:^(Picture-in-Picture)$" | ||||||
|  |           "float, class:org.gnome.Nautilus" | ||||||
|  |           # when there is a single window, deactivate border and gaps | ||||||
|  |           # "border_size 0, onworkspace:w[tv1], " | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       monitor = [ | ||||||
|  |         # the internal monitor, always at the "center" | ||||||
|  |         "eDP-1, ${cfg.internal-screen.resolution}, 0x0, ${cfg.internal-screen.scale}" | ||||||
|  |  | ||||||
|  |         # Samsung monitors at irchel (matching the description) | ||||||
|  |         "desc:Samsung Electric Company LS27D80xU, 2560x1440@59.95, auto-up, 1" | ||||||
|  |  | ||||||
|  |         ", preferred, auto-up, auto" # automatically add any newly detected monitor | ||||||
|  |       ]; | ||||||
|  |  | ||||||
|  |       xwayland = { | ||||||
|  |         enabled = true; | ||||||
|  |         force_zero_scaling = true; | ||||||
|  |       }; | ||||||
|  |  | ||||||
|  |       env = [ | ||||||
|  |         # force apps to use wayland | ||||||
|  |         "NIXOS_OZONE_WL, 1" | ||||||
|  |         "ELECTRON_OZONE_PLATFORM_HINT, wayland" | ||||||
|  |         # set the scale factor for GDK apps | ||||||
|  |         "GDK_SCALE, ${cfg.internal-screen.scale}" | ||||||
|  |         # set the scale factor for QT apps | ||||||
|  |         # "QT_SCALE_FACTOR, ${cfg.internal-screen.scale}" | ||||||
|  |         "QT_SCALE_FACTOR, 1.1" | ||||||
|  |         # set the scale factor for GTK apps | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |       plugins = [ | ||||||
|  |         # Global overview | ||||||
|  |         pkgs.hyprlandPlugins.hyprspace | ||||||
|  |         # Touch gestures | ||||||
|  |         pkgs.hyprlandPlugins.hyprgrass | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										135
									
								
								modules/home-manager/hypr/hyprland/keybinds.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								modules/home-manager/hypr/hyprland/keybinds.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,135 @@ | |||||||
|  | {inputs, pkgs, lib, config, ...}: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.hypr; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   config = { | ||||||
|  |     wayland.windowManager.hyprland = { | ||||||
|  |       enable = true; | ||||||
|  |       systemd.enable = true; | ||||||
|  |       settings = { | ||||||
|  |         "$mod" = "SUPER"; | ||||||
|  |  | ||||||
|  |         # Global bindings | ||||||
|  |         bind = [ | ||||||
|  |           # Launch applications | ||||||
|  |           "$mod, space, exec, ${lib.getExe config.nix-config.launcher}" | ||||||
|  |           "$mod, return, exec, kitty" | ||||||
|  |           "$mod, b, exec, ${cfg.browser}" | ||||||
|  |           "$mod, s, exec, ${cfg.ide}" | ||||||
|  |           "$mod, e, exec, nautilus" | ||||||
|  |  | ||||||
|  |           # Lock screen | ||||||
|  |           "$mod, l, exec, loginctl lock-session" | ||||||
|  |  | ||||||
|  |           # Clipboard management | ||||||
|  |           "$mod, V, exec, cliphist list | ${lib.getExe config.nix-config.launcher} --dmenu | cliphist decode | wl-copy" | ||||||
|  |  | ||||||
|  |           # Close window | ||||||
|  |           "$mod, Q, killactive," | ||||||
|  |           # Force close window | ||||||
|  |           # "$mod+Shift, Q, forcekillactive," | ||||||
|  |  | ||||||
|  |           # Toggle Floating and reduce size | ||||||
|  |           "$mod, f, togglefloating," | ||||||
|  |           "$mod, f, resizeactive, 50% 50%," | ||||||
|  |  | ||||||
|  |           # "$mod, P, pseudo, " # dwindle | ||||||
|  |           # "$mod, J, togglesplit, " # dwindle | ||||||
|  |           # Toggle fullscreen | ||||||
|  |           "$mod+Shift, f, fullscreen," | ||||||
|  |  | ||||||
|  |           # Alt-tab alternative | ||||||
|  |           "$mod, Tab, cyclenext," | ||||||
|  |           "$mod, Tab, bringactivetotop," | ||||||
|  |  | ||||||
|  |           # Move the window | ||||||
|  |           "$mod+Shift, left, movewindow, l" | ||||||
|  |           "$mod+Shift, right, movewindow, r" | ||||||
|  |           "$mod+Shift, up, movewindow, u" | ||||||
|  |           "$mod+Shift, down, movewindow, d" | ||||||
|  |  | ||||||
|  |           "$mod+Ctrl, left, movetoworkspace, -1" | ||||||
|  |           "$mod+Ctrl, right, movetoworkspace, +1" | ||||||
|  |  | ||||||
|  |           # Switch workspace | ||||||
|  |           "$mod+Alt, left, workspace, -1" | ||||||
|  |           "$mod+Alt, right, workspace, +1" | ||||||
|  |           "$mod, mouse_down, workspace, -1" | ||||||
|  |           "$mod, mouse_up, workspace, +1" | ||||||
|  |  | ||||||
|  |           # move to scratch workspace | ||||||
|  |           "$mod+Ctrl, up, movetoworkspace, special:magic" | ||||||
|  |           "$mod+Ctrl, down, movetoworkspace, 1" | ||||||
|  |           # toggle scratch workspace | ||||||
|  |           "$mod+Alt, up, togglespecialworkspace, magic" | ||||||
|  |           "$mod+Alt, down, togglespecialworkspace, magic" | ||||||
|  |  | ||||||
|  |           # Screenshot | ||||||
|  |           "$mod, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots" | ||||||
|  |           "$mod+Shift, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots" | ||||||
|  |           # # somehow logitech calls this SUPER_L but we refer to it by its code | ||||||
|  |           "SUPER_L&Shift_L, S, exec, hyprshot -m region -o ~/Pictures/Screenshots" | ||||||
|  |           "Shift&SUPER_L&Shift_L, S, exec, hyprshot -m window -o ~/Pictures/Screenshots" | ||||||
|  |           # when there is a dedicated screenshot button | ||||||
|  |           ", XF86Cut, exec, hyprshot -m region -o ~/Pictures/Screenshots" | ||||||
|  |           "Shift, XF86Cut, exec, hyprshot -m window -o ~/Pictures/Screenshots" | ||||||
|  |  | ||||||
|  |           # Power menu | ||||||
|  |           ", XF86PowerOff, exec, ${lib.getExe config.nix-config.powerMenu}" | ||||||
|  |  | ||||||
|  |           # Other pickers using the same launcher | ||||||
|  |           "$mod+Ctrl, space, exec, ${lib.getExe config.nix-config.filePicker}" | ||||||
|  |  | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         # repeatable bindings | ||||||
|  |         binde = [ | ||||||
|  |           # Fn keys | ||||||
|  |           ", XF86MonBrightnessDown, exec, brightnessctl set 5%-" | ||||||
|  |           ", XF86MonBrightnessUp, exec, brightnessctl set +5%" | ||||||
|  |           ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" | ||||||
|  |           ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%-" | ||||||
|  |           ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" | ||||||
|  |  | ||||||
|  |           # Reshape the window in focus | ||||||
|  |           "$mod, MINUS, resizeactive, -2% -2%" | ||||||
|  |           "$mod, KP_Subtract, resizeactive, -2% -2%" | ||||||
|  |           "$mod, PLUS, resizeactive, 2% 2%" | ||||||
|  |           "$mod, KP_Add, resizeactive, 2% 2%" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         # lock-screen bindings | ||||||
|  |         bindl = [ | ||||||
|  |           ## depending on the setup: lock screen or switch to clamshell mode | ||||||
|  |           # in any case, the internal screen is turned off | ||||||
|  |           # ", switch:on:Lid Switch, exec, loginctl lock-session" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |           # if an additional monitor is detected, simply deactivate the internal screen and continue working on the external monitor | ||||||
|  |           ", switch:on:Lid Switch, exec, hyprctl dispatch dpms off eDP-1" | ||||||
|  |           ", switch:on:Lid Switch, exec, sleep 0.5; hyprctl monitors | grep 'dpmsStatus: 1' && hyprctl keyword monitor 'eDP-1,disable'" | ||||||
|  |           # # if no external monitor is detected, lock the screen | ||||||
|  |           # ", switch:on:Lid Switch, exec, sleep 0.5; hyprctl monitors | grep 'dpmsStatus: 1' || loginctl lock-session" | ||||||
|  |  | ||||||
|  |           ## on reopening the lid, turn the internal screen back on | ||||||
|  |           ", switch:off:Lid Switch, exec, hyprctl dispatch dpms on eDP-1" | ||||||
|  |           # if an external monitor was connected, then we need to reload the monitor configuration | ||||||
|  |           ", switch:off:Lid Switch, exec, hyprctl monitors | grep 'ID 1' && hyprctl reload" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         # bindr = [ | ||||||
|  |         #     # Overview | ||||||
|  |         #   "$mod, , overview:toggle" | ||||||
|  |         # ]; | ||||||
|  |  | ||||||
|  |         bindm = [ | ||||||
|  |           # move the window using left click | ||||||
|  |           "$mod, mouse:272, movewindow" | ||||||
|  |           # resize the window using right click | ||||||
|  |           "$mod, mouse:273, resizewindow" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										57
									
								
								modules/home-manager/hypr/hyprland/layouts.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								modules/home-manager/hypr/hyprland/layouts.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | {inputs, pkgs, lib, config, ...}: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.hypr; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   config = { | ||||||
|  |     wayland.windowManager.hyprland = { | ||||||
|  |       settings = { | ||||||
|  |  | ||||||
|  |         master = { | ||||||
|  |           # TODO - I am not yet happy about the layout + toggle keybinds | ||||||
|  |           orientation = "center"; | ||||||
|  |           # equivalent toalways_center_master = true; | ||||||
|  |           slave_count_for_center_master = 0; | ||||||
|  |           # new_is_master = false; | ||||||
|  |           # allow_small_split = true; | ||||||
|  |           # special_scale_factor = 0.80; | ||||||
|  |           mfact = 0.34; | ||||||
|  |           inherit_fullscreen = false; | ||||||
|  |           # always_center_master = false; | ||||||
|  |           # allow a maximum of 3 windows in the master area for 3-column layout | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         #create special workspaces with no gaps | ||||||
|  |         workspace = [ | ||||||
|  |           "w[t1], gapsout:0, gapsin:0" | ||||||
|  |           "w[tg1], gapsout:0, gapsin:0" | ||||||
|  |           "f[1], gapsout:0, gapsin:0" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         # automatically assign windows to workspaces when there is only one window | ||||||
|  |         windowrulev2 = [ | ||||||
|  |           "bordersize 0, floating:0, onworkspace:w[t1]" | ||||||
|  |           "rounding 0, floating:0, onworkspace:w[t1]" | ||||||
|  |           "bordersize 0, floating:0, onworkspace:w[tg1]" | ||||||
|  |           "rounding 0, floating:0, onworkspace:w[tg1]" | ||||||
|  |           "bordersize 0, floating:0, onworkspace:f[1]" | ||||||
|  |           "rounding 0, floating:0, onworkspace:f[1]" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         misc = { | ||||||
|  |           vfr = false; | ||||||
|  |           disable_hyprland_logo = true; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         # Keybind to toggle between 2 and 3 column master layout | ||||||
|  |         bind = [ | ||||||
|  |           # Toggle master layout between 2 and 3 columns | ||||||
|  |           "$mod, m, exec, hyprctl dispatch layoutmsg orientationleft" | ||||||
|  |           "$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.5" | ||||||
|  |           # "SUPER_SHIFT,C,exec,hyprctl dispatch layoutmsg swap_master_count 2 3" | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								modules/home-manager/hypr/hyprland/packages.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/home-manager/hypr/hyprland/packages.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | {inputs, pkgs, lib, config, ...}: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.hypr; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   # packages required by the current hyprland setup | ||||||
|  |   home.packages = [ | ||||||
|  |     pkgs.hyprshot | ||||||
|  |     pkgs.nautilus | ||||||
|  |     pkgs.gnome-control-center | ||||||
|  |     pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth | ||||||
|  |     pkgs.brightnessctl | ||||||
|  |     pkgs.cliphist | ||||||
|  |     pkgs.wl-clipboard | ||||||
|  |     pkgs.gcr # Provides org.gnome.keyring.SystemPrompter | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  |   # Also use gnome keyring | ||||||
|  |   services.gnome-keyring.enable = true; | ||||||
|  | } | ||||||
| @@ -5,10 +5,10 @@ | |||||||
|     settings = { |     settings = { | ||||||
|  |  | ||||||
|  |  | ||||||
|       # prevent the screen being shown for a split second |       # # prevent the screen being shown for a split second | ||||||
|       animations = { |       # animations = { | ||||||
|         animation = "fadeIn, 0, 0, linear"; |       #   animation = "fadeIn, 0, 0, linear"; | ||||||
|       }; |       # }; | ||||||
|  |  | ||||||
|       general = { |       general = { | ||||||
|         # immediately lock the screen |         # immediately lock the screen | ||||||
|   | |||||||
| @@ -3,37 +3,40 @@ | |||||||
|   lib, |   lib, | ||||||
|  ... |  ... | ||||||
| }: | }: | ||||||
| with lib; let | let | ||||||
|   # # load the wallpapers from the wallpapers directory - this gives a set with the folder content |  | ||||||
|   # dirContent = builtins.readDir ../../../wallpapers; |  | ||||||
|   # wallpaperString = lib.strings.concatMapStrings (x: " " + x) wallpapers; |  | ||||||
|   # # # load each wallpaper and keep its path (now in the nix store) as an array |  | ||||||
|   # # wallpapers = map (x: builtins.readDir "${../../../wallpapers}/${x.value}") dirContent; |  | ||||||
|   # # wallpaperString = lib.strings.concatMapStrings (x: " " + x) wallpapers; |  | ||||||
|  |  | ||||||
|   # # script that picks a random wallpaper from the array and sets it as the desktop background |   wallpapers = [ | ||||||
|   # monitor = ""; # leave empty to set the wallpaper on all monitors |     ../../../wallpapers/codioful-formerly-gradienta-lweK7Wme_jo-unsplash.jpg | ||||||
|  |     ../../../wallpapers/codioful-formerly-gradienta-n2XqPm7Bqhk-unsplash.jpg | ||||||
|  |     ../../../wallpapers/luke-chesser-eICUFSeirc0-unsplash.jpg | ||||||
|  |     ../../../wallpapers/luke-chesser-pJadQetzTkI-unsplash.jpg | ||||||
|  |     ../../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|   # wallpaperRandomizer = pkgs.writeShellScriptBin "wallpaperRandomizer" '' |   monitor = ""; # leave empty to set the wallpaper on all monitors | ||||||
|   #   wallpaper=$(shuf -n 1 -e ${wallpaperString}) |  | ||||||
|   #   hyprctl hyprpaper unload all |   wallpaperPicker = pkgs.writeShellScriptBin "wallpaper-picker" '' | ||||||
|   #   hyprctl hyprpaper preload $wallpaper |     #!/usr/bin/env bash | ||||||
|   #   hyprctl hyprpaper wallpaper "${monitor},$wallpaper" |     # use an array of wallpapers to randomly select one | ||||||
|   # ''; |     wallpapers=(${pkgs.lib.concatStringsSep " " (map (p: "${p}") wallpapers)}) | ||||||
|  |     # select a random wallpaper from the array | ||||||
|  |     index=$((RANDOM % ${toString (builtins.length wallpapers)})) | ||||||
|  |     wallpaper="''${wallpapers[index]}" | ||||||
|  |     echo "Setting wallpaper to: $wallpaper" | ||||||
|  |  | ||||||
|  |     hyprctl hyprpaper unload all | ||||||
|  |     hyprctl hyprpaper reload "${monitor},$wallpaper" | ||||||
|  |   ''; | ||||||
|  |  | ||||||
| in { | in { | ||||||
|   # home.packages = [wallpaperRandomizer]; |   home.packages = [wallpaperPicker]; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   services.hyprpaper = { |   services.hyprpaper = { | ||||||
|     enable = true; |     enable = true; | ||||||
|  |     settings = { | ||||||
|  |       ipc = "on"; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
|   #   settings = { |  | ||||||
|   #     ipc = "off"; |  | ||||||
|   #     splash = false; |  | ||||||
|   #   }; |  | ||||||
|   # }; |  | ||||||
|  |  | ||||||
|   # systemd.user = { |   # systemd.user = { | ||||||
|   #   services.wallpaperRandomizer = { |   #   services.wallpaperRandomizer = { | ||||||
|   | |||||||
| @@ -3,6 +3,21 @@ let | |||||||
|   cfg = config.nix-config.style; |   cfg = config.nix-config.style; | ||||||
| in | in | ||||||
| { | { | ||||||
|  |     options.nix-config.waybar = { | ||||||
|  |         burninPrevention = lib.mkOption { | ||||||
|  |             type = lib.types.bool; | ||||||
|  |             default = true; | ||||||
|  |             description = "Enable burn-in prevention for Waybar"; | ||||||
|  |             example = '' | ||||||
|  |                 burninPrevention = true; | ||||||
|  |             ''; | ||||||
|  |  | ||||||
|  |         }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     config = { | ||||||
|  |  | ||||||
|  |  | ||||||
|         # required to autoload fonts from packages installed via Home Manager |         # required to autoload fonts from packages installed via Home Manager | ||||||
|         fonts.fontconfig.enable = true; |         fonts.fontconfig.enable = true; | ||||||
|  |  | ||||||
| @@ -42,6 +57,7 @@ in | |||||||
|                         "tray" |                         "tray" | ||||||
|                         "privacy" |                         "privacy" | ||||||
|                         "network" |                         "network" | ||||||
|  |                         "bluetooth" | ||||||
|                         "wireplumber" |                         "wireplumber" | ||||||
|                         "battery" |                         "battery" | ||||||
|                         "backlight" |                         "backlight" | ||||||
| @@ -69,9 +85,9 @@ in | |||||||
|                         }; |                         }; | ||||||
|                     }; |                     }; | ||||||
|                     "clock" = { |                     "clock" = { | ||||||
|                     format = "{:%H:%M}"; |                         format = " {:%H:%M}"; | ||||||
|                         interval = 1; |                         interval = 1; | ||||||
|                     tooltip-format = "<tt>{calendar}</tt>"; |                         tooltip-format = "{calendar}"; | ||||||
|                         calendar = { |                         calendar = { | ||||||
|                             "format" = { |                             "format" = { | ||||||
|                                 "today" = "<span color='#fAfBfC'><b>{}</b></span>"; |                                 "today" = "<span color='#fAfBfC'><b>{}</b></span>"; | ||||||
| @@ -82,7 +98,7 @@ in | |||||||
|                         format = "{icon}"; |                         format = "{icon}"; | ||||||
|                         format-icons = { |                         format-icons = { | ||||||
|                             activated = ""; |                             activated = ""; | ||||||
|                         deactivated = ""; |                             deactivated = "☕"; | ||||||
|                         }; |                         }; | ||||||
|                         tooltip = "true"; |                         tooltip = "true"; | ||||||
|                     }; |                     }; | ||||||
| @@ -94,9 +110,9 @@ in | |||||||
|                         format-alt = "{device_alias} "; |                         format-alt = "{device_alias} "; | ||||||
|                         tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected"; |                         tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected"; | ||||||
|                         tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}"; |                         tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}"; | ||||||
|                     tooltip-formaenumeratet-enumerate-connected = "{device_alias}\n{device_address}"; |                         tooltip-format-enumerate-connected = "{device_alias}\n{device_address}"; | ||||||
|                         tooltip-format-enumerate-connected-battery = "{device_alias}\n{device_address}\n{device_battery_percentage}%"; |                         tooltip-format-enumerate-connected-battery = "{device_alias}\n{device_address}\n{device_battery_percentage}%"; | ||||||
|                     on-click-right = "blueman-manager"; |                         on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center bluetooth"; | ||||||
|                     }; |                     }; | ||||||
|                     "battery" = { |                     "battery" = { | ||||||
|                         interval = 60; |                         interval = 60; | ||||||
| @@ -107,19 +123,22 @@ in | |||||||
|                         }; |                         }; | ||||||
|                         format = "{capacity}% {icon}"; |                         format = "{capacity}% {icon}"; | ||||||
|                         format-charging = "{capacity}% "; |                         format-charging = "{capacity}% "; | ||||||
|                     format-plugged = "{capacity}%  "; |                         format-plugged = "{capacity}% "; | ||||||
|                         format-icons = [ "" "" "" "" "" "" ]; |                         format-icons = [ "" "" "" "" "" "" ]; | ||||||
|                     }; |                     }; | ||||||
|                     "backlight" = { |                     "backlight" = { | ||||||
|                     "format" = "{percent}% {icon}"; |                         # format = "{percent}% {icon}"; | ||||||
|                     "format-icons" = ["" "" "" "" "" "" "" "" ""]; |                         format = "{icon}"; | ||||||
|  |                         tooltip-format = "{percent}%"; | ||||||
|  |                         format-icons = [ "" "" "" "" "" "" "" "" "" ]; | ||||||
|                     }; |                     }; | ||||||
|                     "wireplumber" = { |                     "wireplumber" = { | ||||||
|                     scroll-step = 10; |                         scroll-step = 1; | ||||||
|                     format = "{icon} {volume}%";# {format_source}"; |                         format = "{volume}% {icon}";# {format_source}"; | ||||||
|                         format-bluetooth = "{volume}% {icon}";# {format_source}"; |                         format-bluetooth = "{volume}% {icon}";# {format_source}"; | ||||||
|                         format-bluetooth-muted = " {icon}";# {format_source}"; |                         format-bluetooth-muted = " {icon}";# {format_source}"; | ||||||
|                     format-muted = " Muted";# {format_source}"; |                         format-muted = "🔇";# {format_source}"; | ||||||
|  |                         format-alt = "{format_source} {icon}"; | ||||||
|                         # format-source = " {volume}%"; |                         # format-source = " {volume}%"; | ||||||
|                         # format-source-muted = ""; |                         # format-source-muted = ""; | ||||||
|                         format-icons = { |                         format-icons = { | ||||||
| @@ -134,13 +153,18 @@ in | |||||||
|                                 "" |                                 "" | ||||||
|                             ]; |                             ]; | ||||||
|                         }; |                         }; | ||||||
|                     on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center sound"; |                         on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; | ||||||
|  |                         on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center sound"; | ||||||
|  |                     }; | ||||||
|  |                     "memory" = { | ||||||
|  |                         interval = 5; | ||||||
|  |                         format = " {}%"; | ||||||
|  |                         max-length = 10; | ||||||
|                     }; |                     }; | ||||||
|                     "tray" = { |                     "tray" = { | ||||||
|                         spacing = 5; |                         spacing = 5; | ||||||
|                     }; |                     }; | ||||||
|                     "custom/notification" = { |                     "custom/notification" = { | ||||||
|                     tooltip = false; |  | ||||||
|                         format = "{icon} {}"; |                         format = "{icon} {}"; | ||||||
|                         format-icons = { |                         format-icons = { | ||||||
|                             notification = "<span foreground='red'><sup></sup></span>"; |                             notification = "<span foreground='red'><sup></sup></span>"; | ||||||
| @@ -166,9 +190,8 @@ in | |||||||
|                         format-icons = [ "" "" "" "" "" ]; |                         format-icons = [ "" "" "" "" "" ]; | ||||||
|                         format-disconnected = ""; |                         format-disconnected = ""; | ||||||
|                         tooltip-format = " {ifname} via {gwaddr}"; |                         tooltip-format = " {ifname} via {gwaddr}"; | ||||||
|                     # TODO - don't escape the strings in the tooltip |  | ||||||
|                         tooltip-format-wifi = '' |                         tooltip-format-wifi = '' | ||||||
|                          {essid}({signalStrength}%), {frequency} GHz\nInterface: {ifname} |                              {essid}({signalStrength}%), {frequency} GHz (Interface: {ifname}) | ||||||
|                             IP: {ipaddr}    GW: {gwaddr} |                             IP: {ipaddr}    GW: {gwaddr} | ||||||
|  |  | ||||||
|                             <span color='#a6da95'>{bandwidthUpBits}</span>    <span color='#ee99a0'>{bandwidthDownBits}</span>    <span color='#c6a0f6'>{bandwidthTotalBits}</span> |                             <span color='#a6da95'>{bandwidthUpBits}</span>    <span color='#ee99a0'>{bandwidthDownBits}</span>    <span color='#c6a0f6'>{bandwidthTotalBits}</span> | ||||||
| @@ -210,7 +233,7 @@ in | |||||||
|                 * { |                 * { | ||||||
|                     font-family: "${cfg.monospaceFont}"; |                     font-family: "${cfg.monospaceFont}"; | ||||||
|                     font-weight: bold; |                     font-weight: bold; | ||||||
|                 font-size: ${builtins.toString (cfg.fontSizes.desktop + 7)}px; |                     font-size: ${builtins.toString (cfg.fontSizes.desktop + 5)}px; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 window#waybar { |                 window#waybar { | ||||||
| @@ -221,13 +244,16 @@ in | |||||||
|                     background: rgba(0, 0, 0, 0.6); |                     background: rgba(0, 0, 0, 0.6); | ||||||
|                     color: white; |                     color: white; | ||||||
|                     border-radius: 7px; |                     border-radius: 7px; | ||||||
|                 padding: 5px 5px 5px 5px; |                     margin: 1px 3px; | ||||||
|  |                     padding: 1px 6px; | ||||||
|  |                     animation: bgFade 3600s infinite alternate, textColorFade 3600s infinite alternate; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 box.module button:hover { |                 box.module button:hover { | ||||||
|                     box-shadow: inset 0 -3px #ffffff; |                     box-shadow: inset 0 -3px #ffffff; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|             .modules-left { |                 /*.modules-left { | ||||||
|                     padding: 3px; |                     padding: 3px; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
| @@ -237,10 +263,12 @@ in | |||||||
|  |  | ||||||
|                 .modules-center { |                 .modules-center { | ||||||
|                     padding: 3px; |                     padding: 3px; | ||||||
|             } |                 }*/ | ||||||
|  |  | ||||||
|                 #workspaces button { |                 #workspaces button { | ||||||
|                 color: #ffffff; |                     color: white; | ||||||
|  |                     background: none; | ||||||
|  |                     animation: textColorFade 3600s infinite alternate; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 #battery.warning { |                 #battery.warning { | ||||||
| @@ -249,6 +277,53 @@ in | |||||||
|                 #battery.critical { |                 #battery.critical { | ||||||
|                     background:rgba(255, 0, 0, 0.6); |                     background:rgba(255, 0, 0, 0.6); | ||||||
|                 } |                 } | ||||||
|  |                 #battery.charging { | ||||||
|  |                     background-color:rgba(14, 173, 0, 0.6); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 #privacy { | ||||||
|  |                     color: #ffffff; | ||||||
|  |                     background:rgba(240, 165, 0, 0.6); | ||||||
|  |                     border-radius: 7px; | ||||||
|  |                     margin: 1px 3px; | ||||||
|  |                     padding: 1px 6px; | ||||||
|  |  | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 @keyframes bgFade { | ||||||
|  |                     0% { | ||||||
|  |                         background-color: white; | ||||||
|  |                     } | ||||||
|  |                     100% { | ||||||
|  |                         background-color: black; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 @keyframes textColorFade { | ||||||
|  |                     0% { | ||||||
|  |                         color: black; | ||||||
|  |                     } | ||||||
|  |                     /* 45% { | ||||||
|  |                         color: black; | ||||||
|  |                     } */ | ||||||
|  |                     60% { | ||||||
|  |                         color: rgb(29, 38, 96); | ||||||
|  |                     } | ||||||
|  |                     /* 55% { | ||||||
|  |                         color: white; | ||||||
|  |                     } */ | ||||||
|  |                     100% { | ||||||
|  |                         color: white; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|             ''; |             ''; | ||||||
|         }; |         }; | ||||||
|  |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,4 +5,9 @@ | |||||||
|         pkgs.kubectl |         pkgs.kubectl | ||||||
|     ]; |     ]; | ||||||
|  |  | ||||||
|  |     # Add the shell alias | ||||||
|  |     programs.fish.shellAliases = { | ||||||
|  |         k = "kubectl"; | ||||||
|  |     }; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										112
									
								
								modules/home-manager/launcher.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								modules/home-manager/launcher.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | |||||||
|  | { config, pkgs, lib, ... }: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.style; | ||||||
|  |  | ||||||
|  |   powerMenu = pkgs.writeShellScriptBin "power-menu" '' | ||||||
|  |     options=" Power Off\n Reboot\n Lock\n Suspend" | ||||||
|  |     selected=$(echo -e "$options" | fuzzel --dmenu --prompt "Power Menu" --lines 4 --width 20) | ||||||
|  |  | ||||||
|  |     case "$selected" in | ||||||
|  |       " Power Off") systemctl poweroff ;; | ||||||
|  |       " Reboot") systemctl reboot ;; | ||||||
|  |       " Lock") hyprlock ;; | ||||||
|  |       " Suspend") systemctl suspend ;; | ||||||
|  |       *) exit 1 ;; | ||||||
|  |     esac | ||||||
|  |   ''; | ||||||
|  |  | ||||||
|  |   filePicker = pkgs.writeShellScriptBin "file-picker" '' | ||||||
|  |     files=$(${lib.getExe pkgs.fd} . $HOME --type f) | ||||||
|  |     filesShortened=$(echo "$files" | sed "s|$HOME|~|g" | awk -F/ '{print $(NF)" ("$0")"}') | ||||||
|  |  | ||||||
|  |     selected=$(echo "$filesShortened" | fuzzel --dmenu --prompt "🔎 " --placeholder "File search" --index) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     if [ -n "$selected" ]; then | ||||||
|  |       # Since fuzzel was launched with the --index option the actual path is now files[selected] | ||||||
|  |       selectedPlusOne=$((selected + 1)) | ||||||
|  |       file=$(echo "$files" | sed -n "''${selectedPlusOne}p") | ||||||
|  |       xdg-open "$file" | ||||||
|  |       # plus one | ||||||
|  |     else | ||||||
|  |       echo "No file selected" | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |   ''; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   options.nix-config = { | ||||||
|  |     powerMenu = lib.mkOption { | ||||||
|  |       description = "Package to use as a power menu"; | ||||||
|  |       type = lib.types.package; | ||||||
|  |       default = powerMenu; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     launcher = lib.mkOption { | ||||||
|  |       description = "Configuration for the launcher"; | ||||||
|  |       type = lib.types.package; | ||||||
|  |       default = pkgs.fuzzel; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     filePicker = lib.mkOption { | ||||||
|  |       description = "Package to use as a file picker"; | ||||||
|  |       type = lib.types.package; | ||||||
|  |       default = filePicker; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|  |     programs.fuzzel = { | ||||||
|  |       enable = true; | ||||||
|  |  | ||||||
|  |       settings = { | ||||||
|  |         main = { | ||||||
|  |           font = "monospace:size=${builtins.toString (cfg.fontSizes.applications - 1)}"; | ||||||
|  |           terminal = "${lib.getExe pkgs.kitty}"; | ||||||
|  |           layer = "overlay"; #or top? | ||||||
|  |           use-bold = true; | ||||||
|  |           dpi-aware = true; | ||||||
|  |           icons-enabled = true; | ||||||
|  |           match-mode = "fzf"; | ||||||
|  |           horizontal-pad = cfg.fontSizes.applications + 5; | ||||||
|  |           vertical-pad = cfg.fontSizes.applications + 5; | ||||||
|  |           inner-pad = cfg.fontSizes.applications; | ||||||
|  |           show-actions = true; | ||||||
|  |           lines = 12; | ||||||
|  |           width = 50; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         colors = { | ||||||
|  |           background = "000000aa"; | ||||||
|  |           text = "ffffffaa"; | ||||||
|  |  | ||||||
|  |           # prompt | ||||||
|  |  | ||||||
|  |           # placeholder | ||||||
|  |  | ||||||
|  |           # input | ||||||
|  |  | ||||||
|  |           match = "ffffffaa"; | ||||||
|  |  | ||||||
|  |           selection = "00000000"; | ||||||
|  |  | ||||||
|  |           selection-text = "ffffffbb"; | ||||||
|  |  | ||||||
|  |           selection-match = "ffffffaa"; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         border = { | ||||||
|  |           width = 0; | ||||||
|  |           radius = 15; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       powerMenu | ||||||
|  |       filePicker | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										110
									
								
								modules/home-manager/notifications.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								modules/home-manager/notifications.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | |||||||
|  | { config, pkgs, lib, ... }: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.style; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   services.swaync = { | ||||||
|  |     enable = true; | ||||||
|  |  | ||||||
|  |     settings = { | ||||||
|  |       control-center-margin-top = 13; | ||||||
|  |       control-center-margin-bottom = 0; | ||||||
|  |       control-center-margin-right = 14; | ||||||
|  |       control-center-margin-left = 0; | ||||||
|  |       notification-2fa-action = true; | ||||||
|  |       notification-inline-replies = true; | ||||||
|  |       notification-icon-size = 48; | ||||||
|  |       notification-body-image-height = 160; | ||||||
|  |       notification-body-image-width = 200; | ||||||
|  |       notification-window-width = 400; | ||||||
|  |       timeout = 6; | ||||||
|  |       timeout-low = 3; | ||||||
|  |       timeout-critical = 0; | ||||||
|  |  | ||||||
|  |       image-visibility = "when-available"; | ||||||
|  |       transition-time = 200; | ||||||
|  |       hide-on-clear = false; | ||||||
|  |       hide-on-action = true; | ||||||
|  |       script-fail-notify = true; | ||||||
|  |       widgets = [ | ||||||
|  |         "dnd" | ||||||
|  |         "buttons-grid" | ||||||
|  |         "mpris" | ||||||
|  |         "volume" | ||||||
|  |         "backlight" | ||||||
|  |         "title" | ||||||
|  |         "notifications" | ||||||
|  |       ]; | ||||||
|  |       widget-config = { | ||||||
|  |         title = { | ||||||
|  |           text = "Notifications"; | ||||||
|  |           clear-all-button = true; | ||||||
|  |           button-text = ""; | ||||||
|  |         }; | ||||||
|  |         dnd = { | ||||||
|  |           text = "Do Not Disturb"; | ||||||
|  |         }; | ||||||
|  |         label = { | ||||||
|  |           max-lines = 1; | ||||||
|  |           text = "Notification"; | ||||||
|  |         }; | ||||||
|  |         mpris = { | ||||||
|  |           image-size = 50; | ||||||
|  |           image-radius = 0; | ||||||
|  |         }; | ||||||
|  |         volume = { | ||||||
|  |           label = ""; | ||||||
|  |         }; | ||||||
|  |         backlight = { | ||||||
|  |           label = ""; | ||||||
|  |           device = "amdgpu_bl2"; | ||||||
|  |         }; | ||||||
|  |         buttons-grid = { | ||||||
|  |           actions = [ | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; | ||||||
|  |               type = "toggle"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; | ||||||
|  |               type = "toggle"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "nm-connection-editor"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "blueman-manager"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "bash -c $HOME/.config/hypr/scripts/airplaneMode.sh"; | ||||||
|  |               type = "toggle"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "shutdown now"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "hyprlock"; | ||||||
|  |             } | ||||||
|  |             { | ||||||
|  |               label = ""; | ||||||
|  |               command = "~/.config/hypr/scripts/wlogout.sh"; | ||||||
|  |             } | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     style = '' | ||||||
|  |       * { | ||||||
|  |         font-family: "monospace"; | ||||||
|  |       } | ||||||
|  |     ''; | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @@ -2,6 +2,9 @@ | |||||||
| { | { | ||||||
|   programs.ssh.enable = true; |   programs.ssh.enable = true; | ||||||
|   programs.ssh.matchBlocks = { |   programs.ssh.matchBlocks = { | ||||||
|  |     "*" = { | ||||||
|  |       identityFile = "${config.home.homeDirectory}/.ssh/main_key"; | ||||||
|  |     }; | ||||||
|     ela = lib.hm.dag.entryBefore ["eiger"] { |     ela = lib.hm.dag.entryBefore ["eiger"] { | ||||||
|       hostname = "ela.cscs.ch"; |       hostname = "ela.cscs.ch"; | ||||||
|       user = "rmoll"; |       user = "rmoll"; | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ in | |||||||
|         cursor = { |         cursor = { | ||||||
|             size = lib.mkOption { |             size = lib.mkOption { | ||||||
|                 type = lib.types.int; |                 type = lib.types.int; | ||||||
|                 default = 35; |                 default = 22; | ||||||
|                 description = "Size of the cursor in pixels."; |                 description = "Size of the cursor in pixels."; | ||||||
|             }; |             }; | ||||||
|         }; |         }; | ||||||
| @@ -57,8 +57,8 @@ in | |||||||
|             autoEnable = false; |             autoEnable = false; | ||||||
|  |  | ||||||
|             cursor = { |             cursor = { | ||||||
|                 package = pkgs.apple-cursor; |                 package = pkgs.bibata-cursors; | ||||||
|                 name = "macOS"; |                 name = "Bibata-Modern-Ice"; | ||||||
|                 size = cfg.cursor.size; |                 size = cfg.cursor.size; | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
| @@ -84,7 +84,7 @@ in | |||||||
|                 }; |                 }; | ||||||
|  |  | ||||||
|                 monospace = { |                 monospace = { | ||||||
|                     package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; }; |                     package = pkgs.nerd-fonts.fira-code; | ||||||
|                     name = cfg.monospaceFont; |                     name = cfg.monospaceFont; | ||||||
|                 }; |                 }; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								modules/home-manager/uxplay.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								modules/home-manager/uxplay.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   lib, pkgs, ... | ||||||
|  | }: | ||||||
|  | { | ||||||
|  |   # requires avahi or similar | ||||||
|  |  | ||||||
|  |   home.packages = with pkgs; [ uxplay ]; | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,11 +1,47 @@ | |||||||
| { config, pkgs, lib, ... }: | { config, pkgs, lib, ... }: | ||||||
| let | let | ||||||
|   cfg = config.nix-config.style; |   cfg = config.nix-config.style; | ||||||
|  |  | ||||||
|  |   wofiPowerMenu = pkgs.writeShellScriptBin "wofi-power-menu" '' | ||||||
|  |     #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  |     options=" Power Off\n Reboot\n Lock\n Suspend" | ||||||
|  |     selected=$(echo -e "$options" | wofi --dmenu --prompt "Power Menu") | ||||||
|  |     #  --width 300 --height 250 | ||||||
|  |  | ||||||
|  |     case "$selected" in | ||||||
|  |       " Power Off") systemctl poweroff ;; | ||||||
|  |       " Reboot") systemctl reboot ;; | ||||||
|  |       " Lock") hyprlock ;; | ||||||
|  |       " Suspend") systemctl suspend ;; | ||||||
|  |       *) exit 1 ;; | ||||||
|  |     esac | ||||||
|  |   ''; | ||||||
|  |  | ||||||
|  |   wofiFilePicker = pkgs.writeShellScriptBin "wofi-file-picker" '' | ||||||
|  |     #!/usr/bin/env bash | ||||||
|  |     initial=$(find $HOME -maxdepth 2 -type f) | ||||||
|  |     selected=$(printf "%s\n" $initial | wofi --dmenu --prompt "Select a file") | ||||||
|  |  | ||||||
|  |     if [ -n "$selected" ]; then | ||||||
|  |       xdg-open "$selected" | ||||||
|  |     else | ||||||
|  |       echo "No file selected" | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |   ''; | ||||||
| in | in | ||||||
| { | { | ||||||
|  |  | ||||||
|   home.packages = with pkgs; [ wofi-emoji ]; |   options.nix-config = { | ||||||
|  |     powerMenu = lib.mkOption { | ||||||
|  |       description = "Package to use as a power menu"; | ||||||
|  |       type = lib.types.package; | ||||||
|  |       default = wofiPowerMenu; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|     programs.wofi = { |     programs.wofi = { | ||||||
|       enable = true; |       enable = true; | ||||||
|  |  | ||||||
| @@ -85,6 +121,8 @@ in | |||||||
|  |  | ||||||
|         #entry:selected { |         #entry:selected { | ||||||
|           background-color: #2e3440; |           background-color: #2e3440; | ||||||
|  |           outline: none; | ||||||
|  |           border: none; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         #text { |         #text { | ||||||
| @@ -92,4 +130,10 @@ in | |||||||
|         } |         } | ||||||
|       ''; |       ''; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       wofiPowerMenu | ||||||
|  |       wofi-emoji | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,4 +19,14 @@ | |||||||
|     ]; |     ]; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   xdg.mimeApps.defaultApplications = { | ||||||
|  |     "text/*" = [ "code" ]; | ||||||
|  |     "application/x-yaml" = [ "code" ]; | ||||||
|  |  | ||||||
|  |     "application/pdf" = [ "papers" ]; | ||||||
|  |     "image/*" = [ "loupe" ]; | ||||||
|  |     "video/*" = [ "showtime" ]; | ||||||
|  |   }; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								modules/nixos/agenix.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								modules/nixos/agenix.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | { config, pkgs, lib, inputs, ... }: | ||||||
|  | { | ||||||
|  |   # agenix client | ||||||
|  |   environment.systemPackages = [ | ||||||
|  |     inputs.agenix.packages."${system}".default | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										88
									
								
								modules/nixos/backup.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								modules/nixos/backup.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | |||||||
|  | {pkgs, lib, ...}: | ||||||
|  | let | ||||||
|  |   snapshotsDir = "/snapshots/home"; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   environment.systemPackages = with pkgs; [ | ||||||
|  |     restic | ||||||
|  |     btrbk | ||||||
|  |     libnotify | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   # btrbk systemd service and timer for daily home snapshots | ||||||
|  |   systemd.services.btrbk-home-snapshot = { | ||||||
|  |     description = "Create daily btrbk snapshot of the home subvolume"; | ||||||
|  |     serviceConfig = { | ||||||
|  |       Type = "oneshot"; | ||||||
|  |       User = "remy"; | ||||||
|  |       ExecStartPre = "${lib.getExe pkgs.libnotify} \"Backup\" \"Creating BTRBK snapshot of /home.\""; | ||||||
|  |       # run the btrbk command as superuser | ||||||
|  |       ExecStart = "+${lib.getExe pkgs.btrbk} -c /etc/btrbk/home.conf run"; | ||||||
|  |       Environment = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"; # ensure the notification is sent to the correct display | ||||||
|  |       ExecStartPost = "${lib.getExe pkgs.libnotify} \"Backup\" \"Snapshot of /home created successfully.\""; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   systemd.timers.btrbk-home-snapshot = { | ||||||
|  |     enable = true; | ||||||
|  |     description = "Daily timer for btrbk home snapshot"; | ||||||
|  |     wantedBy = [ "timers.target" ]; | ||||||
|  |     timerConfig = { | ||||||
|  |       OnCalendar = "*-*-* 12:00"; | ||||||
|  |       Persistent = true; # ensures missed runs are triggered after resume | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   # ensure the target directory exists | ||||||
|  |   systemd.tmpfiles.settings = { | ||||||
|  |     "btrbk snapshots" = { | ||||||
|  |       "${snapshotsDir}" = { | ||||||
|  |         d = { | ||||||
|  |           group = "root"; | ||||||
|  |           user = "root"; | ||||||
|  |           mode = "0770"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   # btrbk config for home snapshots | ||||||
|  |   environment.etc."btrbk/home.conf".text = '' | ||||||
|  |     timestamp_format long | ||||||
|  |     # keep snapshots for 2 days independently of the call | ||||||
|  |     snapshot_preserve_min   2d | ||||||
|  |     # retain daily snapshots for 14 days | ||||||
|  |     snapshot_preserve      14d | ||||||
|  |  | ||||||
|  |     subvolume /home | ||||||
|  |     snapshot_dir ${snapshotsDir} | ||||||
|  |   ''; | ||||||
|  |  | ||||||
|  |   # Now create a restic backup off the newest btrbk snapshot | ||||||
|  |   systemd.services.restic-backup-latest-snapshot = { | ||||||
|  |     description = "Backup home subvolume using restic"; | ||||||
|  |     serviceConfig = { | ||||||
|  |       Type = "oneshot"; | ||||||
|  |       ExecStart = "${lib.getExe pkgs.restic} -r /home/snapshots/restic-backup backup /home/snapshots/home-$(date +%Y-%m-%d_%H-%M-%S)"; | ||||||
|  |       # send a notification when the service is done | ||||||
|  |       ExecStartPost = "su remy -c 'notify-send \"Restic Backup\" \"Home backup created successfully.\"'"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   # # the udev rule: | ||||||
|  |   # services.udev.extraRules = '' | ||||||
|  |   #   ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="backup-restic", TAG+="systemd", ENV{SYSTEMD_WANTS}="backup-restic.service" | ||||||
|  |   # ''; | ||||||
|  |  | ||||||
|  |   # # the systemd service: | ||||||
|  |   # systemd.services.backup-restic = { | ||||||
|  |   #   description = "Backup using restic (triggered when USB drive is plugged in)"; | ||||||
|  |   #   after = [ "local-fs.target" ]; | ||||||
|  |   #   wantedBy = [ "multi-user.target" ]; | ||||||
|  |   #   serviceConfig = { | ||||||
|  |   #     Type = "oneshot"; | ||||||
|  |   #     # TODO: adapt command | ||||||
|  |   #     ExecStart = "${lib.getExe pkgs.restic} backup /home/username"; | ||||||
|  |   #   }; | ||||||
|  |   # }; | ||||||
|  | } | ||||||
| @@ -7,7 +7,23 @@ | |||||||
| { | { | ||||||
|   environment.systemPackages = [ |   environment.systemPackages = [ | ||||||
|     pkgs.bluez |     pkgs.bluez | ||||||
|  |     # bluez-qt | ||||||
|  |     # gnome.gnome-control-center | ||||||
|  |     pkgs.gnome-bluetooth | ||||||
|   ]; |   ]; | ||||||
|  |  | ||||||
|  |   services.dbus.packages = with pkgs; [ | ||||||
|  |     gnome-bluetooth | ||||||
|  |     bluez | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   users.users.remy.extraGroups = [ | ||||||
|  |     "networkmanager" | ||||||
|  |  | ||||||
|  |   ]; | ||||||
|  |  | ||||||
|  |  | ||||||
|   hardware.bluetooth = { |   hardware.bluetooth = { | ||||||
|     enable = true; |     enable = true; | ||||||
|     # powerOnBoot = true; |     # powerOnBoot = true; | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ in | |||||||
|     # Use hyprland as the main desktop environment but use gdm as desktop manager |     # Use hyprland as the main desktop environment but use gdm as desktop manager | ||||||
|     programs.hyprland = { |     programs.hyprland = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       xwayland.enable = false; |       xwayland.enable = true; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -26,10 +26,23 @@ in | |||||||
|       enable = true; |       enable = true; | ||||||
|       wayland = true; |       wayland = true; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     services.gvfs.enable = true; | ||||||
|  |  | ||||||
|  |  | ||||||
|     security.pam.services.hyprlock = {}; |     security.pam.services.hyprlock = {}; | ||||||
|  |  | ||||||
|     security.pam.services.gdm.enableGnomeKeyring = true; |     security.pam.services.gdm.enableGnomeKeyring = true; | ||||||
|  |  | ||||||
|  |     # Enable RTKit for real-time audio processing, ... | ||||||
|  |     # improving audio performance and reducing dropouts. | ||||||
|  |     security.rtkit.enable = true; | ||||||
|  |     # Enable D-Bus for inter-process communication | ||||||
|  |     services.dbus.enable = true; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     programs.dconf.enable = true; | ||||||
|  |  | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								modules/nixos/language.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								modules/nixos/language.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | { config, pkgs, ... }: | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   # Configure console keymap | ||||||
|  |   console.keyMap = "de"; | ||||||
|  |  | ||||||
|  |   i18n.defaultLocale = "en_US.UTF-8"; | ||||||
|  |   # i18n.supportedLocales = [ "en_US.UTF-8" "de_DE.UTF-8" ]; | ||||||
|  |  | ||||||
|  |   time.timeZone = "Europe/Berlin"; | ||||||
|  | } | ||||||
| @@ -1,7 +1,35 @@ | |||||||
| {lib, ...}:{ | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config.networking; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |  | ||||||
|  |   options = { | ||||||
|  |     nix-config.networking.hostName = lib.mkOption { | ||||||
|  |       type = lib.types.str; | ||||||
|  |       default = "nixos"; | ||||||
|  |       }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|  |     networking.hostName = cfg.hostName; | ||||||
|  |  | ||||||
|     networking.networkmanager.enable = true; |     networking.networkmanager.enable = true; | ||||||
|     networking.networkmanager.wifi.powersave = lib.mkDefault true; |     networking.networkmanager.wifi.powersave = lib.mkDefault true; | ||||||
|   users.users.remy.extraGroups = [ |     users.users.${config.nix-config.userName}.extraGroups = [ | ||||||
|       "networkmanager" |       "networkmanager" | ||||||
|     ]; |     ]; | ||||||
|  |     services.avahi.enable = true; | ||||||
|  |     services.avahi.openFirewall = true; | ||||||
|  |  | ||||||
|  |     # networking.firewall = { | ||||||
|  |     #   enable = false; | ||||||
|  |     # }; | ||||||
|  |  | ||||||
|  |   }; | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -6,7 +6,7 @@ | |||||||
| }: | }: | ||||||
| { | { | ||||||
|   # Needs to be explicitly set to false... |   # Needs to be explicitly set to false... | ||||||
|   hardware.pulseaudio.enable = false; |   services.pulseaudio.enable = false; | ||||||
|   # OR |   # OR | ||||||
|   services.pipewire = { |   services.pipewire = { | ||||||
|     enable = true; |     enable = true; | ||||||
|   | |||||||
| @@ -5,25 +5,53 @@ | |||||||
|   ... |   ... | ||||||
| }: | }: | ||||||
| { | { | ||||||
|  |   options.nix-config = { | ||||||
|  |     power = { | ||||||
|  |       batteryThresholds = lib.mkOption { | ||||||
|  |         type = lib.types.listOf lib.types.int; | ||||||
|  |         default = [ 60 80 ]; | ||||||
|  |         description = "Battery charge thresholds for power management."; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|  |  | ||||||
|     services.tlp = { |     services.tlp = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       settings = { |       settings = { | ||||||
|  |         # processor chooses frequencies itself | ||||||
|  |         CPU_DRIVER_OPMODE_ON_AC = "active"; | ||||||
|  |         CPU_DRIVER_OPMODE_ON_BAT = "active"; | ||||||
|  |  | ||||||
|  |         # governor dictates global behavior of the CPU | ||||||
|         CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; |         CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; | ||||||
|         CPU_SCALING_GOVERNOR_ON_AC = "performance"; |         CPU_SCALING_GOVERNOR_ON_AC = "performance"; | ||||||
|  |  | ||||||
|       CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; |         # energy performance policy (EPP) sets the energy/performance balance | ||||||
|  |         CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; | ||||||
|         CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; |         CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; | ||||||
|  |  | ||||||
|       CPU_MIN_PERF_ON_AC = 0; |         # CPU_MIN_PERF_ON_AC = 0; | ||||||
|       CPU_MAX_PERF_ON_AC = 100; |         # CPU_MAX_PERF_ON_AC = 100; | ||||||
|       CPU_MIN_PERF_ON_BAT = 0; |         # CPU_MIN_PERF_ON_BAT = 0; | ||||||
|       CPU_MAX_PERF_ON_BAT = 50; |         # CPU_MAX_PERF_ON_BAT = 50; | ||||||
|  |  | ||||||
|  |         # enable battery charge thresholds on the default battery | ||||||
|  |         STOP_CHARGE_THRESH_BAT0 = 1; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         # STOP_CHARGE_THRESH_BAT0 = 80; | ||||||
|  |  | ||||||
|  |         # CPU_BOOST_ON_AC = 1; | ||||||
|  |         # CPU_BOOST_ON_BAT = 0; | ||||||
|  |         # CPU_HWP_DYN_BOOST_ON_AC = 1; | ||||||
|  |         # CPU_HWP_DYN_BOOST_ON_BAT = 0; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   # services.watt = { | ||||||
|   # services.superfreq = { |  | ||||||
|   #   enable = true; |   #   enable = true; | ||||||
|   #   settings = { |   #   settings = { | ||||||
|   #     charger = { |   #     charger = { | ||||||
| @@ -32,6 +60,15 @@ | |||||||
|   #       epp = "performance"; |   #       epp = "performance"; | ||||||
|   #       epb = "balance_performance"; |   #       epb = "balance_performance"; | ||||||
|   #       platform_profile = "performance"; |   #       platform_profile = "performance"; | ||||||
|  |  | ||||||
|  |   #       enable_auto_turbo = true; | ||||||
|  |   #       # Custom thresholds for auto turbo management | ||||||
|  |   #       turbo_auto_settings = { | ||||||
|  |   #         load_threshold_high = 70.0; | ||||||
|  |   #         load_threshold_low = 30.0; | ||||||
|  |   #         temp_threshold_high = 75.0; | ||||||
|  |   #         initial_turbo_state = false;  # whether turbo should be initially enabled (false = disabled) | ||||||
|  |   #       }; | ||||||
|   #     }; |   #     }; | ||||||
|  |  | ||||||
|   #     battery = { |   #     battery = { | ||||||
| @@ -40,8 +77,15 @@ | |||||||
|   #       epp = "power"; |   #       epp = "power"; | ||||||
|   #       epb = "balance_power"; |   #       epb = "balance_power"; | ||||||
|   #       platform_profile = "low-power"; |   #       platform_profile = "low-power"; | ||||||
|   #       min_freq_mhz = 800; |  | ||||||
|   #       max_freq_mhz = 2500; |   #       enable_auto_turbo = true; | ||||||
|  |   #       # Custom thresholds for auto turbo management | ||||||
|  |   #       turbo_auto_settings = { | ||||||
|  |   #         load_threshold_high = 80.0; | ||||||
|  |   #         load_threshold_low = 40.0; | ||||||
|  |   #         temp_threshold_high = 65.0; | ||||||
|  |   #         initial_turbo_state = false;  # whether turbo should be initially enabled (false = disabled) | ||||||
|  |   #       }; | ||||||
|  |  | ||||||
|   #     }; |   #     }; | ||||||
|  |  | ||||||
| @@ -51,8 +95,9 @@ | |||||||
|   #       min_poll_interval_sec = 1; |   #       min_poll_interval_sec = 1; | ||||||
|   #       max_poll_interval_sec = 30; |   #       max_poll_interval_sec = 30; | ||||||
|   #       throttle_on_battery = true; |   #       throttle_on_battery = true; | ||||||
|  |   #       stats_file_path = "/var/run/watt-stats"; | ||||||
|   #     }; |   #     }; | ||||||
|   #     battery_charge_thresholds = [50 90]; |   #     # battery_charge_thresholds = [50 90]; | ||||||
|   #   }; |   #   }; | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -65,4 +110,6 @@ | |||||||
|       AllowHybridSleep=yes |       AllowHybridSleep=yes | ||||||
|       AllowSuspendThenHibernate=yes |       AllowSuspendThenHibernate=yes | ||||||
|     ''; |     ''; | ||||||
|  |   }; | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								modules/nixos/user.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								modules/nixos/user.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | let | ||||||
|  |   cfg = config.nix-config; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options = { | ||||||
|  |     nix-config.userName = lib.mkOption { | ||||||
|  |       type = lib.types.str; | ||||||
|  |       default = "remy"; | ||||||
|  |       }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   config = { | ||||||
|  |  | ||||||
|  |     users.users.${cfg.userName} = { | ||||||
|  |       isNormalUser = true; | ||||||
|  |       extraGroups = [ | ||||||
|  |         "wheel" # Enable ‘sudo’ for the user. | ||||||
|  |         # other groups are added as needed, eg. networkmanager | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								secrets
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								secrets
									
									
									
									
									
										Submodule
									
								
							 Submodule secrets added at 2aef0ad374
									
								
							| @@ -1,11 +0,0 @@ | |||||||
| let |  | ||||||
|  |  | ||||||
|     remy-nix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMU7pWZfs7GfFTvqljA99pJV9DGJIPH+eK6DvGqBs4pG"; |  | ||||||
|     remy-arch = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOP0PZqY8/YfV0NnVbFs2fZLj+nXXVJ8bDo03TyYDfW1"; |  | ||||||
|  |  | ||||||
|     users = [remy-arch remy-nix]; |  | ||||||
|  |  | ||||||
| in { |  | ||||||
|     "secret1.age".publicKeys = users; |  | ||||||
|     "wifi.age".publicKeys = users; |  | ||||||
| } |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								secrets/wifi.age
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								secrets/wifi.age
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -18,15 +18,6 @@ | |||||||
|  |  | ||||||
|   ## XDG configuration |   ## XDG configuration | ||||||
|   xdg = { |   xdg = { | ||||||
|     userDirs = { |  | ||||||
|       enable = true; |  | ||||||
|       desktop = "Desktop"; |  | ||||||
|       pictures = "Pictures"; |  | ||||||
|       documents = "Documents"; |  | ||||||
|       publicShare = null; |  | ||||||
|       music = null; |  | ||||||
|       templates = null; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     mimeApps = { |     mimeApps = { | ||||||
|       enable = true; |       enable = true; | ||||||
|   | |||||||
| @@ -5,15 +5,14 @@ with lib.hm.gvariant; | |||||||
|     nix-config = { |     nix-config = { | ||||||
|       hypr = { |       hypr = { | ||||||
|         internal-screen = { |         internal-screen = { | ||||||
|             resolution = "2880x1800@90.00100"; |             resolution = "auto"; | ||||||
|             scale = "1.666667"; |             scale = "auto"; | ||||||
|         }; |         }; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|   imports = [ |   imports = [ | ||||||
|     ../remy.nix |     ../remy.nix | ||||||
|     ../../modules/home-manager/browser.nix |     ../../modules/home-manager/browser.nix | ||||||
							
								
								
									
										40
									
								
								users/remy_yoga/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								users/remy_yoga/default.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | { config, pkgs, lib, ... }: | ||||||
|  | with lib.hm.gvariant; | ||||||
|  | { | ||||||
|  |   config = { | ||||||
|  |     nix-config = { | ||||||
|  |       hypr = { | ||||||
|  |         internal-screen = { | ||||||
|  |             resolution = "2944x1840@90.00"; | ||||||
|  |             scale = "1.6"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   imports = [ | ||||||
|  |     ../remy.nix | ||||||
|  |     ../../modules/home-manager/browser.nix | ||||||
|  |     ../../modules/home-manager/code.nix | ||||||
|  |     ../../modules/home-manager/dev.nix | ||||||
|  |     ../../modules/home-manager/directories.nix | ||||||
|  |     ../../modules/home-manager/documents.nix | ||||||
|  |     ../../modules/home-manager/fish.nix | ||||||
|  |     ../../modules/home-manager/flatpaks.nix | ||||||
|  |     ../../modules/home-manager/hypr | ||||||
|  |     ../../modules/home-manager/keepassxc.nix | ||||||
|  |     ../../modules/home-manager/kitty.nix | ||||||
|  |     ../../modules/home-manager/kubectl.nix | ||||||
|  |     ../../modules/home-manager/launcher.nix | ||||||
|  |     ../../modules/home-manager/notifications.nix | ||||||
|  |     ../../modules/home-manager/obsidian.nix | ||||||
|  |     ../../modules/home-manager/owncloud-client.nix | ||||||
|  |     ../../modules/home-manager/ssh.nix | ||||||
|  |     ../../modules/home-manager/stylix.nix | ||||||
|  |     ../../modules/home-manager/thunderbird.nix | ||||||
|  |     ../../modules/home-manager/uxplay.nix | ||||||
|  |     # ../../modules/home-manager/wofi.nix | ||||||
|  |     ../../modules/home-manager/xdg-portals.nix | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										4
									
								
								utils/unfree.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								utils/unfree.nix
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | { config, lib, pkgs, ... }: | ||||||
|  | { | ||||||
|  |   nixpkgs.config.allowUnfree = true; | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								variable.nix
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								variable.nix
									
									
									
									
									
								
							| @@ -1,25 +0,0 @@ | |||||||
| { config, ... }: |  | ||||||
| { |  | ||||||
|   config.var = { |  | ||||||
|     hostname = "garnix"; |  | ||||||
|     username = "remy"; |  | ||||||
|     configDirectory = "/home/" + config.var.username |  | ||||||
|       + "/.config/nixos"; # The path of the nixos configuration directory |  | ||||||
|  |  | ||||||
|     keyboardLayout = "de"; |  | ||||||
|  |  | ||||||
|     location = "Berlin"; |  | ||||||
|     timeZone = "Europe/Berlin"; |  | ||||||
|     defaultLocale = "en_US.UTF-8"; |  | ||||||
|     extraLocale = "de_DE.UTF-8"; |  | ||||||
|  |  | ||||||
|     git = { |  | ||||||
|       username = "Hadi"; |  | ||||||
|       email = "112569860+anotherhadi@users.noreply.github.com"; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     autoUpgrade = false; |  | ||||||
|     autoGarbageCollector = true; |  | ||||||
|  |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user