Flake for my desktop, laptop, and my homelab.
0

Configure Feed

Select the types of activity you want to include in your feed.

patterns

Adam0 (May 22, 2026, 9:34 PM +0200) ecce79e2 43fe1458

+1712 -783
+1 -1
.sops.yaml
··· 8 8 - &vm age18xgnqqn70msl9wzqpnlwjpupwtkzzyxq65tvpsr7zzpkq7av6fjs2hz79d 9 9 # keep-sorted end 10 10 creation_rules: 11 - - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ 11 + - path_regex: ^secrets\.yaml$ 12 12 key_groups: 13 13 - pgp: 14 14 - *adam0
+93 -76
flake.lock
··· 104 104 "cachyos-kernel": { 105 105 "flake": false, 106 106 "locked": { 107 - "lastModified": 1778851262, 108 - "narHash": "sha256-lEtNQQdQkC1bWIxBr9po1cW6aD+UzAMxUbe6k3hH1tA=", 107 + "lastModified": 1779085181, 108 + "narHash": "sha256-ZdiBlGOkI9tS3ggyNlJ5gU4qCkvGWLT3sbrnHEemN2o=", 109 109 "owner": "CachyOS", 110 110 "repo": "linux-cachyos", 111 - "rev": "e625438b981d774a22e2ba431a2d93e1737462ff", 111 + "rev": "391e1e35d62d30dccd14ec3af01d58e5310b7d80", 112 112 "type": "github" 113 113 }, 114 114 "original": { ··· 120 120 "cachyos-kernel-patches": { 121 121 "flake": false, 122 122 "locked": { 123 - "lastModified": 1778864443, 124 - "narHash": "sha256-3OIBgFPMab0avw5A0OcnGrmRTAbw573aAIgYERYRZ8g=", 123 + "lastModified": 1779191960, 124 + "narHash": "sha256-QqEC7SVMVf1vj9OoflWzP+nGewMrUNSBSf1dB8sUbqY=", 125 125 "owner": "CachyOS", 126 126 "repo": "kernel-patches", 127 - "rev": "a62c86e5d6ce4efcd4f3be9526adfa52aa7286af", 127 + "rev": "65cbbfc17bb7e172cb06ef69037be5b0d517b2cd", 128 128 "type": "github" 129 129 }, 130 130 "original": { ··· 150 150 }, 151 151 "crane_2": { 152 152 "locked": { 153 - "lastModified": 1777830388, 154 - "narHash": "sha256-2uoQAqUk2H0ijQtGiWAyNeQYGYc6yfAcRRLlJAz4Gp8=", 153 + "lastModified": 1779130139, 154 + "narHash": "sha256-BLrtr42azquO7MdGFU5a7KiMl3YpFlTeIXqy1fT5GlQ=", 155 155 "owner": "ipetkov", 156 156 "repo": "crane", 157 - "rev": "d459c1350e96ce1a7e3859c513ef5e9869d67d6f", 157 + "rev": "edb38893982a3338972bb4a2ec7ce7c29ba10fd9", 158 158 "type": "github" 159 159 }, 160 160 "original": { ··· 337 337 "flake-compat_6": { 338 338 "flake": false, 339 339 "locked": { 340 - "lastModified": 1751685974, 341 - "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=", 340 + "lastModified": 1777699697, 341 + "narHash": "sha256-Eg9b/rq/ECYwNwEXs5i9wHyhxNI0JrYx2srdI2uZMaQ=", 342 342 "ref": "refs/heads/main", 343 - "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1", 344 - "revCount": 92, 343 + "rev": "382052b74656a369c5408822af3f2501e9b1af81", 344 + "revCount": 94, 345 345 "type": "git", 346 346 "url": "https://git.lix.systems/lix-project/flake-compat.git" 347 347 }, ··· 352 352 }, 353 353 "flake-file": { 354 354 "locked": { 355 - "lastModified": 1777679829, 356 - "narHash": "sha256-zQxY90pq7BDbeimAiOfuK2U0huzo6oHOiC8zEpRgsbQ=", 355 + "lastModified": 1779051720, 356 + "narHash": "sha256-+jbXnODsR19pFKB0x/6kHhFgW6yV6N+CGClFr45eDU8=", 357 357 "owner": "vic", 358 358 "repo": "flake-file", 359 - "rev": "04ca28cf570276e70a9a5f694791ab2a60f1f300", 359 + "rev": "c58eb27d9434e5be0c8693f1eb18d47035bc21ba", 360 360 "type": "github" 361 361 }, 362 362 "original": { ··· 550 550 ] 551 551 }, 552 552 "locked": { 553 - "lastModified": 1778954430, 554 - "narHash": "sha256-oaNyOr05lblaQdtbkbN1wO0b2KLIL2O1LkmwDgdQp4I=", 553 + "lastModified": 1779336838, 554 + "narHash": "sha256-n1+l78hJRABp4cQHKeD0BVByT0vZLPqd09Tvoq8Q+d8=", 555 555 "owner": "nix-community", 556 556 "repo": "home-manager", 557 - "rev": "26aaab785b0bab4af60a2c42b22760fa906ef22a", 557 + "rev": "928d72376949e222ea4f07b44828a55b0136422e", 558 558 "type": "github" 559 559 }, 560 560 "original": { ··· 638 638 "xdph": "xdph" 639 639 }, 640 640 "locked": { 641 - "lastModified": 1778712946, 642 - "narHash": "sha256-Dn4NCfBRCZ6PW/8C7grx9HyVb8WC8YNRCkRMMa5xRhQ=", 641 + "lastModified": 1778936359, 642 + "narHash": "sha256-ZuZ9nfmb1Oh3qOPfrQ0zeTBRuMS0DqYTkKiuG9x06CQ=", 643 643 "owner": "hyprwm", 644 644 "repo": "Hyprland", 645 - "rev": "a47147bc095e5b3be3eb8bd04f0ac242b968cd4d", 645 + "rev": "39d7e209c79d451efab1b21151d5938289da838d", 646 646 "type": "github" 647 647 }, 648 648 "original": { 649 649 "owner": "hyprwm", 650 - "ref": "v0.55.1", 650 + "ref": "v0.55.2", 651 651 "repo": "Hyprland", 652 652 "type": "github" 653 653 } ··· 1013 1013 }, 1014 1014 "mnw": { 1015 1015 "locked": { 1016 - "lastModified": 1777828893, 1017 - "narHash": "sha256-gVWVnmyNr74BVKfhMMZDWkhx2699dhmZ2g0W8TTHtkk=", 1016 + "lastModified": 1778541201, 1017 + "narHash": "sha256-n0twkzWexzjsoDycOTvvQNuGEdg62UiNHYcFCduYpKI=", 1018 1018 "owner": "Gerg-L", 1019 1019 "repo": "mnw", 1020 - "rev": "c1c0b544bfabe6669b5a6a0383ccb475fe60258b", 1020 + "rev": "1a3573fc9d2486738fe0b2cacc5cd10dd5f3a445", 1021 1021 "type": "github" 1022 1022 }, 1023 1023 "original": { ··· 1034 1034 ] 1035 1035 }, 1036 1036 "locked": { 1037 - "lastModified": 1776882296, 1038 - "narHash": "sha256-DWZozXwMsgvUqfVlL1mQ8dOxW7GJ/8CdyaDN+1niZRg=", 1037 + "lastModified": 1779233504, 1038 + "narHash": "sha256-YIKEyzh0NFQlD0O92LQQNMoVCDwV8yw1Xz0Iu+4ZC5U=", 1039 1039 "owner": "feel-co", 1040 1040 "repo": "ndg", 1041 - "rev": "ab7d78d4884b3a34968cf9fa3d16c0c1246d5c6e", 1041 + "rev": "86f6644411a64d5413711895b7cf6e0e1be465b6", 1042 1042 "type": "github" 1043 1043 }, 1044 1044 "original": { 1045 1045 "owner": "feel-co", 1046 - "ref": "refs/tags/v2.6.0", 1046 + "ref": "refs/tags/v2.8.0", 1047 1047 "repo": "ndg", 1048 1048 "type": "github" 1049 1049 } ··· 1078 1078 "nixpkgs": "nixpkgs_4" 1079 1079 }, 1080 1080 "locked": { 1081 - "lastModified": 1778956518, 1082 - "narHash": "sha256-bbZMrzJtCqksaUBmAWSqmme/7PHEedPRAI3VmOSuP4A=", 1081 + "lastModified": 1779306729, 1082 + "narHash": "sha256-ccC0CMMW6a4sz1L9Ze9uskiT3nvGMbRA5/ZAfUkYsZ0=", 1083 1083 "owner": "xddxdd", 1084 1084 "repo": "nix-cachyos-kernel", 1085 - "rev": "ae5bc7641fb4178e4d9582ea49cab201f60f7869", 1085 + "rev": "ac9f02824490d781e39e252d1fab0114fed1d9c7", 1086 1086 "type": "github" 1087 1087 }, 1088 1088 "original": { ··· 1114 1114 ] 1115 1115 }, 1116 1116 "locked": { 1117 - "lastModified": 1778393439, 1118 - "narHash": "sha256-mOtQxUjtKaPHLeoLOY/YEDctmud1X9KwJr4kE1MJ3Wc=", 1117 + "lastModified": 1778999127, 1118 + "narHash": "sha256-V5GquqJvAqwFTcpN6hxKSQAtwuJFRUEHmyNKbeaTQDg=", 1119 1119 "owner": "nix-community", 1120 1120 "repo": "nix-index-database", 1121 - "rev": "01466c414c7357ae2ce32be4a272a7c69e94ab5f", 1121 + "rev": "f680e0d3c1dbefe298c423691662e238496890f2", 1122 1122 "type": "github" 1123 1123 }, 1124 1124 "original": { ··· 1137 1137 "nixpkgs-nixcord": "nixpkgs-nixcord" 1138 1138 }, 1139 1139 "locked": { 1140 - "lastModified": 1778921362, 1141 - "narHash": "sha256-Pcx1oofZA6tdqLsdq3Ytid+L8c8McX/vEMKRRvhQfwU=", 1140 + "lastModified": 1779412729, 1141 + "narHash": "sha256-BVySKNgjQk2JRD4hfs9UbFZzf8rfPOIEj3Pvi+GWXAE=", 1142 1142 "owner": "kaylorben", 1143 1143 "repo": "nixcord", 1144 - "rev": "834075983d701685a70e73c7dddf5da1e7876c98", 1144 + "rev": "396dd1b987be282e9957f418879ff241a157470e", 1145 1145 "type": "github" 1146 1146 }, 1147 1147 "original": { ··· 1223 1223 }, 1224 1224 "nixpkgs-nixcord": { 1225 1225 "locked": { 1226 - "lastModified": 1778003029, 1227 - "narHash": "sha256-q/nkKLDtHIyLjZpKhWk3cSK5IYsFqtMd6UtXF3ddjgA=", 1226 + "lastModified": 1779102034, 1227 + "narHash": "sha256-vZJZjLo513IeI8hjzHFc6TDezUd4uCE2Eq4SNO3DNNg=", 1228 1228 "owner": "NixOS", 1229 1229 "repo": "nixpkgs", 1230 - "rev": "0c88e1f2bdb93d5999019e99cb0e61e1fe2af4c5", 1230 + "rev": "687f05a9184cad4eaf905c48b63649e3a86f5433", 1231 1231 "type": "github" 1232 1232 }, 1233 1233 "original": { ··· 1285 1285 }, 1286 1286 "nixpkgs_4": { 1287 1287 "locked": { 1288 - "lastModified": 1778930970, 1289 - "narHash": "sha256-FqqcYr0c5in/HRL5bkRWykAGp/Q10Vj/zUiSr1P8URE=", 1288 + "lastModified": 1779273561, 1289 + "narHash": "sha256-O3UFKrh5oDyOwqD4Njdf7+SIxptOl3gHZyesYvNsIbw=", 1290 1290 "owner": "NixOS", 1291 1291 "repo": "nixpkgs", 1292 - "rev": "5a51fe22e18a6ce886b3cffa4c255378c151323c", 1292 + "rev": "8e72e9888e67ce593df16546cd31e0d75544ad0d", 1293 1293 "type": "github" 1294 1294 }, 1295 1295 "original": { ··· 1301 1301 }, 1302 1302 "nixpkgs_5": { 1303 1303 "locked": { 1304 - "lastModified": 1778003029, 1305 - "narHash": "sha256-q/nkKLDtHIyLjZpKhWk3cSK5IYsFqtMd6UtXF3ddjgA=", 1304 + "lastModified": 1779102034, 1305 + "narHash": "sha256-vZJZjLo513IeI8hjzHFc6TDezUd4uCE2Eq4SNO3DNNg=", 1306 1306 "owner": "NixOS", 1307 1307 "repo": "nixpkgs", 1308 - "rev": "0c88e1f2bdb93d5999019e99cb0e61e1fe2af4c5", 1308 + "rev": "687f05a9184cad4eaf905c48b63649e3a86f5433", 1309 1309 "type": "github" 1310 1310 }, 1311 1311 "original": { ··· 1317 1317 }, 1318 1318 "nixpkgs_6": { 1319 1319 "locked": { 1320 - "lastModified": 1778869304, 1321 - "narHash": "sha256-vZOcDniDPc1cS8A4Xi5YE6AGyPIvEpy4GMyayA3SWIM=", 1322 - "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", 1320 + "lastModified": 1779414690, 1321 + "narHash": "sha256-N5FzTQ6c0ZFX4b7LeOMqYHccvQZTVMx5RBxrDeLgWYo=", 1322 + "rev": "6dedf69f94d03cbe7bdde106f2d4c23ae2a853bf", 1323 1323 "type": "tarball", 1324 - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre998534.d233902339c0/nixexprs.tar.xz" 1324 + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre1003183.6dedf69f94d0/nixexprs.tar.xz" 1325 1325 }, 1326 1326 "original": { 1327 1327 "type": "tarball", ··· 1361 1361 "treefmt-nix": "treefmt-nix" 1362 1362 }, 1363 1363 "locked": { 1364 - "lastModified": 1778377995, 1365 - "narHash": "sha256-uUzHDHqQF1rdVNiTa05L0mML3/d7fpbAShjCRWxbrBQ=", 1364 + "lastModified": 1778983195, 1365 + "narHash": "sha256-hE3EFK5GoSdbO5WHZ8bZDUVYkofbDLQN/KK25z7IOOI=", 1366 1366 "owner": "noctalia-dev", 1367 1367 "repo": "noctalia-qs", 1368 - "rev": "d8327a723eed6dd9aebe8e0b162126f390e827df", 1368 + "rev": "4116b41cdc89e186be7cb8b24a9b6022af95d742", 1369 1369 "type": "github" 1370 1370 }, 1371 1371 "original": { ··· 1384 1384 ] 1385 1385 }, 1386 1386 "locked": { 1387 - "lastModified": 1778975037, 1388 - "narHash": "sha256-iycosu6o+g2d6wn+BjtJOzY6a7qLXm/56jv15Z1CNBs=", 1387 + "lastModified": 1779453694, 1388 + "narHash": "sha256-BXocsahzv3FY42jOX+Eq1LkIzziMF5mdrThX4I8y/ZQ=", 1389 1389 "owner": "nix-community", 1390 1390 "repo": "NUR", 1391 - "rev": "acefc7787b20a437d7c33d0a4b37be214758894d", 1391 + "rev": "c5ba1f764d8ffde01cab7a7ad79d77eedc66de4d", 1392 1392 "type": "github" 1393 1393 }, 1394 1394 "original": { ··· 1411 1411 "systems": "systems_3" 1412 1412 }, 1413 1413 "locked": { 1414 - "lastModified": 1778921573, 1415 - "narHash": "sha256-q1NHRnAJ/JIopHXV+jGXpU8K07za1YXKuiOo40euouo=", 1414 + "lastModified": 1779458887, 1415 + "narHash": "sha256-ampqLt+/Gq0FeuSiVU0WO7M2HMtD8RUqo7+z5Hspw+Y=", 1416 1416 "owner": "adam01110", 1417 1417 "repo": "nvf", 1418 - "rev": "accc4dd7e0fca0a7d02b9556377296fe85627f1f", 1418 + "rev": "3ae104bdcdc77b2ed605dd2f46d79c93b2648d79", 1419 1419 "type": "github" 1420 1420 }, 1421 1421 "original": { ··· 1442 1442 ] 1443 1443 }, 1444 1444 "locked": { 1445 - "lastModified": 1778887376, 1446 - "narHash": "sha256-WB6H6PdSyWzTCawq8onNlM/anWNccRNik4YqsYAu02k=", 1445 + "lastModified": 1779408430, 1446 + "narHash": "sha256-KCxVhyRK5Acc6mbb9a0KotXMgj6+o/iYaF80wiLbMQ4=", 1447 1447 "owner": "adam01110", 1448 1448 "repo": "overzicht", 1449 - "rev": "ebac9aed698496a167b67e453071e2c071e7e5e3", 1449 + "rev": "1054be9cac62497cf18b8bea732adcd1e5980118", 1450 1450 "type": "github" 1451 1451 }, 1452 1452 "original": { ··· 1525 1525 "nur": "nur", 1526 1526 "nvf": "nvf", 1527 1527 "overzicht": "overzicht", 1528 + "secrets": "secrets", 1528 1529 "sops-nix": "sops-nix", 1529 1530 "spicetify-nix": "spicetify-nix", 1530 1531 "stylix": "stylix", ··· 1575 1576 "type": "github" 1576 1577 } 1577 1578 }, 1579 + "secrets": { 1580 + "flake": false, 1581 + "locked": { 1582 + "lastModified": 1779288886, 1583 + "narHash": "sha256-XLE3h3x93AJARUwOkjt9JZ5g8S91zRFYDCmZTA3GGFk=", 1584 + "ref": "refs/heads/main", 1585 + "rev": "b98e951cce0f1882e43516121318437cb62f07a3", 1586 + "revCount": 1, 1587 + "type": "git", 1588 + "url": "ssh://git@github.com/adam01110/secrets.git" 1589 + }, 1590 + "original": { 1591 + "type": "git", 1592 + "url": "ssh://git@github.com/adam01110/secrets.git" 1593 + } 1594 + }, 1578 1595 "sops-nix": { 1579 1596 "inputs": { 1580 1597 "nixpkgs": [ ··· 1603 1620 "systems": "systems_5" 1604 1621 }, 1605 1622 "locked": { 1606 - "lastModified": 1778793632, 1607 - "narHash": "sha256-HYHD6J64bAWB2iT00lyyTn0wWcb0POtV+nPshYvq6Uc=", 1623 + "lastModified": 1779000518, 1624 + "narHash": "sha256-wdtytSnzMe85J/qeXJALMzSLRFTZ1gBHwn81l1PtT8k=", 1608 1625 "owner": "Gerg-L", 1609 1626 "repo": "spicetify-nix", 1610 - "rev": "e175a8b634e06a1b0635ec3d4db2c72cdc41fd15", 1627 + "rev": "5dde76b38418892ccb3d99e99bed7f8a43ac294c", 1611 1628 "type": "github" 1612 1629 }, 1613 1630 "original": { ··· 1640 1657 "tinted-zed": "tinted-zed" 1641 1658 }, 1642 1659 "locked": { 1643 - "lastModified": 1778776709, 1644 - "narHash": "sha256-YhnEcpiY6+l3RFA+cPmdTaeODGvNRuqE8B7VBjPVIxo=", 1660 + "lastModified": 1779378391, 1661 + "narHash": "sha256-IsDb9erotvx9npI94UDosvMeYQK17p7/vmU2v9batrY=", 1645 1662 "owner": "danth", 1646 1663 "repo": "stylix", 1647 - "rev": "e8ea85b4f7dddda9603e0f1ac86cd92cee3b2819", 1664 + "rev": "c1456cc4ba3c9485e7b4158c909eeca5a752cd59", 1648 1665 "type": "github" 1649 1666 }, 1650 1667 "original": { ··· 1857 1874 "rust-overlay": "rust-overlay_2" 1858 1875 }, 1859 1876 "locked": { 1860 - "lastModified": 1778952707, 1861 - "narHash": "sha256-ykv8R+YziXbeu4RwfWvwmEQlTMA2jZDSDptxatYhp50=", 1877 + "lastModified": 1779222498, 1878 + "narHash": "sha256-LGIZ5xrJN3Ko0OxOTSDztoFYiIBMBgzQrLpXfNWx/RI=", 1862 1879 "owner": "notashelf", 1863 1880 "repo": "tuigreet", 1864 - "rev": "879634d1cdc7cf0b887545c6826cd0d392fb731c", 1881 + "rev": "605c0a107406f3187632c74fcc67ed03acd30200", 1865 1882 "type": "github" 1866 1883 }, 1867 1884 "original": { ··· 1921 1938 ] 1922 1939 }, 1923 1940 "locked": { 1924 - "lastModified": 1778799443, 1925 - "narHash": "sha256-lNFVDKuh5xJn+VrF8gI+EmFmUgRlmQZWxQHJGNLqcp0=", 1941 + "lastModified": 1779455631, 1942 + "narHash": "sha256-svU6Ro4xiMxMA1KJGwQ/nfKwz3yXE/SONCw2Z1qTXHA=", 1926 1943 "owner": "0xc000022070", 1927 1944 "repo": "zen-browser-flake", 1928 - "rev": "2a400947d9b911ab6b3073de7d6bb43f04cc0479", 1945 + "rev": "5bcdfcef664bf62831dcb4b947004d9c5fbf7201", 1929 1946 "type": "github" 1930 1947 }, 1931 1948 "original": {
+5 -1
flake.nix
··· 22 22 url = "github:nix-community/home-manager"; 23 23 inputs.nixpkgs.follows = "nixpkgs"; 24 24 }; 25 - hyprland.url = "github:hyprwm/Hyprland?ref=v0.55.1"; 25 + hyprland.url = "github:hyprwm/Hyprland?ref=v0.55.2"; 26 26 hyprland-plugins = { 27 27 url = "github:hyprwm/hyprland-plugins?ref=v0.55.0"; 28 28 inputs.hyprland.follows = "hyprland"; ··· 88 88 nixpkgs.follows = "nixpkgs"; 89 89 treefmt-nix.follows = "treefmt-nix"; 90 90 }; 91 + }; 92 + secrets = { 93 + url = "git+ssh://git@github.com/adam01110/secrets.git"; 94 + flake = false; 91 95 }; 92 96 sops-nix = { 93 97 url = "github:Mic92/sops-nix";
+76
lib/hyprland.nix
··· 1 + _: let 2 + inherit (builtins) genList; 3 + 4 + mkDirection = key: direction: label: resize: { 5 + inherit 6 + # keep-sorted start 7 + direction 8 + key 9 + label 10 + resize 11 + # keep-sorted end 12 + ; 13 + }; 14 + in { 15 + hyprlandDirections = [ 16 + # keep-sorted start block=yes newline_separated=yes 17 + (mkDirection "Down" "d" "down" { 18 + x = 0; 19 + y = 20; 20 + }) 21 + 22 + (mkDirection "H" "l" "left" { 23 + x = -20; 24 + y = 0; 25 + }) 26 + 27 + (mkDirection "J" "d" "down" { 28 + x = 0; 29 + y = 20; 30 + }) 31 + 32 + (mkDirection "K" "u" "up" { 33 + x = 0; 34 + y = -20; 35 + }) 36 + 37 + (mkDirection "L" "r" "right" { 38 + x = 20; 39 + y = 0; 40 + }) 41 + 42 + (mkDirection "Left" "l" "left" { 43 + x = -20; 44 + y = 0; 45 + }) 46 + 47 + (mkDirection "Right" "r" "right" { 48 + x = 20; 49 + y = 0; 50 + }) 51 + 52 + (mkDirection "Up" "u" "up" { 53 + x = 0; 54 + y = -20; 55 + }) 56 + # keep-sorted end 57 + ]; 58 + 59 + # keep-sorted start 60 + hyprlandGroupNumbers = genList (index: index + 1) 5; 61 + hyprlandWorkspaceNumbers = genList (index: index + 1) 8; 62 + # keep-sorted end 63 + 64 + hyprlandResetCursorZoomLua = '' 65 + function() 66 + hl.config({ cursor = { zoom_factor = 1.0 } }) 67 + end 68 + ''; 69 + 70 + hyprlandCursorZoomLua = delta: '' 71 + function() 72 + local current = hl.get_config("cursor.zoom_factor") 73 + hl.config({ cursor = { zoom_factor = math.max(1.0, current + ${delta}) } }) 74 + end 75 + ''; 76 + }
+16
lib/nixhypr.nix
··· 1 + _: { 2 + mkNixhyprBind = description: keys: dispatcher: 3 + { 4 + inherit description keys; 5 + } 6 + // dispatcher; 7 + 8 + mkNixhyprBindGroup = category: binds: { 9 + inherit 10 + # keep-sorted start 11 + binds 12 + category 13 + # keep-sorted end 14 + ; 15 + }; 16 + }
+3 -3
modules/desktop/hyprland/cursor.nix
··· 9 9 }: let 10 10 inherit (lib) mkForce; 11 11 in { 12 - imports = [ 12 + imports = with self.modules.homeManager; [ 13 13 # keep-sorted start 14 - self.modules.homeManager.nur 15 - self.modules.homeManager.stylixPersonal 14 + nur 15 + stylixPersonal 16 16 # keep-sorted end 17 17 ]; 18 18
+2 -1
modules/desktop/hyprland/default.nix
··· 71 71 72 72 options.programs.nixhypr = { 73 73 extraLuaSnippets = mkOption { 74 + description = "Lua snippets concatenated into nixhypr's extraLua."; 75 + 74 76 type = types.listOf types.lines; 75 77 default = []; 76 - description = "Lua snippets concatenated into nixhypr's extraLua."; 77 78 }; 78 79 }; 79 80
+69
modules/desktop/hyprland/keybinds/applications.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + pkgs, 7 + self, 8 + # keep-sorted end 9 + ... 10 + }: let 11 + inherit (lib) getExe; 12 + inherit (lib.self) mkNixhyprBindGroup; 13 + 14 + # keep-sorted start 15 + ghostty = "${getExe config.programs.ghostty.package} --initial-window=false +new-window"; 16 + runapp = getExe pkgs.runapp; 17 + # keep-sorted end 18 + 19 + app = command: "${runapp} ${command}"; 20 + in { 21 + imports = with self.modules.homeManager; [ 22 + # keep-sorted start 23 + ghostty 24 + noctalia 25 + # keep-sorted end 26 + ]; 27 + 28 + config.programs.nixhypr.bindGroups = [ 29 + (mkNixhyprBindGroup "Applications" [ 30 + # keep-sorted start block=yes newline_separated=yes 31 + { 32 + description = "Browser"; 33 + 34 + keys = ["SUPER" "B"]; 35 + exec = app (getExe config.programs.zen-browser.package); 36 + } 37 + 38 + { 39 + description = "Discord"; 40 + 41 + keys = ["SUPER" "N"]; 42 + exec = app (getExe config.programs.nixcord.equibop.package); 43 + } 44 + 45 + { 46 + description = "File manager"; 47 + 48 + keys = ["SUPER" "E"]; 49 + exec = app "${ghostty} -- ${getExe pkgs.yazi}"; 50 + } 51 + 52 + { 53 + description = "Steam"; 54 + 55 + keys = ["SUPER" "M"]; 56 + exec = app "steam"; 57 + } 58 + 59 + { 60 + description = "Terminal"; 61 + 62 + keys = ["SUPER" "Return"]; 63 + exec = app ghostty; 64 + } 65 + # keep-sorted end 66 + ]) 67 + ]; 68 + }; 69 + }
+62
modules/desktop/hyprland/keybinds/brightness.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + self, 7 + # keep-sorted end 8 + ... 9 + }: let 10 + inherit 11 + (lib) 12 + # keep-sorted start 13 + getExe' 14 + mkEnableOption 15 + optionals 16 + # keep-sorted end 17 + ; 18 + inherit (lib.self) mkNixhyprBindGroup; 19 + 20 + cfg = config.hyprland.brightness; 21 + 22 + noctalia = "${getExe' config.programs.noctalia-shell.package "noctalia-shell"} ipc call"; 23 + in { 24 + imports = [self.modules.homeManager.noctalia]; 25 + 26 + options.hyprland.brightness.enable = mkEnableOption "function-row brightness keybindings"; 27 + 28 + config.programs.nixhypr.bindGroups = [ 29 + (mkNixhyprBindGroup "Brightness" (optionals cfg.enable [ 30 + # keep-sorted start block=yes newline_separated=yes 31 + { 32 + description = "Brightness down"; 33 + 34 + keys = ["XF86MonBrightnessDown"]; 35 + exec = "${noctalia} brightness decrease"; 36 + 37 + options = { 38 + # keep-sorted start 39 + locked = true; 40 + repeating = true; 41 + # keep-sorted end 42 + }; 43 + } 44 + 45 + { 46 + description = "Brightness up"; 47 + 48 + keys = ["XF86MonBrightnessUp"]; 49 + exec = "${noctalia} brightness increase"; 50 + 51 + options = { 52 + # keep-sorted start 53 + locked = true; 54 + repeating = true; 55 + # keep-sorted end 56 + }; 57 + } 58 + # keep-sorted end 59 + ])) 60 + ]; 61 + }; 62 + }
+64
modules/desktop/hyprland/keybinds/cursor-zoom.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit 4 + (lib.self) 5 + # keep-sorted start 6 + hyprlandCursorZoomLua 7 + hyprlandResetCursorZoomLua 8 + mkNixhyprBindGroup 9 + # keep-sorted end 10 + ; 11 + in { 12 + config.programs.nixhypr.bindGroups = [ 13 + (mkNixhyprBindGroup "Cursor Zoom" [ 14 + # keep-sorted start block=yes newline_separated=yes 15 + { 16 + description = "Reset zoom"; 17 + 18 + keys = ["SUPER" "SHIFT" "minus"]; 19 + lua = hyprlandResetCursorZoomLua; 20 + } 21 + 22 + { 23 + description = "Reset zoom"; 24 + 25 + keys = ["SUPER" "SHIFT" "mouse_down"]; 26 + lua = hyprlandResetCursorZoomLua; 27 + } 28 + 29 + { 30 + description = "Zoom in"; 31 + 32 + keys = ["SUPER" "equal"]; 33 + lua = hyprlandCursorZoomLua "0.1"; 34 + 35 + options.repeating = true; 36 + } 37 + 38 + { 39 + description = "Zoom in"; 40 + 41 + keys = ["SUPER" "mouse_down"]; 42 + lua = hyprlandCursorZoomLua "0.1"; 43 + } 44 + 45 + { 46 + description = "Zoom out"; 47 + 48 + keys = ["SUPER" "minus"]; 49 + lua = hyprlandCursorZoomLua "-0.1"; 50 + 51 + options.repeating = true; 52 + } 53 + 54 + { 55 + description = "Zoom out"; 56 + 57 + keys = ["SUPER" "mouse_up"]; 58 + lua = hyprlandCursorZoomLua "-0.1"; 59 + } 60 + # keep-sorted end 61 + ]) 62 + ]; 63 + }; 64 + }
+7
modules/desktop/hyprland/keybinds/default.nix
··· 1 + {self, ...}: { 2 + flake.modules.homeManager.hyprland = _: { 3 + imports = [self.modules.homeManager.nixhyprBinds]; 4 + 5 + config.programs.nixhypr.settings.binds.movefocus_cycles_fullscreen = true; 6 + }; 7 + }
+82
modules/desktop/hyprland/keybinds/groups.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit (lib) concatLists; 4 + inherit 5 + (lib.self) 6 + # keep-sorted start 7 + hyprlandDirections 8 + hyprlandGroupNumbers 9 + mkNixhyprBindGroup 10 + # keep-sorted end 11 + ; 12 + in { 13 + config.programs.nixhypr.bindGroups = [ 14 + (mkNixhyprBindGroup "Groups" (concatLists [ 15 + [ 16 + # keep-sorted start block=yes newline_separated=yes 17 + { 18 + description = "Move out of group"; 19 + 20 + keys = ["SUPER" "ALT" "X"]; 21 + action = "window.move"; 22 + args.out_of_group = true; 23 + } 24 + 25 + { 26 + description = "Next group window"; 27 + 28 + keys = ["SUPER" "ALT" "Tab"]; 29 + action = "group.next"; 30 + } 31 + 32 + { 33 + description = "Next group window"; 34 + 35 + keys = ["SUPER" "ALT" "mouse_down"]; 36 + action = "group.next"; 37 + } 38 + 39 + { 40 + description = "Previous group window"; 41 + 42 + keys = ["SUPER" "ALT" "SHIFT" "Tab"]; 43 + action = "group.prev"; 44 + } 45 + 46 + { 47 + description = "Previous group window"; 48 + 49 + keys = ["SUPER" "ALT" "mouse_up"]; 50 + action = "group.prev"; 51 + } 52 + 53 + { 54 + description = "Toggle group"; 55 + 56 + keys = ["SUPER" "X"]; 57 + action = "group.toggle"; 58 + } 59 + # keep-sorted end 60 + ] 61 + (map (direction: { 62 + description = "Move into group ${direction.label}"; 63 + 64 + keys = ["SUPER" "ALT" direction.key]; 65 + action = "window.move"; 66 + 67 + args.into_group = direction.direction; 68 + }) 69 + hyprlandDirections) 70 + (map (index: { 71 + description = "Group window ${toString index}"; 72 + 73 + keys = ["SUPER" "ALT" (toString index)]; 74 + action = "group.active"; 75 + 76 + args.index = index; 77 + }) 78 + hyprlandGroupNumbers) 79 + ])) 80 + ]; 81 + }; 82 + }
+48
modules/desktop/hyprland/keybinds/layout-and-resize.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit (lib) concatLists; 4 + inherit 5 + (lib.self) 6 + # keep-sorted start 7 + hyprlandDirections 8 + mkNixhyprBindGroup 9 + # keep-sorted end 10 + ; 11 + in { 12 + config.programs.nixhypr.bindGroups = [ 13 + (mkNixhyprBindGroup "Layout And Resize" (concatLists [ 14 + (map (direction: { 15 + description = "Resize ${direction.label}"; 16 + 17 + keys = ["SUPER" "CTRL" direction.key]; 18 + action = "window.resize"; 19 + 20 + args = direction.resize // {relative = true;}; 21 + options.repeating = true; 22 + }) 23 + hyprlandDirections) 24 + [ 25 + # keep-sorted start block=yes newline_separated=yes 26 + { 27 + description = "Move window"; 28 + 29 + keys = ["SUPER" "mouse:272"]; 30 + action = "window.drag"; 31 + 32 + options.mouse = true; 33 + } 34 + 35 + { 36 + description = "Resize window"; 37 + 38 + keys = ["SUPER" "mouse:273"]; 39 + action = "window.resize"; 40 + 41 + options.mouse = true; 42 + } 43 + # keep-sorted end 44 + ] 45 + ])) 46 + ]; 47 + }; 48 + }
+60
modules/desktop/hyprland/keybinds/media.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + self, 7 + # keep-sorted end 8 + ... 9 + }: let 10 + inherit (lib) getExe'; 11 + inherit (lib.self) mkNixhyprBindGroup; 12 + 13 + noctalia = "${getExe' config.programs.noctalia-shell.package "noctalia-shell"} ipc call"; 14 + in { 15 + imports = [self.modules.homeManager.noctalia]; 16 + 17 + config.programs.nixhypr.bindGroups = [ 18 + (mkNixhyprBindGroup "Media" [ 19 + # keep-sorted start block=yes newline_separated=yes 20 + { 21 + description = "Mute"; 22 + 23 + keys = ["XF86AudioMute"]; 24 + exec = "${noctalia} volume muteOutput"; 25 + 26 + options.locked = true; 27 + } 28 + 29 + { 30 + description = "Volume down"; 31 + 32 + keys = ["XF86AudioLowerVolume"]; 33 + exec = "${noctalia} volume decrease"; 34 + 35 + options = { 36 + # keep-sorted start 37 + locked = true; 38 + repeating = true; 39 + # keep-sorted end 40 + }; 41 + } 42 + 43 + { 44 + description = "Volume up"; 45 + 46 + keys = ["XF86AudioRaiseVolume"]; 47 + exec = "${noctalia} volume increase"; 48 + 49 + options = { 50 + # keep-sorted start 51 + locked = true; 52 + repeating = true; 53 + # keep-sorted end 54 + }; 55 + } 56 + # keep-sorted end 57 + ]) 58 + ]; 59 + }; 60 + }
+49
modules/desktop/hyprland/keybinds/screenshots-and-color.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + pkgs, 7 + self, 8 + # keep-sorted end 9 + ... 10 + }: let 11 + inherit (lib) getExe; 12 + inherit (lib.self) mkNixhyprBindGroup; 13 + 14 + # keep-sorted start 15 + hyprpicker = getExe pkgs.hyprpicker; 16 + hyprshot = getExe config.programs.hyprshot.package; 17 + screenshotDir = "${config.xdg.userDirs.pictures}/Screenshots"; 18 + # keep-sorted end 19 + in { 20 + imports = [self.modules.homeManager.xdgDirs]; 21 + 22 + config.programs.nixhypr.bindGroups = [ 23 + (mkNixhyprBindGroup "Screenshots And Color" [ 24 + # keep-sorted start block=yes newline_separated=yes 25 + { 26 + description = "Color picker"; 27 + 28 + keys = ["SUPER" "SHIFT" "X"]; 29 + exec = "${hyprpicker} -a"; 30 + } 31 + 32 + { 33 + description = "Screenshot output"; 34 + 35 + keys = ["SUPER" "Print"]; 36 + exec = "${hyprshot} -m output -o ${screenshotDir}"; 37 + } 38 + 39 + { 40 + description = "Screenshot region"; 41 + 42 + keys = ["SUPER" "SHIFT" "S"]; 43 + exec = "${hyprshot} -m region -o ${screenshotDir}"; 44 + } 45 + # keep-sorted end 46 + ]) 47 + ]; 48 + }; 49 + }
+79
modules/desktop/hyprland/keybinds/shell.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + self, 7 + # keep-sorted end 8 + ... 9 + }: let 10 + inherit (lib) getExe'; 11 + inherit (lib.self) mkNixhyprBindGroup; 12 + 13 + noctalia = "${getExe' config.programs.noctalia-shell.package "noctalia-shell"} ipc call"; 14 + in { 15 + imports = [self.modules.homeManager.noctalia]; 16 + 17 + config.programs.nixhypr.bindGroups = [ 18 + (mkNixhyprBindGroup "Shell" [ 19 + # keep-sorted start block=yes newline_separated=yes 20 + { 21 + description = "Clipboard"; 22 + 23 + keys = ["SUPER" "SHIFT" "V"]; 24 + exec = "${noctalia} launcher clipboard"; 25 + } 26 + 27 + { 28 + description = "Control center"; 29 + 30 + keys = ["SUPER" "U"]; 31 + exec = "${noctalia} controlCenter toggle"; 32 + } 33 + 34 + { 35 + description = "Emoji picker"; 36 + 37 + keys = ["SUPER" "G"]; 38 + exec = "${noctalia} launcher emoji"; 39 + } 40 + 41 + { 42 + description = "Idle inhibitor"; 43 + 44 + keys = ["SUPER" "Y"]; 45 + exec = "${noctalia} idleInhibitor toggle"; 46 + } 47 + 48 + { 49 + description = "Launcher"; 50 + 51 + keys = ["SUPER" "Tab"]; 52 + exec = "${noctalia} launcher toggle"; 53 + } 54 + 55 + { 56 + description = "Notifications"; 57 + 58 + keys = ["SUPER" "O"]; 59 + exec = "${noctalia} notifications toggleHistory"; 60 + } 61 + 62 + { 63 + description = "Session menu"; 64 + 65 + keys = ["SUPER" "Escape"]; 66 + exec = "${noctalia} sessionMenu toggle"; 67 + } 68 + 69 + { 70 + description = "Wallpaper picker"; 71 + 72 + keys = ["SUPER" "C"]; 73 + exec = "${noctalia} wallpaper toggle"; 74 + } 75 + # keep-sorted end 76 + ]) 77 + ]; 78 + }; 79 + }
+58
modules/desktop/hyprland/keybinds/system.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + self, 7 + # keep-sorted end 8 + ... 9 + }: let 10 + inherit 11 + (lib) 12 + # keep-sorted start 13 + getExe 14 + getExe' 15 + # keep-sorted end 16 + ; 17 + inherit (lib.self) mkNixhyprBindGroup; 18 + 19 + # keep-sorted start 20 + noctalia = "${getExe' config.programs.noctalia-shell.package "noctalia-shell"} ipc call"; 21 + overzicht = "${getExe config.programs.overzicht.package} ipc call"; 22 + # keep-sorted end 23 + in { 24 + imports = [ 25 + # keep-sorted start 26 + noctalia 27 + overzicht 28 + # keep-sorted end 29 + ]; 30 + 31 + config.programs.nixhypr.bindGroups = [ 32 + (mkNixhyprBindGroup "System" [ 33 + # keep-sorted start block=yes newline_separated=yes 34 + { 35 + description = "Keybind cheatsheet"; 36 + 37 + keys = ["SUPER" "Space"]; 38 + exec = "${noctalia} plugin togglePanel keybind-cheatsheet"; 39 + } 40 + 41 + { 42 + description = "Overview"; 43 + 44 + keys = ["SUPER" "SHIFT" "Tab"]; 45 + exec = "${overzicht} overview toggle"; 46 + } 47 + 48 + { 49 + description = "Performance profile"; 50 + 51 + keys = ["SUPER" "F1"]; 52 + exec = "${noctalia} powerProfile toggleNoctaliaPerformance"; 53 + } 54 + # keep-sorted end 55 + ]) 56 + ]; 57 + }; 58 + }
+23
modules/desktop/hyprland/keybinds/window-focus.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit 4 + (lib.self) 5 + # keep-sorted start 6 + hyprlandDirections 7 + mkNixhyprBindGroup 8 + # keep-sorted end 9 + ; 10 + in { 11 + config.programs.nixhypr.bindGroups = [ 12 + (mkNixhyprBindGroup "Window Focus" (map (direction: { 13 + description = "Focus ${direction.label}"; 14 + 15 + keys = ["SUPER" direction.key]; 16 + action = "focus"; 17 + 18 + args.direction = direction.direction; 19 + }) 20 + hyprlandDirections)) 21 + ]; 22 + }; 23 + }
+66
modules/desktop/hyprland/keybinds/window-management.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit (lib.self) mkNixhyprBindGroup; 4 + in { 5 + config.programs.nixhypr.bindGroups = [ 6 + (mkNixhyprBindGroup "Window Management" [ 7 + # keep-sorted start block=yes newline_separated=yes 8 + { 9 + description = "Close window"; 10 + 11 + keys = ["SUPER" "Q"]; 12 + action = "window.close"; 13 + } 14 + 15 + { 16 + description = "Fullscreen"; 17 + 18 + keys = ["SUPER" "F"]; 19 + action = "window.fullscreen"; 20 + } 21 + 22 + { 23 + description = "Grab rogue windows"; 24 + 25 + keys = ["SUPER" "SHIFT" "O"]; 26 + lua = "hyprsplit.dsp.grab_rogue_windows()"; 27 + } 28 + 29 + { 30 + description = "Pseudo"; 31 + 32 + keys = ["SUPER" "P"]; 33 + action = "window.pseudo"; 34 + } 35 + 36 + { 37 + description = "Swap split"; 38 + 39 + keys = ["SUPER" "Z"]; 40 + action = "layout"; 41 + 42 + args = "swapsplit"; 43 + } 44 + 45 + { 46 + description = "Toggle floating"; 47 + 48 + keys = ["SUPER" "V"]; 49 + action = "window.float"; 50 + 51 + args.action = "toggle"; 52 + } 53 + 54 + { 55 + description = "Toggle split"; 56 + 57 + keys = ["SUPER" "S"]; 58 + action = "layout"; 59 + 60 + args = "togglesplit"; 61 + } 62 + # keep-sorted end 63 + ]) 64 + ]; 65 + }; 66 + }
+23
modules/desktop/hyprland/keybinds/window-move.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit 4 + (lib.self) 5 + # keep-sorted start 6 + hyprlandDirections 7 + mkNixhyprBindGroup 8 + # keep-sorted end 9 + ; 10 + in { 11 + config.programs.nixhypr.bindGroups = [ 12 + (mkNixhyprBindGroup "Window Move" (map (direction: { 13 + description = "Move window ${direction.label}"; 14 + 15 + keys = ["SUPER" "SHIFT" direction.key]; 16 + action = "window.move"; 17 + 18 + args.direction = direction.direction; 19 + }) 20 + hyprlandDirections)) 21 + ]; 22 + }; 23 + }
+37
modules/desktop/hyprland/keybinds/workspaces.nix
··· 1 + _: { 2 + flake.modules.homeManager.hyprland = {lib, ...}: let 3 + inherit 4 + (lib.self) 5 + # keep-sorted start 6 + hyprlandWorkspaceNumbers 7 + mkNixhyprBindGroup 8 + # keep-sorted end 9 + ; 10 + in { 11 + config.programs.nixhypr.bindGroups = [ 12 + (mkNixhyprBindGroup "Workspaces" (map (workspace: { 13 + description = "Workspace ${toString workspace}"; 14 + 15 + keys = ["SUPER" (toString workspace)]; 16 + lua = "hyprsplit.dsp.focus({ workspace = ${toString workspace} })"; 17 + }) 18 + hyprlandWorkspaceNumbers)) 19 + 20 + (mkNixhyprBindGroup "Move To Workspace" (map (workspace: { 21 + description = "Move to workspace ${toString workspace}"; 22 + 23 + keys = ["SUPER" "SHIFT" (toString workspace)]; 24 + lua = "hyprsplit.dsp.window.move({ workspace = ${toString workspace} })"; 25 + }) 26 + hyprlandWorkspaceNumbers)) 27 + 28 + (mkNixhyprBindGroup "Move To Workspace Silent" (map (workspace: { 29 + description = "Move to workspace ${toString workspace} (silent)"; 30 + 31 + keys = ["SUPER" "CTRL" (toString workspace)]; 32 + lua = "hyprsplit.dsp.window.move({ workspace = ${toString workspace}, follow = false })"; 33 + }) 34 + hyprlandWorkspaceNumbers)) 35 + ]; 36 + }; 37 + }
+3 -3
modules/desktop/hyprland/plugins.nix
··· 22 22 programs.nixhypr = { 23 23 extraLuaSnippets = [ 24 24 '' 25 - -- add hyprsplit and configure it. 26 - local hs = dofile("${pkgs.nur.repos.adam0.hyprsplit}/init.lua") 27 - hs.config({ num_workspaces = 8 }) 25 + -- Expose hyprsplit for keybind dispatchers. 26 + hyprsplit = dofile("${pkgs.nur.repos.adam0.hyprsplit}/init.lua") 27 + hyprsplit.config({ num_workspaces = 8 }) 28 28 '' 29 29 ]; 30 30
+2 -6
modules/desktop/noctalia/bar.nix
··· 127 127 } 128 128 ] 129 129 ++ [{id = "KeepAwake";}] 130 - # Show the battery widget when enabled. 131 - ++ (optional cfgBattery { 132 - id = "Battery"; 133 - showPowerProfiles = true; 134 - DisplayMode = "icon-hover"; 135 - }) 130 + # Show the plugin battery widget when enabled. 131 + ++ (optional cfgBattery {id = "plugin:battery-monitor-plus";}) 136 132 ++ [ 137 133 {id = "plugin:github-feed";} 138 134
+16 -5
modules/desktop/noctalia/delobotomize.nix
··· 20 20 inherit (pkgs.stdenv.hostPlatform) system; 21 21 22 22 cfg = config.programs.noctalia-shell; 23 + 23 24 basePackage = 24 25 if cfg.packageOverrides.package != null 25 26 then cfg.packageOverrides.package 26 27 else inputs.noctalia.packages.${system}.default; 28 + 27 29 overrideArgs = removeAttrs cfg.packageOverrides ["package"]; 28 30 locationFileEnv = optionals (cfg.systemd.locationFile != null) ["NOCTALIA_LOCATION_FILE=${cfg.systemd.locationFile}"]; 29 31 in { ··· 32 34 # keep-sorted start block=yes newline_separated=yes 33 35 # Keep a base package and overrides for local patches. 34 36 packageOverrides = mkOption { 37 + description = "Override arguments applied to the base package."; 38 + 35 39 type = types.submodule { 36 40 # keep-sorted start block=yes newline_separated=yes 37 41 freeformType = types.attrs; 38 42 39 43 # Add runtime tools directly to the wrapped shell package path. 40 44 options.extraPackages = mkOption { 45 + description = "Additional runtime packages prepended to the shell wrapper PATH."; 46 + 41 47 type = types.listOf types.package; 42 48 default = []; 43 - description = "Additional runtime packages prepended to the shell wrapper PATH."; 44 49 }; 45 50 46 51 options.package = mkOption { 52 + description = "Optional base package used before applying local patches."; 53 + 47 54 type = types.nullOr types.package; 48 55 default = null; 49 - description = "Optional base package used before applying local patches."; 50 56 }; 51 57 # keep-sorted end 52 58 }; 59 + 53 60 default = {}; 54 - description = "Override arguments applied to the base package."; 55 61 }; 56 62 57 63 # Keep gui settings writes outside the nix store. 58 64 systemd = { 59 65 # keep-sorted start block=yes newline_separated=yes 60 66 locationFile = mkOption { 67 + description = '' 68 + Optional file whose trimmed contents override `settings.location.name` before the shell starts. 69 + Point this at a sops secret path to keep the location out of the nix store. 70 + ''; 71 + 61 72 type = types.nullOr types.path; 62 73 default = null; 63 - description = "Optional file whose trimmed contents override `settings.location.name` before the shell starts. Point this at a sops secret path to keep the location out of the nix store."; 64 74 }; 65 75 66 76 mutableRuntimeSettings = mkOption { 77 + description = "Whether noctalia-shell creates a gui-settings.json to store setting changes made within the GUI at runtime."; 78 + 67 79 type = types.bool; 68 80 default = true; 69 - description = "Whether noctalia-shell creates a gui-settings.json to store setting changes made within the GUI at runtime."; 70 81 }; 71 82 # keep-sorted end 72 83 };
+1 -5
modules/desktop/noctalia/launcher.nix
··· 9 9 }: let 10 10 inherit (lib) getExe; 11 11 in { 12 - imports = [ 13 - # keep-sorted start 14 - self.modules.homeManager.xdgTerminal 15 - # keep-sorted end 16 - ]; 12 + imports = [self.modules.homeManager.xdgTerminal]; 17 13 18 14 programs.noctalia-shell = { 19 15 # keep-sorted start block=yes newline_separated=yes
+9 -8
modules/desktop/noctalia/location.nix
··· 22 22 23 23 cfgLocation = config.programs.noctalia-shell.location.source; 24 24 in { 25 - imports = [ 25 + imports = with self.modules; [ 26 26 # keep-sorted start 27 - self.modules.generic.vars 28 - self.modules.homeManager.sops 27 + generic.vars 28 + homeManager.sops 29 29 # keep-sorted end 30 30 ]; 31 31 32 32 # Control whether Noctalia reads weather data from autolocation or sops. 33 33 options.programs.noctalia-shell.location.source = mkOption { 34 + description = '' 35 + Configure the Noctalia location source. 36 + Set to "autolocate" to use automatic location detection, or to "sops" 37 + to read the location from the `noctalia/location` secret. 38 + ''; 39 + 34 40 type = types.nullOr (types.enum [ 35 41 # keep-sorted start 36 42 "autolocate" ··· 38 44 # keep-sorted end 39 45 ]); 40 46 default = "autolocate"; 41 - description = '' 42 - Configure the Noctalia location source. 43 - Set to "autolocate" to use automatic location detection, or to "sops" 44 - to read the location from the `noctalia/location` secret. 45 - ''; 46 47 }; 47 48 48 49 config = mkMerge [
+33 -20
modules/desktop/noctalia/plugins.nix
··· 9 9 ... 10 10 }: let 11 11 inherit (builtins) toJSON; 12 - inherit (lib) genAttrs; 13 - inherit (config.lib.file) mkOutOfStoreSymlink; 14 - inherit (vars) gitUsername; 15 - 16 12 inherit 17 - (config.xdg) 13 + (lib) 18 14 # keep-sorted start 19 - stateHome 15 + genAttrs 16 + optional 20 17 # keep-sorted end 21 18 ; 19 + inherit (config.lib.file) mkOutOfStoreSymlink; 20 + inherit (vars) gitUsername; 21 + 22 + inherit (config.xdg) stateHome; 23 + cfgBattery = config.programs.noctalia-shell.battery.enable; 22 24 videosDir = config.xdg.userDirs.videos; 23 25 in { 24 - imports = [ 26 + imports = with self.modules; [ 25 27 # keep-sorted start 26 - self.modules.generic.vars 27 - self.modules.homeManager.sops 28 + generic.vars 29 + homeManager.sops 28 30 # keep-sorted end 29 31 ]; 30 32 ··· 49 51 sourceUrl = noctaliaPluginsUrl; 50 52 }; 51 53 in 52 - genAttrs [ 53 - # keep-sorted start 54 - "github-feed" 55 - "kaomoji-provider" 56 - "nvim-session-provider" 57 - "privacy-indicator" 58 - "screen-recorder" 59 - "unicode-picker" 60 - "web-search" 61 - # keep-sorted end 62 - ] 54 + genAttrs ([ 55 + # keep-sorted start 56 + "github-feed" 57 + "kaomoji-provider" 58 + "keybind-cheatsheet" 59 + "nvim-session-provider" 60 + "privacy-indicator" 61 + "screen-recorder" 62 + "unicode-picker" 63 + "web-search" 64 + # keep-sorted end 65 + ] 66 + ++ optional cfgBattery "battery-monitor-plus") 63 67 mkPlugin; 64 68 }; 65 69 ··· 70 74 pluginSettings = { 71 75 # keep-sorted start block=yes newline_separated=yes 72 76 github-feed = mkOutOfStoreSymlink config.sops.templates."noctalia-github-config".path; 77 + 78 + battery-monitor-plus = { 79 + # keep-sorted start 80 + hideIfNotDetected = false; 81 + showPowerInBar = false; 82 + showPowerProfiles = true; 83 + showTimeInBar = false; 84 + # keep-sorted end 85 + }; 73 86 74 87 nvim-session-provider.sessionDir = "${stateHome}/nvf/sessions"; 75 88
+4 -3
modules/desktop/tuigreet.nix
··· 28 28 # keep-sorted end 29 29 ; 30 30 inherit (vars) username; 31 + 31 32 tomlFormat = pkgs.formats.toml {}; 32 33 in { 33 - imports = [ 34 + imports = with self.modules; [ 34 35 # keep-sorted start 35 - self.modules.generic.vars 36 - self.modules.nixos.uwsm 36 + generic.vars 37 + nixos.uwsm 37 38 # keep-sorted end 38 39 ]; 39 40
+28 -17
modules/desktop/xdg/portal.nix
··· 1 1 { 2 + # keep-sorted start 3 + inputs, 4 + self, 5 + # keep-sorted end 6 + ... 7 + }: { 2 8 flake.modules.homeManager.xdgPortal = { 3 9 # keep-sorted start 4 10 config, ··· 8 14 ... 9 15 }: let 10 16 inherit (lib) getExe; 17 + inherit ((import "${inputs.hyprland}/nix/lib.nix" lib)) toHyprlang; 11 18 in { 12 - xdg.configFile."xdg-desktop-portal-termfilechooser/config".text = let 13 - terminalCommand = getExe config.xdg.terminal-exec.package; 14 - in '' 15 - [filechooser] 16 - cmd=${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh 17 - env=TERMCMD=${terminalCommand} --title=Termfilechooser 18 - ''; 19 + imports = [self.modules.homeManager.hyprland]; 20 + 21 + xdg.configFile = { 22 + "xdg-desktop-portal-termfilechooser/config".text = let 23 + terminalCommand = getExe config.xdg.terminal-exec.package; 24 + in '' 25 + [filechooser] 26 + cmd=${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh 27 + env=TERMCMD=${terminalCommand} --title=Termfilechooser 28 + ''; 29 + 30 + "hypr/xdph.conf".text = toHyprlang {} { 31 + max_fps = 60; 32 + }; 33 + }; 19 34 }; 20 35 21 36 flake.modules.nixos.xdgPortal = { ··· 25 40 # keep-sorted end 26 41 ... 27 42 }: let 28 - inherit (builtins) attrValues; 29 43 inherit (lib) mkAfter; 30 44 in { 31 45 # keep-sorted start block=yes newline_separated=yes ··· 79 93 }; 80 94 81 95 # Provide the gtk and terminal file chooser portals. 82 - extraPortals = attrValues { 83 - inherit 84 - (pkgs) 85 - # keep-sorted start 86 - xdg-desktop-portal-gtk 87 - xdg-desktop-portal-termfilechooser 88 - # keep-sorted end 89 - ; 90 - }; 96 + extraPortals = with pkgs; [ 97 + # keep-sorted start 98 + xdg-desktop-portal-gtk 99 + xdg-desktop-portal-termfilechooser 100 + # keep-sorted end 101 + ]; 91 102 # keep-sorted end 92 103 }; 93 104 };
+6 -10
modules/development/devshell.nix
··· 1 1 _: { 2 2 perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 3 inherit (pkgs) mkShell; 5 4 in { 6 5 devShells.default = mkShell { 7 - packages = attrValues { 8 - inherit 9 - (pkgs) 10 - # keep-sorted start 11 - sops 12 - tokei 13 - # keep-sorted end 14 - ; 15 - }; 6 + packages = with pkgs; [ 7 + # keep-sorted start 8 + sops 9 + tokei 10 + # keep-sorted end 11 + ]; 16 12 }; 17 13 }; 18 14 }
-1
modules/development/treefmt.nix
··· 50 50 ".direnv/*" 51 51 ".sops.yaml" 52 52 "flake.nix" 53 - "secrets/secrets.yaml" 54 53 # keep-sorted end 55 54 ]; 56 55 # keep-sorted end
+3 -1
modules/nix/home-manager.nix
··· 11 11 flake.modules.nixos.home-manager = { 12 12 # keep-sorted start 13 13 config, 14 + pkgs, 14 15 vars, 15 16 # keep-sorted end 16 17 ... ··· 23 24 useGlobalPkgs = true; 24 25 useUserPackages = true; 25 26 26 - backupFileExtension = "backup"; 27 + startAsUserService = true; 28 + backupCommand = "${pkgs.trash-cli}/bin/trash"; 27 29 28 30 users.${username} = { 29 31 home = {
+6 -10
modules/nix/lanzaboote.nix
··· 12 12 # keep-sorted end 13 13 ... 14 14 }: let 15 - inherit (builtins) attrValues; 16 15 inherit (lib) mkForce; 17 16 in { 18 17 imports = [inputs.lanzaboote.nixosModules.lanzaboote]; ··· 53 52 }; 54 53 55 54 # Extra packages for lanzaboote. 56 - environment.systemPackages = attrValues { 57 - inherit 58 - (pkgs) 59 - # keep-sorted start 60 - sbctl 61 - tpm2-tss 62 - # keep-sorted end 63 - ; 64 - }; 55 + environment.systemPackages = with pkgs; [ 56 + # keep-sorted start 57 + sbctl 58 + tpm2-tss 59 + # keep-sorted end 60 + ]; 65 61 }; 66 62 }
+8 -9
modules/nix/sops.nix
··· 1 - { 2 - # keep-sorted start 3 - inputs, 4 - self, 5 - # keep-sorted end 6 - ... 7 - }: let 1 + {inputs, ...}: let 8 2 sopsConfig = { 9 - # Keep the shared secret inventory in the repository copy. 10 - defaultSopsFile = "${self}/secrets/secrets.yaml"; 3 + # Keep the shared secret inventory outside the public infra repo. 4 + defaultSopsFile = "${inputs.secrets}/secrets.yaml"; 11 5 defaultSopsFormat = "yaml"; 12 6 13 7 validateSopsFiles = false; ··· 21 15 }; 22 16 in { 23 17 flake-file.inputs = { 18 + secrets = { 19 + url = "git+ssh://git@github.com/adam01110/secrets.git"; 20 + flake = false; 21 + }; 22 + 24 23 sops-nix = { 25 24 url = "github:Mic92/sops-nix"; 26 25 inputs.nixpkgs.follows = "nixpkgs";
+194
modules/nixhypr-binds.nix
··· 1 + {inputs, ...}: { 2 + flake.modules.homeManager.nixhyprBinds = { 3 + # keep-sorted start 4 + config, 5 + lib, 6 + # keep-sorted end 7 + ... 8 + }: let 9 + inherit 10 + (lib) 11 + # keep-sorted start 12 + concatMap 13 + concatStringsSep 14 + filterAttrs 15 + foldl' 16 + mkIf 17 + mkOption 18 + mkOrder 19 + types 20 + # keep-sorted end 21 + ; 22 + 23 + nixhyprLib = import "${inputs.nixhypr}/lib" {inherit lib;}; 24 + inherit (nixhyprLib) ordering toLua; 25 + 26 + cfg = config.programs.nixhypr; 27 + 28 + bindType = types.submodule { 29 + options = { 30 + # keep-sorted start block=yes newline_separated=yes 31 + action = mkOption { 32 + description = "Hyprland dispatcher action, such as `window.close` or `focus`."; 33 + 34 + type = types.nullOr types.str; 35 + default = null; 36 + }; 37 + 38 + args = mkOption { 39 + description = "Arguments for the action dispatcher."; 40 + 41 + type = types.anything; 42 + default = null; 43 + }; 44 + 45 + category = mkOption { 46 + description = "Optional Noctalia keybind-cheatsheet category."; 47 + 48 + type = types.nullOr types.str; 49 + default = null; 50 + }; 51 + 52 + description = mkOption { 53 + description = "Optional bind description."; 54 + 55 + type = types.nullOr types.str; 56 + default = null; 57 + }; 58 + 59 + exec = mkOption { 60 + description = "Command to execute, as shorthand for `hl.dsp.exec_cmd`."; 61 + 62 + type = types.nullOr types.str; 63 + default = null; 64 + }; 65 + 66 + keys = mkOption { 67 + description = "Key combination, such as `[ \"SUPER\" \"q\" ]`."; 68 + 69 + type = types.listOf types.str; 70 + }; 71 + 72 + lua = mkOption { 73 + description = "Raw Lua dispatcher expression."; 74 + 75 + type = types.nullOr types.str; 76 + default = null; 77 + }; 78 + 79 + options = mkOption { 80 + description = "Bind options, such as `repeating`, `locked`, or `description`."; 81 + 82 + type = types.attrsOf types.anything; 83 + default = {}; 84 + }; 85 + # keep-sorted end 86 + }; 87 + }; 88 + 89 + bindGroupType = types.submodule { 90 + options = { 91 + # keep-sorted start block=yes newline_separated=yes 92 + binds = mkOption { 93 + description = "Keybindings in this group."; 94 + 95 + type = types.listOf bindType; 96 + default = []; 97 + }; 98 + 99 + category = mkOption { 100 + description = "Noctalia keybind-cheatsheet category."; 101 + 102 + type = types.str; 103 + }; 104 + # keep-sorted end 105 + }; 106 + }; 107 + 108 + cleanAttrs = filterAttrs (_: value: value != null); 109 + 110 + buildDispatcher = bind: 111 + if bind.exec != null 112 + then "hl.dsp.exec_cmd(${toLua bind.exec})" 113 + else if bind.lua != null 114 + then bind.lua 115 + else if bind.action != null 116 + then let 117 + argsStr = 118 + if bind.args != null 119 + then "(${toLua bind.args})" 120 + else "()"; 121 + in "hl.dsp.${bind.action}${argsStr}" 122 + else throw "bind must have one of: exec, action, lua"; 123 + 124 + buildBindLine = bind: let 125 + keysStr = concatStringsSep " + " bind.keys; 126 + dispatcher = buildDispatcher bind; 127 + bindOptions = cleanAttrs (bind.options // {inherit (bind) description;}); 128 + in 129 + if bindOptions != {} 130 + then "hl.bind(${toLua keysStr}, ${dispatcher}, ${toLua bindOptions})" 131 + else "hl.bind(${toLua keysStr}, ${dispatcher})"; 132 + 133 + buildBind = state: bind: let 134 + categoryChanged = bind.category != null && bind.category != state.category; 135 + nextIndex = 136 + if categoryChanged 137 + then state.index + 1 138 + else state.index; 139 + categoryLine = 140 + if categoryChanged 141 + then ["-- ${toString nextIndex}. ${bind.category}"] 142 + else []; 143 + in { 144 + category = 145 + if categoryChanged 146 + then bind.category 147 + else state.category; 148 + index = nextIndex; 149 + lines = state.lines ++ categoryLine ++ [(buildBindLine bind)]; 150 + }; 151 + 152 + groupedBinds = concatMap (group: 153 + map (bind: 154 + bind 155 + // { 156 + category = 157 + if bind.category != null 158 + then bind.category 159 + else group.category; 160 + }) 161 + group.binds) 162 + cfg.bindGroups; 163 + 164 + allBinds = cfg.binds ++ groupedBinds; 165 + 166 + built = 167 + foldl' buildBind { 168 + category = null; 169 + index = 0; 170 + lines = []; 171 + } 172 + allBinds; 173 + in { 174 + disabledModules = ["${inputs.nixhypr}/modules/binds.nix"]; 175 + 176 + options.programs.nixhypr.binds = mkOption { 177 + description = "Keybindings."; 178 + 179 + type = types.listOf bindType; 180 + default = []; 181 + }; 182 + 183 + options.programs.nixhypr.bindGroups = mkOption { 184 + description = "Grouped keybindings."; 185 + 186 + type = types.listOf bindGroupType; 187 + default = []; 188 + }; 189 + 190 + config = mkIf (allBinds != []) { 191 + programs.nixhypr._generatedConfig = mkOrder ordering.binds (concatStringsSep "\n" built.lines); 192 + }; 193 + }; 194 + }
+151 -173
modules/pkgs/lutris.nix
··· 3 3 inherit 4 4 (builtins) 5 5 # keep-sorted start 6 - attrValues 7 6 filter 8 7 # keep-sorted end 9 8 ; ··· 11 10 12 11 # Slim lutris provides minimal lutris with essential dependencies. 13 12 qt5Deps = pkgs: 14 - attrValues { 15 - inherit 16 - (pkgs.qt5) 17 - # keep-sorted start 18 - qtbase 19 - qtmultimedia 20 - # keep-sorted end 21 - ; 22 - }; 13 + with pkgs.qt5; [ 14 + # keep-sorted start 15 + qtbase 16 + qtmultimedia 17 + # keep-sorted end 18 + ]; 23 19 qt6Deps = pkgs: 24 - attrValues { 25 - inherit 26 - (pkgs.qt6) 27 - # keep-sorted start 28 - qtbase 29 - # keep-sorted end 30 - ; 31 - }; 20 + with pkgs.qt6; [ 21 + # keep-sorted start 22 + qtbase 23 + # keep-sorted end 24 + ]; 32 25 gnomeDeps = pkgs: 33 - attrValues { 34 - inherit 35 - (pkgs) 36 - # keep-sorted start 37 - adwaita-icon-theme 38 - gtksourceview 39 - libgnome-keyring 40 - webkitgtk_4_1 41 - zenity 42 - # keep-sorted end 43 - ; 44 - }; 26 + with pkgs; [ 27 + # keep-sorted start 28 + adwaita-icon-theme 29 + gtksourceview 30 + libgnome-keyring 31 + webkitgtk_4_1 32 + zenity 33 + # keep-sorted end 34 + ]; 45 35 xorgDeps = pkgs: 46 - attrValues { 47 - inherit 48 - (pkgs) 49 - # keep-sorted start 50 - libice 51 - libpthread-stubs 52 - libsm 53 - libx11 54 - libxaw 55 - libxcb 56 - libxcomposite 57 - libxcursor 58 - libxdmcp 59 - libxext 60 - libxfixes 61 - libxi 62 - libxinerama 63 - libxmu 64 - libxrandr 65 - libxrender 66 - libxscrnsaver 67 - libxt 68 - libxtst 69 - libxv 70 - libxxf86vm 71 - # keep-sorted end 72 - ; 73 - }; 36 + with pkgs; [ 37 + # keep-sorted start 38 + libice 39 + libpthread-stubs 40 + libsm 41 + libx11 42 + libxaw 43 + libxcb 44 + libxcomposite 45 + libxcursor 46 + libxdmcp 47 + libxext 48 + libxfixes 49 + libxi 50 + libxinerama 51 + libxmu 52 + libxrandr 53 + libxrender 54 + libxscrnsaver 55 + libxt 56 + libxtst 57 + libxv 58 + libxxf86vm 59 + # keep-sorted end 60 + ]; 74 61 gstreamerDeps = pkgs: 75 - attrValues { 76 - inherit 77 - (pkgs.gst_all_1) 78 - # keep-sorted start 79 - gst-libav 80 - gst-plugins-bad 81 - gst-plugins-base 82 - gst-plugins-good 83 - gst-plugins-ugly 84 - gstreamer 85 - # keep-sorted end 86 - ; 87 - }; 62 + with pkgs.gst_all_1; [ 63 + # keep-sorted start 64 + gst-libav 65 + gst-plugins-bad 66 + gst-plugins-base 67 + gst-plugins-good 68 + gst-plugins-ugly 69 + gstreamer 70 + # keep-sorted end 71 + ]; 88 72 in { 89 73 packages.lutris = buildFHSEnv { 90 74 pname = "lutris"; ··· 93 77 multiArch = true; 94 78 95 79 targetPkgs = pkgs: 96 - attrValues { 97 - inherit 98 - (pkgs) 99 - # keep-sorted start 100 - fuse 101 - glib-networking 102 - gnugrep 103 - gnused 104 - libnghttp2 105 - lutris-unwrapped 106 - opencl-headers 107 - p7zip 108 - perl 109 - psmisc 110 - which 111 - xrandr 112 - # keep-sorted end 113 - ; 114 - } 80 + (with pkgs; [ 81 + # keep-sorted start 82 + fuse 83 + glib-networking 84 + gnugrep 85 + gnused 86 + libnghttp2 87 + lutris-unwrapped 88 + opencl-headers 89 + p7zip 90 + perl 91 + psmisc 92 + which 93 + xrandr 94 + # keep-sorted end 95 + ]) 115 96 ++ qt5Deps pkgs 116 97 ++ qt6Deps pkgs 117 98 ++ gnomeDeps pkgs ··· 119 100 120 101 multiPkgs = pkgs: let 121 102 originalPkgs = 122 - attrValues { 123 - inherit 124 - (pkgs) 125 - # keep-sorted start 126 - SDL 127 - SDL2 128 - alsa-lib 129 - bash 130 - cabextract 131 - cairo 132 - coreutils 133 - cups 134 - curl 135 - dbus 136 - freetype 137 - fribidi 138 - gcc 139 - giflib 140 - glib 141 - gnutls 142 - graphite2 143 - gtk2 144 - gtk3 145 - harfbuzz 146 - keyutils 147 - lcms2 148 - libGLU 149 - libaio 150 - libao 151 - libass 152 - libbsd 153 - libcap 154 - libcdio 155 - libevdev 156 - libgcrypt 157 - libglvnd 158 - libgphoto2 159 - libjack2 160 - libjpeg 161 - libkrb5 162 - libmad 163 - libmpeg2 164 - libogg 165 - libopus 166 - libpcap 167 - libpng 168 - libpulseaudio 169 - libsamplerate 170 - libselinux 171 - libsndfile 172 - libtheora 173 - libtiff 174 - libusb1 175 - libv4l 176 - libva 177 - libvorbis 178 - libxkbcommon 179 - libxml2 180 - libxslt 181 - libzip 182 - mpg123 183 - ncurses 184 - ocl-icd 185 - openldap 186 - p11-kit 187 - pango 188 - readline 189 - samba4 190 - sane-backends 191 - sqlite 192 - udev 193 - unixodbc 194 - unzip 195 - util-linux 196 - vulkan-loader 197 - wayland 198 - xdg-utils 199 - zip 200 - zlib 201 - zziplib 202 - # keep-sorted end 203 - ; 204 - } 103 + (with pkgs; [ 104 + # keep-sorted start 105 + SDL 106 + SDL2 107 + alsa-lib 108 + bash 109 + cabextract 110 + cairo 111 + coreutils 112 + cups 113 + curl 114 + dbus 115 + freetype 116 + fribidi 117 + gcc 118 + giflib 119 + glib 120 + gnutls 121 + graphite2 122 + gtk2 123 + gtk3 124 + harfbuzz 125 + keyutils 126 + lcms2 127 + libGLU 128 + libaio 129 + libao 130 + libass 131 + libbsd 132 + libcap 133 + libcdio 134 + libevdev 135 + libgcrypt 136 + libglvnd 137 + libgphoto2 138 + libjack2 139 + libjpeg 140 + libkrb5 141 + libmad 142 + libmpeg2 143 + libogg 144 + libopus 145 + libpcap 146 + libpng 147 + libpulseaudio 148 + libsamplerate 149 + libselinux 150 + libsndfile 151 + libtheora 152 + libtiff 153 + libusb1 154 + libv4l 155 + libva 156 + libvorbis 157 + libxkbcommon 158 + libxml2 159 + libxslt 160 + libzip 161 + mpg123 162 + ncurses 163 + ocl-icd 164 + openldap 165 + p11-kit 166 + pango 167 + readline 168 + samba4 169 + sane-backends 170 + sqlite 171 + udev 172 + unixodbc 173 + unzip 174 + util-linux 175 + vulkan-loader 176 + wayland 177 + xdg-utils 178 + zip 179 + zlib 180 + zziplib 181 + # keep-sorted end 182 + ]) 205 183 ++ xorgDeps pkgs 206 184 ++ gstreamerDeps pkgs; 207 185
-31
modules/pkgs/neovim/nocheatsheet-nvim.nix
··· 1 - { 2 - perSystem = { 3 - # keep-sorted start 4 - lib, 5 - pkgs, 6 - # keep-sorted end 7 - ... 8 - }: let 9 - inherit (pkgs) fetchFromGitHub; 10 - inherit (pkgs.vimUtils) buildVimPlugin; 11 - in { 12 - packages.nocheatsheet-nvim = buildVimPlugin { 13 - pname = "noCheatSheet.nvim"; 14 - version = "0-unstable-2026-05-03"; 15 - 16 - src = fetchFromGitHub { 17 - owner = "adam01110"; 18 - repo = "noCheatSheet.nvim"; 19 - rev = "c5365c0ebf1ca8d2ec47be99706926b8e0c2947d"; 20 - hash = "sha256-aQJ/Dk8DoWtK8q7arD7MA1jSe/3l2n02h6CD78lLSvI="; 21 - }; 22 - 23 - meta = with lib; { 24 - description = "Standalone NvChad-style cheatsheet for Neovim"; 25 - homepage = "https://github.com/adam01110/noCheatSheet.nvim"; 26 - license = licenses.gpl3Only; 27 - platforms = platforms.all; 28 - }; 29 - }; 30 - }; 31 - }
+7 -11
modules/pkgs/neovim/telescope-all-recent-nvim.nix
··· 6 6 # keep-sorted end 7 7 ... 8 8 }: let 9 - inherit (builtins) attrValues; 10 9 inherit (pkgs) fetchFromGitHub; 11 10 inherit (pkgs.vimUtils) buildVimPlugin; 12 11 in { ··· 21 20 hash = "sha256-Dq0eahhshmgdrof9eG3rBNm06UCCsjMYNkBs4KE/cEQ="; 22 21 }; 23 22 24 - dependencies = attrValues { 25 - inherit 26 - (pkgs.vimPlugins) 27 - # keep-sorted start 28 - plenary-nvim 29 - sqlite-lua 30 - telescope-nvim 31 - # keep-sorted end 32 - ; 33 - }; 23 + dependencies = with pkgs.vimPlugins; [ 24 + # keep-sorted start 25 + plenary-nvim 26 + sqlite-lua 27 + telescope-nvim 28 + # keep-sorted end 29 + ]; 34 30 35 31 meta = with lib; { 36 32 description = "Frecency sorting for all Telescope pickers";
+1 -9
modules/pkgs/os-age.nix
··· 1 1 { 2 2 perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 3 inherit (pkgs) writeShellApplication; 5 4 in { 6 5 packages.os-age = writeShellApplication { 7 6 name = "os-age"; 8 - runtimeInputs = attrValues { 9 - inherit 10 - (pkgs) 11 - # keep-sorted start 12 - coreutils 13 - # keep-sorted end 14 - ; 15 - }; 7 + runtimeInputs = [pkgs.coreutils]; 16 8 text = '' 17 9 birth_install="$(stat -c %W /)" 18 10 current="$(date +%s)"
+6 -10
modules/pkgs/performant-mode.nix
··· 1 1 { 2 2 perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 3 inherit (pkgs.lib) escapeShellArg; 5 4 inherit (pkgs) writeShellApplication; 6 5 ··· 31 30 in { 32 31 packages.performant-mode = writeShellApplication { 33 32 name = "performant-mode"; 34 - runtimeInputs = attrValues { 35 - inherit 36 - (pkgs) 37 - # keep-sorted start 38 - gawk 39 - hyprland 40 - # keep-sorted end 41 - ; 42 - }; 33 + runtimeInputs = with pkgs; [ 34 + # keep-sorted start 35 + gawk 36 + hyprland 37 + # keep-sorted end 38 + ]; 43 39 excludeShellChecks = ["SC2276"]; 44 40 text = '' 45 41 get_option_value() {
+7 -12
modules/pkgs/preview/man.nix
··· 1 1 _: { 2 - perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 - in { 2 + perSystem = {pkgs, ...}: { 5 3 packages.man-preview = pkgs.writeShellApplication { 6 4 name = "man-preview"; 7 5 runtimeInputs = 8 6 [pkgs.bat] 9 - ++ attrValues { 10 - inherit 11 - (pkgs) 12 - # keep-sorted start 13 - gnused 14 - man-db 15 - # keep-sorted end 16 - ; 17 - }; 7 + ++ (with pkgs; [ 8 + # keep-sorted start 9 + gnused 10 + man-db 11 + # keep-sorted end 12 + ]); 18 13 text = '' 19 14 MANPAGER=cat MANROFFOPT=-c man "$1" \ 20 15 | sed -e 's/\x1B\[[0-9;]*m//g; s/.\x08//g' \
+10 -14
modules/pkgs/preview/systemd-status.nix
··· 1 1 { 2 2 perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 3 inherit (pkgs) writeShellApplication; 5 4 in { 6 5 packages.systemd-status-preview = writeShellApplication { 7 6 # Share one preview helper across tools that inspect systemd units. 8 7 name = "systemd-status-preview"; 9 - runtimeInputs = attrValues { 10 - inherit 11 - (pkgs) 12 - # keep-sorted start 13 - bat 14 - coreutils 15 - gawk 16 - gnugrep 17 - gnused 18 - systemd 19 - # keep-sorted end 20 - ; 21 - }; 8 + runtimeInputs = with pkgs; [ 9 + # keep-sorted start 10 + bat 11 + coreutils 12 + gawk 13 + gnugrep 14 + gnused 15 + systemd 16 + # keep-sorted end 17 + ]; 22 18 text = '' 23 19 mode="unit" 24 20
+5 -15
modules/pkgs/preview/text.nix
··· 1 1 _: { 2 - perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 - in { 2 + perSystem = {pkgs, ...}: { 5 3 packages.text-preview = pkgs.writeShellApplication { 6 4 # SPDX-License-Identifier: AGPL-3.0-or-later 7 5 name = "text-preview"; 8 - runtimeInputs = 9 - [ 10 - pkgs.bat 11 - ] 12 - ++ attrValues { 13 - inherit 14 - (pkgs) 15 - # keep-sorted start 16 - file 17 - # keep-sorted end 18 - ; 19 - }; 6 + runtimeInputs = with pkgs; [ 7 + file 8 + bat 9 + ]; 20 10 text = '' 21 11 path="''${1-}" 22 12
+6 -10
modules/pkgs/ripgrep-all-adapters/djvutorga-adapter.nix
··· 1 1 { 2 2 perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 3 inherit (pkgs) writeShellApplication; 5 4 in { 6 5 packages.djvutorga-adapter = writeShellApplication { 7 6 name = "djvutorga"; 8 - runtimeInputs = attrValues { 9 - inherit 10 - (pkgs) 11 - # keep-sorted start 12 - coreutils 13 - djvulibre 14 - # keep-sorted end 15 - ; 16 - }; 7 + runtimeInputs = with pkgs; [ 8 + # keep-sorted start 9 + coreutils 10 + djvulibre 11 + # keep-sorted end 12 + ]; 17 13 text = '' 18 14 set -o errtrace -o errexit -o nounset -o pipefail 19 15 [[ "''${TRACE:-0}" == "1" ]] && set -o xtrace
+1 -9
modules/pkgs/ripgrep-all-adapters/pptx2md-adapter.nix
··· 1 1 { 2 2 perSystem = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 3 inherit (pkgs) writeShellApplication; 5 4 in { 6 5 packages.pptx2md-adapter = writeShellApplication { 7 6 name = "pptx2md.sh"; 8 - runtimeInputs = attrValues { 9 - inherit 10 - (pkgs) 11 - # keep-sorted start 12 - coreutils 13 - # keep-sorted end 14 - ; 15 - }; 7 + runtimeInputs = [pkgs.coreutils]; 16 8 text = '' 17 9 set -o errtrace -o errexit -o nounset -o pipefail 18 10 [[ "''${TRACE:-0}" == "1" ]] && set -o xtrace
+8 -12
modules/pkgs/zaread.nix
··· 6 6 # keep-sorted end 7 7 ... 8 8 }: let 9 - inherit (builtins) attrValues; 10 9 inherit (lib) makeBinPath; 11 10 inherit 12 11 (pkgs) ··· 29 28 hash = "sha256-4tqi9tvFqB5MZIEluqVmmMWH+hN1c2Jy10C1/iGI6e4="; 30 29 }; 31 30 32 - pathAdd = makeBinPath (attrValues { 33 - inherit 34 - (pkgs) 35 - # keep-sorted start 36 - libreoffice 37 - md2pdf 38 - typst 39 - zathura 40 - # keep-sorted end 41 - ; 42 - }); 31 + pathAdd = makeBinPath (with pkgs; [ 32 + # keep-sorted start 33 + libreoffice 34 + md2pdf 35 + typst 36 + zathura 37 + # keep-sorted end 38 + ]); 43 39 44 40 nativeBuildInputs = [makeWrapper]; 45 41 buildInputs = [bashNonInteractive];
+4 -3
modules/profiles/common/timezone.nix
··· 19 19 cfgTimezone = config.optServices.timezone; 20 20 in { 21 21 options.optServices.timezone = mkOption { 22 - type = types.nullOr types.str; 23 - default = null; 24 - example = "Europe/Amsterdam"; 25 22 description = '' 26 23 Configure the system time zone or enable automatic adjustment. 27 24 Set to a time zone string (for example "Europe/Amsterdam") to use a fixed time zone, 28 25 or to "automatic-timezoned" to enable the automatic-timezoned service. 29 26 ''; 27 + 28 + type = types.nullOr types.str; 29 + default = null; 30 + example = "Europe/Amsterdam"; 30 31 }; 31 32 32 33 config = mkMerge [
+7 -11
modules/profiles/common/tweaks.nix
··· 7 7 # keep-sorted end 8 8 ... 9 9 }: let 10 - inherit (builtins) attrValues; 11 10 inherit 12 11 (lib) 13 12 # keep-sorted start ··· 89 88 }; 90 89 91 90 # Assorted low-level tweaks and helper tools. 92 - environment.systemPackages = attrValues { 93 - inherit 94 - (pkgs) 95 - # keep-sorted start 96 - bash 97 - coreutils 98 - hdparm 99 - # keep-sorted end 100 - ; 101 - }; 91 + environment.systemPackages = with pkgs; [ 92 + # keep-sorted start 93 + bash 94 + coreutils 95 + hdparm 96 + # keep-sorted end 97 + ]; 102 98 103 99 # Systemd limits and tmpfiles overrides. 104 100 systemd = {
+1 -1
modules/profiles/stylix/base.nix
··· 37 37 flake-file.inputs.stylix = { 38 38 url = "github:danth/stylix"; 39 39 inputs = { 40 - #keep-sorted start 40 + # keep-sorted start 41 41 flake-parts.follows = "flake-parts"; 42 42 nixpkgs.follows = "nixpkgs"; 43 43 nur.follows = "nur";
+5 -3
modules/profiles/stylix/personal.nix
··· 20 20 ]; 21 21 in { 22 22 flake.modules.nixos.stylixPersonal = {pkgs, ...}: { 23 - imports = [ 24 - self.modules.nixos.nur 25 - self.modules.nixos.stylixBase 23 + imports = with self.modules.nixos; [ 24 + # keep-sorted start 25 + nur 26 + stylixBase 27 + # keep-sorted end 26 28 ]; 27 29 28 30 stylix = {
+3 -3
modules/programs/cli/bat.nix
··· 10 10 inherit (lib) getExe; 11 11 bat = getExe config.programs.bat.package; 12 12 in { 13 - imports = [ 13 + imports = with self.modules.homeManager; [ 14 14 # keep-sorted start 15 - self.modules.homeManager.fish 16 - self.modules.homeManager.nur 15 + fish 16 + nur 17 17 # keep-sorted end 18 18 ]; 19 19
+2 -1
modules/programs/cli/fish/default.nix
··· 19 19 cfg = config.programs.fish; 20 20 in { 21 21 options.programs.fish.interactiveShellInitSnippets = mkOption { 22 + description = "Fish snippets concatenated into interactiveShellInit."; 23 + 22 24 type = types.listOf types.lines; 23 25 default = []; 24 - description = "Fish snippets concatenated into interactiveShellInit."; 25 26 }; 26 27 27 28 config = {
+3 -3
modules/programs/cli/gh.nix
··· 2 2 flake.modules.homeManager.gh = {vars, ...}: let 3 3 inherit (vars) gitUsername; 4 4 in { 5 - imports = [ 5 + imports = with self.modules; [ 6 6 # keep-sorted start 7 - self.modules.generic.vars 8 - self.modules.homeManager.git 7 + generic.vars 8 + homeManager.git 9 9 # keep-sorted end 10 10 ]; 11 11
+7 -12
modules/programs/cli/man.nix
··· 1 1 { 2 - flake.modules.nixos.man = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 - in { 2 + flake.modules.nixos.man = {pkgs, ...}: { 5 3 documentation = { 6 4 man.cache.enable = true; 7 5 dev.enable = true; 8 6 }; 9 7 10 - environment.systemPackages = attrValues { 11 - inherit 12 - (pkgs) 13 - # keep-sorted start 14 - man-pages 15 - man-pages-posix 16 - # keep-sorted end 17 - ; 18 - }; 8 + environment.systemPackages = with pkgs; [ 9 + # keep-sorted start 10 + man-pages 11 + man-pages-posix 12 + # keep-sorted end 13 + ]; 19 14 }; 20 15 }
+5 -8
modules/programs/cli/ripgrep-all/adapters.nix
··· 6 6 # keep-sorted end 7 7 ... 8 8 }: let 9 - inherit (builtins) attrValues; 10 9 inherit (lib) makeBinPath; 11 10 inherit (pkgs) symlinkJoin; 12 11 in { ··· 20 19 nativeBuildInputs = [pkgs.makeWrapper]; 21 20 postBuild = '' 22 21 wrapProgram $out/bin/rga \ 23 - --prefix PATH : ${makeBinPath (attrValues { 24 - inherit 25 - (pkgs) 22 + --prefix PATH : ${ 23 + makeBinPath (with pkgs; [ 26 24 # keep-sorted start 27 25 csvkit 28 26 fastgron 27 + nur.repos.adam0.qq-jfry 29 28 # keep-sorted end 30 - ; 31 - 32 - inherit (pkgs.nur.repos.adam0) qq-jfryy; 33 - })} 29 + ]) 30 + } 34 31 ''; 35 32 }; 36 33 };
+24
modules/programs/cli/zfetch.nix
··· 1 + {self, ...}: { 2 + flake.modules.homeManager.zfetch = {pkgs, ...}: let 3 + inherit (pkgs.nur.repos.adam0) zfetch-rs; 4 + 5 + tomlFormat = pkgs.formats.toml {}; 6 + in { 7 + imports = [self.modules.homeManager.nur]; 8 + 9 + home.packages = [zfetch-rs]; 10 + 11 + xdg.configFile."zfetch/config.toml".source = tomlFormat.generate "zfetch-config.toml" { 12 + userspace = { 13 + packages = false; 14 + ui = false; 15 + 16 + colors_style = "box"; 17 + }; 18 + 19 + display = { 20 + box_style = "square"; 21 + }; 22 + }; 23 + }; 24 + }
+5 -4
modules/programs/git.nix
··· 27 27 28 28 colors = osConfig.lib.stylix.colors.withHashtag; 29 29 in { 30 - imports = [ 30 + imports = with self.mdoules; [ 31 31 # keep-sorted start 32 - self.modules.generic.vars 33 - self.modules.homeManager.sops 34 - self.modules.homeManager.ssh 32 + generic.vars 33 + homeManager.sops 34 + homeManager.ssh 35 35 # keep-sorted end 36 36 ]; 37 37 ··· 93 93 options = with colors; { 94 94 true-color = "always"; 95 95 line-numbers = true; 96 + side-by-side = true; 96 97 syntax-theme = "base16-stylix"; 97 98 98 99 # Let the desktop MIME handler open linked files.
+7 -12
modules/programs/gui/lsfg.nix
··· 1 1 { 2 - flake.modules.nixos.lsfg = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 - in { 2 + flake.modules.nixos.lsfg = {pkgs, ...}: { 5 3 # Add lossless scaling linux packages. 6 - environment.systemPackages = attrValues { 7 - inherit 8 - (pkgs) 9 - # keep-sorted start 10 - lsfg-vk 11 - lsfg-vk-ui 12 - # keep-sorted end 13 - ; 14 - }; 4 + environment.systemPackages = with pkgs; [ 5 + # keep-sorted start 6 + lsfg-vk 7 + lsfg-vk-ui 8 + # keep-sorted end 9 + ]; 15 10 }; 16 11 }
+11 -15
modules/programs/gui/prism.nix
··· 11 11 inherit 12 12 (lib) 13 13 # keep-sorted start 14 - attrValues 15 14 getExe 16 15 removeSuffix 17 16 # keep-sorted end ··· 22 21 downloadsDir = config.xdg.userDirs.download; 23 22 monospaceFont = config.stylix.fonts.monospace.name; 24 23 in { 25 - imports = [ 24 + imports = with self.modules; [ 26 25 # keep-sorted start 27 - self.modules.generic.vars 28 - self.modules.homeManager.stylixPersonal 26 + generic.vars 27 + homeManager.stylixPersonal 29 28 # keep-sorted end 30 29 ]; 31 30 ··· 41 40 # keep-sorted end 42 41 43 42 # Specify which Java runtimes to install. 44 - jdks = attrValues { 45 - inherit 46 - (pkgs) 47 - # keep-sorted start 48 - jdk17 49 - jdk21 50 - jdk8 51 - temurin-bin-25 52 - # keep-sorted end 53 - ; 54 - }; 43 + jdks = with pkgs; [ 44 + # keep-sorted start 45 + jdk17 46 + jdk21 47 + jdk8 48 + temurin-bin-25 49 + # keep-sorted end 50 + ]; 55 51 }; 56 52 57 53 settings = {
+14 -26
modules/programs/gui/spotify/default.nix
··· 10 10 inputs.nixpkgs.follows = "nixpkgs"; 11 11 }; 12 12 13 - flake.modules.homeManager.spotify = { 14 - # keep-sorted start 15 - lib, 16 - pkgs, 17 - # keep-sorted end 18 - ... 19 - }: let 20 - inherit (lib) attrValues; 13 + flake.modules.homeManager.spotify = {pkgs, ...}: let 21 14 inherit (pkgs.stdenv.hostPlatform) system; 22 15 23 16 # Access spicetify-nix packages. 24 17 spicePkgs = inputs.spicetify-nix.legacyPackages.${system}; 25 18 in { 26 19 imports = [ 20 + # keep-sorted start 27 21 inputs.spicetify-nix.homeManagerModules.spicetify 28 22 self.modules.homeManager.nur 23 + # keep-sorted end 29 24 ]; 30 25 31 26 programs.spicetify = { ··· 40 35 41 36 # keep-sorted start block=yes newline_separated=yes 42 37 # Enable extensions. 43 - enabledExtensions = attrValues { 38 + enabledExtensions = 44 39 # Extensions from spicetify-nix. 45 - inherit 46 - (spicePkgs.extensions) 40 + (with spicePkgs.extensions; [ 47 41 # keep-sorted start 48 42 aiBandBlocker 49 43 betterGenres ··· 58 52 seekSong 59 53 wikify 60 54 # keep-sorted end 61 - ; 62 - 55 + ]) 63 56 # Extensions from adam0's nur. 64 - inherit 65 - (pkgs.nur.repos.adam0.spicetifyExtensions) 57 + ++ (with pkgs.nur.repos.adam0.spicetifyExtensions; [ 66 58 # keep-sorted start 67 59 moreLyrics 68 60 playlistIcons 69 61 volumePercentage 70 62 # keep-sorted end 71 - ; 72 - }; 63 + ]); 73 64 74 65 # Enable CSS snippets. 75 - enabledSnippets = attrValues { 76 - inherit 77 - (spicePkgs.snippets) 78 - # keep-sorted start 79 - pointer 80 - removeTheArtistsAndCreditsSectionsFromTheSidebar 81 - # keep-sorted end 82 - ; 83 - }; 66 + enabledSnippets = with spicePkgs.snippets; [ 67 + # keep-sorted start 68 + pointer 69 + removeTheArtistsAndCreditsSectionsFromTheSidebar 70 + # keep-sorted end 71 + ]; 84 72 # keep-sorted end 85 73 }; 86 74 };
+2
modules/programs/gui/zen/default.nix
··· 19 19 20 20 flake.modules.homeManager.zen = { 21 21 imports = [ 22 + # keep-sorted start 22 23 inputs.zen-browser.homeModules.beta 23 24 self.modules.homeManager.stylixBase 25 + # keep-sorted end 24 26 ]; 25 27 26 28 programs.zen-browser.enable = true;
+28 -37
modules/programs/gui/zen/extensions.nix
··· 1 1 {self, ...}: { 2 2 flake.modules.homeManager.zen = {pkgs, ...}: let 3 - inherit 4 - (builtins) 5 - # keep-sorted start 6 - attrValues 7 - mapAttrs 8 - # keep-sorted end 9 - ; 3 + inherit (builtins) mapAttrs; 10 4 in { 11 5 imports = [self.modules.homeManager.nur]; 12 6 ··· 14 8 programs.zen-browser.profiles.default.extensions = { 15 9 # Force extensions to be enabled. 16 10 force = true; 17 - packages = attrValues { 18 - inherit 19 - (pkgs.nur.repos.rycee.firefox-addons) 20 - # Content blocking. 21 - # keep-sorted start 22 - consent-o-matic 23 - don-t-fuck-with-paste 24 - fastforwardteam 25 - istilldontcareaboutcookies 26 - localcdn 27 - sponsorblock 28 - ublock-origin 29 - # keep-sorted end 30 - # Annoyances. 31 - # keep-sorted start 32 - bitwarden 33 - darkreader 34 - dearrow 35 - indie-wiki-buddy 36 - libredirect 37 - modrinthify 38 - pronoundb 39 - return-youtube-dislikes 40 - shinigami-eyes 41 - translate-web-pages 42 - violentmonkey 43 - wikiwand-wikipedia-modernized 44 - # keep-sorted end 45 - ; 46 - }; 11 + packages = with pkgs.nur.repos.rycee.firefox-addons; [ 12 + # Content blocking. 13 + # keep-sorted start 14 + consent-o-matic 15 + don-t-fuck-with-paste 16 + fastforwardteam 17 + istilldontcareaboutcookies 18 + localcdn 19 + sponsorblock 20 + ublock-origin 21 + # keep-sorted end 22 + # Annoyances. 23 + # keep-sorted start 24 + bitwarden 25 + darkreader 26 + dearrow 27 + indie-wiki-buddy 28 + libredirect 29 + modrinthify 30 + pronoundb 31 + return-youtube-dislikes 32 + shinigami-eyes 33 + translate-web-pages 34 + violentmonkey 35 + wikiwand-wikipedia-modernized 36 + # keep-sorted end 37 + ]; 47 38 }; 48 39 49 40 # Add extensions not in nur.
+2 -1
modules/programs/gui/zen/preferences.nix
··· 24 24 options.zen-browser = { 25 25 # keep-sorted start block=yes newline_separated=yes 26 26 commit-space = mkOption { 27 + description = "Memory threshold (in MiB) at which tabs are unloaded when available commit space is low"; 28 + 27 29 type = types.int; 28 - description = "Memory threshold (in MiB) at which tabs are unloaded when available commit space is low"; 29 30 }; 30 31 31 32 travel.enable = mkEnableOption "Enable travel specific preferences.";
+3 -3
modules/programs/ssh.nix
··· 8 8 }: let 9 9 inherit (vars) username; 10 10 in { 11 - imports = [ 11 + imports = with self.modules; [ 12 12 # keep-sorted start 13 - self.modules.generic.vars 14 - self.modules.homeManager.sops 13 + generic.vars 14 + homeManager.sops 15 15 # keep-sorted end 16 16 ]; 17 17
+2 -1
modules/programs/tui/btop.nix
··· 28 28 else pkgs.btop; 29 29 in { 30 30 options.btop.gpuBackends = mkOption { 31 + description = "Select GPU backends to enable in btop."; 32 + 31 33 type = types.listOf ( 32 34 types.enum [ 33 35 # keep-sorted start ··· 37 39 ] 38 40 ); 39 41 default = []; 40 - description = "Select GPU backends to enable in btop."; 41 42 }; 42 43 43 44 config.programs.btop = {
+1 -7
modules/programs/tui/neovim/components/cheatsheet.nix
··· 1 1 { 2 - flake.modules.homeManager.neovim = {pkgs, ...}: { 2 + flake.modules.homeManager.neovim = _: { 3 3 programs.nvf.settings.vim = { 4 4 # keep-sorted start block=yes newline_separated=yes 5 5 binds = { ··· 17 17 desc = "Open cheatsheet"; 18 18 } 19 19 ]; 20 - 21 - lazy.plugins."noCheatSheet.nvim" = { 22 - cmd = "Cheatsheet"; 23 - package = pkgs.nocheatsheet-nvim; 24 - setupModule = "nocheatsheet"; 25 - }; 26 20 # keep-sorted end 27 21 }; 28 22 };
+10 -17
modules/programs/tui/neovim/components/dashboard.nix
··· 7 7 # keep-sorted end 8 8 ... 9 9 }: let 10 - inherit (builtins) attrValues; 11 10 inherit (lib) getExe; 12 11 inherit (lib.generators) mkLuaInline; 13 12 ··· 124 123 programs.nvf.settings.vim = { 125 124 # keep-sorted start block=yes newline_separated=yes 126 125 # Provide CLI tools consumed by dashboard terminal sections. 127 - extraPackages = attrValues { 128 - inherit 129 - (pkgs) 130 - # keep-sorted start 131 - dwt1-shell-color-scripts 132 - gh-notify 133 - # keep-sorted end 134 - ; 135 - }; 126 + extraPackages = with pkgs; [ 127 + # keep-sorted start 128 + dwt1-shell-color-scripts 129 + gh-notify 130 + # keep-sorted end 131 + ]; 136 132 137 133 # Global shortcut to reopen the startup dashboard at any time. 138 134 keymaps = [ ··· 315 311 section = "terminal"; 316 312 cmd = getExe (pkgs.writeShellApplication { 317 313 name = "dashboard-git-status"; 318 - runtimeInputs = attrValues { 319 - inherit 320 - (pkgs) 321 - gawk 322 - git 323 - ; 324 - }; 314 + runtimeInputs = with pkgs; [ 315 + gawk 316 + git 317 + ]; 325 318 text = '' 326 319 if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then 327 320 git -c color.status=always status --short --branch --renames \
+1 -1
modules/programs/tui/neovim/components/statusline.nix
··· 32 32 added = " "; 33 33 modified = " "; 34 34 removed = " "; 35 - # keep-sorted ends 35 + # keep-sorted end 36 36 }; 37 37 38 38 source = mkLuaInline ''
+8 -5
modules/programs/tui/neovim/default.nix
··· 43 43 44 44 cfg = config.nvf; 45 45 in { 46 - imports = [ 47 - inputs.nvf.homeManagerModules.default 48 - self.modules.homeManager.git 49 - self.modules.homeManager.stylixBase 50 - ]; 46 + imports = 47 + [inputs.nvf.homeManagerModules.default] 48 + ++ (with self.modules.homeManager; [ 49 + # keep-sorted start 50 + git 51 + stylixBase 52 + # keep-sorted end 53 + ]); 51 54 52 55 options.nvf = { 53 56 # keep-sorted start block=yes newline_separated=yes
+2 -1
modules/programs/tui/nvtop.nix
··· 32 32 ]; 33 33 in { 34 34 options.nvtop.types = mkOption { 35 + description = "Choose which GPU types to monitor with nvtop."; 36 + 35 37 type = types.listOf (types.enum gpuTypes); 36 38 default = []; 37 - description = "Choose which GPU types to monitor with nvtop."; 38 39 }; 39 40 40 41 # Override enables multiple gpu backends in single nvtop instance.
+12 -15
modules/programs/tui/opencode/default.nix
··· 43 43 env 44 44 ); 45 45 in { 46 - imports = [ 46 + imports = with self.modules.homeManager; [ 47 47 # keep-sorted start 48 - self.modules.homeManager.nur 49 - self.modules.homeManager.shellAbbreviations 50 - self.modules.homeManager.xdgTerminal 48 + nur 49 + shellAbbreviations 50 + xdgTerminal 51 51 # keep-sorted end 52 52 ]; 53 53 ··· 67 67 postBuild = '' 68 68 wrapProgram $out/bin/opencode \ 69 69 ${wrapEnvArgs} \ 70 - --prefix PATH : ${makeBinPath (attrValues { 71 - inherit (pkgs.nur.repos.adam0) modular-mcp; 72 - inherit 73 - (pkgs) 74 - # keep-sorted start 75 - libnotify 76 - wl-clipboard 77 - # keep-sorted end 78 - ; 79 - } 80 - // mcpServers)} 70 + --prefix PATH : ${makeBinPath ((with pkgs; [ 71 + # keep-sorted start 72 + libnotify 73 + nur.repos.adam0.modular-mcp 74 + wl-clipboard 75 + # keep-sorted end 76 + ]) 77 + ++ attrValues mcpServers)} 81 78 ''; 82 79 }; 83 80
+9 -2
modules/programs/tui/opencode/env.nix
··· 1 1 { 2 2 flake.modules.homeManager.opencode = {lib, ...}: let 3 - inherit (lib) mkOption types; 3 + inherit 4 + (lib) 5 + # keep-sorted start 6 + mkOption 7 + types 8 + # keep-sorted end 9 + ; 4 10 inherit (lib.self) envFlags; 5 11 in { 6 12 options.programs.opencode.env = mkOption { 13 + description = "Environment variables set by the wrapped opencode launcher."; 14 + 7 15 type = types.attrsOf types.anything; 8 16 default = {}; 9 - description = "Environment variables set by the wrapped opencode launcher."; 10 17 }; 11 18 12 19 config.programs.opencode.env = let
+23 -13
modules/programs/tui/opencode/mcp-wrappers.nix
··· 7 7 # keep-sorted end 8 8 ... 9 9 }: let 10 - inherit (lib) getExe mkOption types; 10 + inherit 11 + (lib) 12 + # keep-sorted start 13 + getExe 14 + mkOption 15 + types 16 + # keep-sorted end 17 + ; 11 18 inherit (pkgs) writeShellApplication; 12 19 13 20 # keep-sorted start block=yes newline_separated=yes ··· 35 42 imports = [self.modules.homeManager.sops]; 36 43 37 44 options.programs.opencode.mcpServers = mkOption { 45 + description = "MCP server packages added to the wrapped opencode launcher PATH."; 46 + 38 47 type = types.attrsOf types.package; 39 48 default = {}; 40 - description = "MCP server packages added to the wrapped opencode launcher PATH."; 41 49 }; 42 50 43 - config.programs.opencode.mcpServers = { 44 - inherit 51 + config = { 52 + sops.secrets = { 45 53 # keep-sorted start 46 - context7McpWrapper 47 - githubMcpServerWrapper 54 + "ai/context7_key" = {}; 55 + "ai/github_access_token" = {}; 48 56 # keep-sorted end 49 - ; 50 - }; 57 + }; 51 58 52 - sops.secrets = { 53 - # keep-sorted start 54 - "ai/context7_key" = {}; 55 - "ai/github_access_token" = {}; 56 - # keep-sorted end 59 + programs.opencode.mcpServers = { 60 + inherit 61 + # keep-sorted start 62 + context7McpWrapper 63 + githubMcpServerWrapper 64 + # keep-sorted end 65 + ; 66 + }; 57 67 }; 58 68 }; 59 69 }
+2 -2
modules/programs/tui/opencode/settings.nix
··· 27 27 # keep-sorted end 28 28 29 29 # keep-sorted start 30 - agent.explore.reasoningEffort = "medium"; 31 - agent.general.reasoningEffort = "medium"; 30 + agent.explore.reasoningEffort = "low"; 31 + agent.general.reasoningEffort = "low"; 32 32 # keep-sorted end 33 33 }; 34 34
-7
modules/programs/tui/opencubicplayer.nix
··· 1 - {self, ...}: { 2 - flake.modules.homeManager.opencubicplayer = {pkgs, ...}: { 3 - imports = [self.modules.homeManager.nur]; 4 - 5 - home.packages = [pkgs.nur.repos.adam0.opencubicplayer]; 6 - }; 7 - }
+8 -13
modules/programs/tui/television/channels.nix
··· 5 5 pkgs, 6 6 # keep-sorted end 7 7 ... 8 - }: let 9 - inherit (builtins) attrValues; 10 - in { 8 + }: { 11 9 programs.television.package = pkgs.television.withPackages ( 12 10 _: 13 11 # Bundle tools that channel commands shell out to. 14 - attrValues { 15 - inherit 16 - (pkgs) 17 - # keep-sorted start 18 - gnused 19 - tlrc 20 - trash-cli 21 - # keep-sorted end 22 - ; 23 - } 12 + (with pkgs; [ 13 + # keep-sorted start 14 + gnused 15 + tlrc 16 + trash-cli 17 + # keep-sorted end 18 + ]) 24 19 # Reuse packages from home-manager modules to avoid duplicate package selections. 25 20 ++ (map (program: config.programs.${program}.package) [ 26 21 # keep-sorted start
+45 -50
modules/programs/tui/yazi/plugins.nix
··· 7 7 # keep-sorted end 8 8 ... 9 9 }: let 10 - inherit (builtins) attrValues; 11 10 inherit (pkgs.lib.generators) mkLuaInline; 12 11 in { 13 12 imports = [self.modules.homeManager.nur]; ··· 15 14 programs.yazi = { 16 15 package = pkgs.yazi.override { 17 16 optionalDeps = 18 - attrValues { 19 - inherit 20 - (pkgs) 21 - # keep-sorted start 22 - _7zz 23 - chafa 24 - ffmpeg 25 - imagemagick 26 - jq 27 - poppler-utils 28 - resvg 29 - # keep-sorted end 30 - ; 31 - } 17 + (with pkgs; [ 18 + # keep-sorted start 19 + _7zz 20 + chafa 21 + ffmpeg 22 + imagemagick 23 + jq 24 + poppler-utils 25 + resvg 26 + # keep-sorted end 27 + ]) 32 28 # Reuse packages from home-manager modules to avoid duplicate package selections. 33 29 ++ (map (program: config.programs.${program}.package) [ 34 30 # keep-sorted start ··· 40 36 41 37 # Add runtime helpers for Yazi plugins. 42 38 extraPackages = 43 - attrValues { 44 - inherit 45 - (pkgs) 46 - # keep-sorted start 47 - _7zz 48 - chafa 49 - # spot 50 - coreutils 51 - ffmpeg 52 - # preview-epub 53 - gnome-epub-thumbnailer 54 - imagemagick 55 - # spot-image 56 - inkscape 57 - jq 58 - # mediainfo & spot-audio 59 - mediainfo 60 - poppler-utils 61 - resvg 62 - # recycle-bin 63 - trash-cli 64 - # preview-cbz 65 - unrar 66 - # spot-cbz & preview-cbz 67 - unzip 68 - # mount 69 - util-linux 70 - # ucp 71 - wl-clipboard 72 - # keep-sorted end 73 - # faster-piper 74 - glow 75 - sqlite 76 - ; 77 - } 39 + (with pkgs; [ 40 + # keep-sorted start 41 + _7zz 42 + chafa 43 + # spot 44 + coreutils 45 + ffmpeg 46 + # preview-epub 47 + gnome-epub-thumbnailer 48 + imagemagick 49 + # spot-image 50 + inkscape 51 + jq 52 + # mediainfo & spot-audio 53 + mediainfo 54 + poppler-utils 55 + resvg 56 + # recycle-bin 57 + trash-cli 58 + # preview-cbz 59 + unrar 60 + # spot-cbz & preview-cbz 61 + unzip 62 + # mount 63 + util-linux 64 + # ucp 65 + wl-clipboard 66 + # keep-sorted end 67 + # faster-piper 68 + glow 69 + sqlite 70 + ]) 78 71 # Reuse packages from home-manager modules to avoid duplicate package selections. 79 72 ++ (map (program: config.programs.${program}.package) [ 80 73 # keep-sorted start ··· 90 83 91 84 # Keep plugins without dedicated modules together here. 92 85 plugins = { 86 + # keep-sorted start block=yes newline_separated=yes 93 87 full-border = { 94 88 package = pkgs.yaziPlugins.full-border; 95 89 setup = true; ··· 108 102 package = pkgs.yaziPlugins.starship; 109 103 setup = true; 110 104 }; 105 + # keep-sorted end 111 106 }; 112 107 }; 113 108 };
+3 -3
modules/services/network.nix
··· 10 10 inherit (lib) concatStringsSep; 11 11 inherit (vars) username; 12 12 in { 13 - imports = [ 13 + imports = with self.modules; [ 14 14 # keep-sorted start 15 - self.modules.generic.vars 16 - self.modules.nixos.sops 15 + generic.vars 16 + nixos.sops 17 17 # keep-sorted end 18 18 ]; 19 19
+10 -15
modules/services/printing.nix
··· 1 1 { 2 - flake.modules.nixos.printing = {pkgs, ...}: let 3 - inherit (builtins) attrValues; 4 - in { 2 + flake.modules.nixos.printing = {pkgs, ...}: { 5 3 services.printing = { 6 4 enable = true; 7 5 # Allow network clients to reach cups. ··· 11 9 webInterface = false; 12 10 13 11 # Printer drivers packages. 14 - drivers = attrValues { 15 - inherit 16 - (pkgs) 17 - # keep-sorted start 18 - foomatic-db-ppds 19 - foomatic-db-ppds-withNonfreeDb 20 - gutenprint 21 - gutenprint-bin 22 - splix 23 - # keep-sorted end 24 - ; 25 - }; 12 + drivers = with pkgs; [ 13 + # keep-sorted start 14 + foomatic-db-ppds 15 + foomatic-db-ppds-withNonfreeDb 16 + gutenprint 17 + gutenprint-bin 18 + splix 19 + # keep-sorted end 20 + ]; 26 21 27 22 # Enable network printer discovery and share local queues by default. 28 23 browsing = true;
+4 -1
modules/shell-abbreviations.nix
··· 10 10 cfg = config.home.shellAbbreviations; 11 11 in { 12 12 options.home.shellAbbreviations = mkOption { 13 - default = {}; 14 13 description = '' 15 14 Shell abbreviations that expand as fish abbreviations and fall back to 16 15 aliases in shells without native abbreviation support. 17 16 ''; 17 + 18 18 type = types.attrsOf types.str; 19 + default = {}; 19 20 }; 20 21 21 22 config = { 23 + # keep-sorted start 22 24 programs.bash.shellAliases = cfg; 23 25 programs.fish.shellAbbrs = cfg; 24 26 programs.nushell.shellAliases = cfg; 25 27 programs.zsh.shellAliases = cfg; 28 + # keep-sorted end 26 29 }; 27 30 }; 28 31 }
+1 -1
todo.md
··· 158 158 - [x] default.nix 159 159 - [x] general.nix 160 160 - [x] gestures.nix 161 - - [ ] keybinds.nix 161 + - [x] keybinds.nix 162 162 - [-] monitors.nix 163 163 - [x] plugins.nix 164 164 - [x] rules.nix