forked from pub-solar/os
Compare commits
768 commits
Author | SHA1 | Date | |
---|---|---|---|
teutat3s | 6bca75e91b | ||
teutat3s | 60ed2e1f1c | ||
teutat3s | 07eb9c1aa5 | ||
teutat3s | 24808f4558 | ||
teutat3s | 683094ce6d | ||
teutat3s | e197fffb2b | ||
teutat3s | 19d26c944a | ||
teutat3s | 5ee369ac5b | ||
teutat3s | e0eb8a80d0 | ||
teutat3s | 59fcd7f03a | ||
teutat3s | 8067000bff | ||
teutat3s | f54a81ee2d | ||
teutat3s | d9262e6f4b | ||
teutat3s | 1b6bcf7470 | ||
teutat3s | eaf9c2796b | ||
teutat3s | 73030cdb6a | ||
teutat3s | d8b7a92079 | ||
teutat3s | 895981431e | ||
teutat3s | ebecd616b8 | ||
teutat3s | 90c9d4da92 | ||
teutat3s | d059239f4c | ||
teutat3s | 1be3896b4a | ||
teutat3s | d80314213c | ||
teutat3s | 2aabad4062 | ||
teutat3s | c0b1e6088d | ||
teutat3s | c5703f64dc | ||
teutat3s | f795bac18d | ||
teutat3s | 31ffd89799 | ||
teutat3s | c95e0680e6 | ||
teutat3s | 35caff9c1e | ||
teutat3s | a4484248c6 | ||
teutat3s | 2afe36eacb | ||
teutat3s | 23b2009c29 | ||
teutat3s | 5400d021f2 | ||
teutat3s | 6b88a1090b | ||
teutat3s | d48876b288 | ||
teutat3s | 594f4dc271 | ||
teutat3s | 41378aba7a | ||
teutat3s | 1378383ab2 | ||
teutat3s | 71f2c25084 | ||
teutat3s | 39d662f113 | ||
teutat3s | e27706b8af | ||
teutat3s | 4f6488c7e4 | ||
teutat3s | ac1dc3d3dc | ||
teutat3s | 6b622b36d7 | ||
teutat3s | 85ee776a54 | ||
teutat3s | 7c35bbec63 | ||
teutat3s | e37febbe6a | ||
teutat3s | 9f45e55c9c | ||
teutat3s | f970ffa42c | ||
teutat3s | 59c3cbadbb | ||
teutat3s | d4eaa00b81 | ||
teutat3s | 151045ca8a | ||
teutat3s | 0b8df81e6a | ||
teutat3s | f752e8160c | ||
teutat3s | 559ce897ec | ||
teutat3s | f21d815361 | ||
teutat3s | eb472ba3d9 | ||
teutat3s | 3bba218767 | ||
teutat3s | 7da11b47a7 | ||
teutat3s | 52c0970919 | ||
teutat3s | ebe85103ad | ||
teutat3s | 5096995281 | ||
teutat3s | 774a75e1f3 | ||
teutat3s | 5e62cca796 | ||
teutat3s | 0e5a3fa29a | ||
teutat3s | 313b1faba4 | ||
teutat3s | 96e9259595 | ||
teutat3s | 5fd5bae727 | ||
teutat3s | 99c4efb479 | ||
teutat3s | d00e918c1c | ||
teutat3s | 195c81f8b1 | ||
teutat3s | a4bebfef29 | ||
teutat3s | 03e5a0ffda | ||
teutat3s | 0615158150 | ||
teutat3s | 7ccefe0601 | ||
teutat3s | d8f1b24935 | ||
teutat3s | 1395a620b4 | ||
teutat3s | 3a61d04b02 | ||
teutat3s | 0eca82134b | ||
teutat3s | bc9e117893 | ||
teutat3s | 890ed263f0 | ||
teutat3s | c4f200d9ed | ||
teutat3s | 7909cadd3f | ||
teutat3s | 5836e97296 | ||
teutat3s | 63c1c2f91f | ||
teutat3s | c463a19e69 | ||
teutat3s | 8e6e6a64e5 | ||
teutat3s | 0f33c97abb | ||
teutat3s | 680e151b8b | ||
teutat3s | afb2269f7f | ||
teutat3s | 5c7d766db4 | ||
teutat3s | 1f85e2a43b | ||
teutat3s | caff2f147c | ||
teutat3s | e3e78f4e36 | ||
teutat3s | 07c505ee81 | ||
teutat3s | 834b71d8d6 | ||
teutat3s | faaf8df637 | ||
teutat3s | 7dde26f316 | ||
teutat3s | f3f9f02d76 | ||
teutat3s | 5a4e16cbba | ||
teutat3s | 43ffecce76 | ||
teutat3s | e4a36c87eb | ||
teutat3s | 2196ed1427 | ||
teutat3s | 555dd5d133 | ||
teutat3s | dd275ebb6d | ||
teutat3s | 6a46d98662 | ||
teutat3s | 02fe409dfe | ||
teutat3s | e619b02f4c | ||
teutat3s | fe9f97017d | ||
teutat3s | 1fdbed48de | ||
teutat3s | 81367aea41 | ||
teutat3s | b51179e2cb | ||
teutat3s | 82d9ab2ae5 | ||
teutat3s | cb9eea8a79 | ||
teutat3s | 3f70d1c62a | ||
teutat3s | 3dcb4045f5 | ||
teutat3s | e459fbb0b5 | ||
teutat3s | 208853aeb9 | ||
teutat3s | b1ccc1b951 | ||
teutat3s | 472474ffda | ||
teutat3s | cdfe4d6bcb | ||
teutat3s | 39a62122c9 | ||
teutat3s | dfe092a702 | ||
teutat3s | 09b8cc835f | ||
teutat3s | e23ec52b44 | ||
teutat3s | 3fa8ba728a | ||
teutat3s | 227119a078 | ||
teutat3s | 90049d90be | ||
teutat3s | 7b2d36e4fe | ||
teutat3s | 2779b0db0e | ||
teutat3s | 00dd25c874 | ||
teutat3s | 33163b61a3 | ||
teutat3s | 8431aae3b8 | ||
teutat3s | 49b89e9f9d | ||
teutat3s | b2b4bc219f | ||
teutat3s | ffb3810da8 | ||
teutat3s | 8293c0ba00 | ||
teutat3s | 0660ee4e8f | ||
teutat3s | 607bc5b9ed | ||
teutat3s | a6b69ee730 | ||
teutat3s | 0b3a2f2954 | ||
teutat3s | f45c7c2f50 | ||
teutat3s | 42262449d5 | ||
teutat3s | ed219015a1 | ||
teutat3s | 33a49edcf9 | ||
teutat3s | c3acf50efe | ||
teutat3s | 56703e1ca9 | ||
teutat3s | 66dde3a278 | ||
teutat3s | 8cbc3f5c3b | ||
teutat3s | 2166f56d59 | ||
teutat3s | bcfd701a6a | ||
teutat3s | 130c915612 | ||
teutat3s | ccc098d379 | ||
teutat3s | 84019208c5 | ||
teutat3s | 7d689e346d | ||
teutat3s | e1052d75cd | ||
teutat3s | 74dfae9076 | ||
teutat3s | 746c8d19ac | ||
teutat3s | b81890d769 | ||
teutat3s | 08bd4c519a | ||
teutat3s | def1b53712 | ||
teutat3s | f45fa35e90 | ||
teutat3s | 298b480680 | ||
teutat3s | 10a9f1c0b0 | ||
teutat3s | 73a6c299ce | ||
teutat3s | e3ffdda2ec | ||
teutat3s | bc29f641bc | ||
teutat3s | 08791a6508 | ||
teutat3s | 4956dafd72 | ||
teutat3s | f8c6042819 | ||
teutat3s | 1b70050c21 | ||
teutat3s | 31d91fa649 | ||
teutat3s | b46f3d4ee9 | ||
teutat3s | 294ecb5f0e | ||
teutat3s | e36a4d48f3 | ||
teutat3s | 0370dd3c0c | ||
teutat3s | 9366100c9b | ||
teutat3s | 31906a965e | ||
teutat3s | 15ab5192b7 | ||
teutat3s | 83d72c275a | ||
teutat3s | 9aa3aec588 | ||
teutat3s | 5b563f2cbc | ||
teutat3s | a59d88892c | ||
teutat3s | 9345a0c67b | ||
teutat3s | 4d004de686 | ||
teutat3s | 6891f77bd2 | ||
teutat3s | 270ef4f452 | ||
teutat3s | b79ef12b4e | ||
teutat3s | c3094c4b76 | ||
teutat3s | f6c5fef2fe | ||
teutat3s | 97a05c4456 | ||
teutat3s | 9b48362f41 | ||
teutat3s | 82d88a3f23 | ||
teutat3s | fa7812b21f | ||
teutat3s | b0aa120073 | ||
teutat3s | 54ae646335 | ||
teutat3s | 149d0c34ab | ||
teutat3s | 1c61f6f12b | ||
teutat3s | 7d5f1c89ff | ||
teutat3s | 19d8d033a3 | ||
teutat3s | ec00d67e5f | ||
teutat3s | 3b50c26f35 | ||
teutat3s | 46bf45a9ca | ||
teutat3s | 2172692ce4 | ||
teutat3s | 52cdd58954 | ||
teutat3s | 06c48d0ae5 | ||
teutat3s | 97e929c973 | ||
teutat3s | 3cb6950d84 | ||
teutat3s | 516ec7ca24 | ||
teutat3s | 6fe751f458 | ||
teutat3s | b307d4e8ff | ||
teutat3s | 182138d33c | ||
teutat3s | 8d0837d781 | ||
teutat3s | f824979ce3 | ||
teutat3s | 1306593e74 | ||
teutat3s | f3a31ed523 | ||
teutat3s | e0c5520175 | ||
teutat3s | bb72a79076 | ||
teutat3s | c8a724a785 | ||
teutat3s | fc0f61ae09 | ||
teutat3s | 8b84af72bc | ||
teutat3s | f6f1ca0df0 | ||
teutat3s | 8aee4045ba | ||
teutat3s | b6c6a2ebac | ||
teutat3s | 82b79a1019 | ||
teutat3s | 4fa633f6a7 | ||
teutat3s | 27e037927e | ||
teutat3s | 6ccfa38e15 | ||
teutat3s | 345dfc9900 | ||
teutat3s | 5d301dd29c | ||
teutat3s | 998255e364 | ||
teutat3s | 24bdc88d97 | ||
teutat3s | 44c06ff63b | ||
teutat3s | c6beb6c44e | ||
teutat3s | 8a7ba19699 | ||
teutat3s | d4084e7a41 | ||
teutat3s | bae27118f1 | ||
teutat3s | 58e343aab8 | ||
teutat3s | b35d8a41db | ||
teutat3s | 3981ebb052 | ||
teutat3s | 4050eff29e | ||
teutat3s | 8c11d6ed98 | ||
teutat3s | cedf46ad4c | ||
teutat3s | ce8db07caf | ||
teutat3s | 3b5f5bcee8 | ||
teutat3s | 6f62d8d3b7 | ||
teutat3s | a407fc1582 | ||
teutat3s | 29a5b1a0a5 | ||
teutat3s | 53f007f48a | ||
teutat3s | 1da6ee9126 | ||
teutat3s | fb606ae9b0 | ||
teutat3s | 276021e011 | ||
teutat3s | 50acaccc83 | ||
teutat3s | 9fed3a5caf | ||
teutat3s | d7acdc4820 | ||
teutat3s | ac4144facd | ||
teutat3s | 291bf8d3ce | ||
teutat3s | 865e05bd3e | ||
teutat3s | ed9d06629c | ||
teutat3s | 927e3fb378 | ||
teutat3s | 6fb2cd9904 | ||
teutat3s | 7392d0904d | ||
teutat3s | 591a723eac | ||
teutat3s | 78ca87e5dc | ||
teutat3s | cc95953ead | ||
teutat3s | 1123250f72 | ||
teutat3s | afde581b8f | ||
teutat3s | f63a3e4dcc | ||
teutat3s | ac516f2349 | ||
teutat3s | e15f6ad4ea | ||
teutat3s | 98988d0268 | ||
teutat3s | a6e5630927 | ||
teutat3s | 802750c5ba | ||
teutat3s | ebd1ebcb4c | ||
teutat3s | a7980fae5e | ||
teutat3s | 32b43f7432 | ||
teutat3s | f06acc77a0 | ||
teutat3s | c2d28cd203 | ||
teutat3s | b455a6e559 | ||
teutat3s | 2e40153f82 | ||
teutat3s | 8a0113659c | ||
teutat3s | 47226e668b | ||
teutat3s | 897666ea3a | ||
teutat3s | 818a691a4f | ||
teutat3s | f3b5f811eb | ||
teutat3s | ba7fe039b4 | ||
teutat3s | 6163830d31 | ||
teutat3s | f09a398c2b | ||
teutat3s | ec73b43425 | ||
teutat3s | 03e55b6fde | ||
teutat3s | 165fa6cf04 | ||
teutat3s | e0eb7f38b7 | ||
teutat3s | fcf960a70f | ||
teutat3s | 5acbaa3dd5 | ||
teutat3s | 88404be55b | ||
teutat3s | 5a05079e17 | ||
teutat3s | 8eb4a0e6b9 | ||
teutat3s | b085e0bed6 | ||
teutat3s | 2d27b9c315 | ||
teutat3s | 7aed17c1a4 | ||
teutat3s | a6d002ae32 | ||
teutat3s | 8d14653860 | ||
teutat3s | 8093131884 | ||
teutat3s | 43dc161e79 | ||
teutat3s | 8f4f5687f2 | ||
Benjamin Bädorf | 9bade4eb64 | ||
Benjamin Bädorf | d951e821b3 | ||
teutat3s | 1fe6d34f6e | ||
teutat3s | 9271e8d037 | ||
teutat3s | fd74f59c39 | ||
Benjamin Bädorf | e36709613c | ||
teutat3s | 92a7c57f96 | ||
Benjamin Bädorf | 41c2d668f7 | ||
teutat3s | 1c555136a4 | ||
teutat3s | ec22a0e71b | ||
teutat3s | 25b3112399 | ||
teutat3s | f710117df4 | ||
teutat3s | d15d68d942 | ||
teutat3s | e26af156c6 | ||
teutat3s | 1d4b86830e | ||
teutat3s | dfff984080 | ||
teutat3s | 29647b277e | ||
teutat3s | eeb7c7ef3a | ||
teutat3s | 9b5abf76ea | ||
teutat3s | b594c1bc9e | ||
teutat3s | f7acbf1bf7 | ||
teutat3s | 6296b6a66e | ||
teutat3s | e032e96315 | ||
teutat3s | 52e2fcff26 | ||
teutat3s | 1586111aeb | ||
teutat3s | 9909a2152b | ||
teutat3s | bd91b609b5 | ||
teutat3s | b9fef27e73 | ||
teutat3s | 6931ca6aed | ||
teutat3s | b8f340310c | ||
teutat3s | 0d5920d78e | ||
teutat3s | 3aca75e1f8 | ||
teutat3s | 2d25aeb2a7 | ||
teutat3s | 20e7d697aa | ||
teutat3s | 440bc4c141 | ||
teutat3s | 7909559d8f | ||
teutat3s | abeefac8ae | ||
teutat3s | 0fd72b88a3 | ||
teutat3s | 244a8b01fb | ||
teutat3s | 8a2910f10c | ||
teutat3s | 4f1d6a1c28 | ||
teutat3s | 23e9c1b74f | ||
teutat3s | cbe1deee5b | ||
teutat3s | d21c7631ab | ||
teutat3s | fac9fb9e7a | ||
teutat3s | 41b5625598 | ||
teutat3s | c25bc7cb40 | ||
teutat3s | d3ed1bf9ae | ||
teutat3s | ca61200807 | ||
teutat3s | 067286461e | ||
teutat3s | 51bf77160c | ||
teutat3s | e929c3f053 | ||
teutat3s | fc09f922a8 | ||
teutat3s | 5db371f648 | ||
teutat3s | 4c4e889e27 | ||
teutat3s | 7e1758bfb2 | ||
teutat3s | 1eac244310 | ||
teutat3s | 12704e8df7 | ||
teutat3s | fe4550bfc7 | ||
teutat3s | 4fdebfa058 | ||
teutat3s | b9a6a39b96 | ||
teutat3s | 33720a4f5a | ||
teutat3s | 62970b02e7 | ||
teutat3s | ca2a5fbbda | ||
teutat3s | 90e1fe7e6f | ||
teutat3s | 42ff409512 | ||
teutat3s | 7869e62028 | ||
teutat3s | e7ce8e1fb4 | ||
teutat3s | ca5ed1ae69 | ||
teutat3s | 24ed83b04c | ||
teutat3s | 6bb6112bcc | ||
teutat3s | 7c6235512d | ||
teutat3s | 17cd75d4d8 | ||
teutat3s | 5b44e97088 | ||
teutat3s | d4beafe4f0 | ||
teutat3s | c06e6d4cd1 | ||
teutat3s | c06c2c7fe9 | ||
teutat3s | d7d316bddb | ||
teutat3s | 69f842bd6e | ||
teutat3s | e7b03b9770 | ||
teutat3s | 8f0790b6fd | ||
teutat3s | aa1c31dcc2 | ||
teutat3s | 36c2ea205b | ||
teutat3s | d36f1e7d9c | ||
teutat3s | 573a45db0b | ||
teutat3s | c0ed1b8259 | ||
teutat3s | 4c454c83a5 | ||
teutat3s | 2ce4f913aa | ||
teutat3s | 55f339359d | ||
teutat3s | 19785f035c | ||
teutat3s | d8d46a4c28 | ||
teutat3s | 6547aa92cf | ||
teutat3s | cf59251f06 | ||
teutat3s | 028e148374 | ||
teutat3s | 168e3d7944 | ||
teutat3s | 1e1d8c68ef | ||
teutat3s | 650fd97d03 | ||
teutat3s | ab7ff779cc | ||
teutat3s | 0bd3cf9c33 | ||
teutat3s | cbf3c81b32 | ||
teutat3s | 8939568d7c | ||
teutat3s | bc519e213d | ||
teutat3s | 5b2b512f2a | ||
teutat3s | 22302c6256 | ||
teutat3s | bf821c670e | ||
teutat3s | a0276f99f3 | ||
teutat3s | 92201e4a79 | ||
teutat3s | aa4f26bba8 | ||
teutat3s | cc35703d17 | ||
teutat3s | ef1c8b0946 | ||
teutat3s | 2332577d73 | ||
teutat3s | b3711c5ec2 | ||
teutat3s | aeb90b2322 | ||
teutat3s | 06f8062fd0 | ||
teutat3s | c11c8ac938 | ||
teutat3s | 76ec848b23 | ||
teutat3s | 4d4bf4abc6 | ||
teutat3s | b522ac8786 | ||
teutat3s | 381444dc70 | ||
teutat3s | fe2a196641 | ||
teutat3s | e9895dd7f7 | ||
teutat3s | b9031dbd7c | ||
teutat3s | 5b1f2dcc23 | ||
teutat3s | d908c99a3c | ||
teutat3s | c8adc5cc0c | ||
teutat3s | a3a9fd5414 | ||
teutat3s | a1d46324ea | ||
teutat3s | 7b62e887cb | ||
teutat3s | c989fd9bf0 | ||
teutat3s | 2a9308fbc7 | ||
teutat3s | 51aad91f90 | ||
teutat3s | 228867acb7 | ||
teutat3s | 5cdeaa93ff | ||
teutat3s | 6deaea3fad | ||
teutat3s | 824e478110 | ||
teutat3s | 0938fe59ca | ||
teutat3s | b03a58e5da | ||
teutat3s | 1f3d9d249a | ||
teutat3s | 86d6782fe2 | ||
teutat3s | d371c57e30 | ||
teutat3s | c0f610b68c | ||
teutat3s | a476b72916 | ||
teutat3s | 3d1873f727 | ||
teutat3s | 0b12271353 | ||
teutat3s | a383385724 | ||
teutat3s | d1d9495f77 | ||
teutat3s | a010a0d66b | ||
teutat3s | d94adfb3b8 | ||
teutat3s | c016dd3f2b | ||
teutat3s | 32a6b9a016 | ||
Benjamin Bädorf | 0e84e1ef2a | ||
teutat3s | e0e34f9c95 | ||
teutat3s | db6ff53243 | ||
teutat3s | 31bbcea991 | ||
teutat3s | c9e3b40883 | ||
teutat3s | d9e56cbb47 | ||
teutat3s | b264d602ca | ||
teutat3s | 001a1de2e8 | ||
teutat3s | 05c3ad8207 | ||
teutat3s | 778ef916ca | ||
teutat3s | 319794933f | ||
teutat3s | 8f77eef79a | ||
teutat3s | f0ea096a62 | ||
teutat3s | dca0bd978d | ||
teutat3s | 2cc5ca5d60 | ||
teutat3s | 6be62fcf02 | ||
teutat3s | d16bb7b3a5 | ||
teutat3s | f791ceccd0 | ||
teutat3s | 6c83d67887 | ||
teutat3s | e815ca1293 | ||
teutat3s | e76cbabad9 | ||
teutat3s | 1a13960d54 | ||
teutat3s | 0db272c260 | ||
teutat3s | 2630acd0bc | ||
Hendrik Sokolowski | a028cbc66a | ||
Hendrik Sokolowski | cc3979d724 | ||
teutat3s | 42c4cda12e | ||
teutat3s | 7f385ec4ac | ||
teutat3s | 5ea57eaea6 | ||
teutat3s | d69ed82a31 | ||
teutat3s | a006bed2ea | ||
teutat3s | 5ad5c9bae6 | ||
teutat3s | ab603a9708 | ||
teutat3s | 60e15166c8 | ||
teutat3s | c0f991010f | ||
teutat3s | 574deec44c | ||
teutat3s | cf2b9e2c54 | ||
teutat3s | 8bd5022d70 | ||
teutat3s | 10813c3dc0 | ||
teutat3s | 1c58fdee89 | ||
teutat3s | a0d6fcdd44 | ||
teutat3s | 48d6bb64ac | ||
teutat3s | 5bfbbebcc6 | ||
teutat3s | 0cb5ad876b | ||
teutat3s | 1cf3fad5b7 | ||
teutat3s | 2d92c9d6a3 | ||
teutat3s | b8273742e3 | ||
teutat3s | 28f1bd66f0 | ||
teutat3s | c88016af85 | ||
teutat3s | 2b69ea89a4 | ||
teutat3s | aa65a39eff | ||
teutat3s | 6e503bb161 | ||
teutat3s | 0b155bc7dd | ||
teutat3s | 9457435388 | ||
teutat3s | 0ff91df7fe | ||
teutat3s | 9497f6c73d | ||
teutat3s | 175941c565 | ||
teutat3s | ed25801ecf | ||
teutat3s | 76f3890de1 | ||
teutat3s | ff0ff0b7ba | ||
teutat3s | 0a182761ca | ||
teutat3s | 9e6cf4ba02 | ||
teutat3s | ae01ed16b8 | ||
teutat3s | 9a7e53ab59 | ||
teutat3s | 63080c4d4f | ||
teutat3s | 9ef3d58d2e | ||
teutat3s | 72cc501e5f | ||
teutat3s | b4c782e65a | ||
teutat3s | 1203bfc4ef | ||
teutat3s | 63102f33e5 | ||
teutat3s | dca6ca86b1 | ||
teutat3s | b263ca4c45 | ||
teutat3s | b00196aa94 | ||
teutat3s | 820cc40356 | ||
teutat3s | c9b84430f9 | ||
teutat3s | 6d5025b17b | ||
teutat3s | 8a843caf57 | ||
teutat3s | 768392581d | ||
teutat3s | ed298f6140 | ||
teutat3s | 624bbf36c6 | ||
teutat3s | 90e181040c | ||
teutat3s | ea11c9ed6d | ||
teutat3s | 0fc1a7fe20 | ||
teutat3s | 7749667888 | ||
teutat3s | 9a2b2e2b9f | ||
teutat3s | 1b2ede1e86 | ||
teutat3s | 5c57e0af8a | ||
teutat3s | 94acf6d190 | ||
teutat3s | a7fa725d62 | ||
teutat3s | f3ac27ac71 | ||
teutat3s | edbfeeb63b | ||
teutat3s | d4bcb45ec2 | ||
teutat3s | eae1f5aaba | ||
teutat3s | de8b7c9a5c | ||
teutat3s | 65545ac0eb | ||
teutat3s | 7ec1b28c13 | ||
teutat3s | 72ee1b7180 | ||
teutat3s | 4982c93248 | ||
teutat3s | 20efda1056 | ||
teutat3s | 5464cd2ebe | ||
teutat3s | 18cf9e1f0d | ||
teutat3s | 1877c41b83 | ||
teutat3s | ce5753cee5 | ||
teutat3s | 5b4dcce3c0 | ||
teutat3s | a5a97f1757 | ||
teutat3s | bf30ff4396 | ||
teutat3s | 40240e9d5c | ||
teutat3s | 6ff469a0ac | ||
teutat3s | 528e69af1e | ||
teutat3s | a79cb4f592 | ||
teutat3s | 412b830cb0 | ||
teutat3s | 8e1f2b5abc | ||
teutat3s | 8540db683a | ||
teutat3s | 7f712ce866 | ||
teutat3s | daeff7cdae | ||
teutat3s | aabfc4a0dd | ||
teutat3s | 036de0adc2 | ||
teutat3s | 05c72f28af | ||
teutat3s | 578537227e | ||
teutat3s | 09c83e89b1 | ||
teutat3s | 3229e5c6da | ||
teutat3s | 47239ec1bb | ||
teutat3s | cba5562e35 | ||
teutat3s | f0bf5d7c04 | ||
teutat3s | 978d07d868 | ||
teutat3s | 669b61f722 | ||
teutat3s | 393302373b | ||
teutat3s | c3c7b63d73 | ||
teutat3s | 848a0dd0a5 | ||
teutat3s | f025fa681a | ||
teutat3s | 9a8462b938 | ||
teutat3s | fc8ac5709a | ||
teutat3s | 26d5fcf589 | ||
teutat3s | 89d9611e5e | ||
teutat3s | 5a95fedf3c | ||
teutat3s | 7c98e09e88 | ||
teutat3s | 0a22395a8c | ||
teutat3s | 75dfffa614 | ||
teutat3s | 5149c219e6 | ||
teutat3s | 67a4b2e58d | ||
teutat3s | 3015dc4293 | ||
teutat3s | 5c86a6ec09 | ||
teutat3s | d490c4b78a | ||
teutat3s | 3c3945d34b | ||
teutat3s | 9ef7784e81 | ||
teutat3s | 03cf31989f | ||
teutat3s | d7aa9a8840 | ||
teutat3s | d2c7eea425 | ||
teutat3s | dccf0baed0 | ||
teutat3s | 08d0f49f3a | ||
teutat3s | 8e2037ef4a | ||
teutat3s | 2f38edecf7 | ||
teutat3s | 0c14291bc2 | ||
teutat3s | 1d0ae71a3c | ||
teutat3s | e2773a67ee | ||
teutat3s | 8bfd365039 | ||
teutat3s | a9ea24a39b | ||
teutat3s | b911badb8a | ||
teutat3s | 03e6c47086 | ||
teutat3s | 7ecfcf5814 | ||
teutat3s | a1c87c43ca | ||
teutat3s | 8fd578dceb | ||
teutat3s | 888d6ca12a | ||
teutat3s | 841ce25ab2 | ||
teutat3s | 6f7e01a3e5 | ||
teutat3s | f44e3f06ed | ||
teutat3s | 1cbb04d808 | ||
teutat3s | ec2e42593e | ||
teutat3s | 9458395c36 | ||
teutat3s | dde682146d | ||
teutat3s | d399532b58 | ||
teutat3s | ab8850998e | ||
teutat3s | bac40c211a | ||
teutat3s | 7bbdc0c4f7 | ||
teutat3s | 72637fba7b | ||
teutat3s | c97231947c | ||
teutat3s | 3a5a8f3706 | ||
teutat3s | ac35bb4555 | ||
teutat3s | dcb04e9769 | ||
teutat3s | 2d68f026ef | ||
teutat3s | c889aa96dc | ||
teutat3s | 23ad00f264 | ||
teutat3s | 286c8d9ead | ||
teutat3s | 4455f8e5f0 | ||
teutat3s | 8958a2df72 | ||
teutat3s | a188dc9c6e | ||
teutat3s | 6dcbd42a56 | ||
teutat3s | 17b2a84d23 | ||
teutat3s | f6a9e18903 | ||
teutat3s | 50675323f7 | ||
teutat3s | 6eb0925aaf | ||
teutat3s | 81ec0ecffc | ||
teutat3s | f4d59feb29 | ||
teutat3s | 9d0eb01b1a | ||
teutat3s | 61967bc0e8 | ||
teutat3s | eca6d4d999 | ||
teutat3s | 7e3afff152 | ||
teutat3s | b0483a0757 | ||
teutat3s | 0337015328 | ||
teutat3s | a774ccdb0c | ||
teutat3s | f21a8f0e81 | ||
teutat3s | bc07b99029 | ||
teutat3s | bcd9f7e0a3 | ||
teutat3s | 32a51fd9ef | ||
teutat3s | 5dbcf14d1f | ||
teutat3s | 82aeb0ec39 | ||
teutat3s | f5f6ddd10c | ||
teutat3s | 0555636f26 | ||
teutat3s | 6b0994ac4e | ||
teutat3s | af6c13f3e6 | ||
teutat3s | 19bf284361 | ||
teutat3s | 2690f79f10 | ||
teutat3s | a2c3102fae | ||
teutat3s | 63f91c864a | ||
teutat3s | 749110bed5 | ||
teutat3s | f33597926e | ||
teutat3s | 23af3da5f3 | ||
teutat3s | e19388f99b | ||
teutat3s | 082e33c1ed | ||
teutat3s | 952e8389c5 | ||
teutat3s | 7dd2362c27 | ||
teutat3s | fb04812df1 | ||
teutat3s | 1f2a6fe066 | ||
teutat3s | 73739322fa | ||
teutat3s | 8229dea533 | ||
teutat3s | 3c6d815d5c | ||
teutat3s | 96778b345c | ||
teutat3s | f63902f55a | ||
teutat3s | 19bd4126df | ||
teutat3s | 36678d57f9 | ||
teutat3s | f570efefe9 | ||
teutat3s | 30b3838b2a | ||
teutat3s | e6f679387c | ||
teutat3s | eae049a62c | ||
teutat3s | 0ac864d8a0 | ||
teutat3s | 269aff703d | ||
teutat3s | 54044ed31a | ||
drone | 45265e2014 | ||
teutat3s | a1adee5cb6 | ||
teutat3s | 3ce9be7c4c | ||
drone | 8df34042c3 | ||
drone | f8c52bdee1 | ||
drone | f43ea392f3 | ||
teutat3s | 81647c8447 | ||
teutat3s | f3237ea908 | ||
teutat3s | 07c6de8b0d | ||
teutat3s | 6f5dae8520 | ||
teutat3s | 4b8c24df60 | ||
teutat3s | 6c0585edc7 | ||
teutat3s | 5f552149ea | ||
teutat3s | 4bc3eaed27 | ||
teutat3s | 56ab7a1d28 | ||
teutat3s | d35fc6d8ae | ||
teutat3s | 3bb6c8bc66 | ||
teutat3s | f2d20739e0 | ||
teutat3s | 59069b11b1 | ||
teutat3s | 5bf032e2c9 | ||
teutat3s | 7d9d924f2b | ||
teutat3s | 575e8c9fd0 | ||
teutat3s | 7c064001e9 | ||
teutat3s | 898fc15023 | ||
teutat3s | f026b8bd44 | ||
teutat3s | 8da39248c6 | ||
teutat3s | 7985b4f33d | ||
teutat3s | 4de6cd9641 | ||
teutat3s | 58b6b7f0ca | ||
teutat3s | a31706695e | ||
teutat3s | c653bf0818 | ||
teutat3s | be2419645d | ||
teutat3s | 2032775826 | ||
teutat3s | 25d605d45b | ||
teutat3s | 62f7de1dba | ||
drone | 58e4d8ddfa | ||
teutat3s | 95bb18093c | ||
teutat3s | 916cd67458 | ||
teutat3s | b66e1465ad | ||
teutat3s | 27ed938aec | ||
teutat3s | a5df658fb2 | ||
teutat3s | 9755e48043 | ||
teutat3s | e33191591c | ||
teutat3s | 3f64c910b0 | ||
teutat3s | f66f600b9b | ||
teutat3s | 0b25f7b11b | ||
teutat3s | f0130f5df7 | ||
teutat3s | 15497046c7 | ||
teutat3s | 245f5ecb91 | ||
teutat3s | 021c8774fa | ||
drone | 5874f7366c | ||
drone | 06abae7874 | ||
teutat3s | 3bf4783f0e | ||
teutat3s | cacb98ed0b | ||
teutat3s | e5ddbd1f75 | ||
teutat3s | ea32e36c57 | ||
teutat3s | 192d10e3c3 | ||
teutat3s | e27b566f95 | ||
teutat3s | ea5ef431c4 | ||
teutat3s | cca0aa30f5 | ||
teutat3s | 426e4ec460 | ||
teutat3s | e9d626f69c | ||
teutat3s | 0829154ec4 | ||
teutat3s | 00537d84c0 | ||
teutat3s | e1e633750a | ||
teutat3s | ce618a532d | ||
teutat3s | 7faf8310bb | ||
teutat3s | 8293ebafb4 | ||
teutat3s | a7352d4bef | ||
teutat3s | a03e44a95a | ||
teutat3s | e4976a58cf | ||
teutat3s | 9897fb174a | ||
teutat3s | 3e0017a191 | ||
teutat3s | b53d7bfaeb | ||
teutat3s | 6c40b31e79 |
|
@ -20,6 +20,14 @@ indent_style = unset
|
||||||
indent_size = unset
|
indent_size = unset
|
||||||
|
|
||||||
[{.*,secrets}/**]
|
[{.*,secrets}/**]
|
||||||
|
end_of_line = false
|
||||||
|
insert_final_newline = false
|
||||||
|
trim_trailing_whitespace = unset
|
||||||
|
charset = unset
|
||||||
|
indent_style = unset
|
||||||
|
indent_size = unset
|
||||||
|
|
||||||
|
[*.rom]
|
||||||
end_of_line = unset
|
end_of_line = unset
|
||||||
insert_final_newline = unset
|
insert_final_newline = unset
|
||||||
trim_trailing_whitespace = unset
|
trim_trailing_whitespace = unset
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
# Formatted code using treefmt and alejandra
|
# Formatted code using treefmt and alejandra
|
||||||
73bf158392a427d188b7aad36244b94506f57a15
|
73bf158392a427d188b7aad36244b94506f57a15
|
||||||
|
# nixfmt-rfc-style
|
||||||
|
03e5a0ffdaab9b1331ab95ca3e730aaec1d7c151
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -4,7 +4,7 @@ doc/index.html
|
||||||
|
|
||||||
# Result of bud commands
|
# Result of bud commands
|
||||||
vm
|
vm
|
||||||
iso
|
/iso
|
||||||
doi
|
doi
|
||||||
|
|
||||||
pkgs/_sources/.shake*
|
pkgs/_sources/.shake*
|
||||||
|
|
21
default.nix
21
default.nix
|
@ -8,27 +8,16 @@ let
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
];
|
];
|
||||||
|
|
||||||
filterSystems =
|
filterSystems = lib.filterAttrs (system: _: lib.elem system ciSystems);
|
||||||
lib.filterAttrs
|
|
||||||
(system: _: lib.elem system ciSystems);
|
|
||||||
|
|
||||||
recurseIntoAttrsRecursive = lib.mapAttrs (
|
recurseIntoAttrsRecursive = lib.mapAttrs (
|
||||||
_: v:
|
_: v: if lib.isAttrs v then recurseIntoAttrsRecursive (lib.recurseIntoAttrs v) else v
|
||||||
if lib.isAttrs v
|
|
||||||
then recurseIntoAttrsRecursive (lib.recurseIntoAttrs v)
|
|
||||||
else v
|
|
||||||
);
|
);
|
||||||
|
|
||||||
systemOutputs =
|
systemOutputs = lib.filterAttrs (
|
||||||
lib.filterAttrs
|
|
||||||
(
|
|
||||||
name: set:
|
name: set:
|
||||||
lib.isAttrs set
|
lib.isAttrs set && lib.any (system: set ? ${system} && name != "legacyPackages") ciSystems
|
||||||
&& lib.any
|
) default.outputs;
|
||||||
(system: set ? ${system} && name != "legacyPackages")
|
|
||||||
ciSystems
|
|
||||||
)
|
|
||||||
default.outputs;
|
|
||||||
|
|
||||||
ciDrvs = lib.mapAttrs (_: system: filterSystems system) systemOutputs;
|
ciDrvs = lib.mapAttrs (_: system: filterSystems system) systemOutputs;
|
||||||
in
|
in
|
||||||
|
|
465
flake.lock
465
flake.lock
|
@ -3,18 +3,22 @@
|
||||||
"agenix": {
|
"agenix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"darwin": [
|
"darwin": [
|
||||||
"darwin"
|
"nix-darwin"
|
||||||
|
],
|
||||||
|
"home-manager": [
|
||||||
|
"home-manager"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixos"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1682101079,
|
"lastModified": 1723293904,
|
||||||
"narHash": "sha256-MdAhtjrLKnk2uiqun1FWABbKpLH090oeqCSiWemtuck=",
|
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
|
||||||
"owner": "ryantm",
|
"owner": "ryantm",
|
||||||
"repo": "agenix",
|
"repo": "agenix",
|
||||||
"rev": "2994d002dcff5353ca1ac48ec584c7f6589fe447",
|
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -23,42 +27,22 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"darwin": {
|
"deploy-rs": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixos"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1688307440,
|
|
||||||
"narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=",
|
|
||||||
"owner": "LnL7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "LnL7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"deploy": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"flake-compat": [
|
||||||
"flake-compat"
|
"flake-compat"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixos"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"utils": "utils"
|
"utils": "utils"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1686747123,
|
"lastModified": 1727447169,
|
||||||
"narHash": "sha256-XUQK9kwHpTeilHoad7L4LjMCCyY13Oq383CoFADecRE=",
|
"narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=",
|
||||||
"owner": "serokell",
|
"owner": "serokell",
|
||||||
"repo": "deploy-rs",
|
"repo": "deploy-rs",
|
||||||
"rev": "724463b5a94daa810abfc64a4f87faef4e00f984",
|
"rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -67,76 +51,14 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"devshell": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"nixpkgs": [
|
|
||||||
"digga",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1671489820,
|
|
||||||
"narHash": "sha256-qoei5HDJ8psd1YUPD7DhbHdhLIT9L2nadscp4Qk37uk=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "devshell",
|
|
||||||
"rev": "5aa3a8039c68b4bf869327446590f4cdf90bb634",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "devshell",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"digga": {
|
|
||||||
"inputs": {
|
|
||||||
"darwin": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"deploy": [
|
|
||||||
"deploy"
|
|
||||||
],
|
|
||||||
"devshell": "devshell",
|
|
||||||
"flake-compat": [
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"flake-utils": "flake-utils_2",
|
|
||||||
"flake-utils-plus": "flake-utils-plus",
|
|
||||||
"home-manager": [
|
|
||||||
"home"
|
|
||||||
],
|
|
||||||
"nixlib": [
|
|
||||||
"nixos"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixos"
|
|
||||||
],
|
|
||||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1674947971,
|
|
||||||
"narHash": "sha256-6gKqegJHs72jnfFP9g2sihl4fIZgtKgKuqU2rCkIdGY=",
|
|
||||||
"owner": "pub-solar",
|
|
||||||
"repo": "digga",
|
|
||||||
"rev": "2da608bd8afb48afef82c6b1b6d852a36094a497",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "pub-solar",
|
|
||||||
"ref": "fix/bootstrap-iso",
|
|
||||||
"repo": "digga",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1673956053,
|
"lastModified": 1696426674,
|
||||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -145,50 +67,34 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730504689,
|
||||||
|
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"locked": {
|
|
||||||
"lastModified": 1642700792,
|
|
||||||
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils-plus": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": [
|
"systems": "systems_3"
|
||||||
"digga",
|
|
||||||
"flake-utils"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1654029967,
|
"lastModified": 1726560853,
|
||||||
"narHash": "sha256-my3GQ3mQIw/1f6GPV1IhUZrcYQSWh0YJAMPNBjhXJDw=",
|
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||||
"owner": "gytis-ivaskevicius",
|
|
||||||
"repo": "flake-utils-plus",
|
|
||||||
"rev": "6271cf3842ff9c8a9af9e3508c547f86bc77d199",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "gytis-ivaskevicius",
|
|
||||||
"ref": "refs/pull/120/head",
|
|
||||||
"repo": "flake-utils-plus",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_2": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1667395993,
|
|
||||||
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -197,105 +103,152 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils_3": {
|
"flakey-profile": {
|
||||||
"inputs": {
|
|
||||||
"systems": "systems"
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1687171271,
|
"lastModified": 1712898590,
|
||||||
"narHash": "sha256-BJlq+ozK2B1sJDQXS3tzJM5a+oVZmi1q0FlBK/Xqv7M=",
|
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
|
||||||
"owner": "numtide",
|
"owner": "lf-",
|
||||||
"repo": "flake-utils",
|
"repo": "flakey-profile",
|
||||||
"rev": "abfb11bd1aec8ced1c9bb9adfe68018230f4fb3c",
|
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "numtide",
|
"owner": "lf-",
|
||||||
"repo": "flake-utils",
|
"repo": "flakey-profile",
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixos"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1687871164,
|
|
||||||
"narHash": "sha256-bBFlPthuYX322xOlpJvkjUBz0C+MOBjZdDOOJJ+G2jU=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "07c347bb50994691d7b0095f45ebd8838cf6bc38",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"ref": "release-23.05",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1682203081,
|
"lastModified": 1732466619,
|
||||||
"narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=",
|
"narHash": "sha256-T1e5oceypZu3Q8vzICjv1X/sGs9XfJRMW5OuXHgpB3c=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1",
|
"rev": "f3111f62a23451114433888902a55cf0692b408d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
|
"ref": "release-24.11",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"latest": {
|
"invoiceplane-template": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": [
|
||||||
|
"flake-parts"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1688231357,
|
"lastModified": 1728398621,
|
||||||
"narHash": "sha256-ZOn16X5jZ6X5ror58gOJAxPfFLAQhZJ6nOUeS4tfFwo=",
|
"narHash": "sha256-cNCgW0g012t7lZ2gxBpc+Uu6GHV2sTEsOV50nSZ96FM=",
|
||||||
"owner": "nixos",
|
"ref": "refs/heads/main",
|
||||||
"repo": "nixpkgs",
|
"rev": "a4f2aa76583b5dfa3f2db12ff360ba9f229cfb2f",
|
||||||
"rev": "645ff62e09d294a30de823cb568e9c6d68e92606",
|
"revCount": 37,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.pub.solar/momo/invoiceplane-templates.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.pub.solar/momo/invoiceplane-templates.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lix": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1729298361,
|
||||||
|
"narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=",
|
||||||
|
"rev": "ad9d06f7838a25beec425ff406fe68721fef73be",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lix-module": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"flakey-profile": "flakey-profile",
|
||||||
|
"lix": "lix",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1729360442,
|
||||||
|
"narHash": "sha256-6U0CyPycIBc04hbYy2hBINnVso58n/ZyywY2BD3hu+s=",
|
||||||
|
"rev": "9098ac95768f7006d7e070b88bae76939f6034e6",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/9098ac95768f7006d7e070b88bae76939f6034e6.tar.gz?rev=9098ac95768f7006d7e070b88bae76939f6034e6"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1732603785,
|
||||||
|
"narHash": "sha256-AEjWTJwOmSnVYsSJCojKgoguGfFfwel6z/6ud6UFMU8=",
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "6ab87b7c84d4ee873e937108c4ff80c015a40c7a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "lnl7",
|
||||||
"ref": "nixos-unstable",
|
"ref": "master",
|
||||||
"repo": "nixpkgs",
|
"repo": "nix-darwin",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixos": {
|
"nix-direnv": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": [
|
||||||
|
"flake-parts"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1688109178,
|
"lastModified": 1732689932,
|
||||||
"narHash": "sha256-BSdeYp331G4b1yc7GIRgAnfUyaktW2nl7k0C577Tttk=",
|
"narHash": "sha256-dnB8nu6ozuflg7f887Udoujx284QI6FMCSuCYIiTCYQ=",
|
||||||
"owner": "nixos",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs",
|
"repo": "nix-direnv",
|
||||||
"rev": "b72aa95f7f096382bff3aea5f8fde645bca07422",
|
"rev": "0357fa09ff68323c472fc0362ddc141a6aa6c3b5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nix-community",
|
||||||
"ref": "nixos-23.05",
|
"repo": "nix-direnv",
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1686838567,
|
"lastModified": 1732483221,
|
||||||
"narHash": "sha256-aqKCUD126dRlVSKV6vWuDCitfjFrZlkwNuvj5LtjRRU=",
|
"narHash": "sha256-kF6rDeCshoCgmQz+7uiuPdREVFuzhIorGOoPXMalL2U=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "429f232fe1dc398c5afea19a51aad6931ee0fb89",
|
"rev": "45348ad6fb8ac0e8415f6e5e96efe47dd7f39405",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -304,58 +257,48 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1672791794,
|
"lastModified": 1732350895,
|
||||||
"narHash": "sha256-mqGPpGmwap0Wfsf3o2b6qHJW1w2kk/I6cGCGIU+3t6o=",
|
"narHash": "sha256-GcOQbOgmwlsRhpLGSwZJwLbo3pu9ochMETuRSS1xpz4=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9813adc7f7c0edd738c6bdd8431439688bb0cb3d",
|
"rev": "0c582677378f2d9ffcb01490af2f2c678dcb29d3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-24.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nvfetcher": {
|
"nixpkgs-lib": {
|
||||||
"inputs": {
|
|
||||||
"flake-compat": [
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"flake-utils": "flake-utils_3",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixos"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1687440270,
|
"lastModified": 1730504152,
|
||||||
"narHash": "sha256-aOAXvfVn+MBSkU+xlQEiyoGpRaF6NvQdpWIhw5OH/Dc=",
|
"narHash": "sha256-lXvH/vOfb4aGYyvFmZK/HlsNsr/0CVWlwYvo2rxJk3s=",
|
||||||
"owner": "berberman",
|
"type": "tarball",
|
||||||
"repo": "nvfetcher",
|
"url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz"
|
||||||
"rev": "44196458acc2c28c32e456c50277d6148e71e708",
|
|
||||||
"type": "github"
|
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "berberman",
|
"type": "tarball",
|
||||||
"repo": "nvfetcher",
|
"url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz"
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
"agenix": "agenix",
|
||||||
"darwin": "darwin",
|
"deploy-rs": "deploy-rs",
|
||||||
"deploy": "deploy",
|
|
||||||
"digga": "digga",
|
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"home": "home",
|
"flake-parts": "flake-parts",
|
||||||
"latest": "latest",
|
"home-manager": "home-manager",
|
||||||
"nixos": "nixos",
|
"invoiceplane-template": "invoiceplane-template",
|
||||||
|
"lix-module": "lix-module",
|
||||||
|
"nix-darwin": "nix-darwin",
|
||||||
|
"nix-direnv": "nix-direnv",
|
||||||
"nixos-hardware": "nixos-hardware",
|
"nixos-hardware": "nixos-hardware",
|
||||||
"nvfetcher": "nvfetcher"
|
"nixpkgs": "nixpkgs",
|
||||||
|
"unstable": "unstable"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems": {
|
"systems": {
|
||||||
|
@ -373,13 +316,83 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"utils": {
|
"systems_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1667395993,
|
"lastModified": 1681028828,
|
||||||
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nix-direnv",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1724833132,
|
||||||
|
"narHash": "sha256-F4djBvyNRAXGusJiNYInqR6zIMI3rvlp6WiKwsRISos=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "3ffd842a5f50f435d3e603312eefa4790db46af5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"unstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1732521221,
|
||||||
|
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701680307,
|
||||||
|
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
227
flake.nix
227
flake.nix
|
@ -1,168 +1,107 @@
|
||||||
{
|
{
|
||||||
description = "A highly structured configuration database.";
|
description = "teutat3s hosts in nix";
|
||||||
|
|
||||||
nixConfig.extra-experimental-features = "nix-command flakes";
|
nixConfig.extra-experimental-features = "nix-command flakes";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
# Track channels with commits tested and built by hydra
|
# Track channels with commits tested and built by hydra
|
||||||
nixos.url = "github:nixos/nixpkgs/nixos-23.05";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||||
latest.url = "github:nixos/nixpkgs/nixos-unstable";
|
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
flake-compat.url = "github:edolstra/flake-compat";
|
flake-compat.url = "github:edolstra/flake-compat";
|
||||||
flake-compat.flake = false;
|
flake-compat.flake = false;
|
||||||
|
|
||||||
digga.url = "github:pub-solar/digga/fix/bootstrap-iso";
|
nix-darwin.url = "github:lnl7/nix-darwin/master";
|
||||||
digga.inputs.nixpkgs.follows = "nixos";
|
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
digga.inputs.nixlib.follows = "nixos";
|
|
||||||
digga.inputs.home-manager.follows = "home";
|
|
||||||
digga.inputs.deploy.follows = "deploy";
|
|
||||||
digga.inputs.darwin.follows = "darwin";
|
|
||||||
digga.inputs.flake-compat.follows = "flake-compat";
|
|
||||||
|
|
||||||
home.url = "github:nix-community/home-manager/release-23.05";
|
home-manager.url = "github:nix-community/home-manager/release-24.11";
|
||||||
home.inputs.nixpkgs.follows = "nixos";
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
darwin.url = "github:LnL7/nix-darwin";
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||||
darwin.inputs.nixpkgs.follows = "nixos";
|
|
||||||
|
|
||||||
deploy.url = "github:serokell/deploy-rs";
|
deploy-rs.url = "github:serokell/deploy-rs";
|
||||||
deploy.inputs.nixpkgs.follows = "nixos";
|
deploy-rs.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
deploy.inputs.flake-compat.follows = "flake-compat";
|
deploy-rs.inputs.flake-compat.follows = "flake-compat";
|
||||||
|
|
||||||
agenix.url = "github:ryantm/agenix";
|
agenix.url = "github:ryantm/agenix";
|
||||||
agenix.inputs.nixpkgs.follows = "nixos";
|
agenix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
agenix.inputs.darwin.follows = "darwin";
|
agenix.inputs.darwin.follows = "nix-darwin";
|
||||||
|
agenix.inputs.home-manager.follows = "home-manager";
|
||||||
|
|
||||||
|
nix-direnv.url = "github:nix-community/nix-direnv";
|
||||||
|
nix-direnv.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
nix-direnv.inputs.flake-parts.follows = "flake-parts";
|
||||||
|
|
||||||
nixos-hardware.url = "github:nixos/nixos-hardware";
|
nixos-hardware.url = "github:nixos/nixos-hardware";
|
||||||
|
|
||||||
nvfetcher.url = "github:berberman/nvfetcher";
|
lix-module = {
|
||||||
nvfetcher.inputs.nixpkgs.follows = "nixos";
|
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
|
||||||
nvfetcher.inputs.flake-compat.follows = "flake-compat";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
invoiceplane-template.url = "git+https://git.pub.solar/momo/invoiceplane-templates.git";
|
||||||
self,
|
invoiceplane-template.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
digga,
|
invoiceplane-template.inputs.flake-parts.follows = "flake-parts";
|
||||||
nixos,
|
};
|
||||||
home,
|
|
||||||
nixos-hardware,
|
outputs =
|
||||||
agenix,
|
inputs@{ self, ... }:
|
||||||
deploy,
|
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
nvfetcher,
|
systems = [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
"x86_64-darwin"
|
||||||
|
"aarch64-darwin"
|
||||||
|
];
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./lib
|
||||||
|
./modules
|
||||||
|
./hosts
|
||||||
|
./users
|
||||||
|
./overlays
|
||||||
|
];
|
||||||
|
|
||||||
|
perSystem =
|
||||||
|
args@{
|
||||||
|
system,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
...
|
...
|
||||||
} @ inputs:
|
}:
|
||||||
digga.lib.mkFlake
|
|
||||||
{
|
{
|
||||||
inherit self inputs;
|
_module.args = {
|
||||||
|
inherit inputs;
|
||||||
channelsConfig = {
|
pkgs = import inputs.nixpkgs {
|
||||||
# allowUnfree = true;
|
inherit system;
|
||||||
|
overlays = [ inputs.agenix.overlays.default ];
|
||||||
|
};
|
||||||
|
unstable = import inputs.unstable { inherit system; };
|
||||||
|
master = import inputs.master { inherit system; };
|
||||||
};
|
};
|
||||||
|
|
||||||
supportedSystems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin"];
|
devShells.default = pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
agenix
|
||||||
|
cachix
|
||||||
|
deploy-rs
|
||||||
|
nixd
|
||||||
|
nixos-generators
|
||||||
|
nvfetcher
|
||||||
|
|
||||||
channels = {
|
editorconfig-checker
|
||||||
nixos = {
|
nodePackages.prettier
|
||||||
imports = [(digga.lib.importOverlays ./overlays)];
|
shellcheck
|
||||||
overlays = [
|
shfmt
|
||||||
(self: super: {
|
treefmt
|
||||||
deploy-rs = {
|
|
||||||
inherit (inputs.nixos.legacyPackages.x86_64-linux) deploy-rs;
|
|
||||||
lib = inputs.deploy.lib.x86_64-linux;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
latest = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
lib = import ./lib {lib = digga.lib // nixos.lib;};
|
|
||||||
|
|
||||||
sharedOverlays = [
|
|
||||||
(final: prev: {
|
|
||||||
__dontExport = true;
|
|
||||||
lib = prev.lib.extend (lfinal: lprev: {
|
|
||||||
our = self.lib;
|
|
||||||
});
|
|
||||||
})
|
|
||||||
agenix.overlays.default
|
|
||||||
nvfetcher.overlays.default
|
|
||||||
|
|
||||||
(import ./pkgs)
|
|
||||||
];
|
|
||||||
|
|
||||||
nixos = {
|
|
||||||
hostDefaults = {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
channelName = "nixos";
|
|
||||||
imports = [(digga.lib.importExportableModules ./modules)];
|
|
||||||
modules = [
|
|
||||||
{lib.our = self.lib;}
|
|
||||||
# FIXME: upstream module causes a huge number of unnecessary
|
|
||||||
# dependencies to be pulled in for all systems -- many of them are
|
|
||||||
# graphical. should only be imported as needed.
|
|
||||||
# digga.nixosModules.bootstrapIso
|
|
||||||
digga.nixosModules.nixConfig
|
|
||||||
home.nixosModules.home-manager
|
|
||||||
agenix.nixosModules.age
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
imports = [(digga.lib.importHosts ./hosts)];
|
|
||||||
hosts = {
|
|
||||||
# Set host-specific properties here
|
|
||||||
bootstrap = {
|
|
||||||
modules = [
|
|
||||||
digga.nixosModules.bootstrapIso
|
|
||||||
];
|
|
||||||
};
|
|
||||||
PubSolarOS = {
|
|
||||||
tests = [
|
|
||||||
#(import ./tests/first-test.nix {
|
|
||||||
# pkgs = nixos.legacyPackages.x86_64-linux;
|
|
||||||
# lib = nixos.lib;
|
|
||||||
#})
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
importables = rec {
|
|
||||||
profiles =
|
|
||||||
digga.lib.rakeLeaves ./profiles
|
|
||||||
// {
|
|
||||||
users = digga.lib.rakeLeaves ./users;
|
|
||||||
};
|
|
||||||
suites = with profiles; rec {
|
|
||||||
base = [users.pub-solar users.root];
|
|
||||||
iso = base ++ [base-user graphical pub-solar-iso];
|
|
||||||
pubsolaros = [full-install base-user users.root];
|
|
||||||
anonymous = [pubsolaros users.pub-solar];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home = {
|
flake = {
|
||||||
imports = [(digga.lib.importExportableModules ./users/modules)];
|
formatter."x86_64-linux" = inputs.unstable.legacyPackages."x86_64-linux".nixfmt-rfc-style;
|
||||||
modules = [];
|
|
||||||
importables = rec {
|
|
||||||
profiles = digga.lib.rakeLeaves ./users/profiles;
|
|
||||||
suites = with profiles; rec {
|
|
||||||
base = [direnv git];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
users = {
|
|
||||||
pub-solar = {suites, ...}: {
|
|
||||||
imports = suites.base;
|
|
||||||
|
|
||||||
home.stateVersion = "21.03";
|
deploy.nodes = self.lib.deploy.mkDeployNodes self.nixosConfigurations {
|
||||||
};
|
|
||||||
}; # digga.lib.importers.rakeLeaves ./users/hm;
|
|
||||||
};
|
|
||||||
|
|
||||||
devshell = ./shell;
|
|
||||||
|
|
||||||
homeConfigurations = digga.lib.mkHomeConfigurations self.nixosConfigurations;
|
|
||||||
|
|
||||||
deploy.nodes = digga.lib.mkDeployNodes self.nixosConfigurations {
|
|
||||||
#example = {
|
#example = {
|
||||||
# hostname = "example.com:22";
|
# hostname = "example.com:22";
|
||||||
# sshUser = "bartender";
|
# sshUser = "bartender";
|
||||||
|
@ -173,6 +112,24 @@
|
||||||
# path = self.pkgs.x86_64-linux.nixos.deploy-rs.lib.x86_64-linux.activate.home-manager self.homeConfigurationsPortable.x86_64-linux.bartender;
|
# path = self.pkgs.x86_64-linux.nixos.deploy-rs.lib.x86_64-linux.activate.home-manager self.homeConfigurationsPortable.x86_64-linux.bartender;
|
||||||
# };
|
# };
|
||||||
#};
|
#};
|
||||||
|
|
||||||
|
fae = {
|
||||||
|
hostname = "192.168.13.35";
|
||||||
|
sshUser = "pub-solar";
|
||||||
|
};
|
||||||
|
powder = {
|
||||||
|
hostname = "80.71.153.194";
|
||||||
|
sshUser = "root";
|
||||||
|
profilesOrder = [
|
||||||
|
"system"
|
||||||
|
"direnv"
|
||||||
|
];
|
||||||
|
profiles.direnv = {
|
||||||
|
user = "pub-solar";
|
||||||
|
path = self.pkgs.x86_64-linux.nixos.deploy-rs.lib.x86_64-linux.activate.home-manager self.homeConfigurationsPortable.x86_64-linux.pub-solar;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
{suites, ...}: {
|
{ suites, ... }:
|
||||||
|
{
|
||||||
### root password is empty by default ###
|
### root password is empty by default ###
|
||||||
### default password: pub-solar, optional: add your SSH keys
|
### default password: pub-solar, optional: add your SSH keys
|
||||||
imports =
|
imports = suites.iso;
|
||||||
suites.iso;
|
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
fileSystems."/" = {device = "/dev/disk/by-label/nixos";};
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/nixos";
|
||||||
|
};
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
# settings for stateful data, like file locations and database versions
|
# settings for stateful data, like file locations and database versions
|
||||||
|
|
|
@ -5,18 +5,21 @@
|
||||||
profiles,
|
profiles,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
|
inherit (lib) mkForce;
|
||||||
|
|
||||||
# Gets hostname of host to be bundled inside iso
|
# Gets hostname of host to be bundled inside iso
|
||||||
# Copied from https://github.com/divnix/digga/blob/30ffa0b02272dc56c94fd3c7d8a5a0f07ca197bf/modules/bootstrap-iso.nix#L3-L11
|
# Copied from https://github.com/divnix/digga/blob/30ffa0b02272dc56c94fd3c7d8a5a0f07ca197bf/modules/bootstrap-iso.nix#L3-L11
|
||||||
getFqdn = config: let
|
getFqdn =
|
||||||
|
config:
|
||||||
|
let
|
||||||
net = config.networking;
|
net = config.networking;
|
||||||
fqdn =
|
fqdn =
|
||||||
if (net ? domain) && (net.domain != null)
|
if (net ? domain) && (net.domain != null) then "${net.hostName}.${net.domain}" else net.hostName;
|
||||||
then "${net.hostName}.${net.domain}"
|
|
||||||
else net.hostName;
|
|
||||||
in
|
in
|
||||||
fqdn;
|
fqdn;
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
# build with: `nix build ".#nixosConfigurations.bootstrap.config.system.build.isoImage"`
|
# build with: `nix build ".#nixosConfigurations.bootstrap.config.system.build.isoImage"`
|
||||||
imports = [
|
imports = [
|
||||||
# profiles.networking
|
# profiles.networking
|
||||||
|
@ -31,7 +34,9 @@ in {
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
|
||||||
# will be overridden by the bootstrapIso instrumentation
|
# will be overridden by the bootstrapIso instrumentation
|
||||||
fileSystems."/" = {device = "/dev/disk/by-label/nixos";};
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/nixos";
|
||||||
|
};
|
||||||
|
|
||||||
system.nixos.label = "PubSolarOS-" + config.system.nixos.version;
|
system.nixos.label = "PubSolarOS-" + config.system.nixos.version;
|
||||||
|
|
||||||
|
|
155
hosts/default.nix
Normal file
155
hosts/default.nix
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
{
|
||||||
|
withSystem,
|
||||||
|
self,
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
flake = {
|
||||||
|
nixosModules = {
|
||||||
|
home-manager = {
|
||||||
|
imports = [
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
({
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
home-manager.extraSpecialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nixosConfigurations = {
|
||||||
|
dumpyourvms = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
self.nixosModules.base
|
||||||
|
./dumpyourvms
|
||||||
|
self.nixosModules.teutat3s
|
||||||
|
self.nixosModules.audio
|
||||||
|
self.nixosModules.bluetooth
|
||||||
|
self.nixosModules.desktop-extended
|
||||||
|
self.nixosModules.docker
|
||||||
|
self.nixosModules.graphical
|
||||||
|
self.nixosModules.nextcloud
|
||||||
|
self.nixosModules.office
|
||||||
|
self.nixosModules.printing
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
ryzensun = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
self.nixosModules.base
|
||||||
|
./ryzensun
|
||||||
|
self.nixosModules.teutat3s
|
||||||
|
self.nixosModules.audio
|
||||||
|
self.nixosModules.desktop-extended
|
||||||
|
self.nixosModules.docker
|
||||||
|
self.nixosModules.forgejo-actions-runner
|
||||||
|
self.nixosModules.graphical
|
||||||
|
self.nixosModules.office
|
||||||
|
self.nixosModules.printing
|
||||||
|
self.nixosModules.virtualisation
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fae = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
self.nixosModules.base
|
||||||
|
inputs.nixos-hardware.nixosModules.raspberry-pi-4
|
||||||
|
./fae
|
||||||
|
self.nixosModules.pub-solar
|
||||||
|
self.nixosModules.acme
|
||||||
|
self.nixosModules.invoiceplane
|
||||||
|
self.nixosModules.actual
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
#powder = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
# specialArgs = {
|
||||||
|
# flake = {
|
||||||
|
# inherit self inputs config;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# modules = [
|
||||||
|
# self.nixosModules.base
|
||||||
|
# inputs.nixos-hardware.nixosModules.raspberry-pi-4
|
||||||
|
# ./powder
|
||||||
|
# self.nixosModules.teutat3s
|
||||||
|
# self.nixosModules.docker
|
||||||
|
# self.nixosModules.wireguard-client
|
||||||
|
# self.nixosModules.invoiceplane
|
||||||
|
# ];
|
||||||
|
#};
|
||||||
|
|
||||||
|
iso = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
|
||||||
|
self.nixosModules.base
|
||||||
|
./iso
|
||||||
|
self.nixosModules.nixos
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
iso-arm = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
|
||||||
|
self.nixosModules.base
|
||||||
|
./iso
|
||||||
|
self.nixosModules.nixos
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
iso-graphical = self.inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
flake = {
|
||||||
|
inherit self inputs config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
"${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
|
||||||
|
self.nixosModules.base
|
||||||
|
./iso
|
||||||
|
self.nixosModules.nixos
|
||||||
|
self.nixosModules.graphical
|
||||||
|
self.nixosModules.audio
|
||||||
|
self.nixosModules.bluetooth
|
||||||
|
(
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
pub-solar.graphical.wayland.software-renderer.enable = true;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
12
hosts/dumpyourvms/.config/sway/config.d/applications.conf
Normal file
12
hosts/dumpyourvms/.config/sway/config.d/applications.conf
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# seahorse
|
||||||
|
for_window [title="seahorse"] floating enabled
|
||||||
|
|
||||||
|
# NetworkManager
|
||||||
|
for_window [app_id="nm-connection-editor"] floating enabled
|
||||||
|
|
||||||
|
# thunderbird
|
||||||
|
for_window [title="New Task:*"] floating enabled
|
||||||
|
for_window [title="Edit Task:*"] floating enabled
|
||||||
|
for_window [title="New Event:*"] floating enabled
|
||||||
|
for_window [title="Edit Event:*"] floating enabled
|
||||||
|
|
6
hosts/dumpyourvms/.config/sway/config.d/autostart.conf
Normal file
6
hosts/dumpyourvms/.config/sway/config.d/autostart.conf
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Autostart applications
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# exec swayidle
|
||||||
|
|
||||||
|
exec qMasterPassword
|
|
@ -0,0 +1,3 @@
|
||||||
|
# switch keyboard input language
|
||||||
|
bindsym $mod+tab exec swaymsg input "1452:628:Apple_Inc._Apple_Internal_Keyboard_/_Trackpad" xkb_switch_layout next
|
||||||
|
|
37
hosts/dumpyourvms/.config/sway/config.d/input-defaults.conf
Normal file
37
hosts/dumpyourvms/.config/sway/config.d/input-defaults.conf
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
### Input configuration
|
||||||
|
#
|
||||||
|
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
||||||
|
# Read `man 5 sway-input` for more information about this section.
|
||||||
|
|
||||||
|
input "type:keyboard" {
|
||||||
|
xkb_layout us(intl),de
|
||||||
|
xkb_model pc105
|
||||||
|
xkb_options ctrl:nocaps
|
||||||
|
}
|
||||||
|
|
||||||
|
input "type:touchpad" {
|
||||||
|
tap enabled
|
||||||
|
natural_scroll enabled
|
||||||
|
# Disable while typing
|
||||||
|
dwt enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
# Touchpad controls
|
||||||
|
#bindsym XF86TouchpadToggle exec $HOME/Workspace/ben/toggletouchpad.sh # toggle touchpad
|
||||||
|
|
||||||
|
# Screen brightness controls
|
||||||
|
bindsym XF86MonBrightnessUp exec "brightnessctl -d acpi_video0 set +10%"
|
||||||
|
bindsym XF86MonBrightnessDown exec "brightnessctl -d acpi_video0 set 10%-"
|
||||||
|
|
||||||
|
# Keyboard backlight brightness controls
|
||||||
|
bindsym XF86KbdBrightnessDown exec "brightnessctl -d smc::kbd_backlight set 10%-"
|
||||||
|
bindsym XF86KbdBrightnessUp exec "brightnessctl -d smc::kbd_backlight set +10%"
|
||||||
|
|
||||||
|
# Pulse Audio controls
|
||||||
|
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%; exec pactl set-sink-mute @DEFAULT_SINK@ 0 #increase sound volume
|
||||||
|
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%; exec pactl set-sink-mute @DEFAULT_SINK@ 0 #decrease sound volume
|
||||||
|
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle # mute sound
|
||||||
|
# Media player controls
|
||||||
|
bindsym XF86AudioPlay exec "playerctl play-pause; notify-send 'Play/Pause'"
|
||||||
|
bindsym XF86AudioNext exec "playerctl next; notify-send 'Next'"
|
||||||
|
bindsym XF86AudioPrev exec "playerctl previous; notify-send 'Prev.'"
|
39
hosts/dumpyourvms/.config/sway/config.d/screens.conf
Normal file
39
hosts/dumpyourvms/.config/sway/config.d/screens.conf
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
### Output configuration
|
||||||
|
#
|
||||||
|
# Example configuration:
|
||||||
|
#
|
||||||
|
# output HDMI-A-1 resolution 1920x1080 position 1920,0
|
||||||
|
#
|
||||||
|
# You can get the names of your outputs by running: swaymsg -t get_outputs
|
||||||
|
|
||||||
|
set $main_screen eDP-1
|
||||||
|
set $displayport DP-3
|
||||||
|
set $hmdi HDMI-A-1
|
||||||
|
|
||||||
|
output $main_screen scale 1.7
|
||||||
|
output $displayport scale 1
|
||||||
|
|
||||||
|
output $main_screen position 0 1440
|
||||||
|
output $displayport position 0 0 resolution 2560x1440@60Hz
|
||||||
|
|
||||||
|
#bindswitch lid:on output $main_screen disable
|
||||||
|
#bindswitch lid:off output $main_screen enable
|
||||||
|
bindsym $mod+Shift+x output $main_screen toggle
|
||||||
|
|
||||||
|
# TODO when using more monitors
|
||||||
|
## Manual management of external displays
|
||||||
|
# Set the shortcuts and what they do
|
||||||
|
#set $mode_display HDMI (i) top, (j) left, (k) bottom, (l) right, (o) off
|
||||||
|
#mode "$mode_display" {
|
||||||
|
# bindsym i output HDMI-A-1 enable; output HDMI-A-1 pos 0 0 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 0 1080, mode "default"
|
||||||
|
# bindsym j output HDMI-A-1 enable; output HDMI-A-1 pos 0 0 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 1920 0, mode "default"
|
||||||
|
# bindsym k output HDMI-A-1 enable; output HDMI-A-1 pos 0 900 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 0 0, mode "default"
|
||||||
|
# bindsym l output HDMI-A-1 enable; output HDMI-A-1 pos 1440 0 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 0 0, mode "default"
|
||||||
|
# bindsym o output HDMI-A-1 disable, mode "default"
|
||||||
|
#
|
||||||
|
# # back to normal: Enter or Escape
|
||||||
|
# bindsym Return mode "default"
|
||||||
|
# bindsym Escape mode "default"
|
||||||
|
#}
|
||||||
|
## Declare here the shortcut to bring the display selection menu
|
||||||
|
#bindsym $mod+x mode "$mode_display"
|
21
hosts/dumpyourvms/consul-agent-ca.pem
Normal file
21
hosts/dumpyourvms/consul-agent-ca.pem
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDbzCCAxSgAwIBAgIRAMK20/fFF0YVThq8xm/YvBswCgYIKoZIzj0EAwIwgbkx
|
||||||
|
CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj
|
||||||
|
bzEaMBgGA1UECRMRMTAxIFNlY29uZCBTdHJlZXQxDjAMBgNVBBETBTk0MTA1MRcw
|
||||||
|
FQYDVQQKEw5IYXNoaUNvcnAgSW5jLjFAMD4GA1UEAxM3Q29uc3VsIEFnZW50IENB
|
||||||
|
IDI1ODgxOTUyODQyOTMwNjIxMjY4NDgwMTUxODE3OTM2NjUxNzc4NzAeFw0xOTEx
|
||||||
|
MDYwMDI3MzVaFw0yNDExMDQwMDI3MzVaMIG5MQswCQYDVQQGEwJVUzELMAkGA1UE
|
||||||
|
CBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xGjAYBgNVBAkTETEwMSBTZWNv
|
||||||
|
bmQgU3RyZWV0MQ4wDAYDVQQREwU5NDEwNTEXMBUGA1UEChMOSGFzaGlDb3JwIElu
|
||||||
|
Yy4xQDA+BgNVBAMTN0NvbnN1bCBBZ2VudCBDQSAyNTg4MTk1Mjg0MjkzMDYyMTI2
|
||||||
|
ODQ4MDE1MTgxNzkzNjY1MTc3ODcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQE
|
||||||
|
SZ2kc9rKUNX3czze+rFR/bZdLx3JEYrpcSXKkpv1wr68E1Jqhi/8Dm8b62Ei/Bc6
|
||||||
|
ZhoJvtB2Shtl+6LbjccUo4H6MIH3MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E
|
||||||
|
BTADAQH/MGgGA1UdDgRhBF9hZjo4MzoyZTpiOToyZTozMzo5MDplOTpkMjpiNzpj
|
||||||
|
NjpjYzpkYToxODoyYTphNzpjMzo5ZTozMTpmNTpkZTo4Mzo4YzozMDo0Mjo3OTo4
|
||||||
|
ZDo0ZDpmZDozMjo2NzpiYjBqBgNVHSMEYzBhgF9hZjo4MzoyZTpiOToyZTozMzo5
|
||||||
|
MDplOTpkMjpiNzpjNjpjYzpkYToxODoyYTphNzpjMzo5ZTozMTpmNTpkZTo4Mzo4
|
||||||
|
YzozMDo0Mjo3OTo4ZDo0ZDpmZDozMjo2NzpiYjAKBggqhkjOPQQDAgNJADBGAiEA
|
||||||
|
zKCV25P6HqFEa1iUVQnsNAp/WHUwxNlR0OctZSdiuIkCIQDiRK03ZYSK/hmY9kXV
|
||||||
|
42nj6kO8MexfiYN4IE4URmzYnA==
|
||||||
|
-----END CERTIFICATE-----
|
9
hosts/dumpyourvms/default.nix
Normal file
9
hosts/dumpyourvms/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./dumpyourvms.nix
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
./networking.nix
|
||||||
|
];
|
||||||
|
}
|
189
hosts/dumpyourvms/dumpyourvms.nix
Normal file
189
hosts/dumpyourvms/dumpyourvms.nix
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
pub-solar = {
|
||||||
|
terminal-life.full = true;
|
||||||
|
core.hibernation = {
|
||||||
|
enable = true;
|
||||||
|
resumeDevice = "/dev/mapper/cryptroot";
|
||||||
|
resumeOffset = 47366144;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Fix backlight for keyboard and brightness, adjust function key binding,
|
||||||
|
# intel_pstate for cpu schedutil
|
||||||
|
# For now, the radeon driver seems to work better than amdgpu with Radeon R9 M370X
|
||||||
|
# Explicitly set amdgpu support in place of radeon
|
||||||
|
# Source: https://github.com/NixOS/nixos-hardware/blob/master/common/gpu/amd/southern-islands/default.nix
|
||||||
|
# Try again after https://lists.freedesktop.org/archives/amd-gfx/2023-March/090096.html lands
|
||||||
|
boot.kernelParams = [
|
||||||
|
"acpi_backlight=video"
|
||||||
|
"hid_apple.fnmode=2"
|
||||||
|
"intel_pstate=active"
|
||||||
|
"radeon.si_support=0"
|
||||||
|
"amdgpu.si_support=1"
|
||||||
|
];
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# Fix for Error switching console mode to 1: unsupported on startup
|
||||||
|
boot.loader.systemd-boot.consoleMode = lib.mkForce "0";
|
||||||
|
|
||||||
|
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
|
||||||
|
|
||||||
|
systemd.sleep.extraConfig = ''
|
||||||
|
HibernateMode=shutdown
|
||||||
|
'';
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
cpu.intel.updateMicrocode = true;
|
||||||
|
facetimehd.enable = true;
|
||||||
|
graphics = {
|
||||||
|
extraPackages = with pkgs; [ intel-vaapi-driver ]; # i7-4870HQ older hardware like haswell (crystall well)
|
||||||
|
extraPackages32 = with pkgs.pkgsi686Linux; [ intel-vaapi-driver ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.fstrim.enable = true;
|
||||||
|
|
||||||
|
networking.hostName = "dumpyourvms";
|
||||||
|
|
||||||
|
services.resolved = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
DNS=5.1.66.255#dot.ffmuc.net 185.150.99.255#dot.ffmuc.net 5.9.164.112#dns3.digitalcourage.de 89.233.43.71#unicast.censurfridns.dk 185.49.141.37#getdnsapi.net 2001:678:e68:f000::#dot.ffmuc.net 2001:678:ed0:f000::#dot.ffmuc.net 2a01:4f8:251:554::2#dns3.digitalcourage.de 2a01:3a0:53:53::0#unicast.censurfridns.dk 2a04:b900:0:100::38#getdnsapi.net
|
||||||
|
FallbackDNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
|
||||||
|
Domains=~.
|
||||||
|
DNSOverTLS=yes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
services.tailscale = {
|
||||||
|
enable = true;
|
||||||
|
useRoutingFeatures = "client";
|
||||||
|
};
|
||||||
|
services.usbmuxd.enable = true;
|
||||||
|
|
||||||
|
#programs.droidcam.enable = true;
|
||||||
|
#services.mozillavpn.enable = true;
|
||||||
|
|
||||||
|
security.pki.certificateFiles = [ ./consul-agent-ca.pem ];
|
||||||
|
|
||||||
|
# Power off dedicated GPU, use only integrated Intel GPU to save battery
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/33915
|
||||||
|
# https://ubuntuforums.org/showthread.php?t=2409856
|
||||||
|
systemd.services."amd-hybrid-graphics-power-save" = {
|
||||||
|
path = [ pkgs.bash ];
|
||||||
|
description = "Power Off dedicated AMD Card to reduce power usage";
|
||||||
|
requires = [ "sys-kernel-debug.mount" ];
|
||||||
|
enable = true;
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
RemainAfterExit = true;
|
||||||
|
ExecStart = "${pkgs.bash}/bin/sh -c 'sleep 7 && if grep --quiet 'IGD:+' /sys/kernel/debug/vgaswitcheroo/switch; then echo -e \"IGD\\nOFF\" > /sys/kernel/debug/vgaswitcheroo/switch; fi'";
|
||||||
|
ExecStop = "${pkgs.bash}/bin/sh -c 'echo ON >/sys/kernel/debug/vgaswitcheroo/switch'";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Increase console font size for HiDPI display
|
||||||
|
console = {
|
||||||
|
earlySetup = true;
|
||||||
|
font = lib.mkForce "ter-i32b";
|
||||||
|
packages = [ pkgs.terminus_font ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Thunderbolt tools
|
||||||
|
services.hardware.bolt.enable = true;
|
||||||
|
|
||||||
|
# Enable udev rules for gnupg smart cards
|
||||||
|
hardware.gpgSmartcards.enable = true;
|
||||||
|
|
||||||
|
hardware.keyboard.uhk.enable = true;
|
||||||
|
|
||||||
|
powerManagement = {
|
||||||
|
# brcmfmac being loaded during hibernation would inhibit a successful resume
|
||||||
|
# https://bugzilla.kernel.org/show_bug.cgi?id=101681#c116.
|
||||||
|
# Also brcmfmac could randomly crash on resume from sleep.
|
||||||
|
# To hibernate successfully using the amdgpu driver, the dedicated GPU needs
|
||||||
|
# to be powered on.
|
||||||
|
powerUpCommands = lib.mkBefore (
|
||||||
|
"${pkgs.kmod}/bin/modprobe brcmfmac"
|
||||||
|
+ lib.optionalString (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") " brcmfmac_wcc"
|
||||||
|
);
|
||||||
|
powerDownCommands = lib.mkBefore (
|
||||||
|
lib.optionalString (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") "${pkgs.kmod}/bin/rmmod brcmfmac_wcc\n"
|
||||||
|
+ ''
|
||||||
|
${pkgs.kmod}/bin/rmmod brcmfmac
|
||||||
|
${pkgs.systemd}/bin/systemctl stop amd-hybrid-graphics-power-save.service
|
||||||
|
''
|
||||||
|
);
|
||||||
|
resumeCommands =
|
||||||
|
if config.systemd.services."amd-hybrid-graphics-power-save".enable == true then
|
||||||
|
''
|
||||||
|
${pkgs.systemd}/bin/systemctl start amd-hybrid-graphics-power-save.service
|
||||||
|
''
|
||||||
|
else
|
||||||
|
"";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Change lid switch behaviour
|
||||||
|
services.logind.lidSwitch = "hibernate";
|
||||||
|
|
||||||
|
# Power management
|
||||||
|
services.power-profiles-daemon.enable = true;
|
||||||
|
|
||||||
|
services.udev.extraRules =
|
||||||
|
# Disable XHC1 wakeup signal to avoid resume getting triggered some time
|
||||||
|
# after suspend. Reboot required for this to take effect.
|
||||||
|
lib.optionalString (lib.versionAtLeast config.boot.kernelPackages.kernel.version "3.13")
|
||||||
|
''SUBSYSTEM=="pci", KERNEL=="0000:00:14.0", ATTR{power/wakeup}="disabled"'';
|
||||||
|
|
||||||
|
home-manager =
|
||||||
|
pkgs.lib.setAttrByPath
|
||||||
|
[
|
||||||
|
"users"
|
||||||
|
psCfg.user.name
|
||||||
|
]
|
||||||
|
{
|
||||||
|
# Custom device sway configs
|
||||||
|
xdg.configFile = {
|
||||||
|
"sway/config.d/10-applications.conf".source = ./.config/sway/config.d/applications.conf;
|
||||||
|
"sway/config.d/autostart.conf".source = ./.config/sway/config.d/autostart.conf;
|
||||||
|
"sway/config.d/10-custom-keybindings.conf".source = ./.config/sway/config.d/custom-keybindings.conf;
|
||||||
|
"sway/config.d/input-defaults.conf".source = ./.config/sway/config.d/input-defaults.conf;
|
||||||
|
"sway/config.d/screens.conf".source = ./.config/sway/config.d/screens.conf;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# WLAN frequency compliance (e.g. check for radar with DFS)
|
||||||
|
hardware.firmware = with pkgs; [ wireless-regdb ];
|
||||||
|
boot.extraModprobeConfig = ''
|
||||||
|
options cfg80211 ieee80211_regdom="DE"
|
||||||
|
|
||||||
|
# Enable the integrated GPU (iGPU) Intel i915 by default if present
|
||||||
|
options apple-gmux force_igd=y
|
||||||
|
|
||||||
|
# Enable HD-Audio Codec-Specific Models
|
||||||
|
# https://www.kernel.org/doc/html/latest/sound/hd-audio/models.html
|
||||||
|
options snd-hda-intel model=mbp11
|
||||||
|
|
||||||
|
# https://bbs.archlinux.org/viewtopic.php?pid=1445636#p1445636
|
||||||
|
#
|
||||||
|
options snd-hda-intel index=1
|
||||||
|
'';
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "21.05"; # Did you read the comment?
|
||||||
|
}
|
48
hosts/dumpyourvms/hardware-configuration.nix
Normal file
48
hosts/dumpyourvms/hardware-configuration.nix
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# 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 + "/hardware/network/broadcom-43xx.nix")
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"nvme"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/17bbb016-d27c-47da-8805-58c6395891e8";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/c100b9a7-99d7-44d9-b7c2-3892a5f233c4";
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/06B8-5414";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [
|
||||||
|
{
|
||||||
|
device = "/swapfile";
|
||||||
|
size = 18432;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
}
|
286
hosts/dumpyourvms/networking.nix
Normal file
286
hosts/dumpyourvms/networking.nix
Normal file
|
@ -0,0 +1,286 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
systemd.services.wg-quick-wg5.serviceConfig.Type = lib.mkForce "simple";
|
||||||
|
systemd.services.wg-quick-wg5.serviceConfig.Restart = "on-failure";
|
||||||
|
systemd.services.wg-quick-wg5.serviceConfig.RestartSec = "5s";
|
||||||
|
|
||||||
|
systemd.services.NetworkManager-wait-online.enable = true;
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
networkmanager.dns = "systemd-resolved";
|
||||||
|
|
||||||
|
#networkmanager.dispatcherScripts = [
|
||||||
|
# { source = "${pkgs.prison-break}/bin/prison-break"; }
|
||||||
|
#];
|
||||||
|
|
||||||
|
hosts = {
|
||||||
|
"10.0.0.42" = [
|
||||||
|
"nomad.service.consul"
|
||||||
|
"nomad.service.cgn-1.consul"
|
||||||
|
];
|
||||||
|
"10.0.0.66" = [ "consul.service.cgn-1.consul" ];
|
||||||
|
"10.0.1.9" = [ "consul.service.lev-1.consul" ];
|
||||||
|
"10.0.0.70" = [
|
||||||
|
"vault.service.consul"
|
||||||
|
"vault.service.cgn-1.consul"
|
||||||
|
];
|
||||||
|
"10.0.0.200" = [ "headnode.cgn-1" ];
|
||||||
|
"10.0.0.201" = [ "cn01.cgn-1" ];
|
||||||
|
"10.0.0.202" = [ "cn02.cgn-1" ];
|
||||||
|
"10.0.0.205" = [ "cn05.cgn-1" ];
|
||||||
|
"10.0.0.206" = [ "cn06.cgn-1" ];
|
||||||
|
"10.0.0.207" = [ "cn07.cgn-1" ];
|
||||||
|
"10.0.0.208" = [ "cn08.cgn-1" ];
|
||||||
|
"10.0.1.200" = [ "headnode.lev-1" ];
|
||||||
|
"10.0.1.201" = [ "cn01.lev-1" ];
|
||||||
|
"10.0.1.202" = [ "cn02.lev-1" ];
|
||||||
|
"10.0.1.203" = [ "cn03.lev-1" ];
|
||||||
|
"10.0.1.204" = [ "cn04.lev-1" ];
|
||||||
|
"10.0.1.205" = [ "cn05.lev-1" ];
|
||||||
|
"10.0.1.206" = [ "cn00.lev-1" ];
|
||||||
|
"10.0.1.207" = [ "cn06.lev-1" ];
|
||||||
|
"10.0.1.208" = [ "cn07.lev-1" ];
|
||||||
|
"10.101.64.10" = [ "wifi.bahn.de" ];
|
||||||
|
"192.168.13.25" = [
|
||||||
|
"ryzensun.local"
|
||||||
|
"cloudapi.coal-1.mnx.io"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
wireguard.enable = true;
|
||||||
|
wg-quick.interfaces = {
|
||||||
|
wg0 = {
|
||||||
|
autostart = false;
|
||||||
|
address = [ "10.8.8.6/32" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg0.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "l0DJLicCrcrixNP6zAWTXNSEaNM2jML253BXEZ1KpiU=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.8.8.16/32"
|
||||||
|
"10.0.0.0/24"
|
||||||
|
"10.88.88.0/24"
|
||||||
|
];
|
||||||
|
endpoint = "85.88.23.16:51820";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg1 = {
|
||||||
|
autostart = false;
|
||||||
|
address = [ "192.168.188.203/24" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg1.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "iZkgeA/mFxBRclCa5SJYdqffClly/uho5krebcUloCY=";
|
||||||
|
allowedIPs = [ "192.168.188.0/24" ];
|
||||||
|
presharedKeyFile = "/etc/wireguard/wg1.presharedkey";
|
||||||
|
#endpoint = "85.214.70.91:50163";
|
||||||
|
#endpoint = "u7dazg4ceu9dggxa.myfritz.net:50163";
|
||||||
|
endpoint = "[2a00:6020:1000:47::2ded]:50163";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg2 = {
|
||||||
|
autostart = false;
|
||||||
|
address = [ "10.6.6.4/32" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg2.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "nYMmaCIW8lZ7SokivN8HXxYDch+SS1G7ab1SC9meDAw=";
|
||||||
|
presharedKeyFile = "/etc/wireguard/wg2.presharedkey";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.6.6.1/32"
|
||||||
|
"10.1.1.0/24"
|
||||||
|
];
|
||||||
|
endpoint = "85.88.23.127:51820";
|
||||||
|
persistentKeepalive = 16;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg3 = {
|
||||||
|
autostart = false;
|
||||||
|
address = [ "10.11.11.2/32" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg3.privatekey";
|
||||||
|
mtu = 1300;
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "7RRgfZSneqAtAHBeI6+aaYLqz9e1jikg/lIK8mhW928=";
|
||||||
|
presharedKeyFile = "/etc/wireguard/wg3.presharedkey";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.11.11.0/24"
|
||||||
|
"192.168.1.0/24"
|
||||||
|
"10.0.1.0/24"
|
||||||
|
];
|
||||||
|
endpoint = "80.71.153.1:51820";
|
||||||
|
persistentKeepalive = 16;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg4 = {
|
||||||
|
address = [ "fdaa:1:3234:a7b:16a9:0:a:202/120" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg4.privatekey";
|
||||||
|
postUp = "resolvectl dns wg4 fdaa:1:3234::3; resolvectl domain wg4 ~internal";
|
||||||
|
preDown = "resolvectl revert wg4";
|
||||||
|
#dns = [
|
||||||
|
# "fdaa:1:3234::3, internal"
|
||||||
|
#];
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "yUyg63j5+17YeJ7gRhxoQuF6rvdX0JF59M6skytJFTQ=";
|
||||||
|
allowedIPs = [ "fdaa:1:3234::/48" ];
|
||||||
|
#endpoint = "ams1.gateway.6pn.dev:51820";
|
||||||
|
endpoint = "176.58.93.206:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg5 = {
|
||||||
|
autostart = false;
|
||||||
|
address = [ "192.168.13.201/24" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg5.privatekey";
|
||||||
|
postUp = "resolvectl dnsovertls wg5 no; resolvectl dns wg5 192.168.13.1; resolvectl domain wg5 ~fritz.box";
|
||||||
|
preDown = "resolvectl revert wg5";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "UhPW8jebAPaMYqjJfSFO9QAMhk0E+dq4i6lB4Wjg91Q=";
|
||||||
|
presharedKeyFile = "/etc/wireguard/wg5.presharedkey";
|
||||||
|
allowedIPs = [ "192.168.13.0/24" ];
|
||||||
|
endpoint = "svxqr7qjmk9beu7t.myfritz.net:59538";
|
||||||
|
#endpoint = "84.44.134.172:59538";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg6 = {
|
||||||
|
address = [
|
||||||
|
"10.7.6.201/32"
|
||||||
|
"fd00:fae:fae:fae:fae:201::/96"
|
||||||
|
];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg6.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
# nachtigall.pub.solar
|
||||||
|
publicKey = "qzNywKY9RvqTnDO8eLik75/SHveaSk9OObilDzv+xkk=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.1/32"
|
||||||
|
"fd00:fae:fae:fae:fae:1::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "138.201.80.102:51820";
|
||||||
|
endpoint = "[2a01:4f8:172:1c25::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# metronom.pub.solar
|
||||||
|
publicKey = "zOSYGO7MfnOOUnzaTcWiKRQM0qqxR3JQrwx/gtEtHmo=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.3/32"
|
||||||
|
"fd00:fae:fae:fae:fae:3::/96"
|
||||||
|
];
|
||||||
|
endpoint = "49.13.236.167:51820";
|
||||||
|
#endpoint = "[2a01:4f8:c2c:7082::]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# tankstelle.pub.solar
|
||||||
|
publicKey = "iRTlY1lB7nPXf2eXzX8ZZDkfMmXyGjff5/joccbP8Cg=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.4/32"
|
||||||
|
"fd00:fae:fae:fae:fae:4::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.5:51820";
|
||||||
|
endpoint = "[2001:4d88:1ffa:26::5]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# trinkgenossin.pub.solar
|
||||||
|
publicKey = "QWgHovHxtqiQhnHLouSWiT6GIoQDmuvnThYL5c/rvU4=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.5/32"
|
||||||
|
"fd00:fae:fae:fae:fae:5::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "85.215.152.22:51820";
|
||||||
|
endpoint = "[2a01:239:35d:f500::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# delite.pub.solar
|
||||||
|
publicKey = "ZT2qGWgMPwHRUOZmTQHWCRX4m14YwOsiszjsA5bpc2k=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.6/32"
|
||||||
|
"fd00:fae:fae:fae:fae:6::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.5:51820";
|
||||||
|
endpoint = "[2a04:52c0:124:9d8c::2]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# blue-shell.pub.solar
|
||||||
|
publicKey = "bcrIpWrKc1M+Hq4ds3aN1lTaKE26f2rvXhd+93QrzR8=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.7/32"
|
||||||
|
"fd00:fae:fae:fae:fae:7::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.5:51820";
|
||||||
|
endpoint = "[2a03:4000:43:24e::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg7 = {
|
||||||
|
address = [
|
||||||
|
"10.30.30.201/32"
|
||||||
|
"fd00:3030:3030:3030:3030:201::/96"
|
||||||
|
];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg7.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
# pioneer.momo.koeln
|
||||||
|
publicKey = "W9Vn2yv+AZjOD7sqKp4DyMbIz5N++Vjlr+6J3BnXj3o=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.30.30.1/32"
|
||||||
|
"fd00:3030:3030:3030:3030:1::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.4:51820";
|
||||||
|
endpoint = "[2001:4d88:1ffa:26::4]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# mozillavpn
|
||||||
|
moz0 = {
|
||||||
|
autostart = false;
|
||||||
|
address = [
|
||||||
|
"10.142.131.196/32"
|
||||||
|
"fc00:bbbb:bbbb:bb01:d:0:e:83c4/128"
|
||||||
|
];
|
||||||
|
privateKeyFile = "/etc/wireguard/moz0.privatekey";
|
||||||
|
#postUp = "resolvectl dns wg4 fdaa:1:3234::3; resolvectl domain wg4 ~internal";
|
||||||
|
#preDown = "resolvectl revert wg4";
|
||||||
|
#dns = [
|
||||||
|
# "fdaa:1:3234::3, internal"
|
||||||
|
#];
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "ku1NYeOAGbY65YL/JKZhrqVzDJKXQiVj9USXbfkOBA0=";
|
||||||
|
allowedIPs = [
|
||||||
|
"0.0.0.0/0"
|
||||||
|
"::/0"
|
||||||
|
];
|
||||||
|
endpoint = "185.254.75.3:36294";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
52
hosts/dumpyourvms/unbound.nix
Normal file
52
hosts/dumpyourvms/unbound.nix
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
enable = false;
|
||||||
|
localControlSocketPath = "/run/unbound/unbound.ctl";
|
||||||
|
settings = {
|
||||||
|
server = {
|
||||||
|
cache-max-ttl = 14400;
|
||||||
|
cache-min-ttl = 1200;
|
||||||
|
aggressive-nsec = true;
|
||||||
|
prefetch = false;
|
||||||
|
rrset-roundrobin = true;
|
||||||
|
use-caps-for-id = true;
|
||||||
|
do-ip6 = false;
|
||||||
|
hide-identity = true;
|
||||||
|
hide-version = true;
|
||||||
|
do-not-query-localhost = false;
|
||||||
|
tls-cert-bundle = "/etc/ssl/certs/ca-certificates.crt";
|
||||||
|
};
|
||||||
|
|
||||||
|
# fritz.box stub zone
|
||||||
|
stub-zone = {
|
||||||
|
name = "fritz.box";
|
||||||
|
stub-addr = "192.168.13.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
# DNS over DLS forwarding
|
||||||
|
forward-zone = {
|
||||||
|
name = ".";
|
||||||
|
forward-tls-upstream = true;
|
||||||
|
|
||||||
|
forward-addr = [
|
||||||
|
"5.1.66.255@853#dot.ffmuc.net"
|
||||||
|
"185.150.99.255@853#dot.ffmuc.net"
|
||||||
|
"89.233.43.71@853#unicast.censurfridns.dk"
|
||||||
|
"94.130.110.185@853#ns1.dnsprivacy.at"
|
||||||
|
|
||||||
|
"2001:678:e68:f000::@853#dot.ffmuc.net"
|
||||||
|
"2001:678:ed0:f000::@853#dot.ffmuc.net"
|
||||||
|
"2a01:3a0:53:53::0@853#unicast.censurfridns.dk"
|
||||||
|
"2a01:4f8:c0c:3c03::2@853#ns1.dnsprivacy.at"
|
||||||
|
"2a01:4f8:c0c:3bfc::2@853#ns2.dnsprivacy.at"
|
||||||
|
|
||||||
|
"2001:610:1:40ba:145:100:185:15@853#dnsovertls.sinodun.com"
|
||||||
|
"2001:610:1:40ba:145:100:185:16@853#dnsovertls1.sinodun.com"
|
||||||
|
"2a04:b900:0:100::38@853#getdnsapi.net"
|
||||||
|
|
||||||
|
"145.100.185.15@853#dnsovertls.sinodun.com"
|
||||||
|
"145.100.185.16@853#dnsovertls1.sinodun.com"
|
||||||
|
"185.49.141.37@853#getdnsapi.net"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
28
hosts/fae/actual.nix
Normal file
28
hosts/fae/actual.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
flake,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
security.acme.certs = {
|
||||||
|
"actual.faenix.eu" = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts = {
|
||||||
|
"actual.faenix.eu" = {
|
||||||
|
forceSSL = true;
|
||||||
|
useACMEHost = "actual.faenix.eu";
|
||||||
|
locations."/".proxyPass = "http://127.0.0.1:${builtins.toString config.services.actual.settings.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.actual = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
9
hosts/fae/default.nix
Normal file
9
hosts/fae/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./actual.nix
|
||||||
|
./paperless.nix
|
||||||
|
./invoiceplane.nix
|
||||||
|
./fae.nix
|
||||||
|
];
|
||||||
|
}
|
71
hosts/fae/fae.nix
Normal file
71
hosts/fae/fae.nix
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
pub-solar.core.disk-encryption-active = false;
|
||||||
|
|
||||||
|
fileSystems = {
|
||||||
|
"/" = {
|
||||||
|
device = "/dev/disk/by-label/NIXOS_SD";
|
||||||
|
fsType = "ext4";
|
||||||
|
options = [ "noatime" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.hostName = "paperless";
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
allowSFTP = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.kernelParams = [ "boot.shell_on_fail=1" ];
|
||||||
|
|
||||||
|
# Would decrease closure size, but currenly broken (cairo)
|
||||||
|
#environment.noXlibs = true;
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
gc.automatic = true;
|
||||||
|
|
||||||
|
optimise.automatic = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
auto-optimise-store = true;
|
||||||
|
sandbox = true;
|
||||||
|
allowed-users = [ "@wheel" ];
|
||||||
|
trusted-users = [
|
||||||
|
"root"
|
||||||
|
"@wheel"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
extraOptions = ''
|
||||||
|
min-free = 536870912
|
||||||
|
keep-outputs = true
|
||||||
|
keep-derivations = true
|
||||||
|
fallback = true
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# custom raspi boot loader is already present
|
||||||
|
boot.loader.systemd-boot.enable = false;
|
||||||
|
boot.loader.grub.enable = false;
|
||||||
|
boot.loader.generic-extlinux-compatible.enable = true;
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_6_6;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "23.11"; # Did you read the comment?
|
||||||
|
};
|
||||||
|
}
|
80
hosts/fae/invoiceplane.nix
Normal file
80
hosts/fae/invoiceplane.nix
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
{
|
||||||
|
flake,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
||||||
|
backupDir = "/var/lib/invoiceplane/backup";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
security.acme.certs = {
|
||||||
|
"billing.faenix.eu" = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts = {
|
||||||
|
"billing.faenix.eu" = {
|
||||||
|
forceSSL = true;
|
||||||
|
useACMEHost = "billing.faenix.eu";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.invoiceplane = {
|
||||||
|
webserver = "nginx";
|
||||||
|
sites."billing.faenix.eu" = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
invoiceTemplates = [
|
||||||
|
flake.self.inputs.invoiceplane-template.packages.${pkgs.system}.invoiceplane-template
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
IP_URL = "https://billing.faenix.eu";
|
||||||
|
DISABLE_SETUP = true;
|
||||||
|
SETUP_COMPLETED = true;
|
||||||
|
# Useful for debugging, logs to
|
||||||
|
# /var/lib/invoiceplane/<domain>/logs/
|
||||||
|
#ENABLE_DEBUG=true;
|
||||||
|
};
|
||||||
|
|
||||||
|
poolConfig = {
|
||||||
|
"pm" = "dynamic";
|
||||||
|
"pm.max_children" = 32;
|
||||||
|
"pm.max_requests" = 500;
|
||||||
|
"pm.max_spare_servers" = 4;
|
||||||
|
"pm.min_spare_servers" = 2;
|
||||||
|
"pm.start_servers" = 2;
|
||||||
|
"php_admin_value[date.timezone]" = "Europe/Berlin";
|
||||||
|
"php_admin_value[error_log]" = "/var/lib/invoiceplane/billing.faenix.eu/logs/php-error.log";
|
||||||
|
"php_admin_flag[display_errors]" = "off";
|
||||||
|
"php_admin_flag[log_errors]" = "on";
|
||||||
|
"catch_workers_output" = "yes";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [ "d '${backupDir}' 0700 root root - -" ];
|
||||||
|
|
||||||
|
services.restic.backups = {
|
||||||
|
invoiceplane = {
|
||||||
|
paths = [
|
||||||
|
backupDir
|
||||||
|
"/var/lib/invoiceplane/billing.faenix.eu"
|
||||||
|
];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "*-*-* 00:00:00 Etc/UTC";
|
||||||
|
};
|
||||||
|
initialize = true;
|
||||||
|
passwordFile = config.age.secrets."restic-password.age".path;
|
||||||
|
# See https://www.hosting.de/blog/verschluesselte-backups-mit-rclone-und-restic-in-nextcloud/
|
||||||
|
repository = "rclone:cloud.pub.solar:/Backups/InvoicePlane";
|
||||||
|
backupPrepareCommand = ''
|
||||||
|
${pkgs.sudo}/bin/sudo -u invoiceplane ${pkgs.mariadb-client}/bin/mariadb-dump --all-databases --user=invoiceplane > "${backupDir}/invoiceplane-mariadb-dump.sql"
|
||||||
|
'';
|
||||||
|
rcloneConfigFile = config.age.secrets."fae-rclone.conf.age".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
107
hosts/fae/paperless.nix
Normal file
107
hosts/fae/paperless.nix
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
{
|
||||||
|
flake,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
||||||
|
|
||||||
|
dataDir = "${xdg.dataHome}/Paperless";
|
||||||
|
backupDir = "${xdg.dataHome}/PaperlessBackup";
|
||||||
|
consumptionDir = "/home/${psCfg.user.name}/.local/share/scandir";
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.paperless = {
|
||||||
|
enable = true;
|
||||||
|
user = psCfg.user.name;
|
||||||
|
consumptionDir = consumptionDir;
|
||||||
|
dataDir = dataDir;
|
||||||
|
address = "127.0.0.1";
|
||||||
|
settings = {
|
||||||
|
PAPERLESS_ADMIN_USER = psCfg.user.name;
|
||||||
|
PAPERLESS_AUTO_LOGIN_USERNAME = psCfg.user.name;
|
||||||
|
PAPERLESS_URL = "https://paperless.faenix.eu";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware.sane = {
|
||||||
|
enable = true;
|
||||||
|
# No aarch64 support for now
|
||||||
|
#brscan5.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users."${psCfg.user.name}" = {
|
||||||
|
home.sessionVariables = {
|
||||||
|
SCANNER_OUTPUT_DIR = consumptionDir;
|
||||||
|
};
|
||||||
|
systemd.user.sessionVariables = {
|
||||||
|
SCANNER_OUTPUT_DIR = consumptionDir;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme.certs = {
|
||||||
|
"paperless.faenix.eu" = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
recommendedOptimisation = true;
|
||||||
|
recommendedGzipSettings = true;
|
||||||
|
recommendedTlsSettings = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
clientMaxBodySize = "256m";
|
||||||
|
|
||||||
|
virtualHosts = {
|
||||||
|
"paperless.faenix.eu" = {
|
||||||
|
#listenAddresses = [
|
||||||
|
# "192.168.13.35"
|
||||||
|
#];
|
||||||
|
forceSSL = true;
|
||||||
|
useACMEHost = "paperless.faenix.eu";
|
||||||
|
locations."/".proxyPass = "http://127.0.0.1:${builtins.toString config.services.paperless.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /home/${psCfg.user.name}/.local 0700 ${psCfg.user.name} users - -"
|
||||||
|
"d /home/${psCfg.user.name}/.local/share 0700 ${psCfg.user.name} users - -"
|
||||||
|
"d '${backupDir}' 0700 ${psCfg.user.name} users - -"
|
||||||
|
];
|
||||||
|
|
||||||
|
age.secrets."fae-rclone.conf.age" = {
|
||||||
|
file = "${flake.self}/secrets/fae-rclone.conf.age";
|
||||||
|
path = "/root/.config/rclone/rclone.conf";
|
||||||
|
mode = "400";
|
||||||
|
};
|
||||||
|
|
||||||
|
age.secrets."restic-password.age" = {
|
||||||
|
file = "${flake.self}/secrets/restic-password.age";
|
||||||
|
mode = "400";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.restic.backups = {
|
||||||
|
paperless = {
|
||||||
|
paths = [ backupDir ];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "*-*-* 01:00:00 Etc/UTC";
|
||||||
|
};
|
||||||
|
initialize = true;
|
||||||
|
passwordFile = config.age.secrets."restic-password.age".path;
|
||||||
|
# See https://www.hosting.de/blog/verschluesselte-backups-mit-rclone-und-restic-in-nextcloud/
|
||||||
|
repository = "rclone:cloud.pub.solar:/Backups/Paperless";
|
||||||
|
backupPrepareCommand = "${dataDir}/paperless-manage document_exporter ${backupDir} -c -p";
|
||||||
|
rcloneConfigFile = config.age.secrets."fae-rclone.conf.age".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
8
hosts/iso/default.nix
Normal file
8
hosts/iso/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
pub-solar.core.disk-encryption-active = false;
|
||||||
|
isoImage.squashfsCompression = "gzip -Xcompression-level 1";
|
||||||
|
systemd.services.sshd.wantedBy = lib.mkForce [ "multi-user.target" ];
|
||||||
|
networking.networkmanager.enable = false;
|
||||||
|
nixpkgs.hostPlatform = "x86_64-linux";
|
||||||
|
}
|
4
hosts/powder/default.nix
Normal file
4
hosts/powder/default.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = [ ./powder.nix ];
|
||||||
|
}
|
50
hosts/powder/hardware-configuration.nix
Normal file
50
hosts/powder/hardware-configuration.nix
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# 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 = [ ];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"ahci"
|
||||||
|
"virtio_pci"
|
||||||
|
"xhci_pci"
|
||||||
|
"sr_mod"
|
||||||
|
"virtio_blk"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/nixos";
|
||||||
|
autoResize = true;
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-label/boot";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/data" = {
|
||||||
|
device = "/dev/disk/by-label/ephemeral0";
|
||||||
|
fsType = "ext4";
|
||||||
|
options = [
|
||||||
|
"defaults"
|
||||||
|
"nofail"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
networking.useDHCP = lib.mkDefault false;
|
||||||
|
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
87
hosts/powder/powder.nix
Normal file
87
hosts/powder/powder.nix
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
profiles,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
# Include the results of the hardware scan.
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
profiles.users.root # make sure to configure ssh keys
|
||||||
|
profiles.users.pub-solar
|
||||||
|
profiles.base-user
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
pub-solar.core.iso-options.enable = true;
|
||||||
|
|
||||||
|
# Use the systemd-boot EFI boot loader.
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# Force getting the hostname from cloud-init
|
||||||
|
networking.hostName = lib.mkDefault "";
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
# time.timeZone = "Europe/Amsterdam";
|
||||||
|
|
||||||
|
# Select internationalisation properties.
|
||||||
|
console = {
|
||||||
|
font = "Lat2-Terminus16";
|
||||||
|
keyMap = "us";
|
||||||
|
};
|
||||||
|
|
||||||
|
# List packages installed in system profile. To search, run:
|
||||||
|
# $ nix search wget
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
git
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
caddy
|
||||||
|
];
|
||||||
|
|
||||||
|
# Some programs need SUID wrappers, can be configured further or are
|
||||||
|
# started in user sessions.
|
||||||
|
# programs.mtr.enable = true;
|
||||||
|
# programs.gnupg.agent = {
|
||||||
|
# enable = true;
|
||||||
|
# enableSSHSupport = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# List services that you want to enable:
|
||||||
|
services.cloud-init.enable = true;
|
||||||
|
services.cloud-init.ext4.enable = true;
|
||||||
|
services.cloud-init.network.enable = true;
|
||||||
|
# use the default NixOS cloud-init config, but add some SmartOS customization to it
|
||||||
|
environment.etc."cloud/cloud.cfg.d/90_smartos.cfg".text = ''
|
||||||
|
datasource_list: [ SmartOS ]
|
||||||
|
|
||||||
|
# Do not create the centos/ubuntu/debian user
|
||||||
|
users: [ ]
|
||||||
|
|
||||||
|
# mount second disk with label ephemeral0, gets formated by cloud-init
|
||||||
|
# this will fail to get added to /etc/fstab as it's read-only, but should
|
||||||
|
# mount at boot anyway
|
||||||
|
mounts:
|
||||||
|
- [ vdb, /data, auto, "defaults,nofail" ]
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Enable the OpenSSH daemon.
|
||||||
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
# Triton manages firewall rules via the triton fwrule subcommand
|
||||||
|
networking.firewall.enable = false;
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "22.05"; # Did you read the comment?
|
||||||
|
};
|
||||||
|
}
|
6
hosts/ryzensun/.config/sway/config.d/autostart.conf
Normal file
6
hosts/ryzensun/.config/sway/config.d/autostart.conf
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Autostart applications
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# exec swayidle
|
||||||
|
|
||||||
|
exec qMasterPassword
|
|
@ -0,0 +1,3 @@
|
||||||
|
# switch keyboard input language
|
||||||
|
#bindsym $mod+tab exec swaymsg input "1118:1896:Microsoft_Microsoft___SiderWinderTM_X4_Keyboard_Consumer_Control" xkb_switch_layout next
|
||||||
|
bindsym $mod+tab exec swaymsg input "7504:24868:Ultimate_Gadget_Laboratories_UHK_60_v2" xkb_switch_layout next
|
33
hosts/ryzensun/.config/sway/config.d/input-defaults.conf
Normal file
33
hosts/ryzensun/.config/sway/config.d/input-defaults.conf
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
### Input configuration
|
||||||
|
#
|
||||||
|
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
||||||
|
# Read `man 5 sway-input` for more information about this section.
|
||||||
|
|
||||||
|
input "type:keyboard" {
|
||||||
|
xkb_layout us(intl),de
|
||||||
|
xkb_options ctrl:nocaps
|
||||||
|
}
|
||||||
|
|
||||||
|
input "type:touchpad" {
|
||||||
|
natural_scroll enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
# Touchpad controls
|
||||||
|
#bindsym XF86TouchpadToggle exec $HOME/Workspace/ben/toggletouchpad.sh # toggle touchpad
|
||||||
|
|
||||||
|
# Screen brightness controls
|
||||||
|
bindsym XF86MonBrightnessUp exec "brightnessctl -d intel_backlight set +10%"
|
||||||
|
bindsym XF86MonBrightnessDown exec "brightnessctl -d intel_backlight set 10%-"
|
||||||
|
|
||||||
|
# Keyboard backlight brightness controls
|
||||||
|
bindsym XF86KbdBrightnessDown exec "brightnessctl -d smc::kbd_backlight set 10%-"
|
||||||
|
bindsym XF86KbdBrightnessUp exec "brightnessctl -d smc::kbd_backlight set +10%"
|
||||||
|
|
||||||
|
# Pulse Audio controls
|
||||||
|
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%; exec pactl set-sink-mute @DEFAULT_SINK@ 0 #increase sound volume
|
||||||
|
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%; exec pactl set-sink-mute @DEFAULT_SINK@ 0 #decrease sound volume
|
||||||
|
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle # mute sound
|
||||||
|
# Media player controls
|
||||||
|
bindsym XF86AudioPlay exec "playerctl play-pause; notify-send 'Play/Pause'"
|
||||||
|
bindsym XF86AudioNext exec "playerctl next; notify-send 'Next'"
|
||||||
|
bindsym XF86AudioPrev exec "playerctl previous; notify-send 'Prev.'"
|
33
hosts/ryzensun/.config/sway/config.d/screens.conf
Normal file
33
hosts/ryzensun/.config/sway/config.d/screens.conf
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
### Output configuration
|
||||||
|
#
|
||||||
|
# Example configuration:
|
||||||
|
#
|
||||||
|
# output HDMI-A-1 resolution 1920x1080 position 1920,0
|
||||||
|
#
|
||||||
|
# You can get the names of your outputs by running: swaymsg -t get_outputs
|
||||||
|
|
||||||
|
set $main_screen HDMI-A-1
|
||||||
|
|
||||||
|
output $main_screen scale 1
|
||||||
|
|
||||||
|
#bindswitch lid:on output $main_screen disable
|
||||||
|
#bindswitch lid:off output $main_screen enable
|
||||||
|
bindsym $mod+Shift+x output $main_screen toggle
|
||||||
|
|
||||||
|
# TODO when using more monitors
|
||||||
|
## Manual management of external displays
|
||||||
|
# Set the shortcuts and what they do
|
||||||
|
#set $mode_display HDMI (i) top, (j) left, (k) bottom, (l) right, (o) off
|
||||||
|
#mode "$mode_display" {
|
||||||
|
# bindsym i output HDMI-A-1 enable; output HDMI-A-1 pos 0 0 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 0 1080, mode "default"
|
||||||
|
# bindsym j output HDMI-A-1 enable; output HDMI-A-1 pos 0 0 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 1920 0, mode "default"
|
||||||
|
# bindsym k output HDMI-A-1 enable; output HDMI-A-1 pos 0 900 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 0 0, mode "default"
|
||||||
|
# bindsym l output HDMI-A-1 enable; output HDMI-A-1 pos 1440 0 bg ~/Pictures/wallpapers/active.png fill; output eDP-1 pos 0 0, mode "default"
|
||||||
|
# bindsym o output HDMI-A-1 disable, mode "default"
|
||||||
|
#
|
||||||
|
# # back to normal: Enter or Escape
|
||||||
|
# bindsym Return mode "default"
|
||||||
|
# bindsym Escape mode "default"
|
||||||
|
#}
|
||||||
|
## Declare here the shortcut to bring the display selection menu
|
||||||
|
#bindsym $mod+x mode "$mode_display"
|
9
hosts/ryzensun/default.nix
Normal file
9
hosts/ryzensun/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./ryzensun.nix
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
./networking.nix
|
||||||
|
];
|
||||||
|
}
|
41
hosts/ryzensun/hardware-configuration.nix
Normal file
41
hosts/ryzensun/hardware-configuration.nix
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# 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"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"sd_mod"
|
||||||
|
"sr_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/bad2e49e-c8e7-4516-a6f8-77db999d12b0";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/ef6c5bb0-0bcf-4af4-bbc9-02c849999e54";
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/2C62-C8B5";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
}
|
175
hosts/ryzensun/networking.nix
Normal file
175
hosts/ryzensun/networking.nix
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
hosts = {
|
||||||
|
"10.0.0.42" = [
|
||||||
|
"nomad.service.consul"
|
||||||
|
"nomad.service.cgn-1.consul"
|
||||||
|
];
|
||||||
|
"10.0.0.66" = [ "consul.service.cgn-1.consul" ];
|
||||||
|
"10.0.1.9" = [ "consul.service.lev-1.consul" ];
|
||||||
|
"10.0.0.70" = [
|
||||||
|
"vault.service.consul"
|
||||||
|
"vault.service.cgn-1.consul"
|
||||||
|
];
|
||||||
|
"10.0.0.200" = [ "headnode.cgn-1" ];
|
||||||
|
"10.0.0.201" = [ "cn01.cgn-1" ];
|
||||||
|
"10.0.0.202" = [ "cn02.cgn-1" ];
|
||||||
|
"10.0.0.205" = [ "cn05.cgn-1" ];
|
||||||
|
"10.0.0.206" = [ "cn06.cgn-1" ];
|
||||||
|
"10.0.0.207" = [ "cn07.cgn-1" ];
|
||||||
|
"10.0.0.208" = [ "cn08.cgn-1" ];
|
||||||
|
"10.0.1.200" = [ "headnode.lev-1" ];
|
||||||
|
"10.0.1.201" = [ "cn01.lev-1" ];
|
||||||
|
"10.0.1.202" = [ "cn02.lev-1" ];
|
||||||
|
"10.0.1.203" = [ "cn03.lev-1" ];
|
||||||
|
"10.0.1.204" = [ "cn04.lev-1" ];
|
||||||
|
"10.0.1.205" = [ "cn05.lev-1" ];
|
||||||
|
"10.0.1.206" = [ "cn00.lev-1" ];
|
||||||
|
"10.0.1.207" = [ "cn06.lev-1" ];
|
||||||
|
"10.0.1.208" = [ "cn07.lev-1" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
interfaces.enp4s0.wakeOnLan.enable = true;
|
||||||
|
|
||||||
|
wireguard.enable = true;
|
||||||
|
wg-quick.interfaces = {
|
||||||
|
wg0 = {
|
||||||
|
address = [ "10.8.8.7/32" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg0.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "l0DJLicCrcrixNP6zAWTXNSEaNM2jML253BXEZ1KpiU=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.8.8.16/32"
|
||||||
|
"10.0.0.0/24"
|
||||||
|
"10.88.88.0/24"
|
||||||
|
];
|
||||||
|
endpoint = "85.88.23.16:51820";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg1 = {
|
||||||
|
address = [ "10.11.11.6/32" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg1.privatekey";
|
||||||
|
mtu = 1300;
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "7RRgfZSneqAtAHBeI6+aaYLqz9e1jikg/lIK8mhW928=";
|
||||||
|
presharedKeyFile = "/etc/wireguard/wg1.presharedkey";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.11.11.0/24"
|
||||||
|
"192.168.1.0/24"
|
||||||
|
"10.0.1.0/24"
|
||||||
|
];
|
||||||
|
endpoint = "80.71.153.1:51820";
|
||||||
|
#persistentKeepalive = 16;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wg2 = {
|
||||||
|
address = [ "10.7.6.204/32" ];
|
||||||
|
privateKeyFile = "/etc/wireguard/wg2.privatekey";
|
||||||
|
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
# nachtigall.pub.solar
|
||||||
|
publicKey = "qzNywKY9RvqTnDO8eLik75/SHveaSk9OObilDzv+xkk=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.1/32"
|
||||||
|
"fd00:fae:fae:fae:fae:1::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "138.201.80.102:51820";
|
||||||
|
endpoint = "[2a01:4f8:172:1c25::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# metronom.pub.solar
|
||||||
|
publicKey = "zOSYGO7MfnOOUnzaTcWiKRQM0qqxR3JQrwx/gtEtHmo=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.3/32"
|
||||||
|
"fd00:fae:fae:fae:fae:3::/96"
|
||||||
|
];
|
||||||
|
endpoint = "49.13.236.167:51820";
|
||||||
|
#endpoint = "[2a01:4f8:c2c:7082::]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# tankstelle.pub.solar
|
||||||
|
publicKey = "iRTlY1lB7nPXf2eXzX8ZZDkfMmXyGjff5/joccbP8Cg=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.4/32"
|
||||||
|
"fd00:fae:fae:fae:fae:4::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.5:51820";
|
||||||
|
endpoint = "[2001:4d88:1ffa:26::5]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# trinkgenossin.pub.solar
|
||||||
|
publicKey = "QWgHovHxtqiQhnHLouSWiT6GIoQDmuvnThYL5c/rvU4=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.5/32"
|
||||||
|
"fd00:fae:fae:fae:fae:5::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "85.215.152.22:51820";
|
||||||
|
endpoint = "[2a01:239:35d:f500::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# delite.pub.solar
|
||||||
|
publicKey = "ZT2qGWgMPwHRUOZmTQHWCRX4m14YwOsiszjsA5bpc2k=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.6/32"
|
||||||
|
"fd00:fae:fae:fae:fae:6::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.5:51820";
|
||||||
|
endpoint = "[2a04:52c0:124:9d8c::2]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# blue-shell.pub.solar
|
||||||
|
publicKey = "bcrIpWrKc1M+Hq4ds3aN1lTaKE26f2rvXhd+93QrzR8=";
|
||||||
|
allowedIPs = [
|
||||||
|
"10.7.6.7/32"
|
||||||
|
"fd00:fae:fae:fae:fae:7::/96"
|
||||||
|
];
|
||||||
|
#endpoint = "80.244.242.5:51820";
|
||||||
|
endpoint = "[2a03:4000:43:24e::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
#wg1 = {
|
||||||
|
# address = [ "10.13.0.1/32" ];
|
||||||
|
# privateKeyFile = "/etc/wireguard/wg1.privatekey";
|
||||||
|
# mtu = 1412;
|
||||||
|
|
||||||
|
# peers = [
|
||||||
|
# {
|
||||||
|
# publicKey = "XS3TTIMU7Jp3JJANBpE14RsVDJk6/VUvZgjQgQP8kAs=";
|
||||||
|
# allowedIPs = [ "10.13.0.100/32" "192.168.188.0/24" ];
|
||||||
|
# endpoint = "[2a00:6020:48ad:dd00:dea6:32ff:fe85:3306]:51820";
|
||||||
|
# persistentKeepalive = 25;
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
#};
|
||||||
|
#wg2 = {
|
||||||
|
# address = [ "10.6.6.4/32" ];
|
||||||
|
# privateKeyFile = "/etc/wireguard/wg2.privatekey";
|
||||||
|
|
||||||
|
# peers = [
|
||||||
|
# {
|
||||||
|
# publicKey = "nYMmaCIW8lZ7SokivN8HXxYDch+SS1G7ab1SC9meDAw=";
|
||||||
|
# presharedKeyFile = "/etc/wireguard/wg2.presharedkey";
|
||||||
|
# allowedIPs = [ "10.6.6.1/32" "10.1.1.0/24" ];
|
||||||
|
# endpoint = "85.88.23.127:51820";
|
||||||
|
# persistentKeepalive = 16;
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
#};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
88
hosts/ryzensun/ryzensun.nix
Normal file
88
hosts/ryzensun/ryzensun.nix
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
flake,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
age.secrets.docker-ci-runner-secrets = {
|
||||||
|
file = "${flake.self}/secrets/docker-ci-runner-secrets.age";
|
||||||
|
mode = "600";
|
||||||
|
owner = "999";
|
||||||
|
};
|
||||||
|
|
||||||
|
pub-solar.terminal-life.full = true;
|
||||||
|
#pub-solar.docker-ci-runner = {
|
||||||
|
# enable = false;
|
||||||
|
# runnerEnvironment = {
|
||||||
|
# DRONE_RUNNER_CAPACITY = "1";
|
||||||
|
# DRONE_RUNNER_LABELS = "hosttype:baremetal";
|
||||||
|
# };
|
||||||
|
# runnerVarsFile = config.age.secrets.docker-ci-runner-secrets.path;
|
||||||
|
#};
|
||||||
|
|
||||||
|
boot.kernelParams = [ "amd_pstate=active" ];
|
||||||
|
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
|
||||||
|
|
||||||
|
# Required for WakeOnLan
|
||||||
|
boot.initrd = {
|
||||||
|
availableKernelModules = [ "r8169" ];
|
||||||
|
network = {
|
||||||
|
enable = true;
|
||||||
|
udhcpc.enable = true;
|
||||||
|
flushBeforeStage2 = true;
|
||||||
|
ssh = {
|
||||||
|
enable = true;
|
||||||
|
# To prevent ssh clients from freaking out because a different host key is used,
|
||||||
|
# a different port for ssh is useful (assuming the same host has also a regular sshd running)
|
||||||
|
port = 2222;
|
||||||
|
|
||||||
|
# Please create this manually the first time.
|
||||||
|
# sudo ssh-keygen -t ed25519 -N "" -f /etc/secrets/initrd/ssh_host_ed25519_key
|
||||||
|
hostKeys = [ "/etc/secrets/initrd/ssh_host_ed25519_key" ];
|
||||||
|
authorizedKeys = psCfg.user.publicKeys;
|
||||||
|
};
|
||||||
|
postCommands = ''
|
||||||
|
# Automatically ask for the password on SSH login
|
||||||
|
echo 'cryptsetup-askpass || echo "Unlock was successful; exiting SSH session" && exit 1' >> /root/.profile
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.fstrim.enable = true;
|
||||||
|
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
allowSFTP = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.hostName = "ryzensun";
|
||||||
|
|
||||||
|
hardware.keyboard.uhk.enable = true;
|
||||||
|
|
||||||
|
hardware.cpu.amd.updateMicrocode = true;
|
||||||
|
|
||||||
|
home-manager.users."${psCfg.user.name}".xdg.configFile = {
|
||||||
|
"sway/config.d/10-custom-keybindings.conf".source = ./.config/sway/config.d/custom-keybindings.conf;
|
||||||
|
"sway/config.d/autostart.conf".source = ./.config/sway/config.d/autostart.conf;
|
||||||
|
"sway/config.d/input-defaults.conf".source = ./.config/sway/config.d/input-defaults.conf;
|
||||||
|
"sway/config.d/screens.conf".source = ./.config/sway/config.d/screens.conf;
|
||||||
|
};
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "21.05"; # Did you read the comment?
|
||||||
|
};
|
||||||
|
}
|
5
lib/add-local-hostname.nix
Normal file
5
lib/add-local-hostname.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ lib }:
|
||||||
|
hostnames: {
|
||||||
|
"127.0.0.1" = hostnames;
|
||||||
|
"::1" = hostnames;
|
||||||
|
}
|
|
@ -1,16 +1,16 @@
|
||||||
let
|
let
|
||||||
lock = builtins.fromJSON (builtins.readFile builtins.path {
|
lock = builtins.fromJSON (
|
||||||
|
builtins.readFile builtins.path {
|
||||||
path = ../../flake.lock;
|
path = ../../flake.lock;
|
||||||
name = "lockPath";
|
name = "lockPath";
|
||||||
});
|
}
|
||||||
|
);
|
||||||
flake =
|
flake =
|
||||||
import
|
import
|
||||||
(
|
(fetchTarball {
|
||||||
fetchTarball {
|
|
||||||
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||||
sha256 = lock.nodes.flake-compat.locked.narHash;
|
sha256 = lock.nodes.flake-compat.locked.narHash;
|
||||||
}
|
})
|
||||||
)
|
|
||||||
{
|
{
|
||||||
src = builtins.path {
|
src = builtins.path {
|
||||||
path = ../../.;
|
path = ../../.;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{...}: let
|
{ ... }:
|
||||||
|
let
|
||||||
inherit (default.inputs.nixos) lib;
|
inherit (default.inputs.nixos) lib;
|
||||||
|
|
||||||
host = configs.${hostname} or configs.PubSolarOS;
|
host = configs.${hostname} or configs.PubSolarOS;
|
||||||
|
|
|
@ -1,10 +1,20 @@
|
||||||
{lib}:
|
{ lib, inputs, ... }:
|
||||||
lib.makeExtensible (self: let
|
{
|
||||||
callLibs = file: import file {lib = self;};
|
# Configuration common to all Linux systems
|
||||||
in rec {
|
flake = {
|
||||||
|
lib =
|
||||||
|
let
|
||||||
|
callLibs = file: import file { inherit lib; };
|
||||||
|
in
|
||||||
|
rec {
|
||||||
## Define your own library functions here!
|
## Define your own library functions here!
|
||||||
#id = x: x;
|
#id = x: x;
|
||||||
## Or in files, containing functions that take {lib}
|
## Or in files, containing functions that take {lib}
|
||||||
#foo = callLibs ./foo.nix;
|
#foo = callLibs ./foo.nix;
|
||||||
## In configs, they can be used under "lib.our"
|
## In configs, they can be used under "lib.our"
|
||||||
})
|
|
||||||
|
deploy = import ./deploy.nix { inherit inputs lib; };
|
||||||
|
addLocalHostname = callLibs ./add-local-hostname.nix;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
80
lib/deploy.nix
Normal file
80
lib/deploy.nix
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
The contents of this file are adapted from digga
|
||||||
|
https://github.com/divnix/digga
|
||||||
|
|
||||||
|
Licensed under the MIT license
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ lib, inputs }:
|
||||||
|
let
|
||||||
|
getFqdn =
|
||||||
|
c:
|
||||||
|
let
|
||||||
|
net = c.config.networking;
|
||||||
|
fqdn =
|
||||||
|
if (net ? domain) && (net.domain != null) then "${net.hostName}.${net.domain}" else net.hostName;
|
||||||
|
in
|
||||||
|
fqdn;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
mkDeployNodes =
|
||||||
|
systemConfigurations: extraConfig:
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
Synopsis: mkNodes _systemConfigurations_ _extraConfig_
|
||||||
|
|
||||||
|
Generate the `nodes` attribute expected by deploy-rs
|
||||||
|
where _systemConfigurations_ are `nodes`.
|
||||||
|
|
||||||
|
_systemConfigurations_ should take the form of a flake's
|
||||||
|
_nixosConfigurations_. Note that deploy-rs does not currently support
|
||||||
|
deploying to darwin hosts.
|
||||||
|
|
||||||
|
_extraConfig_, if specified, will be merged into each of the
|
||||||
|
nodes' configurations.
|
||||||
|
|
||||||
|
Example _systemConfigurations_ input:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
hostname-1 = {
|
||||||
|
fastConnection = true;
|
||||||
|
sshOpts = [ "-p" "25" ];
|
||||||
|
};
|
||||||
|
hostname-2 = {
|
||||||
|
sshOpts = [ "-p" "19999" ];
|
||||||
|
sshUser = "root";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
lib.recursiveUpdate (lib.mapAttrs (_: c: {
|
||||||
|
hostname = getFqdn c;
|
||||||
|
profiles.system =
|
||||||
|
let
|
||||||
|
system = c.pkgs.system;
|
||||||
|
|
||||||
|
# Unmodified nixpkgs
|
||||||
|
pkgs = import inputs.nixpkgs { inherit system; };
|
||||||
|
|
||||||
|
# nixpkgs with deploy-rs overlay but force the nixpkgs package
|
||||||
|
deployPkgs = import inputs.nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
overlays = [
|
||||||
|
inputs.deploy-rs.overlays.default
|
||||||
|
(self: super: {
|
||||||
|
deploy-rs = {
|
||||||
|
inherit (pkgs) deploy-rs;
|
||||||
|
lib = super.deploy-rs.lib;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
user = "root";
|
||||||
|
path = deployPkgs.deploy-rs.lib.activate.nixos c;
|
||||||
|
};
|
||||||
|
}) systemConfigurations) extraConfig;
|
||||||
|
}
|
28
modules/acme/default.nix
Normal file
28
modules/acme/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
flake,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
age.secrets."hosting-de-acme-secrets" = {
|
||||||
|
file = "${flake.self}/secrets/hosting-de-acme-secrets.age";
|
||||||
|
mode = "400";
|
||||||
|
owner = "acme";
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme = {
|
||||||
|
acceptTerms = true;
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
email = "jfw@miom.space";
|
||||||
|
# server = "https://acme-staging-v02.api.letsencrypt.org/directory";
|
||||||
|
dnsProvider = "hostingde";
|
||||||
|
dnsPropagationCheck = true;
|
||||||
|
environmentFile = config.age.secrets."hosting-de-acme-secrets".path;
|
||||||
|
group = "nginx";
|
||||||
|
webroot = null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
121
modules/actual/default.nix
Normal file
121
modules/actual/default.nix
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib)
|
||||||
|
getExe
|
||||||
|
mkDefault
|
||||||
|
mkEnableOption
|
||||||
|
mkIf
|
||||||
|
mkOption
|
||||||
|
mkPackageOption
|
||||||
|
types
|
||||||
|
;
|
||||||
|
|
||||||
|
cfg = config.services.actual;
|
||||||
|
configFile = formatType.generate "config.json" cfg.settings;
|
||||||
|
dataDir = "/var/lib/actual";
|
||||||
|
|
||||||
|
formatType = pkgs.formats.json { };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.actual = {
|
||||||
|
enable = mkEnableOption "actual, a privacy focused app for managing your finances";
|
||||||
|
package = mkPackageOption pkgs "actual-server" { };
|
||||||
|
|
||||||
|
openFirewall = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = "Whether to open the firewall for the specified port.";
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = mkOption {
|
||||||
|
default = { };
|
||||||
|
description = "Server settings, refer to (the documentation)[https://actualbudget.org/docs/config/] for available options.";
|
||||||
|
type = types.submodule {
|
||||||
|
freeformType = formatType.type;
|
||||||
|
|
||||||
|
options = {
|
||||||
|
hostname = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "The address to listen on";
|
||||||
|
default = "::";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
description = "The port to listen on";
|
||||||
|
default = 3000;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
serverFiles = mkDefault "${dataDir}/server-files";
|
||||||
|
userFiles = mkDefault "${dataDir}/user-files";
|
||||||
|
dataDir = mkDefault dataDir;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.settings.port ];
|
||||||
|
|
||||||
|
systemd.services.actual = {
|
||||||
|
description = "Actual server, a local-first personal finance app";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
environment.ACTUAL_CONFIG_PATH = configFile;
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = getExe cfg.package;
|
||||||
|
DynamicUser = true;
|
||||||
|
User = "actual";
|
||||||
|
Group = "actual";
|
||||||
|
StateDirectory = "actual";
|
||||||
|
WorkingDirectory = dataDir;
|
||||||
|
LimitNOFILE = "1048576";
|
||||||
|
PrivateTmp = true;
|
||||||
|
PrivateDevices = true;
|
||||||
|
StateDirectoryMode = "0700";
|
||||||
|
Restart = "always";
|
||||||
|
|
||||||
|
# Hardening
|
||||||
|
CapabilityBoundingSet = "";
|
||||||
|
LockPersonality = true;
|
||||||
|
#MemoryDenyWriteExecute = true; # Leads to coredump because V8 does JIT
|
||||||
|
PrivateUsers = true;
|
||||||
|
ProtectClock = true;
|
||||||
|
ProtectControlGroups = true;
|
||||||
|
ProtectHome = true;
|
||||||
|
ProtectHostname = true;
|
||||||
|
ProtectKernelLogs = true;
|
||||||
|
ProtectKernelModules = true;
|
||||||
|
ProtectKernelTunables = true;
|
||||||
|
ProtectProc = "invisible";
|
||||||
|
ProcSubset = "pid";
|
||||||
|
ProtectSystem = "strict";
|
||||||
|
RestrictAddressFamilies = [
|
||||||
|
"AF_INET"
|
||||||
|
"AF_INET6"
|
||||||
|
"AF_NETLINK"
|
||||||
|
];
|
||||||
|
RestrictNamespaces = true;
|
||||||
|
RestrictRealtime = true;
|
||||||
|
SystemCallArchitectures = "native";
|
||||||
|
SystemCallFilter = [
|
||||||
|
"@system-service"
|
||||||
|
"@pkey"
|
||||||
|
];
|
||||||
|
UMask = "0077";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
meta.maintainers = [
|
||||||
|
lib.maintainers.oddlama
|
||||||
|
lib.maintainers.patrickdag
|
||||||
|
];
|
||||||
|
}
|
16
modules/adb/default.nix
Normal file
16
modules/adb/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.adb.enable = true;
|
||||||
|
|
||||||
|
users.users."${psCfg.user.name}" = {
|
||||||
|
extraGroups = [ "adbusers" ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -4,24 +4,15 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.devops;
|
in
|
||||||
in {
|
{
|
||||||
options.pub-solar.arduino = {
|
users.users."${psCfg.user.name}" = {
|
||||||
enable = mkEnableOption "Life with home automation";
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
users.users = pkgs.lib.setAttrByPath [psCfg.user.name] {
|
|
||||||
extraGroups = [ "dialout" ];
|
extraGroups = [ "dialout" ];
|
||||||
};
|
packages = with pkgs; [
|
||||||
|
|
||||||
home-manager = with pkgs;
|
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
home.packages = [
|
|
||||||
arduino
|
arduino
|
||||||
arduino-cli
|
arduino-cli
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,33 +4,14 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.audio;
|
|
||||||
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
xdg = config.home-manager.users."${psCfg.user.name}".xdg;
|
||||||
in {
|
in
|
||||||
options.pub-solar.audio = {
|
{
|
||||||
enable = mkEnableOption "Life in highs and lows";
|
users.users."${psCfg.user.name}" = {
|
||||||
mopidy.enable = mkEnableOption "Life with mopidy";
|
|
||||||
spotify.enable = mkEnableOption "Life in DRM";
|
|
||||||
spotify.username = mkOption {
|
|
||||||
description = "Spotify login username or email";
|
|
||||||
type = types.str;
|
|
||||||
example = "yourname@example.com";
|
|
||||||
default = "";
|
|
||||||
};
|
|
||||||
bluetooth.enable = mkEnableOption "Life with bluetooth";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
users.users = pkgs.lib.setAttrByPath [psCfg.user.name] {
|
|
||||||
extraGroups = [ "audio" ];
|
extraGroups = [ "audio" ];
|
||||||
};
|
packages = with pkgs; [
|
||||||
|
|
||||||
home-manager = with pkgs;
|
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
home.packages =
|
|
||||||
[
|
|
||||||
# easyeffects, e.g. for microphone noise filtering
|
# easyeffects, e.g. for microphone noise filtering
|
||||||
easyeffects
|
easyeffects
|
||||||
mu
|
mu
|
||||||
|
@ -40,81 +21,35 @@ in {
|
||||||
# Needed for pactl cmd, until pw-cli is more mature (vol up/down hotkeys?)
|
# Needed for pactl cmd, until pw-cli is more mature (vol up/down hotkeys?)
|
||||||
pulseaudio
|
pulseaudio
|
||||||
vimpc
|
vimpc
|
||||||
]
|
];
|
||||||
++ (
|
};
|
||||||
if cfg.spotify.enable
|
|
||||||
then [pkgs.spotify-tui]
|
home-manager.users."${psCfg.user.name}" = {
|
||||||
else []
|
|
||||||
);
|
|
||||||
xdg.configFile."vimpc/vimpcrc".source = ./.config/vimpc/vimpcrc;
|
xdg.configFile."vimpc/vimpcrc".source = ./.config/vimpc/vimpcrc;
|
||||||
systemd.user.services.easyeffects = import ./easyeffects.service.nix pkgs;
|
systemd.user.services.easyeffects = import ./easyeffects.service.nix pkgs;
|
||||||
|
|
||||||
services.spotifyd = mkIf cfg.spotify.enable {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
global = {
|
|
||||||
username = cfg.spotify.username;
|
|
||||||
password_cmd = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus ${pkgs.libsecret}/bin/secret-tool lookup spotify password";
|
|
||||||
bitrate = 320;
|
|
||||||
volume_normalisation = true;
|
|
||||||
no_audio_cache = false;
|
|
||||||
max_cache_size = 1000000000;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# rtkit is optional but recommended
|
# rtkit is optional but recommended
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
# Enable sound using pipewire-pulse, default config:
|
|
||||||
# https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/src/daemon/pipewire.conf.in
|
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
alsa.enable = true;
|
alsa.enable = true;
|
||||||
alsa.support32Bit = true;
|
alsa.support32Bit = true;
|
||||||
pulse.enable = true;
|
pulse.enable = true;
|
||||||
};
|
# https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#setting-sample-rates
|
||||||
|
extraConfig.pipewire = {
|
||||||
# Make pulseaudio listen on port 4713 for mopidy, extending the default
|
"10-clock-rate" = {
|
||||||
# config: https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/src/daemon/pipewire-pulse.conf.in
|
"context.properties" = {
|
||||||
environment.etc = mkIf cfg.mopidy.enable {
|
default = {
|
||||||
"pipewire/pipewire-pulse.conf.d/99-custom.conf".text = ''
|
"clock.rate" = 48000; # Pipewire default
|
||||||
{
|
"clock.allowed-rates" = [
|
||||||
"context.modules": [
|
44100
|
||||||
{
|
48000
|
||||||
"name": "libpipewire-module-protocol-pulse",
|
|
||||||
"args": {
|
|
||||||
"server.address": ["unix:native", "tcp:4713"],
|
|
||||||
"vm.overrides": {
|
|
||||||
"pulse.min.quantum": "1024/48000"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable bluetooth
|
|
||||||
hardware.bluetooth = mkIf cfg.bluetooth.enable {
|
|
||||||
enable = true;
|
|
||||||
# Disable bluetooth on startup to save battery
|
|
||||||
powerOnBoot = false;
|
|
||||||
# Disable useless SIM Access Profile plugin
|
|
||||||
disabledPlugins = [
|
|
||||||
"sap"
|
|
||||||
];
|
];
|
||||||
settings = {
|
|
||||||
General = {
|
|
||||||
# Enables experimental features and interfaces.
|
|
||||||
# Makes BlueZ Battery Provider available
|
|
||||||
Experimental = true;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
services.blueman.enable = mkIf cfg.bluetooth.enable true;
|
};
|
||||||
|
|
||||||
# Enable audio server & client
|
|
||||||
services.mopidy = mkIf cfg.mopidy.enable ((import ./mopidy.nix) pkgs);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
pkgs: {
|
|
||||||
enable = true;
|
|
||||||
extensionPackages = with pkgs; [
|
|
||||||
mopidy-mpd
|
|
||||||
mopidy-soundcloud
|
|
||||||
mopidy-youtube
|
|
||||||
mopidy-local
|
|
||||||
mopidy-jellyfin
|
|
||||||
];
|
|
||||||
|
|
||||||
configuration = ''
|
|
||||||
[mpd]
|
|
||||||
hostname = ::
|
|
||||||
|
|
||||||
[audio]
|
|
||||||
output = pulsesink server=127.0.0.1:4713
|
|
||||||
'';
|
|
||||||
}
|
|
36
modules/bluetooth/default.nix
Normal file
36
modules/bluetooth/default.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
hardware.bluetooth = {
|
||||||
|
enable = true;
|
||||||
|
# Disable bluetooth on startup to save battery
|
||||||
|
powerOnBoot = false;
|
||||||
|
package = pkgs.bluez-experimental;
|
||||||
|
# Disable useless SIM Access Profile plugin
|
||||||
|
disabledPlugins = [ "sap" ];
|
||||||
|
settings = {
|
||||||
|
General = {
|
||||||
|
# Enables experimental features and interfaces.
|
||||||
|
# Makes BlueZ Battery Provider available
|
||||||
|
Experimental = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.blueman.enable = true;
|
||||||
|
services.pipewire.wireplumber.configPackages = [
|
||||||
|
# https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/bluetooth.html
|
||||||
|
(pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/10-bluez.conf" ''
|
||||||
|
monitor.bluez.properties = {
|
||||||
|
bluez5.enable-hw-volume = true
|
||||||
|
bluez5.enable-msbc = false
|
||||||
|
bluez5.enable-sbc-xq = true
|
||||||
|
bluez5.headset-roles = [ hsp_hs hsp_ag hfp_hf hfp_ag ]
|
||||||
|
}
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,45 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
psCfg = config.pub-solar;
|
|
||||||
cfg = config.pub-solar.ci-runner;
|
|
||||||
in {
|
|
||||||
options.pub-solar.ci-runner = {
|
|
||||||
enable = mkEnableOption "Enables a systemd service that runs drone-ci-runner";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
systemd.user.services.ci-runner = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
description = "CI runner for the PubSolarOS repository that can run test VM instances with KVM.";
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "simple";
|
|
||||||
Restart = "always";
|
|
||||||
};
|
|
||||||
|
|
||||||
path = [
|
|
||||||
pkgs.git
|
|
||||||
pkgs.nix
|
|
||||||
pkgs.libvirt
|
|
||||||
];
|
|
||||||
|
|
||||||
wantedBy = ["multi-user.target"];
|
|
||||||
after = ["network.target" "libvirtd.service"];
|
|
||||||
|
|
||||||
script = ''${pkgs.drone-runner-exec}/bin/drone-runner-exec daemon /run/agenix/drone-runner-exec-config'';
|
|
||||||
};
|
|
||||||
|
|
||||||
age.secrets."drone-runner-exec-config" = {
|
|
||||||
file = "${self}/secrets/drone-runner-exec-config";
|
|
||||||
mode = "700";
|
|
||||||
owner = psCfg.user.name;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -4,30 +4,21 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
cfg = config.pub-solar.core;
|
cfg = config.pub-solar.core;
|
||||||
in {
|
in
|
||||||
options.pub-solar.core.iso-options.enable = mkOption {
|
{
|
||||||
type = types.bool;
|
options.pub-solar.core.disk-encryption-active = lib.mkOption {
|
||||||
default = false;
|
type = lib.types.bool;
|
||||||
description = "Feature flag for iso builds";
|
|
||||||
};
|
|
||||||
|
|
||||||
options.pub-solar.core.disk-encryption-active = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
default = true;
|
||||||
description = "Whether it should be assumed that there is a cryptroot device";
|
description = "Whether it should be assumed that there is a cryptroot device";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
boot = {
|
boot = {
|
||||||
# Enable plymouth for better experience of booting
|
|
||||||
plymouth.enable = mkIf (!cfg.lite) (lib.mkDefault true);
|
|
||||||
|
|
||||||
# Mount / luks device in initrd
|
# Mount / luks device in initrd
|
||||||
# Allow fstrim to work on it.
|
# Allow fstrim to work on it.
|
||||||
# The ! makes this enabled by default
|
initrd = lib.mkIf cfg.disk-encryption-active {
|
||||||
initrd = mkIf (!cfg.iso-options.enable && cfg.disk-encryption-active) {
|
|
||||||
luks.devices."cryptroot" = {
|
luks.devices."cryptroot" = {
|
||||||
allowDiscards = true;
|
allowDiscards = true;
|
||||||
};
|
};
|
||||||
|
@ -36,7 +27,7 @@ in {
|
||||||
loader.systemd-boot.enable = lib.mkDefault true;
|
loader.systemd-boot.enable = lib.mkDefault true;
|
||||||
|
|
||||||
# Use latest LTS linux kernel by default
|
# Use latest LTS linux kernel by default
|
||||||
kernelPackages = lib.mkDefault pkgs.linuxPackages_6_1;
|
kernelPackages = lib.mkDefault pkgs.linuxPackages_6_12;
|
||||||
|
|
||||||
# Support ntfs drives
|
# Support ntfs drives
|
||||||
supportedFilesystems = [ "ntfs" ];
|
supportedFilesystems = [ "ntfs" ];
|
||||||
|
|
|
@ -1,42 +1,35 @@
|
||||||
{
|
{ config, lib, ... }:
|
||||||
config,
|
let
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.pub-solar.core;
|
cfg = config.pub-solar.core;
|
||||||
in {
|
psCfg = config.pub-solar;
|
||||||
|
in
|
||||||
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./boot.nix
|
./boot.nix
|
||||||
./hibernation.nix
|
./hibernation.nix
|
||||||
./fonts.nix
|
|
||||||
./i18n.nix
|
./i18n.nix
|
||||||
./networking.nix
|
./networking.nix
|
||||||
./nix.nix
|
|
||||||
./packages.nix
|
./packages.nix
|
||||||
./services.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
options.pub-solar.core = {
|
# Service that makes Out of Memory Killer more effective
|
||||||
lite = mkOption {
|
services.earlyoom.enable = true;
|
||||||
description = ''
|
|
||||||
Enable a lite edition of core with less default modules and a reduced package set.
|
services.logind.lidSwitch = "hibernate";
|
||||||
'';
|
|
||||||
default = false;
|
services.tor.settings = {
|
||||||
type = types.bool;
|
UseBridges = true;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
# The options below are directly taken from or inspired by
|
||||||
pub-solar = {
|
# https://xeiaso.net/blog/paranoid-nixos-2021-07-18
|
||||||
audio.enable = mkIf (!cfg.lite) (mkDefault true);
|
|
||||||
crypto.enable = mkIf (!cfg.lite) (mkDefault true);
|
|
||||||
devops.enable = mkIf (!cfg.lite) (mkDefault true);
|
|
||||||
|
|
||||||
terminal-life = {
|
# Limit the use of sudo to the group wheel
|
||||||
enable = mkDefault true;
|
security.sudo.execWheelOnly = true;
|
||||||
lite = cfg.lite;
|
|
||||||
};
|
# Remove the complete default environment of packages like
|
||||||
};
|
# nano, perl and rsync
|
||||||
};
|
environment.defaultPackages = lib.mkForce [ ];
|
||||||
|
|
||||||
|
# fileSystems."/".options = [ "noexec" ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
fonts = {
|
|
||||||
fonts = with pkgs; [powerline-fonts dejavu_fonts];
|
|
||||||
fontconfig.defaultFonts = {
|
|
||||||
monospace = ["DejaVu Sans Mono for Powerline"];
|
|
||||||
sansSerif = ["DejaVu Sans"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -4,9 +4,11 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
cfg = config.pub-solar.core.hibernation;
|
cfg = config.pub-solar.core.hibernation;
|
||||||
in {
|
inherit (lib) mkOption types mkIf;
|
||||||
|
in
|
||||||
|
{
|
||||||
options.pub-solar.core.hibernation = {
|
options.pub-solar.core.hibernation = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
@ -30,7 +32,9 @@ in {
|
||||||
config = {
|
config = {
|
||||||
boot = mkIf cfg.enable {
|
boot = mkIf cfg.enable {
|
||||||
resumeDevice = mkIf (cfg.resumeDevice != null) cfg.resumeDevice;
|
resumeDevice = mkIf (cfg.resumeDevice != null) cfg.resumeDevice;
|
||||||
kernelParams = mkIf (cfg.resumeOffset != null) ["resume_offset=${builtins.toString cfg.resumeOffset}"];
|
kernelParams = mkIf (cfg.resumeOffset != null) [
|
||||||
|
"resume_offset=${builtins.toString cfg.resumeOffset}"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; {
|
{
|
||||||
config = {
|
config = {
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "Europe/Berlin";
|
time.timeZone = "Europe/Berlin";
|
||||||
|
@ -15,6 +15,11 @@ with lib; {
|
||||||
};
|
};
|
||||||
i18n = {
|
i18n = {
|
||||||
defaultLocale = "en_US.UTF-8";
|
defaultLocale = "en_US.UTF-8";
|
||||||
|
supportedLocales = [
|
||||||
|
"C.UTF-8/UTF-8"
|
||||||
|
"en_US.UTF-8/UTF-8"
|
||||||
|
"de_DE.UTF-8/UTF-8"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,85 +1,40 @@
|
||||||
{
|
{
|
||||||
|
flake,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
{
|
||||||
cfg = config.pub-solar.core;
|
|
||||||
in {
|
|
||||||
options.pub-solar.core = {
|
|
||||||
enableCaddy = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = !cfg.lite;
|
|
||||||
};
|
|
||||||
enableHelp = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = !cfg.lite;
|
|
||||||
};
|
|
||||||
|
|
||||||
binaryCaches = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [];
|
|
||||||
description = "Binary caches to use.";
|
|
||||||
};
|
|
||||||
publicKeys = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [];
|
|
||||||
description = "Public keys of binary caches.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = {
|
|
||||||
# disable NetworkManager and systemd-networkd -wait-online by default
|
# disable NetworkManager and systemd-networkd -wait-online by default
|
||||||
systemd.services.NetworkManager-wait-online.enable = lib.mkDefault false;
|
systemd.services.NetworkManager-wait-online.enable = lib.mkDefault false;
|
||||||
systemd.services.systemd-networkd-wait-online.enable = lib.mkDefault false;
|
systemd.services.systemd-networkd-wait-online.enable = lib.mkDefault false;
|
||||||
|
|
||||||
networking.networkmanager = {
|
networking.networkmanager = {
|
||||||
# Enable networkmanager. REMEMBER to add yourself to group in order to use nm related stuff.
|
# Enable networkmanager. REMEMBER to add yourself to group in order to use nm related stuff.
|
||||||
enable = true;
|
enable = if config.programs.sway.enable then lib.mkDefault true else false;
|
||||||
wifi.backend = "iwd";
|
# not as stable as wpa_supplicant yet, also more trouble with 5 GHz networks
|
||||||
|
#wifi.backend = "iwd";
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.enable = true;
|
networking.firewall.enable = true;
|
||||||
|
|
||||||
# Customized binary caches list (with fallback to official binary cache)
|
# For rage encryption, all hosts need a ssh key pair
|
||||||
nix.settings.substituters = cfg.binaryCaches;
|
services.openssh = {
|
||||||
nix.settings.trusted-public-keys = cfg.publicKeys;
|
enable = true;
|
||||||
|
allowSFTP = lib.mkDefault false;
|
||||||
|
|
||||||
# These entries get added to /etc/hosts
|
openFirewall = lib.mkDefault false;
|
||||||
networking.hosts = {
|
|
||||||
"127.0.0.1" =
|
|
||||||
[]
|
|
||||||
++ lib.optionals cfg.enableCaddy ["caddy.local"]
|
|
||||||
++ lib.optionals config.pub-solar.printing.enable ["cups.local"]
|
|
||||||
++ lib.optionals cfg.enableHelp ["help.local"];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Caddy reverse proxy for local services like cups
|
settings.PasswordAuthentication = lib.mkDefault false;
|
||||||
services.caddy = {
|
settings.KbdInteractiveAuthentication = false;
|
||||||
enable = lib.mkDefault cfg.enableCaddy;
|
|
||||||
globalConfig = lib.mkDefault ''
|
extraConfig = ''
|
||||||
default_bind 127.0.0.1
|
AllowTcpForwarding yes
|
||||||
auto_https off
|
X11Forwarding no
|
||||||
|
AllowAgentForwarding no
|
||||||
|
AllowStreamLocalForwarding no
|
||||||
|
AuthenticationMethods publickey
|
||||||
'';
|
'';
|
||||||
extraConfig = lib.mkDefault (concatStringsSep "\n" [
|
|
||||||
(lib.optionalString
|
|
||||||
config.pub-solar.printing.enable
|
|
||||||
''
|
|
||||||
cups.local:80 {
|
|
||||||
request_header Host localhost:631
|
|
||||||
reverse_proxy unix//run/cups/cups.sock
|
|
||||||
}
|
|
||||||
'')
|
|
||||||
|
|
||||||
(lib.optionalString
|
|
||||||
cfg.enableHelp
|
|
||||||
''
|
|
||||||
help.local:80 {
|
|
||||||
root * ${pkgs.psos-docs}/lib/html
|
|
||||||
file_server
|
|
||||||
}
|
|
||||||
'')
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
nix = {
|
|
||||||
# Use default version alias for nix package
|
|
||||||
package = pkgs.nix;
|
|
||||||
gc.automatic = true;
|
|
||||||
optimise.automatic = true;
|
|
||||||
settings = {
|
|
||||||
# Improve nix store disk usage
|
|
||||||
auto-optimise-store = true;
|
|
||||||
# Prevents impurities in builds
|
|
||||||
sandbox = true;
|
|
||||||
# Give root and @wheel special privileges with nix
|
|
||||||
trusted-users = ["root" "@wheel"];
|
|
||||||
# Allow only group wheel to connect to the nix daemon
|
|
||||||
allowed-users = ["@wheel"];
|
|
||||||
};
|
|
||||||
# Generally useful nix option defaults
|
|
||||||
extraOptions = lib.mkForce ''
|
|
||||||
experimental-features = flakes nix-command
|
|
||||||
min-free = 536870912
|
|
||||||
keep-outputs = true
|
|
||||||
keep-derivations = true
|
|
||||||
fallback = true
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -4,76 +4,30 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.core;
|
cfg = config.pub-solar.core;
|
||||||
in {
|
in
|
||||||
environment = {
|
{
|
||||||
systemPackages = with pkgs;
|
environment.systemPackages = with pkgs; [
|
||||||
[
|
|
||||||
# Core unix utility packages
|
# Core unix utility packages
|
||||||
coreutils-full
|
coreutils-full
|
||||||
|
diffutils
|
||||||
dnsutils
|
dnsutils
|
||||||
|
exfat
|
||||||
|
file
|
||||||
|
findutils
|
||||||
inetutils
|
inetutils
|
||||||
|
lsof
|
||||||
progress
|
progress
|
||||||
pciutils
|
pciutils
|
||||||
usbutils
|
usbutils
|
||||||
|
|
||||||
wget
|
gitMinimal
|
||||||
openssl
|
|
||||||
openssh
|
|
||||||
curl
|
|
||||||
htop
|
|
||||||
btop
|
btop
|
||||||
lsof
|
|
||||||
psmisc
|
|
||||||
file
|
|
||||||
|
|
||||||
# zippit
|
|
||||||
zip
|
|
||||||
unzip
|
|
||||||
|
|
||||||
# Modern modern utilities
|
|
||||||
p7zip
|
|
||||||
croc
|
|
||||||
jq
|
|
||||||
]
|
|
||||||
++ lib.optionals (!cfg.lite) [
|
|
||||||
mtr
|
mtr
|
||||||
|
nmap
|
||||||
gitFull
|
nload
|
||||||
git-lfs
|
|
||||||
git-bug
|
|
||||||
|
|
||||||
xdg-utils
|
|
||||||
sysfsutils
|
|
||||||
renameutils
|
|
||||||
nfs-utils
|
|
||||||
moreutils
|
|
||||||
mailutils
|
|
||||||
keyutils
|
|
||||||
input-utils
|
|
||||||
elfutils
|
|
||||||
binutils
|
|
||||||
dateutils
|
|
||||||
diffutils
|
|
||||||
findutils
|
|
||||||
exfat
|
|
||||||
|
|
||||||
# Nix specific utilities
|
|
||||||
alejandra
|
|
||||||
niv
|
|
||||||
manix
|
|
||||||
nix-index
|
|
||||||
nix-tree
|
|
||||||
nixpkgs-review
|
|
||||||
# Build broken, python2.7-PyJWT-2.0.1.drv' failed
|
|
||||||
#nixops
|
|
||||||
psos
|
|
||||||
nvd
|
|
||||||
|
|
||||||
# Fun
|
|
||||||
neofetch
|
|
||||||
];
|
];
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# For rage encryption, all hosts need a ssh key pair
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
# If you don't want the host to have SSH actually opened up to the net,
|
|
||||||
# set `services.openssh.openFirewall` to false in your config.
|
|
||||||
openFirewall = lib.mkDefault true;
|
|
||||||
settings.PasswordAuthentication = lib.mkDefault false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Service that makes Out of Memory Killer more effective
|
|
||||||
services.earlyoom.enable = true;
|
|
||||||
}
|
|
|
@ -4,42 +4,29 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.crypto;
|
in
|
||||||
in {
|
{
|
||||||
options.pub-solar.crypto = {
|
|
||||||
enable = mkEnableOption "Life in private";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
services.udev.packages = [ pkgs.yubikey-personalization ];
|
services.udev.packages = [ pkgs.yubikey-personalization ];
|
||||||
services.dbus.packages = [ pkgs.gcr ];
|
services.dbus.packages = [ pkgs.gcr ];
|
||||||
services.pcscd.enable = true;
|
services.pcscd.enable = true;
|
||||||
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
|
||||||
home-manager = with pkgs;
|
users.users."${psCfg.user.name}".packages = with pkgs; [ libsecret ];
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
|
home-manager.users."${psCfg.user.name}" = {
|
||||||
systemd.user.services.polkit-gnome-authentication-agent = import ./polkit-gnome-authentication-agent.service.nix pkgs;
|
systemd.user.services.polkit-gnome-authentication-agent = import ./polkit-gnome-authentication-agent.service.nix pkgs;
|
||||||
|
|
||||||
services.gpg-agent = {
|
services.gpg-agent = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pinentryFlavor = "gnome3";
|
pinentryPackage = lib.mkDefault pkgs.pinentry-gnome3;
|
||||||
verbose = true;
|
verbose = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.gpg = {
|
programs.gpg = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
home.packages = [
|
|
||||||
gnome.seahorse
|
|
||||||
keepassxc
|
|
||||||
libsecret
|
|
||||||
qMasterPassword
|
|
||||||
restic
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
285
modules/ddclient/default.nix
Normal file
285
modules/ddclient/default.nix
Normal file
|
@ -0,0 +1,285 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.services.ddclient;
|
||||||
|
boolToStr = bool: if bool then "yes" else "no";
|
||||||
|
dataDir = "/var/lib/ddclient";
|
||||||
|
StateDirectory = builtins.baseNameOf dataDir;
|
||||||
|
RuntimeDirectory = StateDirectory;
|
||||||
|
|
||||||
|
usev4 = if cfg.usev4 != "" then "usev4=${cfg.usev4}" else "";
|
||||||
|
usev6 = if cfg.usev6 != "" then "usev6=${cfg.usev6}" else "";
|
||||||
|
|
||||||
|
configFile' = pkgs.writeText "ddclient.conf" ''
|
||||||
|
# This file can be used as a template for configFile or is automatically generated by Nix options.
|
||||||
|
use=no
|
||||||
|
${usev4}
|
||||||
|
${usev6}
|
||||||
|
cache=${dataDir}/ddclient.cache
|
||||||
|
foreground=yes
|
||||||
|
login=${cfg.username}
|
||||||
|
password=${
|
||||||
|
if cfg.protocol == "nsupdate" then
|
||||||
|
"/run/${RuntimeDirectory}/ddclient.key"
|
||||||
|
else
|
||||||
|
"@password_placeholder@"
|
||||||
|
}
|
||||||
|
protocol=${cfg.protocol}
|
||||||
|
${lib.optionalString (cfg.script != "") "script=${cfg.script}"}
|
||||||
|
${lib.optionalString (cfg.server != "") "server=${cfg.server}"}
|
||||||
|
${lib.optionalString (cfg.zone != "") "zone=${cfg.zone}"}
|
||||||
|
ssl=${boolToStr cfg.ssl}
|
||||||
|
wildcard=yes
|
||||||
|
quiet=${boolToStr cfg.quiet}
|
||||||
|
verbose=${boolToStr cfg.verbose}
|
||||||
|
${cfg.extraConfig}
|
||||||
|
${lib.concatStringsSep "," cfg.domains}
|
||||||
|
'';
|
||||||
|
configFile = if (cfg.configFile != null) then cfg.configFile else configFile';
|
||||||
|
|
||||||
|
preStart = ''
|
||||||
|
install --mode=600 --owner=$USER ${configFile} /run/${RuntimeDirectory}/ddclient.conf
|
||||||
|
${lib.optionalString (cfg.configFile == null) (
|
||||||
|
if (cfg.protocol == "nsupdate") then
|
||||||
|
''
|
||||||
|
install --mode=600 --owner=$USER ${cfg.passwordFile} /run/${RuntimeDirectory}/ddclient.key
|
||||||
|
''
|
||||||
|
else if (cfg.passwordFile != null) then
|
||||||
|
''
|
||||||
|
"${pkgs.replace-secret}/bin/replace-secret" "@password_placeholder@" "${cfg.passwordFile}" "/run/${RuntimeDirectory}/ddclient.conf"
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
sed -i '/^password=@password_placeholder@$/d' /run/${RuntimeDirectory}/ddclient.conf
|
||||||
|
''
|
||||||
|
)}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
with lib;
|
||||||
|
{
|
||||||
|
disabledModules = [ "services/networking/ddclient.nix" ];
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
(mkChangedOptionModule
|
||||||
|
[
|
||||||
|
"services"
|
||||||
|
"ddclient"
|
||||||
|
"domain"
|
||||||
|
]
|
||||||
|
[
|
||||||
|
"services"
|
||||||
|
"ddclient"
|
||||||
|
"domains"
|
||||||
|
]
|
||||||
|
(
|
||||||
|
config:
|
||||||
|
let
|
||||||
|
value = getAttrFromPath [
|
||||||
|
"services"
|
||||||
|
"ddclient"
|
||||||
|
"domain"
|
||||||
|
] config;
|
||||||
|
in
|
||||||
|
if value != "" then [ value ] else [ ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(mkRemovedOptionModule [
|
||||||
|
"services"
|
||||||
|
"ddclient"
|
||||||
|
"homeDir"
|
||||||
|
] "")
|
||||||
|
(mkRemovedOptionModule [
|
||||||
|
"services"
|
||||||
|
"ddclient"
|
||||||
|
"password"
|
||||||
|
] "Use services.ddclient.passwordFile instead.")
|
||||||
|
];
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
services.ddclient = with lib.types; {
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Whether to synchronise your machine's IP address with a dynamic DNS provider (e.g. dyndns.org).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
type = package;
|
||||||
|
default = pkgs.ddclient;
|
||||||
|
defaultText = lib.literalExpression "pkgs.ddclient";
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
The ddclient executable package run by the service.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
domains = mkOption {
|
||||||
|
default = [ "" ];
|
||||||
|
type = listOf str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Domain name(s) to synchronize.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
username = mkOption {
|
||||||
|
# For `nsupdate` username contains the path to the nsupdate executable
|
||||||
|
default = lib.optionalString (
|
||||||
|
config.services.ddclient.protocol == "nsupdate"
|
||||||
|
) "${pkgs.bind.dnsutils}/bin/nsupdate";
|
||||||
|
defaultText = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
User name.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
passwordFile = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = nullOr str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
A file containing the password or a TSIG key in named format when using the nsupdate protocol.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
interval = mkOption {
|
||||||
|
default = "10min";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
The interval at which to run the check and update.
|
||||||
|
See {command}`man 7 systemd.time` for the format.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
configFile = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = nullOr path;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Path to configuration file.
|
||||||
|
When set this overrides the generated configuration from module options.
|
||||||
|
'';
|
||||||
|
example = "/root/nixos/secrets/ddclient.conf";
|
||||||
|
};
|
||||||
|
|
||||||
|
protocol = mkOption {
|
||||||
|
default = "dyndns2";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Protocol to use with dynamic DNS provider (see https://sourceforge.net/p/ddclient/wiki/protocols).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
server = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Server address.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
ssl = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Whether to use SSL/TLS to connect to dynamic DNS provider.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
quiet = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Print no messages for unnecessary updates.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
script = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
script as required by some providers.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
usev4 = mkOption {
|
||||||
|
default = "webv4, webv4=checkip.dyndns.com/, webv4-skip='Current IP Address: '";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Method to determine the IP address to send to the dynamic DNS provider.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
usev6 = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Method to determine the IP address to send to the dynamic DNS provider.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
verbose = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Print verbose information.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
zone = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
zone as required by some providers.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = lines;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Extra configuration. Contents will be added verbatim to the configuration file.
|
||||||
|
|
||||||
|
::: {.note}
|
||||||
|
`daemon` should not be added here because it does not work great with the systemd-timer approach the service uses.
|
||||||
|
:::
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf config.services.ddclient.enable {
|
||||||
|
systemd.services.ddclient = {
|
||||||
|
description = "Dynamic DNS Client";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
restartTriggers = optional (cfg.configFile != null) cfg.configFile;
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = true;
|
||||||
|
RuntimeDirectoryMode = "0700";
|
||||||
|
inherit RuntimeDirectory;
|
||||||
|
inherit StateDirectory;
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStartPre = "!${pkgs.writeShellScript "ddclient-prestart" preStart}";
|
||||||
|
ExecStart = "${lib.getBin cfg.package}/bin/ddclient -file /run/${RuntimeDirectory}/ddclient.conf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.ddclient = {
|
||||||
|
description = "Run ddclient";
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = cfg.interval;
|
||||||
|
OnUnitInactiveSec = cfg.interval;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
43
modules/default.nix
Normal file
43
modules/default.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{ self, inputs, ... }:
|
||||||
|
{
|
||||||
|
flake = {
|
||||||
|
nixosModules = rec {
|
||||||
|
acme = import ./acme;
|
||||||
|
actual = import ./actual;
|
||||||
|
audio = import ./audio;
|
||||||
|
bluetooth = import ./bluetooth;
|
||||||
|
core = import ./core;
|
||||||
|
crypto = import ./crypto;
|
||||||
|
desktop-extended = import ./desktop-extended;
|
||||||
|
docker = import ./docker;
|
||||||
|
#email = import ./email;
|
||||||
|
forgejo-actions-runner = import ./forgejo-actions-runner;
|
||||||
|
#gaming = import ./gaming;
|
||||||
|
graphical = import ./graphical;
|
||||||
|
invoiceplane = import ./invoiceplane;
|
||||||
|
nix = import ./nix;
|
||||||
|
nextcloud = import ./nextcloud;
|
||||||
|
office = import ./office;
|
||||||
|
printing = import ./printing;
|
||||||
|
terminal-life = import ./terminal-life;
|
||||||
|
user = import ./user;
|
||||||
|
virtualisation = import ./virtualisation;
|
||||||
|
#wireguard-client = import ./wireguard-client;
|
||||||
|
|
||||||
|
base.imports = [
|
||||||
|
self.nixosModules.home-manager
|
||||||
|
inputs.agenix.nixosModules.default
|
||||||
|
inputs.lix-module.nixosModules.default
|
||||||
|
|
||||||
|
self.nixosModules.overlays
|
||||||
|
self.nixosModules.core
|
||||||
|
self.nixosModules.crypto
|
||||||
|
self.nixosModules.nix
|
||||||
|
self.nixosModules.terminal-life
|
||||||
|
|
||||||
|
self.nixosModules.root
|
||||||
|
self.nixosModules.user
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
35
modules/desktop-extended/default.nix
Normal file
35
modules/desktop-extended/default.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
users.users."${psCfg.user.name}".packages = with pkgs; [
|
||||||
|
ungoogled-chromium
|
||||||
|
|
||||||
|
gimp
|
||||||
|
inkscape
|
||||||
|
tigervnc
|
||||||
|
nodejs_20
|
||||||
|
|
||||||
|
signal-desktop
|
||||||
|
tdesktop
|
||||||
|
element-desktop
|
||||||
|
];
|
||||||
|
|
||||||
|
fonts = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
dejavu_fonts
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
#google-fonts
|
||||||
|
lato
|
||||||
|
montserrat
|
||||||
|
nerdfonts
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk-sans
|
||||||
|
open-sans
|
||||||
|
powerline-fonts
|
||||||
|
source-sans-pro
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,30 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
psCfg = config.pub-solar;
|
|
||||||
cfg = config.pub-solar.devops;
|
|
||||||
in {
|
|
||||||
options.pub-solar.devops = {
|
|
||||||
enable = mkEnableOption "Life automated";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home-manager = with pkgs;
|
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
home.packages = [
|
|
||||||
drone-cli
|
|
||||||
nmap
|
|
||||||
pgcli
|
|
||||||
ansible
|
|
||||||
ansible-lint
|
|
||||||
restic
|
|
||||||
shellcheck
|
|
||||||
terraform
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,114 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
self,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
bootstrap = pkgs.writeScript "bootstrap.sh" ''
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
apt update
|
|
||||||
apt install --yes curl git sudo xz-utils
|
|
||||||
|
|
||||||
adduser --system --uid 999 build
|
|
||||||
chown build /nix
|
|
||||||
|
|
||||||
sudo -u build curl -L https://nixos.org/nix/install > install
|
|
||||||
sudo -u build sh install
|
|
||||||
|
|
||||||
echo "export PATH=/nix/var/nix/profiles/per-user/build/profile/bin:''$PATH" >> /etc/profile
|
|
||||||
|
|
||||||
mkdir /etc/nix
|
|
||||||
echo 'experimental-features = nix-command flakes' >> /etc/nix/nix.conf
|
|
||||||
|
|
||||||
export nix_user_config_file="/home/build/.local/share/nix/trusted-settings.json"
|
|
||||||
mkdir -p $(dirname \\$nix_user_config_file)
|
|
||||||
echo '{"extra-experimental-features":{"nix-command flakes":true}}' > \\$nix_user_config_file
|
|
||||||
chown -R build /home/build/
|
|
||||||
|
|
||||||
curl -L https://github.com/drone-runners/drone-runner-exec/releases/latest/download/drone_runner_exec_linux_amd64.tar.gz | tar xz
|
|
||||||
sudo install -t /usr/local/bin drone-runner-exec
|
|
||||||
|
|
||||||
if [ ! -f /run/vars ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp -a /run/vars /run/runtime-vars
|
|
||||||
env | grep "DRONE" >> /run/runtime-vars
|
|
||||||
|
|
||||||
su - -s /bin/bash build sh -c "/usr/local/bin/drone-runner-exec daemon /run/runtime-vars"
|
|
||||||
'';
|
|
||||||
psCfg = config.pub-solar;
|
|
||||||
cfg = config.pub-solar.docker-ci-runner;
|
|
||||||
in {
|
|
||||||
options.pub-solar.docker-ci-runner = {
|
|
||||||
enable = lib.mkEnableOption "Enables a docker container running a drone exec runner as unprivileged user.";
|
|
||||||
|
|
||||||
enableKvm = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
Enable kvm support.
|
|
||||||
'';
|
|
||||||
default = true;
|
|
||||||
type = types.bool;
|
|
||||||
};
|
|
||||||
|
|
||||||
nixCacheLocation = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
Location of nix cache that is shared between builds
|
|
||||||
'';
|
|
||||||
default = "/var/lib/docker-ci-runner";
|
|
||||||
type = types.path;
|
|
||||||
};
|
|
||||||
|
|
||||||
runnerEnvironment = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
Additional environment vars added to the vars file on container runtime
|
|
||||||
'';
|
|
||||||
default = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
runnerVarsFile = lib.mkOption {
|
|
||||||
description = ''
|
|
||||||
Location of vars file passed to drone runner
|
|
||||||
'';
|
|
||||||
type = types.path;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
virtualisation = {
|
|
||||||
docker = {
|
|
||||||
enable = true; # sadly podman is not supported rightnow
|
|
||||||
};
|
|
||||||
|
|
||||||
oci-containers = {
|
|
||||||
backend = "docker";
|
|
||||||
containers."drone-exec-runner" = {
|
|
||||||
image = "debian";
|
|
||||||
autoStart = true;
|
|
||||||
entrypoint = "bash";
|
|
||||||
cmd = ["/bootstrap.sh"];
|
|
||||||
|
|
||||||
volumes = [
|
|
||||||
"${cfg.runnerVarsFile}:/run/vars"
|
|
||||||
"${cfg.nixCacheLocation}:/nix"
|
|
||||||
"${bootstrap}:/bootstrap.sh"
|
|
||||||
];
|
|
||||||
|
|
||||||
environment = cfg.runnerEnvironment;
|
|
||||||
|
|
||||||
extraOptions = lib.mkIf cfg.enableKvm ["--device=/dev/kvm"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# Fix container not stopping correctly and holding the system 120s upon
|
|
||||||
# shutdown / reboot
|
|
||||||
systemd.services.docker-drone-exec-runner.preStop = ''
|
|
||||||
docker stop drone-exec-runner
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -4,23 +4,15 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.docker;
|
in
|
||||||
in {
|
{
|
||||||
options.pub-solar.docker = {
|
|
||||||
enable = mkEnableOption "Life in metal boxes";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
users.users = with pkgs;
|
|
||||||
pkgs.lib.setAttrByPath [psCfg.user.name] {
|
users.users."${psCfg.user.name}" = {
|
||||||
extraGroups = [ "docker" ];
|
extraGroups = [ "docker" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [ docker-compose ];
|
||||||
docker-compose
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,18 +4,11 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.email;
|
in
|
||||||
in {
|
{
|
||||||
options.pub-solar.email = {
|
users.users."${psCfg.user.name}".packages = with pkgs; [
|
||||||
enable = mkEnableOption "Life in headers";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home-manager = with pkgs;
|
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
home.packages = [
|
|
||||||
w3m
|
w3m
|
||||||
urlscan
|
urlscan
|
||||||
neomutt
|
neomutt
|
||||||
|
@ -24,10 +17,45 @@ in {
|
||||||
mailto-mutt
|
mailto-mutt
|
||||||
];
|
];
|
||||||
|
|
||||||
|
home-manager.users."${psCfg.user.name}" = {
|
||||||
programs.offlineimap = {
|
programs.offlineimap = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pythonFile = builtins.readFile ./offlineimap.py;
|
pythonFile = builtins.readFile ./offlineimap.py;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
xdg.configFile."mutt/muttrc".source = ./.config/mutt/muttrc;
|
||||||
|
xdg.configFile."mutt/base16.muttrc".source = ./.config/mutt/base16.muttrc;
|
||||||
|
xdg.configFile."mutt/mailcap".source = ./.config/mutt/mailcap;
|
||||||
|
xdg.configFile."offlineimap/functions.py".source = ./.config/offlineimap/functions.py;
|
||||||
|
|
||||||
|
xdg.configFile."mutt/accounts.muttrc".text = ''
|
||||||
|
source ./hello@benjaminbaedorf.eu.muttrc
|
||||||
|
|
||||||
|
macro index <f1> '<sync-mailbox><enter-command>source $XDG_CONFIG_HOME/mutt/hello@benjaminbaedorf.eu.muttrc<enter><change-folder>!<enter>'
|
||||||
|
macro index <f2> '<sync-mailbox><enter-command>source $XDG_CONFIG_HOME/mutt/benjamin.baedorf@rwth-aachen.de.muttrc<enter><change-folder>!<enter>'
|
||||||
|
macro index <f3> '<sync-mailbox><enter-command>source $XDG_CONFIG_HOME/mutt/byb@miom.space.muttrc<enter><change-folder>!<enter>'
|
||||||
|
macro index <f4> '<sync-mailbox><enter-command>source $XDG_CONFIG_HOME/mutt/mail@b12f.io.muttrc<enter><change-folder>!<enter>'
|
||||||
|
macro index <f5> '<sync-mailbox><enter-command>source $XDG_CONFIG_HOME/mutt/admins@pub.solar.muttrc<enter><change-folder>!<enter>'
|
||||||
|
macro index <f6> '<sync-mailbox><enter-command>source $XDG_CONFIG_HOME/mutt/crew@pub.solar.muttrc<enter><change-folder>!<enter>'
|
||||||
|
'';
|
||||||
|
xdg.configFile."mutt/hello@benjaminbaedorf.eu.muttrc".source =
|
||||||
|
./.config/mutt + "/hello@benjaminbaedorf.eu.muttrc";
|
||||||
|
xdg.configFile."mutt/benjamin.baedorf@rwth-aachen.de.muttrc".source =
|
||||||
|
./.config/mutt + "/benjamin.baedorf@rwth-aachen.de.muttrc";
|
||||||
|
xdg.configFile."mutt/hello@benjaminbaedorf.eu.signature".source =
|
||||||
|
./.config/mutt + "/hello@benjaminbaedorf.eu.signature";
|
||||||
|
xdg.configFile."mutt/byb@miom.space.muttrc".source = ./.config/mutt + "/byb@miom.space.muttrc";
|
||||||
|
xdg.configFile."mutt/byb@miom.space.signature".source =
|
||||||
|
./.config/mutt + "/byb@miom.space.signature";
|
||||||
|
xdg.configFile."mutt/mail@b12f.io.muttrc".source = ./.config/mutt + "/mail@b12f.io.muttrc";
|
||||||
|
xdg.configFile."mutt/mail@b12f.io.signature".source = ./.config/mutt + "/mail@b12f.io.signature";
|
||||||
|
xdg.configFile."mutt/admins@pub.solar.muttrc".source = ./.config/mutt + "/admins@pub.solar.muttrc";
|
||||||
|
xdg.configFile."mutt/admins@pub.solar.signature".source =
|
||||||
|
./.config/mutt + "/admins@pub.solar.signature";
|
||||||
|
xdg.configFile."mutt/crew@pub.solar.muttrc".source = ./.config/mutt + "/crew@pub.solar.muttrc";
|
||||||
|
xdg.configFile."mutt/crew@pub.solar.signature".source =
|
||||||
|
./.config/mutt + "/crew@pub.solar.signature";
|
||||||
|
xdg.configFile."offlineimap/config".source = ./.config/offlineimap/config;
|
||||||
|
xdg.configFile."msmtp/config".source = ./.config/msmtp/config;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
58
modules/forgejo-actions-runner/default.nix
Normal file
58
modules/forgejo-actions-runner/default.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
flake,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostname = config.networking.hostName;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
age.secrets."forgejo-actions-runner-token.age" = {
|
||||||
|
file = "${flake.self}/secrets/forgejo-actions-runner-token.age";
|
||||||
|
mode = "440";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Trust docker bridge interface traffic
|
||||||
|
# Needed for the docker runner to communicate with the act_runner cache
|
||||||
|
networking.firewall.trustedInterfaces = [ "br-+" ];
|
||||||
|
|
||||||
|
users.users.gitea-runner = {
|
||||||
|
home = "/var/lib/gitea-runner/${hostname}";
|
||||||
|
useDefaultShell = true;
|
||||||
|
group = "gitea-runner";
|
||||||
|
# Required to interact with nix daemon
|
||||||
|
extraGroups = [ "wheel" ];
|
||||||
|
isSystemUser = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.groups.gitea-runner = { };
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [ "d '/var/lib/gitea-runner' 0750 gitea-runner gitea-runner - -" ];
|
||||||
|
|
||||||
|
systemd.services."gitea-runner-${hostname}" = {
|
||||||
|
serviceConfig.DynamicUser = lib.mkForce false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# forgejo actions runner
|
||||||
|
# https://forgejo.org/docs/latest/admin/actions/
|
||||||
|
# https://docs.gitea.com/usage/actions/quickstart
|
||||||
|
services.gitea-actions-runner = {
|
||||||
|
package = pkgs.forgejo-runner;
|
||||||
|
instances."${hostname}" = {
|
||||||
|
enable = true;
|
||||||
|
name = hostname;
|
||||||
|
url = "https://git.pub.solar";
|
||||||
|
tokenFile = config.age.secrets."forgejo-actions-runner-token.age".path;
|
||||||
|
labels = [
|
||||||
|
# provide a debian 12 bookworm base with Node.js for actions
|
||||||
|
"debian-latest:docker://git.pub.solar/pub-solar/actions-base-image:20-bookworm"
|
||||||
|
# fake the ubuntu name, commonly used in actions examples
|
||||||
|
"ubuntu-latest:docker://git.pub.solar/pub-solar/actions-base-image:20-bookworm"
|
||||||
|
# alpine with Node.js
|
||||||
|
"alpine-latest:docker://node:20-alpine"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -4,28 +4,17 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.gaming;
|
in
|
||||||
in {
|
{
|
||||||
options.pub-solar.gaming = {
|
|
||||||
enable = mkEnableOption "Life in shooters";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.steam.enable = true;
|
programs.steam.enable = true;
|
||||||
nixpkgs.config.packageOverrides = pkgs: {
|
nixpkgs.config.packageOverrides = pkgs: { steam = pkgs.steam.override { }; };
|
||||||
steam = pkgs.steam.override {};
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager = with pkgs;
|
users.users."${psCfg.user.name}".packages = with pkgs; [
|
||||||
pkgs.lib.setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
home.packages = [
|
|
||||||
playonlinux
|
playonlinux
|
||||||
godot
|
godot
|
||||||
obs-studio
|
obs-studio
|
||||||
obs-studio-plugins.wlrobs
|
obs-studio-plugins.wlrobs
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
12
modules/graphical/.config/swaync/config.json
Normal file
12
modules/graphical/.config/swaync/config.json
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"positionX": "right",
|
||||||
|
"positionY": "top",
|
||||||
|
"timeout": 10,
|
||||||
|
"timeout-low": 5,
|
||||||
|
"timeout-critical": 0,
|
||||||
|
"notification-window-width": 500,
|
||||||
|
"keyboard-shortcuts": true,
|
||||||
|
"image-visibility": "always",
|
||||||
|
"transition-time": 200,
|
||||||
|
"hide-on-clear": false
|
||||||
|
}
|
149
modules/graphical/.config/swaync/style.css
Normal file
149
modules/graphical/.config/swaync/style.css
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
/*
|
||||||
|
* vim: ft=less
|
||||||
|
*/
|
||||||
|
|
||||||
|
@define-color border-color rgb(7, 7, 7);
|
||||||
|
@define-color bg rgb(58, 58, 58);
|
||||||
|
@define-color bg-hover rgb(68, 68, 68);
|
||||||
|
@define-color bg-focus rgba(68, 68, 68, 0.6);
|
||||||
|
@define-color bg-selected rgb(0, 128, 255);
|
||||||
|
|
||||||
|
.notification-row {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.notification-row:focus,
|
||||||
|
.notification-row:hover {
|
||||||
|
background: @bg-focus;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification {
|
||||||
|
border-radius: 10px;
|
||||||
|
margin: 6px 12px;
|
||||||
|
box-shadow: 0px 2px 4px 2px rgba(0, 0, 0, 0.3);
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-content {
|
||||||
|
background: transparent;
|
||||||
|
padding: 6px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-button {
|
||||||
|
background: black;
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
padding: 0 2px;
|
||||||
|
box-shadow: 0px 2px 4px 2px rgba(0, 0, 0, 0.3);
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
.close-button:hover {
|
||||||
|
background: rgb(30, 30, 30);
|
||||||
|
transition: all 0.15s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action,
|
||||||
|
.notification-action {
|
||||||
|
padding: 4px;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
background: @bg;
|
||||||
|
border: 1px solid @border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action:hover,
|
||||||
|
.notification-action:hover {
|
||||||
|
background: @bg-hover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When alternative actions are visible */
|
||||||
|
.notification-default-action:not(:only-child) {
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-action {
|
||||||
|
border-radius: 0px;
|
||||||
|
border-top: none;
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add bottom border radius to eliminate clipping */
|
||||||
|
.notification-action:first-child {
|
||||||
|
border-bottom-left-radius: 10px;
|
||||||
|
}
|
||||||
|
.notification-action:last-child {
|
||||||
|
border-bottom-right-radius: 10px;
|
||||||
|
border-right: 1px solid @border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
}
|
||||||
|
|
||||||
|
.body-image {
|
||||||
|
margin-top: 6px;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary {
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time {
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
background: transparent;
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-action-title {
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-clear-all {
|
||||||
|
color: white;
|
||||||
|
text-shadow: none;
|
||||||
|
background: @bg;
|
||||||
|
border: 1px solid @border-color;
|
||||||
|
box-shadow: none;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
.control-center-clear-all:hover {
|
||||||
|
background: @bg-hover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-dnd {
|
||||||
|
border-radius: 10px;
|
||||||
|
background: @bg;
|
||||||
|
border: 1px solid @border-color;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-dnd:checked {
|
||||||
|
background: @bg-selected;
|
||||||
|
}
|
||||||
|
.control-center-dnd slider {
|
||||||
|
background: @bg-hover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center {
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
}
|
||||||
|
.control-center-list {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications {
|
||||||
|
background: transparent;
|
||||||
|
}
|
149
modules/graphical/.config/waybar/config
Normal file
149
modules/graphical/.config/waybar/config
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
{
|
||||||
|
"layer": "top", // Waybar at top layer
|
||||||
|
// "position": "bottom", // Waybar position (top|bottom|left|right)
|
||||||
|
|
||||||
|
"height": 26, // Waybar height
|
||||||
|
"modules-left": ["sway/workspaces", "sway/mode"],
|
||||||
|
"modules-center": ["network"],
|
||||||
|
"modules-right": [
|
||||||
|
"sway/language",
|
||||||
|
"pulseaudio",
|
||||||
|
"idle_inhibitor",
|
||||||
|
"backlight",
|
||||||
|
"battery",
|
||||||
|
"clock",
|
||||||
|
"tray"
|
||||||
|
],
|
||||||
|
"sway/workspaces": {
|
||||||
|
"disable-scroll": true
|
||||||
|
},
|
||||||
|
"sway/mode": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "{}"
|
||||||
|
},
|
||||||
|
"sway/window": {
|
||||||
|
"tooltip": false,
|
||||||
|
"max-length": 96
|
||||||
|
},
|
||||||
|
"sway/language": {
|
||||||
|
"format": "{}",
|
||||||
|
"max-length": 50
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 21,
|
||||||
|
"spacing": 10
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"tooltip-format": "<tt><small>{calendar}</small></tt>",
|
||||||
|
"format": "{:%H:%M} ",
|
||||||
|
//"format-alt": "{:%a %d. %h %H:%M} ",
|
||||||
|
//"on-scroll": {
|
||||||
|
// "calendar": 1
|
||||||
|
//}
|
||||||
|
"format-alt": "{:%A, %d. %B %Y %R} ",
|
||||||
|
"locale": "de_DE.UTF-8",
|
||||||
|
"smooth-scrolling-threshold": 1.0,
|
||||||
|
"calendar": {
|
||||||
|
"mode-mon-col" : 3,
|
||||||
|
"on-scroll": -1,
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"format": {
|
||||||
|
"months": "<span color='#ffead3'><b>{}</b></span>",
|
||||||
|
"days": "<span color='#ecc6d9'><b>{}</b></span>",
|
||||||
|
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"on-click-forward": "tz_up",
|
||||||
|
"on-click-backward": "tz_down",
|
||||||
|
"on-scroll-up": "shift_up",
|
||||||
|
"on-scroll-down": "shift_down"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
"device": "acpi_video0",
|
||||||
|
"format": "<span font='10'>{percent}%</span> {icon}",
|
||||||
|
"format-icons": ["", ""]
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": "{}% "
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": "{}% "
|
||||||
|
},
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"format": "{icon} ",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": "",
|
||||||
|
"deactivated": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"tooltip": false,
|
||||||
|
"states": {
|
||||||
|
"critical": 25
|
||||||
|
},
|
||||||
|
//"full-at": 84,
|
||||||
|
"format": "{icon}<span font='10'> {capacity}%</span>",
|
||||||
|
"format-full": "{icon}",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"interval": 3,
|
||||||
|
"tooltip": true,
|
||||||
|
//"interface": "wlp4s0", // (Optional) To force the use of this interface \uF2E7,
|
||||||
|
"format-wifi": "<span font='10'></span> \uf062 {bandwidthUpBits} | \uf063 {bandwidthDownBits}",
|
||||||
|
"format-ethernet": "<span font='10'></span> \uf062 {bandwidthUpBits} | \uf063 {bandwidthDownBits}",
|
||||||
|
"format-disconnected": "",
|
||||||
|
"tooltip-format-wifi": "{essid} ({signalStrength}%) {ipaddr}",
|
||||||
|
"tooltip-format-ethernet": "{ifname} {ipaddr}"
|
||||||
|
},
|
||||||
|
//\ue04f{volume}%
|
||||||
|
"pulseaudio": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": "<span font='10'>{volume}%</span> {icon}",
|
||||||
|
"format-bluetooth": "{volume}%<span font='10'> {icon}</span>",
|
||||||
|
"format-muted": "",
|
||||||
|
"on-click": "pavucontrol",
|
||||||
|
"format-alt": "{volume}% <span font='10'>{icon}</span>",
|
||||||
|
"format-icons": {
|
||||||
|
"headphones": "",
|
||||||
|
"handsfree": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"car": "",
|
||||||
|
"default": ["","", ""]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mpd": {
|
||||||
|
"format": "{artist} - {title} <span color=\"#999999\">[<span color=\"#ffffff\">{elapsedTime:%M:%S}</span> / {totalTime:%M:%S}]</span>",
|
||||||
|
"format-disconnected": "",
|
||||||
|
"format-stopped": "",
|
||||||
|
"interval": 1,
|
||||||
|
"state-icons": {
|
||||||
|
"paused": "",
|
||||||
|
"playing": ""
|
||||||
|
},
|
||||||
|
"tooltip-format": "MPD (connected)",
|
||||||
|
"tooltip-format-disconnected": "MPD (disconnected)"
|
||||||
|
},
|
||||||
|
"custom/notification": {
|
||||||
|
"tooltip": false,
|
||||||
|
"format": " {icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"notification": "<span foreground='red'><sup></sup></span>",
|
||||||
|
"none": "",
|
||||||
|
"dnd-notification": "<span foreground='red'><sup></sup></span>",
|
||||||
|
"dnd-none": ""
|
||||||
|
},
|
||||||
|
"return-type": "json",
|
||||||
|
"exec-if": "which swaync-client",
|
||||||
|
"exec": "swaync-client -swb",
|
||||||
|
"on-click": "swaync-client -t -sw",
|
||||||
|
"on-click-right": "swaync-client -d -sw",
|
||||||
|
"escape": true
|
||||||
|
},
|
||||||
|
}
|
|
@ -1,19 +1,18 @@
|
||||||
@import "./colorscheme.css";
|
@import "./colorscheme.css";
|
||||||
|
|
||||||
* {
|
|
||||||
min-height: 0;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
window#waybar {
|
window#waybar {
|
||||||
font-family: Hack, FontAwesome;
|
font-family: Hack, FontAwesome;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
background: rgba(11, 12, 13, 0.90);
|
/*background: rgba(11, 12, 13, 0.90);*/
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
border-bottom: 1px solid rgba(0, 0, 2, 0.53);
|
border-bottom: 1px solid rgba(0, 0, 2, 0.53);
|
||||||
color: @base04;
|
color: @base04;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window#waybar.hidden {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
#workspaces button {
|
#workspaces button {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -23,7 +22,6 @@ window#waybar {
|
||||||
color: @base04;
|
color: @base04;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#workspaces button.focused {
|
#workspaces button.focused {
|
||||||
color: #f85e84;
|
color: #f85e84;
|
||||||
color: @base07;
|
color: @base07;
|
||||||
|
@ -53,26 +51,30 @@ window#waybar {
|
||||||
#battery.critical {
|
#battery.critical {
|
||||||
color: @base07;
|
color: @base07;
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery.charging {
|
#battery.charging {
|
||||||
color: @base0B;
|
color: @base0B;
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery.full {
|
#battery.full {
|
||||||
margin: 0px 0px 0px 0px;
|
margin: 0px 0px 0px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#network {
|
#network {
|
||||||
border-top: 1px solid transparent;
|
border-top: 1px solid transparent;
|
||||||
|
color: rgba(255,255,255,0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#network.disconnected {
|
#network.disconnected {
|
||||||
margin: 0px 0px 0px 0px;
|
margin: 0px 0px 0px 0px;
|
||||||
color: rgba(75, 81, 98, 0);
|
color: rgba(75, 81, 98, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#pulseaudio.muted {
|
#pulseaudio.muted {
|
||||||
margin: 0px 0px 0px 0px;
|
margin: 0px 0px 0px 0px;
|
||||||
color: rgba(75, 81, 98, 0);
|
color: rgba(75, 81, 98, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#custom-notification {
|
||||||
|
font-family: "NotoSansMono Nerd Font";
|
||||||
|
}
|
|
@ -30,9 +30,6 @@
|
||||||
multiplier = 3;
|
multiplier = 3;
|
||||||
};
|
};
|
||||||
|
|
||||||
# When true, bold text is drawn using the bright variant of colors.
|
|
||||||
draw_bold_text_with_bright_colors = true;
|
|
||||||
|
|
||||||
font = {
|
font = {
|
||||||
# The normal (roman) font face to use.
|
# The normal (roman) font face to use.
|
||||||
normal = {
|
normal = {
|
||||||
|
@ -55,7 +52,7 @@
|
||||||
style = "Italic";
|
style = "Italic";
|
||||||
};
|
};
|
||||||
|
|
||||||
size = 16.0;
|
size = 12.0;
|
||||||
|
|
||||||
offset = {
|
offset = {
|
||||||
x = 0;
|
x = 0;
|
||||||
|
@ -68,7 +65,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
key_bindings = [
|
keyboard.bindings = [
|
||||||
|
{
|
||||||
|
key = "V";
|
||||||
|
mods = "Control|Super";
|
||||||
|
action = "Paste";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "C";
|
||||||
|
mods = "Control|Super";
|
||||||
|
action = "Copy";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
key = "V";
|
key = "V";
|
||||||
mods = "Control|Alt";
|
mods = "Control|Alt";
|
||||||
|
@ -87,16 +94,6 @@
|
||||||
key = "Copy";
|
key = "Copy";
|
||||||
action = "Copy";
|
action = "Copy";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
key = "Q";
|
|
||||||
mods = "Command";
|
|
||||||
action = "Quit";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
key = "W";
|
|
||||||
mods = "Command";
|
|
||||||
action = "Quit";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
key = "Insert";
|
key = "Insert";
|
||||||
mods = "Shift";
|
mods = "Shift";
|
||||||
|
@ -162,6 +159,9 @@
|
||||||
# Base16 Burn 256 - alacritty color config
|
# Base16 Burn 256 - alacritty color config
|
||||||
# Benjamin Bädorf
|
# Benjamin Bädorf
|
||||||
colors = {
|
colors = {
|
||||||
|
# When true, bold text is drawn using the bright variant of colors.
|
||||||
|
draw_bold_text_with_bright_colors = true;
|
||||||
|
|
||||||
# Default colors
|
# Default colors
|
||||||
primary = {
|
primary = {
|
||||||
background = "0x1a181a";
|
background = "0x1a181a";
|
||||||
|
|
Before Width: | Height: | Size: 513 KiB After Width: | Height: | Size: 513 KiB |
BIN
modules/graphical/assets/wallpaper.jpg
Normal file
BIN
modules/graphical/assets/wallpaper.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 168 KiB |
|
@ -4,47 +4,30 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
let
|
||||||
psCfg = config.pub-solar;
|
psCfg = config.pub-solar;
|
||||||
cfg = config.pub-solar.graphical;
|
tomlFormat = pkgs.formats.toml { };
|
||||||
yamlFormat = pkgs.formats.yaml {};
|
sessionVariables = {
|
||||||
recursiveMerge = attrList: let
|
WLR_RENDERER = if psCfg.graphical.wayland.software-renderer.enable then "pixman" else "";
|
||||||
f = attrPath:
|
# Fix KeepassXC rendering issue
|
||||||
zipAttrsWith (
|
# https://github.com/void-linux/void-packages/issues/23517
|
||||||
n: values:
|
QT_AUTO_SCREEN_SCALE_FACTOR = "0";
|
||||||
if tail values == []
|
};
|
||||||
then head values
|
|
||||||
else if all isList values
|
|
||||||
then unique (concatLists values)
|
|
||||||
else if all isAttrs values
|
|
||||||
then f (attrPath ++ [n]) values
|
|
||||||
else last values
|
|
||||||
);
|
|
||||||
in
|
in
|
||||||
f [] attrList;
|
{
|
||||||
in {
|
imports = [ ./sway ];
|
||||||
|
|
||||||
options.pub-solar.graphical = {
|
options.pub-solar.graphical = {
|
||||||
enable = mkEnableOption "Life in color";
|
wayland.software-renderer.enable = lib.mkOption {
|
||||||
alacritty = {
|
type = lib.types.bool;
|
||||||
settings = mkOption {
|
|
||||||
type = yamlFormat.type;
|
|
||||||
default = {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
autologin.enable = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
|
||||||
description = "Feature flag enabling autologin after boot.";
|
|
||||||
};
|
|
||||||
wayland.software-renderer.enable = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
default = false;
|
||||||
description = "Feature flag enabling wlroots software renderer, useful in VMs";
|
description = "Feature flag enabling wlroots software renderer, useful in VMs";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = {
|
||||||
hardware.opengl.enable = true;
|
hardware.graphics.enable = true;
|
||||||
|
|
||||||
environment = {
|
environment = {
|
||||||
systemPackages = with pkgs; [
|
systemPackages = with pkgs; [
|
||||||
gtk-engine-murrine
|
gtk-engine-murrine
|
||||||
|
@ -56,15 +39,18 @@ in {
|
||||||
|
|
||||||
glib
|
glib
|
||||||
];
|
];
|
||||||
|
|
||||||
etc = {
|
etc = {
|
||||||
"xdg/PubSolar.conf".text = ''
|
"xdg/PubSolar.conf".text = ''
|
||||||
[Qt]
|
[Qt]
|
||||||
style=GTK+
|
style=GTK+
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
variables = sessionVariables;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.getty.autologinUser = mkIf cfg.autologin.enable (mkForce "${psCfg.user.name}");
|
services.getty.autologinUser = psCfg.user.name;
|
||||||
|
|
||||||
qt = {
|
qt = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -72,58 +58,68 @@ in {
|
||||||
style = "gtk2";
|
style = "gtk2";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Required for running Gnome apps outside the Gnome DE, see https://nixos.wiki/wiki/GNOME#Running_GNOME_programs_outside_of_GNOME
|
services.udev.packages = with pkgs; [ gnome-settings-daemon ];
|
||||||
programs.dconf.enable = true;
|
|
||||||
services.udev.packages = with pkgs; [gnome3.gnome-settings-daemon];
|
|
||||||
# Enable Sushi, a quick previewer for nautilus
|
# Enable Sushi, a quick previewer for nautilus
|
||||||
services.gnome.sushi.enable = true;
|
services.gnome.sushi.enable = true;
|
||||||
# Enable GVfs, a userspace virtual filesystem
|
# Enable GVfs, a userspace virtual filesystem
|
||||||
services.gvfs.enable = true;
|
services.gvfs.enable = true;
|
||||||
|
services.yubikey-agent.enable = true;
|
||||||
|
|
||||||
fonts.enableDefaultFonts = true;
|
fonts = {
|
||||||
fonts.fonts = with pkgs; [
|
packages = with pkgs; [
|
||||||
fira-code
|
dejavu_fonts
|
||||||
fira-code-symbols
|
|
||||||
google-fonts
|
|
||||||
lato
|
|
||||||
montserrat
|
|
||||||
nerdfonts
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-cjk
|
|
||||||
open-sans
|
|
||||||
powerline-fonts
|
powerline-fonts
|
||||||
source-sans-pro
|
tt2020
|
||||||
];
|
];
|
||||||
|
enableDefaultPackages = true;
|
||||||
|
fontconfig.enable = true;
|
||||||
|
fontconfig.defaultFonts = {
|
||||||
|
monospace = [ "DejaVu Sans Mono for Powerline" ];
|
||||||
|
sansSerif = [ "DejaVu Sans" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
home-manager = with pkgs;
|
users.users."${psCfg.user.name}".packages = with pkgs; [
|
||||||
setAttrByPath ["users" psCfg.user.name] {
|
|
||||||
home.packages = [
|
|
||||||
alacritty
|
alacritty
|
||||||
foot
|
|
||||||
ungoogled-chromium
|
|
||||||
firefox-wayland
|
firefox-wayland
|
||||||
|
|
||||||
flameshot
|
flameshot
|
||||||
libnotify
|
adwaita-icon-theme
|
||||||
gnome.adwaita-icon-theme
|
eog
|
||||||
gnome.eog
|
nautilus
|
||||||
gnome.nautilus
|
seahorse
|
||||||
gnome.yelp
|
yelp
|
||||||
hicolor-icon-theme
|
hicolor-icon-theme
|
||||||
|
keepassxc
|
||||||
wine
|
qMasterPassword-wayland
|
||||||
|
libnotify
|
||||||
toggle-kbd-layout
|
|
||||||
|
|
||||||
wcwd
|
|
||||||
|
|
||||||
vlc
|
vlc
|
||||||
|
|
||||||
gimp
|
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.configFile."alacritty/alacritty.yml" = {
|
home-manager.users."${psCfg.user.name}" = {
|
||||||
source = yamlFormat.generate "alacritty.yml" (recursiveMerge [(import ./alacritty.nix) cfg.alacritty.settings]);
|
home.file."xinitrc".source = ./.xinitrc;
|
||||||
|
xdg.configFile."alacritty/alacritty.toml".source = tomlFormat.generate "alacritty.toml" (import ./alacritty.nix);
|
||||||
|
xdg.configFile."xmodmap".source = ./.config/xmodmap;
|
||||||
|
xdg.configFile."user-dirs.dirs".source = ./.config/user-dirs.dirs;
|
||||||
|
xdg.configFile."user-dirs.locale".source = ./.config/user-dirs.locale;
|
||||||
|
xdg.configFile."xsettingsd/xsettingsd.conf".source = ./.config/xsettingsd/xsettingsd.conf;
|
||||||
|
xdg.configFile."mako/config".source = ./.config/mako/config;
|
||||||
|
xdg.configFile."libinput-gestures.conf".source = ./.config/libinput-gestures.conf;
|
||||||
|
xdg.configFile."swaync/config.json".source = ./.config/swaync/config.json;
|
||||||
|
xdg.configFile."swaync/style.css".source = ./.config/swaync/style.css;
|
||||||
|
xdg.configFile."waybar/config".source = ./.config/waybar/config;
|
||||||
|
xdg.configFile."waybar/style.css".source = ./.config/waybar/style.css;
|
||||||
|
xdg.configFile."waybar/colorscheme.css".source = ./.config/waybar/colorscheme.css;
|
||||||
|
xdg.configFile."wallpaper.jpg".source = ./assets/wallpaper.jpg;
|
||||||
|
|
||||||
|
# Required for running Gnome apps outside the Gnome DE, see
|
||||||
|
# https://nixos.wiki/wiki/GNOME#Running_GNOME_programs_outside_of_GNOME
|
||||||
|
dconf = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
"org/gnome/desktop/interface" = {
|
||||||
|
color-scheme = "prefer-dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
|
@ -145,15 +141,22 @@ in {
|
||||||
gtk-xft-rgba = "rgb";
|
gtk-xft-rgba = "rgb";
|
||||||
gtk-application-prefer-dark-theme = "true";
|
gtk-application-prefer-dark-theme = "true";
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
# Fix KeepassXC rendering issue
|
gtk4.extraConfig = {
|
||||||
# https://github.com/void-linux/void-packages/issues/23517
|
gtk-xft-antialias = "1";
|
||||||
systemd.user.sessionVariables.QT_AUTO_SCREEN_SCALE_FACTOR = "0";
|
gtk-xft-hinting = "1";
|
||||||
|
gtk-xft-hintstyle = "hintfull";
|
||||||
|
gtk-xft-rgba = "rgb";
|
||||||
|
gtk-application-prefer-dark-theme = "true";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
xresources.extraConfig = builtins.readFile ./.Xdefaults;
|
xresources.extraConfig = builtins.readFile ./.Xdefaults;
|
||||||
|
|
||||||
systemd.user.services.network-manager-applet = import ./network-manager-applet.service.nix pkgs;
|
systemd.user.services.network-manager-applet = import ./network-manager-applet.service.nix pkgs;
|
||||||
|
|
||||||
|
home.sessionVariables = sessionVariables;
|
||||||
|
systemd.user.sessionVariables = sessionVariables;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
pkgs: {
|
pkgs: {
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Lightweight Wayland notification daemon";
|
Description = "Network Manager applet";
|
||||||
BindsTo = [ "sway-session.target" ];
|
BindsTo = [ "sway-session.target" ];
|
||||||
After = [ "sway-session.target" ];
|
After = [ "sway-session.target" ];
|
||||||
# ConditionEnvironment requires systemd v247 to work correctly
|
# ConditionEnvironment requires systemd v247 to work correctly
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
bindsym $mod+z exec --no-startup-id morc_menu
|
bindsym $mod+z exec --no-startup-id morc_menu
|
||||||
|
|
||||||
# switch keyboard input language
|
# switch keyboard input language
|
||||||
bindsym $mod+tab exec toggle-kbd-layout
|
#bindsym $mod+tab exec toggle-kbd-layout
|
||||||
|
|
||||||
################################################################################################
|
################################################################################################
|
||||||
## sound-section - ##
|
## sound-section - ##
|
||||||
|
@ -18,11 +18,12 @@ bindsym $mod+Shift+h exec psos help
|
||||||
|
|
||||||
bindsym $mod+F2 exec firefox
|
bindsym $mod+F2 exec firefox
|
||||||
|
|
||||||
bindsym $mod+F3 exec $term -e vifm
|
|
||||||
bindsym $mod+Shift+F3 exec gksu $term -e vifm
|
|
||||||
|
|
||||||
bindsym $mod+F4 exec nautilus -w
|
bindsym $mod+F4 exec nautilus -w
|
||||||
bindsym $mod+Shift+F4 exec signal-desktop --use-tray-icon
|
bindsym $mod+Shift+F4 exec signal-desktop
|
||||||
|
|
||||||
|
# Notifications with swaynotificationcenter
|
||||||
|
# Toggle control center
|
||||||
|
bindsym $mod+Shift+n exec swaync-client -t -sw
|
||||||
|
|
||||||
bindsym $mod+Shift+m exec qMasterPassword
|
bindsym $mod+Shift+m exec qMasterPassword
|
||||||
|
|
||||||
|
@ -36,3 +37,11 @@ bindsym $mod+Ctrl+r exec record-screen
|
||||||
# Launcher
|
# Launcher
|
||||||
set $menu exec alacritty --class launcher -e env TERMINAL_COMMAND="alacritty -e" sway-launcher
|
set $menu exec alacritty --class launcher -e env TERMINAL_COMMAND="alacritty -e" sway-launcher
|
||||||
bindsym $mod+Space exec $menu
|
bindsym $mod+Space exec $menu
|
||||||
|
|
||||||
|
set $mode_vncclient In VNCClient mode. Press $mod+Num_Lock or $mod+Shift+Escape to return.
|
||||||
|
bindsym $mod+Num_Lock mode "$mode_vncclient"
|
||||||
|
bindsym $mod+Shift+Escape mode "$mode_vncclient"
|
||||||
|
mode "$mode_vncclient" {
|
||||||
|
bindsym $mod+Num_Lock mode "default"
|
||||||
|
bindsym $mod+Shift+Escape mode "default"
|
||||||
|
}
|
39
modules/graphical/sway/config/config.d/mode_system.conf.nix
Normal file
39
modules/graphical/sway/config/config.d/mode_system.conf.nix
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{ pkgs, psCfg, ... }:
|
||||||
|
''
|
||||||
|
# Set shut down, restart and locking features
|
||||||
|
''
|
||||||
|
+ (
|
||||||
|
if psCfg.core.hibernation.enable then
|
||||||
|
''
|
||||||
|
set $mode_system (e)xit, (h)ibernate, (l)ock, (s)uspend, (r)eboot, (Shift+s)hutdown
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
set $mode_system (e)xit, (l)ock, (s)uspend, (r)eboot, (Shift+s)hutdown
|
||||||
|
''
|
||||||
|
)
|
||||||
|
+ ''
|
||||||
|
bindsym $mod+Ctrl+0 mode "$mode_system"
|
||||||
|
|
||||||
|
mode "$mode_system" {
|
||||||
|
bindsym e exec swaymsg exit, mode "default"
|
||||||
|
''
|
||||||
|
+ (
|
||||||
|
if psCfg.core.hibernation.enable then
|
||||||
|
''
|
||||||
|
bindsym h exec systemctl hibernate, mode "default"
|
||||||
|
''
|
||||||
|
else
|
||||||
|
""
|
||||||
|
)
|
||||||
|
+ ''
|
||||||
|
bindsym l exec ${pkgs.swaylock-bg}/bin/swaylock-bg, mode "default"
|
||||||
|
bindsym s exec systemctl suspend, mode "default"
|
||||||
|
bindsym r exec systemctl reboot, mode "default"
|
||||||
|
bindsym Shift+s exec systemctl poweroff, mode "default"
|
||||||
|
|
||||||
|
# exit system mode: "Enter" or "Escape"
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
''
|
|
@ -5,4 +5,5 @@
|
||||||
# https://github.com/swaywm/sway/wiki/Systemd-integration
|
# https://github.com/swaywm/sway/wiki/Systemd-integration
|
||||||
# Also, import the most important environment variables into the D-Bus and systemd
|
# Also, import the most important environment variables into the D-Bus and systemd
|
||||||
# user environments (e.g. required for screen sharing and Pinentry prompts):
|
# user environments (e.g. required for screen sharing and Pinentry prompts):
|
||||||
exec "systemctl --user import-environment; systemctl --user start sway-session.target; exec dbus-update-activation-environment --systemd $IMPORT_ENVIRONMENT_ENV_LIST DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP; systemd-cat --identifier=sway sway"
|
exec "systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP; systemctl --user start sway-session.target; dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP"
|
||||||
|
exec swaymsg -t subscribe '["shutdown"]' && systemctl --user stop sway-session.target
|
|
@ -1,8 +1,5 @@
|
||||||
{
|
{ config, pkgs, ... }:
|
||||||
config,
|
''
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: ''
|
|
||||||
# Default config for sway
|
# Default config for sway
|
||||||
#
|
#
|
||||||
# Copy this to ~/.config/sway/config and edit it to your liking.
|
# Copy this to ~/.config/sway/config and edit it to your liking.
|
||||||
|
@ -19,7 +16,7 @@
|
||||||
set $up i
|
set $up i
|
||||||
set $right l
|
set $right l
|
||||||
# Your preferred terminal emulator
|
# Your preferred terminal emulator
|
||||||
set $term ${config.pub-solar.sway.terminal}
|
set $term ${pkgs.alacritty}/bin/alacritty
|
||||||
# Your preferred application launcher
|
# Your preferred application launcher
|
||||||
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
||||||
# on the original workspace that the command was run on.
|
# on the original workspace that the command was run on.
|
9
modules/graphical/sway/config/wayvnc/config.nix
Normal file
9
modules/graphical/sway/config/wayvnc/config.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ psCfg, pkgs }:
|
||||||
|
"
|
||||||
|
address=0.0.0.0
|
||||||
|
enable_auth=true
|
||||||
|
username=${psCfg.user.name}
|
||||||
|
password=testtest
|
||||||
|
private_key_file=/run/agenix/vnc-key.pem
|
||||||
|
certificate_file=/run/agenix/vnc-cert.pem
|
||||||
|
"
|
106
modules/graphical/sway/default.nix
Normal file
106
modules/graphical/sway/default.nix
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
flake,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
psCfg = config.pub-solar;
|
||||||
|
inherit (lib) mkIf mkOption types;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.pub-solar.graphical = {
|
||||||
|
v4l2loopback.enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "WebCam streaming tool";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
boot = mkIf psCfg.graphical.v4l2loopback.enable {
|
||||||
|
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
|
||||||
|
kernelModules = [ "v4l2loopback" ];
|
||||||
|
extraModprobeConfig = ''
|
||||||
|
options v4l2loopback exclusive_caps=1 devices=3
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = mkIf psCfg.graphical.v4l2loopback.enable [
|
||||||
|
pkgs.linuxPackages.v4l2loopback
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.sway.enable = true;
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
wlr = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
screencast = {
|
||||||
|
max_fps = 30;
|
||||||
|
chooser_type = "simple";
|
||||||
|
chooser_cmd = "${pkgs.slurp}/bin/slurp -f %o -or";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.pipewire.enable = true;
|
||||||
|
|
||||||
|
users.users."${psCfg.user.name}".packages = with pkgs; [
|
||||||
|
sway
|
||||||
|
grim
|
||||||
|
kanshi
|
||||||
|
slurp
|
||||||
|
swaybg
|
||||||
|
swayidle
|
||||||
|
swaynotificationcenter
|
||||||
|
xwayland
|
||||||
|
|
||||||
|
libappindicator-gtk3
|
||||||
|
|
||||||
|
wl-clipboard
|
||||||
|
wl-mirror
|
||||||
|
wf-recorder
|
||||||
|
brightnessctl
|
||||||
|
gammastep
|
||||||
|
geoclue2
|
||||||
|
xsettingsd
|
||||||
|
ydotool
|
||||||
|
|
||||||
|
sway-launcher
|
||||||
|
record-screen
|
||||||
|
import-gtk-settings
|
||||||
|
# Unused on teutat3s hosts, see custom-keybindings.conf
|
||||||
|
#toggle-kbd-layout
|
||||||
|
s
|
||||||
|
wcwd
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager.users."${psCfg.user.name}" = {
|
||||||
|
programs.waybar.enable = true;
|
||||||
|
#programs.waybar.systemd.enable = true;
|
||||||
|
|
||||||
|
systemd.user.services.swaynotificationcenter = import ./swaynotificationcenter.service.nix pkgs;
|
||||||
|
systemd.user.services.sway = import ./sway.service.nix { inherit pkgs psCfg; };
|
||||||
|
systemd.user.services.swayidle = import ./swayidle.service.nix { inherit pkgs psCfg; };
|
||||||
|
systemd.user.services.xsettingsd = import ./xsettingsd.service.nix { inherit pkgs psCfg; };
|
||||||
|
systemd.user.services.waybar = import ./waybar.service.nix { inherit pkgs psCfg; };
|
||||||
|
systemd.user.targets.sway-session = import ./sway-session.target.nix { inherit pkgs psCfg; };
|
||||||
|
|
||||||
|
xdg.configFile."sway/config".text = import ./config/config.nix { inherit config pkgs; };
|
||||||
|
xdg.configFile."sway/config.d/colorscheme.conf".source = ./config/config.d/colorscheme.conf;
|
||||||
|
xdg.configFile."sway/config.d/theme.conf".source = ./config/config.d/theme.conf;
|
||||||
|
xdg.configFile."sway/config.d/gaps.conf".source = ./config/config.d/gaps.conf;
|
||||||
|
xdg.configFile."sway/config.d/custom-keybindings.conf".source = ./config/config.d/custom-keybindings.conf;
|
||||||
|
xdg.configFile."sway/config.d/mode_system.conf".text =
|
||||||
|
import ./config/config.d/mode_system.conf.nix
|
||||||
|
{ inherit pkgs psCfg; };
|
||||||
|
xdg.configFile."sway/config.d/applications.conf".source = ./config/config.d/applications.conf;
|
||||||
|
xdg.configFile."sway/config.d/systemd.conf".source = ./config/config.d/systemd.conf;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "set color temperature of display according to time of day";
|
Description = "set color temperature of display according to time of day";
|
||||||
Documentation = [ "man:gammastep(1)" ];
|
Documentation = [ "man:gammastep(1)" ];
|
|
@ -1,4 +1,5 @@
|
||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Actions gestures on your touchpad using libinput";
|
Description = "Actions gestures on your touchpad using libinput";
|
||||||
Documentation = [ "https://github.com/bulletmark/libinput-gestures" ];
|
Documentation = [ "https://github.com/bulletmark/libinput-gestures" ];
|
|
@ -1,4 +1,5 @@
|
||||||
{pkgs, ...}: {
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
Unit = {
|
Unit = {
|
||||||
Description = "Lightweight Wayland notification daemon";
|
Description = "Lightweight Wayland notification daemon";
|
||||||
Documentation = [ "man:mako(1)" ];
|
Documentation = [ "man:mako(1)" ];
|
10
modules/graphical/sway/sway-session.target.nix
Normal file
10
modules/graphical/sway/sway-session.target.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
Unit = {
|
||||||
|
Description = "sway compositor session";
|
||||||
|
Documentation = [ "man:systemd.special(7)" ];
|
||||||
|
BindsTo = [ "graphical-session.target" ];
|
||||||
|
Wants = [ "graphical-session-pre.target" ];
|
||||||
|
After = [ "graphical-session-pre.target" ];
|
||||||
|
};
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue