Compare commits
669 Commits
0acbe579e4
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| fc6b0e8adc | |||
| 6ac620dd76 | |||
| e976e189e3 | |||
| c5a15e1ed4 | |||
| 6ff59a990b | |||
| 93b437f78a | |||
| 5d98c8f325 | |||
| c7aa148a67 | |||
| 47a6f1ce30 | |||
| 8e36702732 | |||
| ebb03eb278 | |||
| 3106055e4b | |||
| 63837791fb | |||
| 9c4df89324 | |||
| dc7eb3a11a | |||
| 6fd0fc4cd4 | |||
| ef17679446 | |||
| 0bb5e3c9bd | |||
| 17d3f13d12 | |||
| 4123c33731 | |||
| 985ae948d7 | |||
| 4c6a4ec839 | |||
| 1d1b18ec9c | |||
| a32a776778 | |||
| 2ba973cdb3 | |||
| 53f6843356 | |||
| 23b0c1c3f6 | |||
| b566595ae8 | |||
| 49ff649765 | |||
| 4291bc2da0 | |||
| 8f4b14cd12 | |||
| 0e25ad519b | |||
| 11f1da1b75 | |||
| 663117b352 | |||
| 9b12730dba | |||
| 652dbf831f | |||
| 3fd2ec4132 | |||
| f8ba6b9ca1 | |||
| 6c7cf81efe | |||
| 5165e9b7df | |||
| 18cf266828 | |||
| 0950197416 | |||
| b08966eaeb | |||
| 75f4969882 | |||
| 6b466a626f | |||
| fdad1d166b | |||
| 56ab6eac72 | |||
| 78898f78dd | |||
| 6a0f7502aa | |||
| 10210c9df0 | |||
| 2736934ce4 | |||
| f3b39f8e9c | |||
| f8aa4870a4 | |||
| 9fb9a3fbd2 | |||
| bcee95d0a1 | |||
| c7d1edc35e | |||
| 0ccbc3a5c5 | |||
| a245aa223d | |||
| bca90e6f34 | |||
| f8bf8f54f1 | |||
| 8e82977bc9 | |||
| 8447a9b596 | |||
| 7416c8adb6 | |||
| c017a00f81 | |||
| 373feab3cf | |||
| 3aeb7d5192 | |||
| 2d5a2c2976 | |||
| 391166c034 | |||
| c7f0f46908 | |||
| dcf7d59ad2 | |||
| 9ade89f82c | |||
| 3e9b1805ea | |||
| 1225ed4f9b | |||
| 339d53823c | |||
| 28c242282e | |||
| 190f03410d | |||
| 2337b36319 | |||
| defeb49847 | |||
| 0917467acf | |||
| e75067946f | |||
| 94cd41b3e7 | |||
| 8fae55ea64 | |||
| 64fc569836 | |||
| 415b1df455 | |||
| b03354ec37 | |||
| b74e017bbf | |||
| f43715f201 | |||
| 98a7800c37 | |||
| 9468f2653b | |||
| 8d46e2ded6 | |||
| 704784ef74 | |||
| 03b3734aa8 | |||
| c1c5322563 | |||
| ea25c798bd | |||
| 8f23b8ba4f | |||
| 9d6becf5a0 | |||
| f565412974 | |||
| d6a077b2ea | |||
| e89e3b322f | |||
| ba7de29921 | |||
| a7dc5bd6f8 | |||
| c83dcd8de5 | |||
| eeb5ff9de0 | |||
| 7679734df4 | |||
| 963b975b92 | |||
| bcc4d9081e | |||
| 7c78fee0a1 | |||
| a5bf0d816e | |||
| c9ad2d3d89 | |||
| c321cedd37 | |||
| b28a82f90f | |||
| 480f214cdf | |||
| 5d1ce337b1 | |||
| feed32000f | |||
| 390ac245db | |||
| eacbf6044b | |||
| 46b324d8d7 | |||
| 0c89582f00 | |||
| 0c20194115 | |||
| 04f955242f | |||
| ebb5d5ef6b | |||
| 78990eed5c | |||
| 59be47bf32 | |||
| abe2405b27 | |||
| 59f2141768 | |||
| 583bdd49c1 | |||
| 4ee2036fba | |||
| d2e1416013 | |||
| 16378146d0 | |||
| f988762015 | |||
| 23689dd1e1 | |||
| 21695419ee | |||
| 4b2d49efa9 | |||
| 38b12c196a | |||
| d92bce24f5 | |||
| 710b0348a1 | |||
| 32a20bfa91 | |||
| 4c1e19c8c2 | |||
| ecceaa5307 | |||
| 0a68e25533 | |||
| e0809cec70 | |||
| 278845d900 | |||
| d795e633a5 | |||
| 0ed2dc4fde | |||
| 6496af887e | |||
| 3f3bb5a71b | |||
| 45de11a4a5 | |||
| a0e90643dd | |||
| a49823141b | |||
| ca5f232d47 | |||
| 11dbd5db04 | |||
| 94629554bf | |||
| 61329d967a | |||
| 53fbd4ea92 | |||
| 76f0ccb466 | |||
| 153abf0c49 | |||
| 075a058b06 | |||
| 16dc9685a7 | |||
| 36d39f7a44 | |||
| 08d978103f | |||
| bb0d3f51b8 | |||
| 1468b90ae9 | |||
| 58392825fc | |||
| cdb73706a7 | |||
| 259bd54914 | |||
| 000ee1cca4 | |||
| 522f2a25c9 | |||
| c364f62ea1 | |||
| 04e522548a | |||
| 91f37618e2 | |||
| 3d646d5895 | |||
| 6581faa392 | |||
| 711832dff2 | |||
| 82b041c872 | |||
| fc4ea6047d | |||
| 5a058db718 | |||
| 306487df72 | |||
| 8862e8fa15 | |||
| 07ebec86c9 | |||
| b96ec1fc5f | |||
| 9ebd0ebdae | |||
| 0f32aa31c3 | |||
| 9d662211c9 | |||
| bbf327ca48 | |||
| 7c32580e95 | |||
| ccea6cf946 | |||
| 3992caf295 | |||
| 8c2a134545 | |||
| 7528c9791e | |||
| 745ff2426c | |||
| d598fbf686 | |||
| 5f247b31d8 | |||
| b152edca7d | |||
| 8be4651af6 | |||
| 7307a72341 | |||
| f48ab77b0c | |||
| d584be475b | |||
| 662689b70d | |||
| f4c9a90ff2 | |||
| be78eaf5e3 | |||
| 632eebfe42 | |||
| 3fe6f702b9 | |||
| 01eee1289a | |||
| b89e7ebec9 | |||
| 1af95ba75e | |||
| eef0f25aaf | |||
| dc5b230471 | |||
| 10a1652795 | |||
| ae3100a6c8 | |||
| 68410cd7e7 | |||
| 1bfad729aa | |||
| b295132dae | |||
| 9e4add9075 | |||
| e0356b0edb | |||
| 3ec8adfc1b | |||
| 1c9d142646 | |||
| e0dbb28b2e | |||
| 12b816b2e4 | |||
| 71331929ba | |||
| 913a8e9ab2 | |||
| d16ecc28da | |||
| 33825fc137 | |||
| 1f150d71d2 | |||
| 0da45a5b0d | |||
| 1dbf772873 | |||
| f0db85e714 | |||
| 507cde3788 | |||
| a19f71c8b9 | |||
| bdefe77b67 | |||
| 0c705f7837 | |||
| 7a1c4ea6f4 | |||
| 4483e46102 | |||
| bb5a385292 | |||
| 636b8a5645 | |||
| 776c7db8d2 | |||
| 124d59b5af | |||
| b62f685322 | |||
| a0ca179798 | |||
| d0847ac23d | |||
| e55d5bb5da | |||
| f85a02dc03 | |||
| 6a9d0b6cd4 | |||
| 87ba0f5c06 | |||
| 3de57e0786 | |||
| 15712267d6 | |||
| 73b27b5f19 | |||
| 6c4e5f3eb3 | |||
| f7b10fde04 | |||
| 7e56a4bca6 | |||
| 4976f3fd36 | |||
| 8213197399 | |||
| 4aef99222f | |||
| c4101683ba | |||
| 48d21c8b59 | |||
| aa6a9b9a65 | |||
| 7b5effc44f | |||
| 80c3343b70 | |||
| 28e24bea15 | |||
| d4991a5a57 | |||
| 4283d661c4 | |||
| e4197625b0 | |||
| cd73e023bc | |||
| 8e83b62f99 | |||
| 7cac78df85 | |||
| d30e28dbe1 | |||
| ff4b8df4b4 | |||
| 905003f5c7 | |||
| a736dbfed0 | |||
| 8102ac4d89 | |||
| dd64045f47 | |||
| 848daabdff | |||
| 65f93f7231 | |||
| 3f5f9b9cb7 | |||
| 473ed9149c | |||
| e397b05654 | |||
| e9f4bcb08c | |||
| da7d319de8 | |||
| df03210327 | |||
| 8d1e17832e | |||
| f18fed8a1b | |||
| 494e74843b | |||
| a1f630506e | |||
| 6a2fa7f534 | |||
| 0843ad7ce0 | |||
| 30a3d6e7ee | |||
| e7db323cb5 | |||
| 4110fd8a35 | |||
| 93f944cbea | |||
| 0b335dec3a | |||
| 919d056489 | |||
| 89f9b7bee6 | |||
| fa04d757c5 | |||
| ba4d1fd1fd | |||
| eafce390d6 | |||
| 758c03a9bf | |||
| 8f5996d903 | |||
| 3d15e4e2d7 | |||
| abe8818958 | |||
| c1716b0319 | |||
| 0ba6f18b63 | |||
| bc0c949cd7 | |||
| 0c9e71f2a7 | |||
| b04a193268 | |||
| 7a27295f86 | |||
| df70128156 | |||
| 8ef5d38340 | |||
| 447024e143 | |||
| b158f2247d | |||
| c67212c94f | |||
| 1850e8dc26 | |||
| 9381322401 | |||
| 730d10edee | |||
| a965fa973b | |||
| 8aea9c3ee6 | |||
| 37fdb75bd9 | |||
| 449e4826c0 | |||
| 867264e3b7 | |||
| 16fe744990 | |||
| fec2ac4026 | |||
| 2a5ce1df3f | |||
| 3dfba5b464 | |||
| 5b2c1dad2e | |||
| 386e6048fc | |||
| 107f8b4756 | |||
| 0d5fd3fe33 | |||
| 61728f95d3 | |||
| 3fad61abde | |||
| 3bae780610 | |||
| fdf9621639 | |||
| aa845e843a | |||
| e6f4fd70f9 | |||
| f34b51453f | |||
| 0dabfee6da | |||
| 9ce7af9429 | |||
| ecc6a42519 | |||
| a10900f62b | |||
| 7b2872ee95 | |||
| b5e428bf5e | |||
| 460d3d2b51 | |||
| a3a6057358 | |||
| cc0a043757 | |||
| 038393e5fb | |||
| 38a5cb8a29 | |||
| 4b1c9f29e2 | |||
| df74a65831 | |||
| 16fbfc00e1 | |||
| 1e85b6a8d8 | |||
| d6518d9f14 | |||
| 21188d4674 | |||
| a0c8e24997 | |||
| 5644973db0 | |||
| 059fc7f5f4 | |||
| d00fa76fa3 | |||
| 80abd13d44 | |||
| f00b6c3c15 | |||
| 827dd21eb5 | |||
| 3e2440d395 | |||
| c886c9be8f | |||
| f730526c18 | |||
| 21d9880738 | |||
| 6b427ec38c | |||
| ceaf5667f2 | |||
| a04926b1fa | |||
| 0e272f5411 | |||
| ccbe1cc1a4 | |||
| eaca264460 | |||
| 8314ba348d | |||
| b73c206ee5 | |||
| a5c30c7310 | |||
| 79c559eb47 | |||
| ce0c92ecc5 | |||
| 3449cd9865 | |||
| d80aed8478 | |||
| d687b79111 | |||
| 64c5938d98 | |||
| bde704ce0a | |||
| 08312de42d | |||
| efccf6e94b | |||
| 8e9a464f7b | |||
| aacd46c42a | |||
| 368f443036 | |||
| 08159e8d69 | |||
| 8520dcd340 | |||
| 0f0a909689 | |||
| 441c97efa7 | |||
| 6a608d58b0 | |||
| 5a08bdb211 | |||
| 6083d6668a | |||
| aa63c133cf | |||
| 0776cdbda1 | |||
| b54b932f25 | |||
| 4b04d56096 | |||
| 1d08356641 | |||
| efc4be85ed | |||
| 6cd1ae50d1 | |||
| 6d70acb326 | |||
| 0ff5606b70 | |||
| 7de2f9b575 | |||
| d9b9337ea3 | |||
| e0eeff549d | |||
| 15c7e305ad | |||
| 39289ab1e5 | |||
| 41043b131d | |||
| ef486a6b5b | |||
| 74cdede6e3 | |||
| f15a8738dd | |||
| 978ac258c7 | |||
| 3b7d1c33de | |||
| 9e7a1d451b | |||
| 73c124bbb1 | |||
| 68ddf4ab69 | |||
| 25d5c47033 | |||
| 42322a8cf3 | |||
| 04593f9867 | |||
| fab8efbfee | |||
| f7d2e4f877 | |||
| 6d9d4b6bcc | |||
| ba82085b37 | |||
| ea424efbd0 | |||
| 0315548e7e | |||
| c03aa50261 | |||
| 310b141118 | |||
| f51aec7988 | |||
| 7c34a89fc5 | |||
| 2ff0c9eabe | |||
| 3a1189fded | |||
| a8710b0309 | |||
| 21ec5e92a5 | |||
| ffc6e4815d | |||
| d4428a5692 | |||
| 927383e081 | |||
| 190fad57db | |||
| d221191eb9 | |||
| 65147a3c7e | |||
| f87c178de2 | |||
| ccc69933c6 | |||
| b3a00e6652 | |||
| a77642e9c3 | |||
| 8241bbd47f | |||
| 6c40ff4a84 | |||
| 9cb2e348dd | |||
| defaa211b4 | |||
| 4852013fea | |||
| 134fb7b7cd | |||
| 7a195edb76 | |||
| 9c7a095115 | |||
| 5245b79974 | |||
| df6f3e9ac2 | |||
| 093eae9f30 | |||
| a92817279b | |||
| ac6d20b2d6 | |||
| d42b0535f3 | |||
| 2cff6221a2 | |||
| a9d9b46a0d | |||
| 8b9c9b35df | |||
| 771ce581ec | |||
| 69ebe72091 | |||
| a00d45d979 | |||
| a663d12e15 | |||
| 80cbdf551f | |||
| e3f2231e04 | |||
| cbea2c3b7e | |||
| 84aeb9a110 | |||
| 21a2f0ac40 | |||
| d1dcf67fea | |||
| 91f131e0c2 | |||
| 180b960526 | |||
| c4b6902a14 | |||
| 8404c1ed9f | |||
| ac2afb7782 | |||
| 1c8e56421c | |||
| ba20d4d534 | |||
| b15f5479a9 | |||
| 6272c68cec | |||
| c9f7fade09 | |||
| 4a591a8490 | |||
| ba575061d4 | |||
| b07856931a | |||
| 021c6ab5a4 | |||
| c7c22f0507 | |||
| 970713983c | |||
| bf27910f28 | |||
| 3c86d1c7eb | |||
| e32e25e58f | |||
| d8446c6ebd | |||
| 2135810b5c | |||
| 599aa084ab | |||
| a799e9ab67 | |||
| ba0721f4a0 | |||
| 68d4439960 | |||
| f888c9122c | |||
| d7d1406373 | |||
| 0fabf15f97 | |||
| 135b3c962a | |||
| 4b9880252d | |||
| 9a78271308 | |||
| 62026d6ca9 | |||
| 970296e443 | |||
| e830822297 | |||
| 4effd4c8f2 | |||
| 589c1e96b4 | |||
| 3970b600f0 | |||
| cf523788ff | |||
| 3072866c49 | |||
| 40682aacde | |||
| b875ac5842 | |||
| 32f96f600a | |||
| e31fb3aed7 | |||
| f35d9d9789 | |||
| 776a633aff | |||
| f1b8924f33 | |||
| 05166c5d65 | |||
| 648e944aea | |||
| 21ce1588da | |||
| 795cfd928f | |||
| a3a11d9cd9 | |||
| 43cb41ce2b | |||
| 59c9300575 | |||
| f1689c5eb0 | |||
| dd82d1c560 | |||
| 0416665b9d | |||
| 4971899f00 | |||
| 83e8c90353 | |||
| 64c1393721 | |||
| c08214ebe4 | |||
| 6a55ae0914 | |||
| 36b8b0e580 | |||
| 91935aef00 | |||
| 30f06717fc | |||
| 17000b3230 | |||
| c135e2aa5e | |||
| c48f278b8b | |||
| 08ac569642 | |||
| 18ff2b22b2 | |||
| 6549c6b6fa | |||
| 391683fa91 | |||
| 2862f573eb | |||
| 8087acaa7b | |||
| 09ec37f871 | |||
| b8ec3529eb | |||
| f997012dec | |||
| 2344e588d5 | |||
| ee00cdce06 | |||
| 9d85d6ee21 | |||
| 1f9e960787 | |||
| ff328201b5 | |||
| d5a86e576a | |||
| 8de98fec4a | |||
| 96c7a9f8ad | |||
| 3034230047 | |||
| e858e6c103 | |||
| 15bcc885c3 | |||
| 87165ca616 | |||
| d6eeff7c1b | |||
| ee38939277 | |||
| b50b6ccc2b | |||
| cfde0ce467 | |||
| 1750342775 | |||
| 4bb25b3945 | |||
| cdc2934d2e | |||
| 47c1ae2510 | |||
| 053e9dafde | |||
| df800b1d90 | |||
| 2a5f61b8cb | |||
| 82d55ebadb | |||
| 66294c2393 | |||
| 1c9c21c05f | |||
| 149948e7c5 | |||
| 8e7e0c1129 | |||
| da6102a3ad | |||
| cfa33e527d | |||
| c09de70d78 | |||
| 4d0f3677a3 | |||
| 1bfc500c99 | |||
| 35948151ab | |||
| 28ba7e8342 | |||
| 55dd1433d6 | |||
| bc2e321a19 | |||
| b97db97a1e | |||
| 5f89247640 | |||
| 6da452c9d7 | |||
| 7b362d33f2 | |||
| 88103cafbf | |||
| d058197d2e | |||
| fb0d4fea46 | |||
| e0ee2eef70 | |||
| 0e6c2ae0a2 | |||
| c7da714001 | |||
| 9fbc951b29 | |||
| d338e870aa | |||
| c57e02f420 | |||
| 92b0685734 | |||
| 68676816e8 | |||
| 689a9806dd | |||
| ef9ef54963 | |||
| 4faa58da15 | |||
| a0210ef96e | |||
| be66ce1fd6 | |||
| 1521569192 | |||
| 07df76955d | |||
| 93eb265c95 | |||
| af55d858cc | |||
| c527a5452e | |||
| a3019a3fe6 | |||
| 2aec1395cd | |||
| 7dc14bdb23 | |||
| 13770e384a | |||
| 8c5834f835 | |||
| 138c318b0c | |||
| 91afbd0274 | |||
| 9c5fac65ea | |||
| b79c493182 | |||
| 9c2a5d5956 | |||
| 0686427abe | |||
| 9de9043fa9 | |||
| 4fc8734a51 | |||
| 3b169ff56a | |||
| e51fa2c770 | |||
| 9cf8249f16 | |||
| e207bc367b | |||
| 9e1439ce32 | |||
| 932294e32c | |||
| 3ab556d88a | |||
| 177498acb9 | |||
| f242e1ec13 | |||
| 5ffd11099b | |||
| 1673632841 | |||
| 4909577436 | |||
| 320cbeba8e | |||
| 365ca72aec | |||
| 01f0e324d8 | |||
| 79e283f0ef | |||
| f9cca5cd21 | |||
| 823ad863ee | |||
| 438e52ccc7 | |||
| 52a7eec61e | |||
| 08625c69c8 | |||
| 4654f3e744 | |||
| 39ac6ab327 | |||
| ea0915582c | |||
| 2680bc19aa | |||
| f0326b3f40 | |||
| a64217bfee | |||
| 99ac636a53 | |||
| ebb2a08eaa | |||
| 88a33b0f3e | |||
| 78a635b865 | |||
| 29902e9b06 | |||
| 4b6ab1a885 | |||
| d393b81347 | |||
| e67eec3799 | |||
| c684126bed | |||
| a0bccafc30 | |||
| 71dee6d322 | |||
| f645e07a74 | |||
| d0a68dbff5 | |||
| d5f83f6978 | |||
| 03f09275d0 | |||
| b86f8dfd20 | |||
| 3792ecbfb7 | |||
| 84d00c0c3a | |||
| 3d6710b478 | |||
| f75c24a394 | |||
| 6544539736 | |||
| d28abf34e5 | |||
| 489830ce90 | |||
| b0a13a2b23 | |||
| 23435ed186 | |||
| fcc2d7ab1a |
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"project_name": "Droidnix"
|
||||||
|
}
|
||||||
+3375
-1014
File diff suppressed because it is too large
Load Diff
+2886
-668
File diff suppressed because it is too large
Load Diff
@@ -1,19 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Get active workspace ID
|
|
||||||
ws=$(hyprctl activeworkspace -j | jq -r '.id')
|
|
||||||
|
|
||||||
# Format number with leading zero (01, 02, ...)
|
|
||||||
num=$(printf "%02d" "$ws")
|
|
||||||
|
|
||||||
# Build wallpaper path
|
|
||||||
wall="$HOME/Wallpapers/pictures/${num}.jpg"
|
|
||||||
|
|
||||||
# Check if file exists
|
|
||||||
if [ -f "$wall" ]; then
|
|
||||||
# Set wallpaper with smooth transition
|
|
||||||
awww img "$wall" \
|
|
||||||
--transition-type wipe \
|
|
||||||
--transition-duration 0.5 \
|
|
||||||
--transition-fps 60
|
|
||||||
fi
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
socket="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
|
||||||
|
|
||||||
socat -U - UNIX-CONNECT:$socket | while read -r line; do
|
|
||||||
if [[ "$line" == workspace* ]]; then
|
|
||||||
~/.config/hypr/scripts/set-workspace-wallpaper.sh
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# -------------------------------
|
|
||||||
# Config
|
|
||||||
# -------------------------------
|
|
||||||
HOME_DIR="$HOME"
|
|
||||||
PICTURES_DIR="$HOME_DIR/Wallpapers/pictures"
|
|
||||||
STATE_DIR="$HOME_DIR/.cache/hypr-wallpapers"
|
|
||||||
NAMESPACE="main"
|
|
||||||
|
|
||||||
CURRENTPATH=/run/current-system/sw/bin
|
|
||||||
|
|
||||||
# Required environment variables
|
|
||||||
: "${XDG_RUNTIME_DIR:?XDG_RUNTIME_DIR is not set}"
|
|
||||||
: "${HYPRLAND_INSTANCE_SIGNATURE:?HYPRLAND_INSTANCE_SIGNATURE is not set}"
|
|
||||||
: "${WAYLAND_DISPLAY:?WAYLAND_DISPLAY is not set}"
|
|
||||||
|
|
||||||
IPC_SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
|
||||||
|
|
||||||
# -------------------------------
|
|
||||||
# Wait for Hyprland IPC socket
|
|
||||||
# -------------------------------
|
|
||||||
until [ -S "$IPC_SOCKET" ]; do
|
|
||||||
echo "Waiting for Hyprland IPC socket..."
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# -------------------------------
|
|
||||||
# Start awww-daemon if not already running
|
|
||||||
# -------------------------------
|
|
||||||
awww_SOCKET="$XDG_RUNTIME_DIR/awww/$NAMESPACE.sock"
|
|
||||||
|
|
||||||
if [ ! -S "$awww_SOCKET" ]; then
|
|
||||||
if ! pgrep -f "awww-daemon.*--namespace $NAMESPACE" >/dev/null; then
|
|
||||||
echo "Starting awww-daemon for namespace $NAMESPACE..."
|
|
||||||
"$CURRENTPATH/awww-daemon" --namespace "$NAMESPACE" &
|
|
||||||
sleep 0.5
|
|
||||||
else
|
|
||||||
echo "awww-daemon already running for namespace $NAMESPACE"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# -------------------------------
|
|
||||||
# Load wallpapers
|
|
||||||
# -------------------------------
|
|
||||||
mapfile -t IMAGES < <(find "$PICTURES_DIR" -type f \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' \))
|
|
||||||
[ "${#IMAGES[@]}" -eq 0 ] && { echo "No wallpapers found in $PICTURES_DIR"; exit 1; }
|
|
||||||
|
|
||||||
mkdir -p "$STATE_DIR"
|
|
||||||
|
|
||||||
get_wallpaper() {
|
|
||||||
local ws="$1"
|
|
||||||
local mon="$2"
|
|
||||||
local key="$STATE_DIR/ws${ws}_mon${mon}.txt"
|
|
||||||
|
|
||||||
if [ -f "$key" ]; then
|
|
||||||
cat "$key"
|
|
||||||
else
|
|
||||||
local image="${IMAGES[RANDOM % ${#IMAGES[@]}]}"
|
|
||||||
echo "$image" > "$key"
|
|
||||||
echo "$image"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# -------------------------------
|
|
||||||
# Subscribe to workspace events
|
|
||||||
# -------------------------------
|
|
||||||
{
|
|
||||||
echo '{"subscribe":["workspace"]}'
|
|
||||||
"$CURRENTPATH/socat" - UNIX-CONNECT:"$IPC_SOCKET"
|
|
||||||
} | while read -r line; do
|
|
||||||
[[ "$line" =~ ^\{ ]] || continue
|
|
||||||
|
|
||||||
WS_NUM=$("$CURRENTPATH/jq" -r 'select(.type=="workspace" and .active==true) | .workspace' <<< "$line" 2>/dev/null || true)
|
|
||||||
MONITOR=$("$CURRENTPATH/jq" -r '.monitor' <<< "$line" 2>/dev/null || true)
|
|
||||||
|
|
||||||
if [ -n "$WS_NUM" ] && [ -n "$MONITOR" ]; then
|
|
||||||
WALLPAPER=$(get_wallpaper "$WS_NUM" "$MONITOR")
|
|
||||||
echo "Setting wallpaper for workspace $WS_NUM on monitor $MONITOR: $WALLPAPER"
|
|
||||||
"$CURRENTPATH/awww" img "$WALLPAPER" --resize stretch --namespace "$WS_NUM"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
Generated
+78
-57
@@ -20,11 +20,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775558810,
|
"lastModified": 1776876344,
|
||||||
"narHash": "sha256-fy95EdPnqQlpbP8+rk0yWKclWShCUS5VKs6P7/1MF2c=",
|
"narHash": "sha256-Ubqb/agkuMJK+k19gjQgHux/eOYRc1sRGoOZOho8+VY=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "aquamarine",
|
"repo": "aquamarine",
|
||||||
"rev": "7371b669b22aa2af980f913fc312a786d2f1abb2",
|
"rev": "648a13d0ee1e03a843b3e145b8ece15393058701",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -109,11 +109,11 @@
|
|||||||
"nixpkgs-stable": "nixpkgs-stable"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775841973,
|
"lastModified": 1777457213,
|
||||||
"narHash": "sha256-Fr3lUUcptivEeRyaKLPPgDrQdIMzyZwVVfXPN/IXMgI=",
|
"narHash": "sha256-JtSZni+/5T4p2INNT4iP3unll7ZYetQg/1eEosqBC4A=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "emacs-overlay",
|
"repo": "emacs-overlay",
|
||||||
"rev": "8d4d36e62a3715ed453dc7b53f58454861e6b7fb",
|
"rev": "346bd3de87bb008fcd87ca98fed11633a796ce81",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -177,11 +177,11 @@
|
|||||||
},
|
},
|
||||||
"flatpak": {
|
"flatpak": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1768656715,
|
"lastModified": 1777402031,
|
||||||
"narHash": "sha256-Sbh037scxKFm7xL0ahgSCw+X2/5ZKeOwI2clqrYr9j4=",
|
"narHash": "sha256-6gkfl9y3+ti0Z6dgby8/R4/DRT8sWU0I0TLCIxwWtjk=",
|
||||||
"owner": "gmodena",
|
"owner": "gmodena",
|
||||||
"repo": "nix-flatpak",
|
"repo": "nix-flatpak",
|
||||||
"rev": "123fe29340a5b8671367055b75a6e7c320d6f89a",
|
"rev": "22a3adbe7c5c8c8a10a635d32c9ef7fc01a6e4b8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -252,11 +252,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775781825,
|
"lastModified": 1777434174,
|
||||||
"narHash": "sha256-L5yKTpR+alrZU2XYYvIxCeCP4LBHU5jhwSj7H1VAavg=",
|
"narHash": "sha256-KwTyQ5g2qDhWIs/O6vH8HeF8n4JCzZIT/VYE7nYnukQ=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "e35c39fca04fee829cecdf839a50eb9b54d8a701",
|
"rev": "d3b4e4b1bd59aedd3d4eb0a8df7162edb6da4607",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -281,11 +281,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772461003,
|
"lastModified": 1776511930,
|
||||||
"narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=",
|
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprcursor",
|
"repo": "hyprcursor",
|
||||||
"rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7",
|
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -310,11 +310,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775496928,
|
"lastModified": 1776426399,
|
||||||
"narHash": "sha256-Ds759WU03mGWtu3I43J+5GF5Ni8TvF+GYQUFD+fVeMo=",
|
"narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprgraphics",
|
"repo": "hyprgraphics",
|
||||||
"rev": "cf95d93d17baa18f1d9b016b3afe27f820521a6e",
|
"rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -340,11 +340,11 @@
|
|||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775828308,
|
"lastModified": 1777413378,
|
||||||
"narHash": "sha256-XsijqtwDQd8pf/PweiGGuX7O1250f3YOchQ+oGm0eCc=",
|
"narHash": "sha256-3ZAOkmOly7h3i22XNKHD9LEhFRTop3JT88PrlDaqnzo=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "Hyprland",
|
"repo": "Hyprland",
|
||||||
"rev": "f7755322fc515108cc9eed8113c09492d4a352c1",
|
"rev": "e61976233e01446c4e7dd4fa3b4209fea1fca9ed",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -386,11 +386,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774710575,
|
"lastModified": 1776426575,
|
||||||
"narHash": "sha256-p7Rcw13+gA4Z9EI3oGYe3neQ3FqyOOfZCleBTfhJ95Q=",
|
"narHash": "sha256-KI6nIfVihn/DPaeB5Et46Xg3dkNHrrEtUd5LBBVomB0=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprland-guiutils",
|
"repo": "hyprland-guiutils",
|
||||||
"rev": "0703df899520001209646246bef63358c9881e36",
|
"rev": "a968d211048e3ed538e47b84cb3649299578f19d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -440,11 +440,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772459629,
|
"lastModified": 1776426736,
|
||||||
"narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=",
|
"narHash": "sha256-rl7i4aY+9p8LysJp7o8uRWahCkpFznCgGHXszlTw7b0=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprlang",
|
"repo": "hyprlang",
|
||||||
"rev": "7615ee388de18239a4ab1400946f3d0e498a8186",
|
"rev": "7833ff33b2e82d3406337b5dcf0d1cec595d83e9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -517,11 +517,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774911391,
|
"lastModified": 1777148223,
|
||||||
"narHash": "sha256-c4YVwO33Mmw+FIV8E0u3atJZagHvGTJ9Jai6RtiB8rE=",
|
"narHash": "sha256-PTf7kRFFzCW6rIYxLH2fWfVJmj86FSYe3k6L8B+IM9o=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprutils",
|
"repo": "hyprutils",
|
||||||
"rev": "e6caa3d4d1427eedbdf556cf4ceb70f2d9c0b56d",
|
"rev": "fa3992be2dfebe4ab06d753c6ca59bea298e798f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -542,11 +542,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772459835,
|
"lastModified": 1777148232,
|
||||||
"narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
|
"narHash": "sha256-Uv0WZLhu89SafuSOmYDA7akrPt4wBRmsa1ucasO5aXg=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwayland-scanner",
|
"repo": "hyprwayland-scanner",
|
||||||
"rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
|
"rev": "fec9cf1abcc1011e46f0a0986f46bf93c6bf8b92",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -571,11 +571,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775414057,
|
"lastModified": 1776728575,
|
||||||
"narHash": "sha256-mDpHnf+MkdOxEqIM1TnckYYh9p1SXR8B3KQfNZ12M8s=",
|
"narHash": "sha256-z9eGphrArEBpl1O/GCH0wlY6z4K9vA6yWh2gAS6qytU=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwire",
|
"repo": "hyprwire",
|
||||||
"rev": "86012ee01b0fdd8bf3101ef38816f2efbee42490",
|
"rev": "f3a80888783702a39691b684d099e16b83ed4702",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -601,11 +601,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775423009,
|
"lastModified": 1776877367,
|
||||||
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
|
"narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
|
"rev": "0726a0ecb6d4e08f6adced58726b95db924cef57",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -617,11 +617,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775595990,
|
"lastModified": 1777077449,
|
||||||
"narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=",
|
"narHash": "sha256-AIiMJiqvGrN4HyLEbKAoCSRRYn0rnlW5VbKNIMIYqm4=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "4e92bbcdb030f3b4782be4751dc08e6b6cb6ccf2",
|
"rev": "a4bf06618f0b5ee50f14ed8f0da77d34ecc19160",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -633,11 +633,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775710090,
|
"lastModified": 1777268161,
|
||||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
"narHash": "sha256-bxrdOn8SCOv8tN4JbTF/TXq7kjo9ag4M+C8yzzIRYbE=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
"rev": "1c3fe55ad329cbcb28471bb30f05c9827f724c76",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -682,11 +682,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775036584,
|
"lastModified": 1776796298,
|
||||||
"narHash": "sha256-zW0lyy7ZNNT/x8JhzFHBsP2IPx7ATZIPai4FJj12BgU=",
|
"narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "4e0eb042b67d863b1b34b3f64d52ceb9cd926735",
|
"rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -695,6 +695,26 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"quickshell": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1777341401,
|
||||||
|
"narHash": "sha256-QEAVYeXxvTamsYJVBq8+qSJV9ml2MxqRaZvkobfuPWA=",
|
||||||
|
"ref": "refs/heads/master",
|
||||||
|
"rev": "0baa81aa03559ca315668e5a306364cddf1a6f49",
|
||||||
|
"revCount": 812,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"emacs-overlay": "emacs-overlay",
|
"emacs-overlay": "emacs-overlay",
|
||||||
@@ -703,6 +723,7 @@
|
|||||||
"hyprland": "hyprland",
|
"hyprland": "hyprland",
|
||||||
"import-tree": "import-tree",
|
"import-tree": "import-tree",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"quickshell": "quickshell",
|
||||||
"stylix": "stylix",
|
"stylix": "stylix",
|
||||||
"zen-browser": "zen-browser"
|
"zen-browser": "zen-browser"
|
||||||
}
|
}
|
||||||
@@ -727,11 +748,11 @@
|
|||||||
"tinted-zed": "tinted-zed"
|
"tinted-zed": "tinted-zed"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775429060,
|
"lastModified": 1776893932,
|
||||||
"narHash": "sha256-wbFF5cRxQOCzL/wHOKYm21t5AHPH2Lfp0mVPCOAvEoc=",
|
"narHash": "sha256-AFD5cf9eNqXq1brHS63xeZy2xKZMgG9J86XJ9I2eLn8=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"rev": "d27951a6539951d87f75cf0a7cda8a3a24016019",
|
"rev": "84971726c7ef0bb3669a5443e151cc226e65c518",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -862,11 +883,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773601989,
|
"lastModified": 1777035886,
|
||||||
"narHash": "sha256-2tJf/CQoHApoIudxHeJye+0Ii7scR0Yyi7pNiWk0Hn8=",
|
"narHash": "sha256-m1TNuBoSXUBSKhD9UVMkU90M0wFTPTfvIOOltO8IM8A=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
"rev": "a9b862d1aa000a676d310cc62d249f7ad726233d",
|
"rev": "ecfcdcc781f48821d83e1e2a0e30d7beca0eeb5e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -882,11 +903,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775710180,
|
"lastModified": 1777352968,
|
||||||
"narHash": "sha256-sCokvdNvl8zIzsnjgG0TN5h3RUI7GJyWW9ErfmEj0rM=",
|
"narHash": "sha256-BZ+BHCINHSyyCOWo4pCJQU4T994iZLiw7lgFMNw+W9k=",
|
||||||
"owner": "youwen5",
|
"owner": "youwen5",
|
||||||
"repo": "zen-browser-flake",
|
"repo": "zen-browser-flake",
|
||||||
"rev": "2c138beb648d1cbbfae76695a8230ee04e4db25a",
|
"rev": "bebce586893c7d441edd6cf9cf2cf62a1799361e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
+37
-14
@@ -1,58 +1,81 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{
|
{
|
||||||
description = "Droidnix: A dendritic NixOS + Home Manager configuration";
|
description = "Droidnix: A dendritic NixOS + Home Manager configuration";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
quickshell = {
|
||||||
|
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
import-tree.url = "github:vic/import-tree";
|
import-tree.url = "github:vic/import-tree";
|
||||||
|
|
||||||
stylix = {
|
stylix = {
|
||||||
url = "github:nix-community/stylix";
|
url = "github:nix-community/stylix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
flatpak = {
|
flatpak = {
|
||||||
url = "github:gmodena/nix-flatpak";
|
url = "github:gmodena/nix-flatpak";
|
||||||
};
|
};
|
||||||
|
|
||||||
emacs-overlay = {
|
emacs-overlay = {
|
||||||
url = "github:nix-community/emacs-overlay";
|
url = "github:nix-community/emacs-overlay";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
zen-browser = {
|
zen-browser = {
|
||||||
url = "github:youwen5/zen-browser-flake";
|
url = "github:youwen5/zen-browser-flake";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
hyprland.url = "github:hyprwm/Hyprland";
|
hyprland.url = "github:hyprwm/Hyprland";
|
||||||
};
|
};
|
||||||
|
outputs = { self, nixpkgs, home-manager, import-tree, stylix, hyprland,
|
||||||
outputs = { self, nixpkgs, home-manager, import-tree, stylix, hyprland, emacs-overlay, zen-browser, flatpak, ... }:
|
emacs-overlay, zen-browser, quickshell, flatpak, ... }:
|
||||||
let
|
let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
flakeRoot = self;
|
flakeRoot = self;
|
||||||
|
buildUser = "henrov";
|
||||||
|
mutableConfigPath = "${flakeRoot}/generated/.config";
|
||||||
in {
|
in {
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
traveldroid = nixpkgs.lib.nixosSystem {
|
traveldroid = nixpkgs.lib.nixosSystem {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
|
||||||
modules = [
|
modules = [
|
||||||
({ ... }: {
|
({ ... }: {
|
||||||
nixpkgs.overlays = [ emacs-overlay.overlays.default ];
|
nixpkgs.overlays = [ emacs-overlay.overlays.default ];
|
||||||
})
|
})
|
||||||
flatpak.nixosModules."nix-flatpak"
|
flatpak.nixosModules."nix-flatpak"
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
home-manager.extraSpecialArgs = {
|
||||||
|
inherit
|
||||||
|
flakeRoot
|
||||||
|
import-tree
|
||||||
|
stylix
|
||||||
|
hyprland
|
||||||
|
zen-browser
|
||||||
|
quickshell
|
||||||
|
buildUser
|
||||||
|
mutableConfigPath
|
||||||
|
;
|
||||||
|
};
|
||||||
|
}
|
||||||
./generated/hosts/traveldroid/host.nix
|
./generated/hosts/traveldroid/host.nix
|
||||||
./generated/users/henrov.nix
|
|
||||||
];
|
];
|
||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit flakeRoot;
|
inherit
|
||||||
inherit home-manager import-tree stylix hyprland zen-browser;
|
flakeRoot
|
||||||
|
home-manager
|
||||||
|
import-tree
|
||||||
|
stylix
|
||||||
|
hyprland
|
||||||
|
zen-browser
|
||||||
|
quickshell
|
||||||
|
buildUser
|
||||||
|
mutableConfigPath
|
||||||
|
;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
#!/run/current-system/sw/bin/bash
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
WALLPAPER_DIR="$HOME/Wallpapers/pictures"
|
WALLPAPER_DIR="$HOME/Wallpapers/pictures"
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SOCK="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
|
||||||
|
|
||||||
|
exec socat -U - UNIX-CONNECT:"$SOCK" | while IFS= read -r line; do
|
||||||
|
case "$line" in
|
||||||
|
workspace\>\>*)
|
||||||
|
WS="${line#workspace>>}"
|
||||||
|
"$HOME/Wallpapers/scripts/ws-wallpaper.sh" "$WS"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
+36
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
WS=$1
|
||||||
|
|
||||||
|
case "$WS" in
|
||||||
|
0)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/10.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/01.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/02.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/03.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/04.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/05.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
6)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/06.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
7)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/07.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
8)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/08.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
9)
|
||||||
|
awww img /home/henrov/Wallpapers/pictures/09.jpg --transition-type random
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
;; --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
;;; package --- early init -*- lexical-binding: t -*-
|
;;; package --- early init -*- lexical-binding: t -*-
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
;;; Prevents white flash and better Emacs defaults
|
;;; Prevents white flash and better Emacs defaults
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
;; --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
|
;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
|
|||||||
@@ -1,12 +1,34 @@
|
|||||||
# ./assets/conf/desktop/hypr/animations.conf
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
|
||||||
animations {
|
animations {
|
||||||
enabled = yes
|
enabled = yes
|
||||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
|
||||||
animation = windows, 1, 7, myBezier
|
# ─────────────────────────────
|
||||||
animation = windowsOut, 1, 7, default, popin 80%
|
# 🌊 Smooth fluid motion curve (less snap, more glide)
|
||||||
|
# ─────────────────────────────
|
||||||
|
bezier = fluid, 0.10, 0.85, 0.15, 1.00
|
||||||
|
|
||||||
|
# ─────────────────────────────
|
||||||
|
# 🪟 Windows (primary UI motion)
|
||||||
|
# slightly slower + softer entry/exit
|
||||||
|
# ─────────────────────────────
|
||||||
|
animation = windows, 1, 8, fluid
|
||||||
|
animation = windowsIn, 1, 8, fluid
|
||||||
|
animation = windowsOut, 1, 7, fluid, popin 90%
|
||||||
|
|
||||||
|
# ─────────────────────────────
|
||||||
|
# 🧭 Workspaces (camera-like movement)
|
||||||
|
# make this the most “fluid” feeling part
|
||||||
|
# ─────────────────────────────
|
||||||
|
animation = workspaces, 1, 7, fluid
|
||||||
|
|
||||||
|
# ─────────────────────────────
|
||||||
|
# 🌫️ Fades (keep snappy but soft)
|
||||||
|
# ─────────────────────────────
|
||||||
|
animation = fade, 1, 6, fluid
|
||||||
|
|
||||||
|
# ─────────────────────────────
|
||||||
|
# 🧱 Borders (stable, minimal motion)
|
||||||
|
# ─────────────────────────────
|
||||||
animation = border, 1, 10, default
|
animation = border, 1, 10, default
|
||||||
animation = borderangle, 1, 8, default
|
animation = borderangle, 1, 9, fluid
|
||||||
animation = fade, 1, 7, default
|
|
||||||
animation = workspaces, 1, 6, default
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
# Keyboard and mouse settings
|
# Keyboard and mouse settings
|
||||||
|
input {
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = true
|
||||||
|
tap-to-click = true
|
||||||
|
drag_lock = true
|
||||||
|
}
|
||||||
|
}
|
||||||
# Scrolling modifier settings
|
# Scrolling modifier settings
|
||||||
# Touchpad settings (applies to all touchpads)
|
# Touchpad settings (applies to all touchpads)
|
||||||
# Focus settings
|
# Focus settings
|
||||||
|
|||||||
@@ -1,30 +1,47 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
$mainMod = SUPER
|
$mainMod = SUPER
|
||||||
|
|
||||||
# Terminal / launcher / kill / reload
|
# launcher / kill / reload
|
||||||
bind = $mainMod, E, exec, thunar
|
|
||||||
bind = $mainMod, RETURN, exec, kitty
|
bind = $mainMod, Space, exec, ~/.config/wofi/scripts/wofi-launcher.sh
|
||||||
bind = $mainMod, Space, exec, wofi --show drun --style ~/.config/wofi/style.css
|
bind = ALT, Space, exec, ~/.config/wofi/scripts/wofi-launcher.sh
|
||||||
bind = ALT, Space, exec, wofi --show drun
|
|
||||||
bind = $mainMod, Q, killactive,
|
bind = $mainMod, Q, killactive,
|
||||||
bind = $mainMod SHIFT, Q, exit,
|
bind = $mainMod SHIFT, Q, exit,
|
||||||
bind = $mainMod SHIFT, R, exec, hyprctl reload
|
bind = $mainMod SHIFT, R, exec, hyprctl reload
|
||||||
|
bind = $mainMod, X , exec, qs -c powermenu
|
||||||
|
bind = $mainMod, L, exec, hyprlock
|
||||||
|
|
||||||
|
# grimblast
|
||||||
|
bind = $mainMod SHIFT, P, exec, grimblast -n -f copysave active
|
||||||
|
bind = $mainMod SHIFT, S, exec, grimblast -n -f copysave area
|
||||||
|
bind = , XF86Screenshot, exec, grimblast -n -f copysave area
|
||||||
|
bind = $mainMod ALT, P, exec, grimblast -n -f copysave output
|
||||||
|
bind = $mainMod CTRL, P, exec, grimblast -n -f copysave screen
|
||||||
|
|
||||||
# Switch windows
|
# Switch windows
|
||||||
bind = ALT, TAB, cyclenext,
|
bind = ALT, TAB, cyclenext, prev
|
||||||
# bind = ALT SHIFT, TAB, cyclenext prev
|
bind = ALT SHIFT, TAB, cyclenext, prev
|
||||||
|
bind = ALT, mouse_down, cyclenext, prev
|
||||||
|
bind = ALT , mouse_up, cyclenext, prev
|
||||||
|
bindel = CTRL ALT, mouse_up, layoutmsg, addmaster
|
||||||
|
bindel = CTRL ALT, mouse_down, layoutmsg, removemaster
|
||||||
|
bind = CTRL ALT, right, layoutmsg, colwidth +conf
|
||||||
|
bind = CTRL ALT, left, layoutmsg, colwidth -conf
|
||||||
|
|
||||||
# switch layouts
|
# switch layouts
|
||||||
|
bind = $mainMod, T , exec, qs -c layoutswitcher
|
||||||
|
|
||||||
# Hyprscrolling
|
# Hyprscrolling
|
||||||
bind = $mainMod, period, layoutmsg, move +col
|
bind = $mainMod, period, layoutmsg, move +col
|
||||||
bind = $mainMod, comma, layoutmsg, swapcol l
|
bind = $mainMod, comma, layoutmsg, swapcol l
|
||||||
|
# Column resize
|
||||||
|
bind = $mainMod SHIFT, period, layoutmsg, colresize +conf
|
||||||
|
bind = $mainMod SHIFT, comma, layoutmsg, colresize -conf
|
||||||
# Make / break a tab-group (stack)
|
# Make / break a tab-group (stack)
|
||||||
bind = $mainMod, S, togglegroup
|
bind = $mainMod, S, togglegroup
|
||||||
# Cycle tabs in the group
|
# Cycle tabs in the group
|
||||||
bind = $mainMod, L, changegroupactive, f
|
bind = $mainMod, bracketright, changegroupactive, f
|
||||||
bind = $mainMod, H, changegroupactive, b
|
bind = $mainMod, bracketleft, changegroupactive, b
|
||||||
bind = $mainMod, T, exec, ~/.config/hypr/scripts/layout-selector.sh
|
|
||||||
|
|
||||||
# Focus movement
|
# Focus movement
|
||||||
bind = $mainMod, H, movefocus, l
|
bind = $mainMod, H, movefocus, l
|
||||||
@@ -69,6 +86,7 @@ bind = $mainMod, 8, workspace, 8
|
|||||||
bind = $mainMod, 9, workspace, 9
|
bind = $mainMod, 9, workspace, 9
|
||||||
bind = $mainMod, 0, workspace, 10
|
bind = $mainMod, 0, workspace, 10
|
||||||
|
|
||||||
|
# Moving windows to workspaces
|
||||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
@@ -88,12 +106,6 @@ bind = $mainMod, mouse_up, workspace, e-1
|
|||||||
bindm = $mainMod, mouse:272, movewindow
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
#########################
|
|
||||||
# Screenshots
|
|
||||||
#########################
|
|
||||||
bind = $mainMod SHIFT, s, exec, flameshot gui
|
|
||||||
bind = , XF86Screenshot, exec, flameshot full -c -p ~/Pictures/Screenshots
|
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# Audio (pamixer)
|
# Audio (pamixer)
|
||||||
#########################
|
#########################
|
||||||
@@ -105,7 +117,7 @@ bind = , XF86AudioMicMute, exec, pamixer --default-source -t
|
|||||||
#########################
|
#########################
|
||||||
# Media (playerctl)
|
# Media (playerctl)
|
||||||
#########################
|
#########################
|
||||||
bind = , XF86AudioPlay, exec, playerctl play-pause
|
bind = , XF86AudioPlay, exec, bash -c "playerctl -l | grep -q spotify && playerctl -p spotify play-pause || playerctl play-pause"
|
||||||
bind = , XF86AudioPause, exec, playerctl pause
|
bind = , XF86AudioPause, exec, playerctl pause
|
||||||
bind = , XF86AudioNext, exec, playerctl next
|
bind = , XF86AudioNext, exec, playerctl next
|
||||||
bind = , XF86AudioPrev, exec, playerctl previous
|
bind = , XF86AudioPrev, exec, playerctl previous
|
||||||
@@ -125,29 +137,22 @@ bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%
|
|||||||
bind = , XF86Sleep, exec, systemctl suspend
|
bind = , XF86Sleep, exec, systemctl suspend
|
||||||
bind = , XF86PowerOff, exec, systemctl poweroff
|
bind = , XF86PowerOff, exec, systemctl poweroff
|
||||||
bind = , XF86WakeUp, exec, systemctl suspend
|
bind = , XF86WakeUp, exec, systemctl suspend
|
||||||
bind = $mainMod, L, exec, loginctl lock-session
|
bind = , XF86ScreenSaver, exec, loginctl lock-session
|
||||||
# bind = $mainMod, X, exec, ~/.config/hypr/scripts/powermenu.sh
|
|
||||||
|
|
||||||
#########################
|
|
||||||
# Laptop lid settings
|
|
||||||
#########################
|
|
||||||
bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/lid-action.sh
|
|
||||||
bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/lid-restore.sh
|
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# Start apps
|
# Start apps
|
||||||
#########################
|
#########################
|
||||||
|
bind = $mainMod, E, exec, thunar
|
||||||
|
bind = $mainMod, RETURN, exec, kitty
|
||||||
bind = CTRL ALT, B, exec, flatpak run eu.betterbird.Betterbird
|
bind = CTRL ALT, B, exec, flatpak run eu.betterbird.Betterbird
|
||||||
bind = CTRL ALT, S, exec, spotify
|
bind = CTRL ALT, S, exec, spotify
|
||||||
bind = $mainMod, Z, exec, zeditor
|
bind = $mainMod, Z, exec, zeditor
|
||||||
bind = $mainMod, W, exec, zen
|
bind = $mainMod, W, exec, zen
|
||||||
|
bind = CTRL ALT, T, exec, solidtime-desktop
|
||||||
#########################
|
bind = , XF86Calculator, exec, gnome-calculator
|
||||||
# Auto apps
|
|
||||||
#########################
|
|
||||||
bind = , workspace, exec, ~/.config/hypr/scripts/set-workspace-wallpaper.sh
|
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# System stuff
|
# System stuff
|
||||||
#########################
|
#########################
|
||||||
bind = $mainMod, U, exec, kitty -e bash -lc "$HOME/.config/scripts/update.sh"
|
# bind = $mainMod, U, exec, kitty --class update-term -e bash -lc "~/.config/shared/scripts/update.sh; exec bash"
|
||||||
|
bind = $mainMod, U, exec, qs -c updater
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
exec-once = dbus-update-activation-environment --systemd --all
|
exec-once = dbus-update-activation-environment --systemd --all
|
||||||
exec-once = hypridleconfig/hypr/exec-once
|
exec-once = systemctl --user start --no-block xdg-desktop-portal-hyprland
|
||||||
exec-once = systemd-run --user --scope --unit=elephant elephant
|
exec-once = systemctl --user start --no-block xdg-desktop-portal
|
||||||
exec-once = waybar
|
exec-once = hypridle
|
||||||
exec-once = awww-daemon
|
exec-once = awww-daemon
|
||||||
exec-once = awww img ~/Wallpapers/pictures/01.jpg
|
exec-once = awww img ~/Wallpapers/pictures/01.jpg
|
||||||
exec-once = ~/.config/hypr/scripts/set-workspace-wallpaper.sh
|
exec-once = ~/.config/awww/scripts/ws-daemon.sh
|
||||||
exec-once = ~/.config/hypr/scripts/workspace-listener.sh
|
exec-once = ~/.config/shared/scripts/numlock-check.sh
|
||||||
exec-once = /run/current-system/sw/libexec/polkit-gnome-authentication-agent-1
|
exec-once = /run/current-system/sw/libexec/polkit-gnome-authentication-agent-1
|
||||||
exec-once = nextcloud --background
|
exec-once = nextcloud --background
|
||||||
|
exec-once = waybar
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
general {
|
general {
|
||||||
lock_cmd = hyprlock
|
lock_cmd = hyprlock
|
||||||
|
before_sleep_cmd = hyprlock
|
||||||
after_sleep_cmd = hyprctl dispatch dpms on
|
after_sleep_cmd = hyprctl dispatch dpms on
|
||||||
ignore_dbus_inhibit = false
|
ignore_dbus_inhibit = false
|
||||||
}
|
}
|
||||||
@@ -14,3 +16,8 @@ listener {
|
|||||||
on-timeout = hyprctl dispatch dpms off
|
on-timeout = hyprctl dispatch dpms off
|
||||||
on-resume = hyprctl dispatch dpms on
|
on-resume = hyprctl dispatch dpms on
|
||||||
}
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1200
|
||||||
|
on-timeout = systemctl suspend
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
source = ./theming.css
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
source = ./theming.conf
|
||||||
source = ./animations.conf
|
source = ./animations.conf
|
||||||
source = ./bindings.conf
|
source = ./bindings.conf
|
||||||
source = ./behaviour.conf
|
source = ./behaviour.conf
|
||||||
@@ -8,30 +9,3 @@ source = ./layout.conf
|
|||||||
source = ./monitor-rules.conf
|
source = ./monitor-rules.conf
|
||||||
source = ./window-rules.conf
|
source = ./window-rules.conf
|
||||||
source = ./workspace-rules.conf
|
source = ./workspace-rules.conf
|
||||||
|
|
||||||
|
|
||||||
decoration {
|
|
||||||
shadow {
|
|
||||||
color=rgba(1e1e2e99)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
general {
|
|
||||||
col.active_border= 0xff89b4fa 0xff97cbcd
|
|
||||||
col.inactive_border=rgb(45475a)
|
|
||||||
}
|
|
||||||
|
|
||||||
group {
|
|
||||||
groupbar {
|
|
||||||
col.active=rgb(89b4fa)
|
|
||||||
col.inactive=rgb(45475a)
|
|
||||||
text_color=rgb(cdd6f4)
|
|
||||||
}
|
|
||||||
col.border_active=rgb(89b4fa)
|
|
||||||
col.border_inactive=rgb(45475a)
|
|
||||||
col.border_locked_active=rgb(94e2d5)
|
|
||||||
}
|
|
||||||
|
|
||||||
misc {
|
|
||||||
background_color=rgb(1e1e2e)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,32 +1,22 @@
|
|||||||
# ~/.config/hypr/hyprlock.conf
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
|
||||||
general {
|
general {
|
||||||
grace = 2
|
grace = 2
|
||||||
ignore_empty_input = true
|
hide_cursor = true
|
||||||
}
|
}
|
||||||
|
|
||||||
background {
|
background {
|
||||||
path = ~/.config/hypr/lock.png
|
monitor =
|
||||||
blur_passes = 2
|
path = screenshot
|
||||||
blur_size = 6
|
blur_passes = 3
|
||||||
|
blur_size = 8
|
||||||
}
|
}
|
||||||
|
|
||||||
input-field {
|
input-field {
|
||||||
size = 320, 60
|
monitor =
|
||||||
|
size = 250, 50
|
||||||
|
position = 0, -80
|
||||||
outline_thickness = 2
|
outline_thickness = 2
|
||||||
dots_size = 0.25
|
|
||||||
dots_spacing = 0.20
|
|
||||||
fade_on_empty = true
|
|
||||||
placeholder_text = "Password"
|
|
||||||
position = 0, -120
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
dots_center = true
|
||||||
text = $TIME
|
fade_on_empty = false
|
||||||
font_size = 72
|
|
||||||
position = 0, 120
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
layerrule = blur on, ignore_alpha 1, match:namespace waybar
|
layerrule = blur on, ignore_alpha 1, match:namespace waybar
|
||||||
layerrule = xray 1, match:namespace waybar
|
layerrule = xray 1, match:namespace waybar
|
||||||
layerrule = blur on, ignore_alpha 1, match:namespace walker
|
|
||||||
layerrule = xray 1, match:namespace walker
|
|
||||||
layerrule = blur on, ignore_alpha 1, match:namespace swaync-control-center
|
layerrule = blur on, ignore_alpha 1, match:namespace swaync-control-center
|
||||||
layerrule = blur on, ignore_alpha 1, match:namespace swaync-notification-window
|
layerrule = xray 1, match:namespace swaync-control-center
|
||||||
|
|||||||
@@ -1 +1,7 @@
|
|||||||
workspace_layouts = dwindle, master, scrolling, monocle
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
|
||||||
|
scrolling {
|
||||||
|
fullscreen_on_one_column = true
|
||||||
|
column_width = 0.32 # default: 3 windows side by side
|
||||||
|
explicit_column_widths = 0.329, 0.5, 0.667, 1.0
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
# Default portable monitor rule
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
monitor=DP-1,3840x1080@144,1920x0,1
|
monitor = DP-1, preferred, 0x0, 1
|
||||||
|
monitor = eDP-1, preferred, auto-left, 1.5
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# layout-selector.sh
|
|
||||||
# Select a workspace layout using Wofi, shows description, applies with layoutmsg
|
|
||||||
|
|
||||||
# Define layouts and descriptions
|
|
||||||
declare -A LAYOUTS=(
|
|
||||||
[dwindle]="舘 Dwindle: Auto-tiling, windows shrink progressively"
|
|
||||||
[master]=" Master: One main window, others stacked"
|
|
||||||
[scrolling]=" Scrolling: Vertical list, scroll through windows"
|
|
||||||
[monocle]=" Monocle: One window fills the screen"
|
|
||||||
[floating]=" Floating: Free move & resize"
|
|
||||||
)
|
|
||||||
ORDER=(dwindle master scrolling monocle floating)
|
|
||||||
|
|
||||||
# Prepare Wofi menu: show "layoutname: description"
|
|
||||||
MENU_ITEMS=()
|
|
||||||
for key in "${ORDER[@]}"; do
|
|
||||||
MENU_ITEMS+=("$key: ${LAYOUTS[$key]}")
|
|
||||||
done
|
|
||||||
|
|
||||||
# Show selection menu via Wofi
|
|
||||||
CHOICE=$(printf '%s\n' "${MENU_ITEMS[@]}" | wofi --dmenu --prompt "Select Layout")
|
|
||||||
|
|
||||||
# Exit if cancelled
|
|
||||||
[ -z "$CHOICE" ] && exit 0
|
|
||||||
|
|
||||||
# Extract layout name from selection (before colon)
|
|
||||||
LAYOUT_NAME="${CHOICE%%:*}"
|
|
||||||
|
|
||||||
# Apply layout via layoutmsg
|
|
||||||
hyprctl dispatch layoutmsg setlayout "$LAYOUT_NAME"
|
|
||||||
|
|
||||||
# Show OSD feedback
|
|
||||||
hyprctl dispatch oSD "Layout: $LAYOUT_NAME" 2000
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
# Hyprland Catppuccin Mocha Theme (solid colors)
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
$base = #1e1e2e
|
||||||
|
$baseshadow = #1e1e2e99
|
||||||
|
$mantle = #181825
|
||||||
|
$surface0 = #313244
|
||||||
|
$surface1 = #45475a
|
||||||
|
$surface2 = #585b70
|
||||||
|
$text = #cdd6f4
|
||||||
|
$rosewater = #f5e0dc
|
||||||
|
$lavender = #b4befe
|
||||||
|
$red = #f38ba8
|
||||||
|
$peach = #fab387
|
||||||
|
$yellow = #f9e2af
|
||||||
|
$green = #a6e3a1
|
||||||
|
$teal = #94e2d5
|
||||||
|
$blue = #89b4fa
|
||||||
|
$mauve = #cba6f7
|
||||||
|
$flamingo = #f2cdcd
|
||||||
|
$inactive = #595959aa
|
||||||
|
|
||||||
|
# General
|
||||||
|
general {
|
||||||
|
gaps_in = 2
|
||||||
|
gaps_out = 4
|
||||||
|
border_size = 4
|
||||||
|
resize_on_border = true
|
||||||
|
extend_border_grab_area = 20
|
||||||
|
col.active_border = rgb(89b4fa) rgb(a6e3a1) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Decorations
|
||||||
|
decoration {
|
||||||
|
rounding = 8
|
||||||
|
shadow {
|
||||||
|
color = rgba(1e1e2e99)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Groups
|
||||||
|
group {
|
||||||
|
col.border_active = rgb(89b4fa)
|
||||||
|
col.border_inactive = rgb(45475a)
|
||||||
|
col.border_locked_active = rgb(94e2d5)
|
||||||
|
groupbar {
|
||||||
|
col.active = rgb(89b4fa)
|
||||||
|
col.inactive = rgb(45475a)
|
||||||
|
text_color = rgb(cdd6f4)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
misc {
|
||||||
|
background_color = rgb(1e1e2e)
|
||||||
|
}
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
# Hyprland Catppuccin Mocha Theme (solid colors)
|
|
||||||
|
|
||||||
# Colors
|
|
||||||
$base = #1e1e2e
|
|
||||||
$mantle = #181825
|
|
||||||
$surface0 = #313244
|
|
||||||
$surface1 = #45475a
|
|
||||||
$surface2 = #585b70
|
|
||||||
$text = #cdd6f4
|
|
||||||
$rosewater = #f5e0dc
|
|
||||||
$lavender = #b4befe
|
|
||||||
$red = #f38ba8
|
|
||||||
$peach = #fab387
|
|
||||||
$yellow = #f9e2af
|
|
||||||
$green = #a6e3a1
|
|
||||||
$teal = #94e2d5
|
|
||||||
$blue = #89b4fa
|
|
||||||
$mauve = #cba6f7
|
|
||||||
$flamingo = #f2cdcd
|
|
||||||
$inactive = #595959aa
|
|
||||||
|
|
||||||
# General theming
|
|
||||||
general {
|
|
||||||
gaps_in = 2
|
|
||||||
gaps_out = 4
|
|
||||||
border_size = 4
|
|
||||||
layout = scrolling
|
|
||||||
resize_on_border = true
|
|
||||||
extend_border_grab_area = 20
|
|
||||||
|
|
||||||
# Solid-color borders
|
|
||||||
#col.active_border = "0xff89b4fa 0xffa6e3a1"
|
|
||||||
#col.active_border = #a6e3a1
|
|
||||||
#col.inactive_border = #595959aa
|
|
||||||
}
|
|
||||||
|
|
||||||
# Window decorations
|
|
||||||
decoration {
|
|
||||||
rounding = 8
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
|
||||||
# Network Manager editor
|
# Network Manager editor
|
||||||
windowrule {
|
windowrule {
|
||||||
name = Network-Manager-editor
|
name = Network-Manager-editor
|
||||||
@@ -16,12 +18,76 @@ windowrule {
|
|||||||
size = 900 700
|
size = 900 700
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Blueman Manager
|
# Blueman Manager
|
||||||
windowrule {
|
windowrule {
|
||||||
name = blueman
|
name = blueman
|
||||||
match:class = .blueman-manager-leaderped
|
match:class = .blueman-manager-wrapped
|
||||||
float = on
|
float = on
|
||||||
move = move onscreen 100%-w 0
|
move = move onscreen 100%-w 0
|
||||||
size = 900 700
|
size = 900 700
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Networks
|
||||||
|
windowrule {
|
||||||
|
name = iwgtk
|
||||||
|
match:class = org.twosheds.iwgtk
|
||||||
|
float = on
|
||||||
|
move = move onscreen 100%-w 0
|
||||||
|
size = 900 700
|
||||||
|
}
|
||||||
|
|
||||||
|
#Quickshell powermenu
|
||||||
|
windowrule {
|
||||||
|
name = quickshell-powermenu
|
||||||
|
match:title = quickshell-powermenu
|
||||||
|
opacity = 1.0 0.8
|
||||||
|
float = on
|
||||||
|
move = cursor -50% 0
|
||||||
|
pin = on
|
||||||
|
}
|
||||||
|
|
||||||
|
#Quickshell updater
|
||||||
|
windowrule {
|
||||||
|
name = quickshell-updater
|
||||||
|
match:title = quickshell-updater
|
||||||
|
opacity = 1.0 0.8
|
||||||
|
float = on
|
||||||
|
move = cursor -50% 0
|
||||||
|
pin = on
|
||||||
|
}
|
||||||
|
|
||||||
|
#Quickshell layoutswitcher
|
||||||
|
windowrule {
|
||||||
|
name = quickshell-layoutswitcher
|
||||||
|
match:title = quickshell-layoutswitcher
|
||||||
|
opacity = 1.0 0.8
|
||||||
|
float = on
|
||||||
|
move = cursor -50% 0
|
||||||
|
pin = on
|
||||||
|
}
|
||||||
|
|
||||||
|
#Quickshell media menu
|
||||||
|
windowrule {
|
||||||
|
name = quickshell-media
|
||||||
|
match:title = quickshell-media
|
||||||
|
float = on
|
||||||
|
move = cursor -50% 0
|
||||||
|
pin = on
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wofi window rules
|
||||||
|
windowrule {
|
||||||
|
name = wofi
|
||||||
|
match:class = ^(wofi)$
|
||||||
|
border_color = rgb(89b4fa) rgb(a6e3a1) 45deg
|
||||||
|
rounding = 14
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update terminal window rules
|
||||||
|
windowrule {
|
||||||
|
name = update-term
|
||||||
|
match:class = ^(update-term)$
|
||||||
|
float = true
|
||||||
|
size = 900 600
|
||||||
|
center = true
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,15 +1,7 @@
|
|||||||
#Load random wallpaper
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
workspacecreated = exec $HOME/.local/bin/wallpaper-sync-and-set.sh $workspace
|
workspace = 1, monitor:eDP-1 #, layout:master
|
||||||
|
workspace = 2, monitor:eDP-1 #, layout:monocle
|
||||||
|
workspace = 3, monitor:eDP-1 #, layout:master
|
||||||
# Workspace definitions (modern syntax)
|
workspace = 4, monitor:DP-1 #, layout:scrolling
|
||||||
workspace = 1
|
workspace = 5, monitor:DP-1 #, layout:dwindle
|
||||||
workspace = 2
|
workspace = 6, monitor:DP-1 #, layout:dwindle
|
||||||
workspace = 3
|
|
||||||
workspace = 4
|
|
||||||
workspace = 5
|
|
||||||
workspace = 6
|
|
||||||
workspace = 7
|
|
||||||
workspace = 8
|
|
||||||
workspace = 9
|
|
||||||
workspace = 10
|
|
||||||
|
|||||||
@@ -0,0 +1,139 @@
|
|||||||
|
// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
ShellRoot {
|
||||||
|
QtObject {
|
||||||
|
id: colors
|
||||||
|
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9)
|
||||||
|
readonly property color base: "#1e1e2e"
|
||||||
|
readonly property color surface0: "#313244"
|
||||||
|
readonly property color surface1: "#45475a"
|
||||||
|
readonly property color surface2: "#585b70"
|
||||||
|
readonly property color text: "#cdd6f4"
|
||||||
|
readonly property color subtext0: "#a6adc8"
|
||||||
|
readonly property color subtext1: "#bac2de"
|
||||||
|
readonly property color blue: "#89b4fa"
|
||||||
|
readonly property color green: "#a6e3a1"
|
||||||
|
readonly property color teal: "#94e2d5"
|
||||||
|
readonly property color red: "#f38ba8"
|
||||||
|
readonly property color mauve: "#cba6f7"
|
||||||
|
readonly property color peach: "#fab387"
|
||||||
|
readonly property color lavender: "#b4befe"
|
||||||
|
}
|
||||||
|
|
||||||
|
FloatingWindow {
|
||||||
|
id: root
|
||||||
|
title: "quickshell-layoutswitcher"
|
||||||
|
visible: true
|
||||||
|
width: 220
|
||||||
|
height: contentLayout.implicitHeight + 32
|
||||||
|
color: colors.base
|
||||||
|
|
||||||
|
Shortcut {
|
||||||
|
sequence: "Escape"
|
||||||
|
onActivated: Qt.quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: -2
|
||||||
|
radius: 18
|
||||||
|
z: -1
|
||||||
|
opacity: Qt.application.active ? 0 : 1
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation { duration: 150 }
|
||||||
|
}
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
radius: 16
|
||||||
|
color: colors.base
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: contentLayout
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
margins: 16
|
||||||
|
}
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: " Layout"
|
||||||
|
color: colors.text
|
||||||
|
font.pixelSize: 13
|
||||||
|
font.bold: true
|
||||||
|
Layout.bottomMargin: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
|
||||||
|
|
||||||
|
model: [
|
||||||
|
{ label: " Dwindle", layout: "dwindle", description: "Vensters splitsen recursief — elk nieuw venster halveert de ruimte" },
|
||||||
|
{ label: " Master", layout: "master", description: "Één groot hoofdvenster links, overige vensters gestapeld rechts" },
|
||||||
|
{ label: " Scrolling", layout: "scrolling", description: "Vensters naast elkaar in een horizontaal scrollbare rij" },
|
||||||
|
{ label: " Monocle", layout: "monocle", description: "Één venster tegelijk op volledig scherm, anderen verborgen" },
|
||||||
|
]
|
||||||
|
|
||||||
|
delegate: Rectangle {
|
||||||
|
id: item
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 38
|
||||||
|
radius: 8
|
||||||
|
color: hovered ? colors.surface1 : colors.base
|
||||||
|
property bool hovered: false
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: -2
|
||||||
|
radius: parent.radius + 2
|
||||||
|
visible: item.hovered
|
||||||
|
z: -1
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 12
|
||||||
|
text: modelData.label
|
||||||
|
color: item.hovered ? colors.text : colors.subtext1
|
||||||
|
font.pixelSize: 13
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
onEntered: item.hovered = true
|
||||||
|
onExited: item.hovered = false
|
||||||
|
onClicked: proc.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: proc
|
||||||
|
command: ["bash", "-c", "hyprctl keyword general:layout " + modelData.layout + " && hyprctl dispatch layoutmsg reload"]
|
||||||
|
onExited: Qt.quit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { height: 4 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,386 @@
|
|||||||
|
// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
ShellRoot {
|
||||||
|
QtObject {
|
||||||
|
id: colors
|
||||||
|
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.95)
|
||||||
|
readonly property color base: "#1e1e2e"
|
||||||
|
readonly property color surface0: "#313244"
|
||||||
|
readonly property color surface1: "#45475a"
|
||||||
|
readonly property color surface2: "#585b70"
|
||||||
|
readonly property color text: "#cdd6f4"
|
||||||
|
readonly property color subtext0: "#a6adc8"
|
||||||
|
readonly property color subtext1: "#bac2de"
|
||||||
|
readonly property color blue: "#89b4fa"
|
||||||
|
readonly property color green: "#a6e3a1"
|
||||||
|
readonly property color teal: "#94e2d5"
|
||||||
|
readonly property color red: "#f38ba8"
|
||||||
|
readonly property color mauve: "#cba6f7"
|
||||||
|
readonly property color peach: "#fab387"
|
||||||
|
readonly property color lavender: "#b4befe"
|
||||||
|
}
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
id: media
|
||||||
|
property string artist: ""
|
||||||
|
property string title: ""
|
||||||
|
property string album: ""
|
||||||
|
property string artUrl: ""
|
||||||
|
property string status: ""
|
||||||
|
property string device: ""
|
||||||
|
property string player: ""
|
||||||
|
property real progress: 0.0
|
||||||
|
property real duration: 0.0
|
||||||
|
property real position: 0.0
|
||||||
|
property int shuffleMode: 0
|
||||||
|
readonly property bool isSpotify: player.indexOf("spotify") !== -1
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 1000
|
||||||
|
running: true
|
||||||
|
repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
playerProc.running = true
|
||||||
|
artistProc.running = true
|
||||||
|
titleProc.running = true
|
||||||
|
albumProc.running = true
|
||||||
|
artProc.running = true
|
||||||
|
statusProc.running = true
|
||||||
|
positionProc.running = true
|
||||||
|
lengthProc.running = true
|
||||||
|
if (media.isSpotify)
|
||||||
|
shuffleProc.running = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: playerProc
|
||||||
|
command: ["playerctl", "-l"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
var lines = text.trim().split("\n")
|
||||||
|
for (var i = 0; i < lines.length; i++) {
|
||||||
|
if (lines[i].indexOf("spotify") !== -1) {
|
||||||
|
media.player = lines[i].trim()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
media.player = lines[0] ? lines[0].trim() : ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: artistProc
|
||||||
|
command: ["playerctl", "metadata", "artist"]
|
||||||
|
stdout: StdioCollector { onStreamFinished: media.artist = text.trim() }
|
||||||
|
}
|
||||||
|
Process {
|
||||||
|
id: titleProc
|
||||||
|
command: ["playerctl", "metadata", "title"]
|
||||||
|
stdout: StdioCollector { onStreamFinished: media.title = text.trim() }
|
||||||
|
}
|
||||||
|
Process {
|
||||||
|
id: albumProc
|
||||||
|
command: ["playerctl", "metadata", "album"]
|
||||||
|
stdout: StdioCollector { onStreamFinished: media.album = text.trim() }
|
||||||
|
}
|
||||||
|
Process {
|
||||||
|
id: artProc
|
||||||
|
command: ["playerctl", "metadata", "mpris:artUrl"]
|
||||||
|
stdout: StdioCollector { onStreamFinished: media.artUrl = text.trim() }
|
||||||
|
}
|
||||||
|
Process {
|
||||||
|
id: statusProc
|
||||||
|
command: ["playerctl", "status"]
|
||||||
|
stdout: StdioCollector { onStreamFinished: media.status = text.trim() }
|
||||||
|
}
|
||||||
|
Process {
|
||||||
|
id: positionProc
|
||||||
|
command: ["playerctl", "position"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
media.position = parseFloat(text.trim()) || 0
|
||||||
|
if (media.duration > 0)
|
||||||
|
media.progress = media.position / media.duration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Process {
|
||||||
|
id: lengthProc
|
||||||
|
command: ["playerctl", "metadata", "mpris:length"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
media.duration = (parseFloat(text.trim()) || 0) / 1000000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: shuffleProc
|
||||||
|
command: ["playerctl", "--player=" + media.player, "shuffle"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
media.shuffleMode = (text.trim() === "On") ? 1 : 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process { id: shuffleOnProc; command: ["playerctl", "--player=" + media.player, "shuffle", "on"] }
|
||||||
|
Process { id: shuffleOffProc; command: ["playerctl", "--player=" + media.player, "shuffle", "off"] }
|
||||||
|
|
||||||
|
function cycleShuffleMode() {
|
||||||
|
var next = (media.shuffleMode + 1) % 2
|
||||||
|
media.shuffleMode = next
|
||||||
|
if (next === 0)
|
||||||
|
shuffleOffProc.running = true
|
||||||
|
else
|
||||||
|
shuffleOnProc.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Focus spotify — uses exact lowercase class as reported by hyprctl
|
||||||
|
Process {
|
||||||
|
id: focusSpotifyProc
|
||||||
|
command: ["hyprctl", "dispatch", "focuswindow", "class:^(spotify)$"]
|
||||||
|
}
|
||||||
|
|
||||||
|
function focusPlayer() {
|
||||||
|
if (media.isSpotify) {
|
||||||
|
focusSpotifyProc.running = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process { id: prevProc; command: ["playerctl", "previous"] }
|
||||||
|
Process { id: playProc; command: ["playerctl", "play-pause"] }
|
||||||
|
Process { id: nextProc; command: ["playerctl", "next"] }
|
||||||
|
|
||||||
|
FloatingWindow {
|
||||||
|
id: root
|
||||||
|
title: "quickshell-media"
|
||||||
|
visible: true
|
||||||
|
implicitWidth: 300
|
||||||
|
implicitHeight: 420
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
Shortcut {
|
||||||
|
sequence: "Escape"
|
||||||
|
onActivated: Qt.quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gradient border — hidden when app has focus
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: -2
|
||||||
|
radius: 18
|
||||||
|
z: -1
|
||||||
|
opacity: Qt.application.active ? 0 : 1
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation { duration: 150 }
|
||||||
|
}
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
radius: 16
|
||||||
|
color: colors.base
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors {
|
||||||
|
fill: parent
|
||||||
|
margins: 16
|
||||||
|
}
|
||||||
|
spacing: 12
|
||||||
|
|
||||||
|
// Album art — click to focus player
|
||||||
|
Rectangle {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: 200
|
||||||
|
radius: 12
|
||||||
|
color: colors.surface0
|
||||||
|
clip: true
|
||||||
|
|
||||||
|
Image {
|
||||||
|
anchors.fill: parent
|
||||||
|
source: media.artUrl
|
||||||
|
fillMode: Image.PreserveAspectCrop
|
||||||
|
visible: media.artUrl !== ""
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: ""
|
||||||
|
font.pixelSize: 48
|
||||||
|
color: colors.surface2
|
||||||
|
visible: media.artUrl === ""
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: focusPlayer()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Artist
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: media.artist || "Unknown artist"
|
||||||
|
color: colors.subtext1
|
||||||
|
font.pixelSize: 12
|
||||||
|
elide: Text.ElideRight
|
||||||
|
}
|
||||||
|
|
||||||
|
// Title
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: media.title || "Nothing playing"
|
||||||
|
color: colors.text
|
||||||
|
font.pixelSize: 14
|
||||||
|
font.bold: true
|
||||||
|
elide: Text.ElideRight
|
||||||
|
}
|
||||||
|
|
||||||
|
// Album
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: media.album
|
||||||
|
color: colors.subtext0
|
||||||
|
font.pixelSize: 11
|
||||||
|
elide: Text.ElideRight
|
||||||
|
visible: media.album !== ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Device (Spotify)
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: " " + media.device
|
||||||
|
color: colors.green
|
||||||
|
font.pixelSize: 11
|
||||||
|
visible: media.device !== ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Progress bar
|
||||||
|
Rectangle {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 4
|
||||||
|
radius: 2
|
||||||
|
color: colors.surface1
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
width: parent.width * media.progress
|
||||||
|
height: parent.height
|
||||||
|
radius: parent.radius
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Time
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: {
|
||||||
|
var m = Math.floor(media.position / 60)
|
||||||
|
var s = Math.floor(media.position % 60)
|
||||||
|
return m + ":" + (s < 10 ? "0" + s : s)
|
||||||
|
}
|
||||||
|
color: colors.subtext0
|
||||||
|
font.pixelSize: 11
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { Layout.fillWidth: true }
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: {
|
||||||
|
var m = Math.floor(media.duration / 60)
|
||||||
|
var s = Math.floor(media.duration % 60)
|
||||||
|
return m + ":" + (s < 10 ? "0" + s : s)
|
||||||
|
}
|
||||||
|
color: colors.subtext0
|
||||||
|
font.pixelSize: 11
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Playback controls + shuffle
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
spacing: 20
|
||||||
|
|
||||||
|
// Shuffle button (Spotify only)
|
||||||
|
Item {
|
||||||
|
visible: media.isSpotify
|
||||||
|
width: 28
|
||||||
|
height: 28
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: ""
|
||||||
|
font.pixelSize: 18
|
||||||
|
color: media.shuffleMode === 0 ? colors.surface2 : colors.blue
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: cycleShuffleMode()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: ""
|
||||||
|
font.pixelSize: 22
|
||||||
|
color: prevHover.containsMouse ? colors.blue : colors.text
|
||||||
|
MouseArea {
|
||||||
|
id: prevHover
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: prevProc.running = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: media.status === "Playing" ? "" : ""
|
||||||
|
font.pixelSize: 28
|
||||||
|
color: playHover.containsMouse ? colors.green : colors.text
|
||||||
|
MouseArea {
|
||||||
|
id: playHover
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: playProc.running = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: ""
|
||||||
|
font.pixelSize: 22
|
||||||
|
color: nextHover.containsMouse ? colors.blue : colors.text
|
||||||
|
MouseArea {
|
||||||
|
id: nextHover
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: nextProc.running = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
ShellRoot {
|
||||||
|
QtObject {
|
||||||
|
id: colors
|
||||||
|
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9)
|
||||||
|
readonly property color base: "#1e1e2e"
|
||||||
|
readonly property color surface0: "#313244"
|
||||||
|
readonly property color surface1: "#45475a"
|
||||||
|
readonly property color surface2: "#585b70"
|
||||||
|
readonly property color text: "#cdd6f4"
|
||||||
|
readonly property color subtext0: "#a6adc8"
|
||||||
|
readonly property color subtext1: "#bac2de"
|
||||||
|
readonly property color blue: "#89b4fa"
|
||||||
|
readonly property color green: "#a6e3a1"
|
||||||
|
readonly property color teal: "#94e2d5"
|
||||||
|
readonly property color red: "#f38ba8"
|
||||||
|
readonly property color mauve: "#cba6f7"
|
||||||
|
readonly property color peach: "#fab387"
|
||||||
|
readonly property color lavender: "#b4befe"
|
||||||
|
}
|
||||||
|
|
||||||
|
FloatingWindow {
|
||||||
|
id: root
|
||||||
|
title: "quickshell-powermenu"
|
||||||
|
visible: true
|
||||||
|
width: 220
|
||||||
|
height: contentLayout.implicitHeight + 32
|
||||||
|
color: colors.base
|
||||||
|
|
||||||
|
Shortcut {
|
||||||
|
sequence: "Escape"
|
||||||
|
onActivated: Qt.quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gradient border — hidden when app has focus
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: -2
|
||||||
|
radius: 18
|
||||||
|
z: -1
|
||||||
|
opacity: Qt.application.active ? 0 : 1
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation { duration: 150 }
|
||||||
|
}
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
radius: 16
|
||||||
|
color: colors.base
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: contentLayout
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
margins: 16
|
||||||
|
}
|
||||||
|
spacing: 4
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: " Power Menu"
|
||||||
|
color: colors.text
|
||||||
|
font.pixelSize: 13
|
||||||
|
font.bold: true
|
||||||
|
Layout.bottomMargin: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: [
|
||||||
|
{ label: " Lock", cmd: ["hyprlock"] },
|
||||||
|
{ label: " Shutdown", cmd: ["systemctl", "poweroff"] },
|
||||||
|
{ label: " Reboot", cmd: ["systemctl", "reboot"] },
|
||||||
|
{ label: " Logout", cmd: ["bash", "-c", "loginctl terminate-session $XDG_SESSION_ID"] },
|
||||||
|
{ label: " Hibernate", cmd: ["systemctl", "hibernate"] },
|
||||||
|
{ label: " Suspend", cmd: ["systemctl", "suspend"] },
|
||||||
|
]
|
||||||
|
|
||||||
|
delegate: Rectangle {
|
||||||
|
id: item
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 38
|
||||||
|
radius: 8
|
||||||
|
color: hovered ? colors.surface1 : colors.base
|
||||||
|
property bool hovered: false
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: -2
|
||||||
|
radius: parent.radius + 2
|
||||||
|
visible: item.hovered
|
||||||
|
z: -1
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 12
|
||||||
|
text: modelData.label
|
||||||
|
color: item.hovered ? colors.text : colors.subtext1
|
||||||
|
font.pixelSize: 13
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
onEntered: item.hovered = true
|
||||||
|
onExited: item.hovered = false
|
||||||
|
onClicked: proc.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: proc
|
||||||
|
command: modelData.cmd
|
||||||
|
onExited: Qt.quit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { height: 4 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,241 @@
|
|||||||
|
// --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
ShellRoot {
|
||||||
|
QtObject {
|
||||||
|
id: colors
|
||||||
|
readonly property color base: "#1e1e2e"
|
||||||
|
readonly property color surface0: "#313244"
|
||||||
|
readonly property color surface1: "#45475a"
|
||||||
|
readonly property color text: "#cdd6f4"
|
||||||
|
readonly property color subtext0: "#a6adc8"
|
||||||
|
readonly property color green: "#a6e3a1"
|
||||||
|
readonly property color blue: "#89b4fa"
|
||||||
|
readonly property color red: "#f38ba8"
|
||||||
|
readonly property color yellow: "#f9e2af"
|
||||||
|
}
|
||||||
|
|
||||||
|
property int currentStep: 0
|
||||||
|
property bool isRunning: false
|
||||||
|
property bool isFailed: false
|
||||||
|
property string currentLog: ""
|
||||||
|
property bool started: false
|
||||||
|
|
||||||
|
readonly property var steps: [
|
||||||
|
{ label: "Updating flake.lock", cmd: ["nix", "flake", "update"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
|
||||||
|
{ label: "Updating Flatpaks", cmd: ["flatpak", "update", "-y"], cwd: "/home/henrov" },
|
||||||
|
{ label: "Staging changes", cmd: ["git", "add", "."], cwd: "/home/henrov/Repos/nixos/Droidnix" },
|
||||||
|
{ label: "Committing changes", cmd: ["git", "commit", "-m", "Updated system"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
|
||||||
|
{ label: "Pushing to remote", cmd: ["git", "push"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
|
||||||
|
{ label: "Rebuilding NixOS", cmd: ["sudo", "nixos-rebuild", "switch", "--flake", ".#traveldroid"], cwd: "/home/henrov/Repos/nixos/Droidnix" },
|
||||||
|
{ label: "Reloading Hyprland", cmd: ["hyprctl", "reload"], cwd: "/home/henrov" },
|
||||||
|
]
|
||||||
|
|
||||||
|
function runStep(index) {
|
||||||
|
if (index >= steps.length) {
|
||||||
|
isRunning = false
|
||||||
|
currentStep = steps.length
|
||||||
|
return
|
||||||
|
}
|
||||||
|
currentStep = index
|
||||||
|
currentLog = ""
|
||||||
|
isRunning = true
|
||||||
|
stepProc.command = steps[index].cmd
|
||||||
|
stepProc.workingDirectory = steps[index].cwd
|
||||||
|
stepProc.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: stepProc
|
||||||
|
|
||||||
|
stdout: SplitParser {
|
||||||
|
onRead: (line) => {
|
||||||
|
currentLog = (currentLog + "\n" + line).split("\n").slice(-8).join("\n").trim()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stderr: SplitParser {
|
||||||
|
onRead: (line) => {
|
||||||
|
if (line.trim() !== "")
|
||||||
|
currentLog = (currentLog + "\n" + line).split("\n").slice(-8).join("\n").trim()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onExited: (code) => {
|
||||||
|
if (code !== 0 && currentStep !== 3) {
|
||||||
|
isFailed = true
|
||||||
|
isRunning = false
|
||||||
|
} else {
|
||||||
|
runStep(currentStep + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FloatingWindow {
|
||||||
|
title: "quickshell-updater"
|
||||||
|
visible: true
|
||||||
|
width: 540
|
||||||
|
height: contentCol.implicitHeight + 32
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
Shortcut {
|
||||||
|
sequence: "Escape"
|
||||||
|
onActivated: Qt.quit()
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: -2
|
||||||
|
radius: 18
|
||||||
|
z: -1
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
radius: 16
|
||||||
|
color: colors.base
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: contentCol
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
margins: 20
|
||||||
|
}
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: " System Update"
|
||||||
|
color: colors.text
|
||||||
|
font.pixelSize: 15
|
||||||
|
font.bold: true
|
||||||
|
Layout.topMargin: 8
|
||||||
|
}
|
||||||
|
|
||||||
|
// Steps
|
||||||
|
Repeater {
|
||||||
|
model: steps.length
|
||||||
|
|
||||||
|
delegate: RowLayout {
|
||||||
|
spacing: 10
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
readonly property bool done: !isFailed && (index < currentStep || (!isRunning && currentStep === steps.length))
|
||||||
|
readonly property bool active: isRunning && index === currentStep
|
||||||
|
readonly property bool failed: isFailed && index === currentStep
|
||||||
|
readonly property bool pending: !done && !active && !failed
|
||||||
|
|
||||||
|
// icon
|
||||||
|
Text {
|
||||||
|
font.pixelSize: 14
|
||||||
|
text: failed ? "✗" : done ? "✓" : active ? "›" : "○"
|
||||||
|
color: failed ? colors.red : done ? colors.green : active ? colors.yellow : colors.surface1
|
||||||
|
}
|
||||||
|
|
||||||
|
// label
|
||||||
|
Text {
|
||||||
|
text: steps[index].label
|
||||||
|
font.pixelSize: 13
|
||||||
|
color: failed ? colors.red : done ? colors.green : active ? colors.text : colors.surface1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log box
|
||||||
|
Rectangle {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
height: 160
|
||||||
|
radius: 8
|
||||||
|
color: colors.surface0
|
||||||
|
visible: currentLog !== "" && started
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors {
|
||||||
|
fill: parent
|
||||||
|
margins: 10
|
||||||
|
}
|
||||||
|
text: currentLog
|
||||||
|
color: colors.subtext0
|
||||||
|
font.pixelSize: 11
|
||||||
|
font.family: "monospace"
|
||||||
|
wrapMode: Text.WrapAnywhere
|
||||||
|
verticalAlignment: Text.AlignBottom
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bottom bar
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.bottomMargin: 8
|
||||||
|
|
||||||
|
Text {
|
||||||
|
font.pixelSize: 12
|
||||||
|
text: {
|
||||||
|
if (!started) return "Press Start to begin"
|
||||||
|
if (isFailed) return "✗ Failed at: " + steps[currentStep].label
|
||||||
|
if (currentStep === steps.length) return "✓ All done!"
|
||||||
|
if (isRunning) return steps[currentStep].label + "…"
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
color: isFailed ? colors.red : currentStep === steps.length ? colors.green : colors.subtext0
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { Layout.fillWidth: true }
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
visible: !started
|
||||||
|
width: 80; height: 28
|
||||||
|
radius: 14
|
||||||
|
gradient: Gradient {
|
||||||
|
orientation: Gradient.Horizontal
|
||||||
|
GradientStop { position: 0.0; color: colors.blue }
|
||||||
|
GradientStop { position: 1.0; color: colors.green }
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: "Start"
|
||||||
|
color: colors.base
|
||||||
|
font.pixelSize: 12
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: {
|
||||||
|
started = true
|
||||||
|
runStep(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
visible: !isRunning && started
|
||||||
|
width: 80; height: 28
|
||||||
|
radius: 14
|
||||||
|
color: colors.surface1
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: currentStep === steps.length ? "Close" : "Dismiss"
|
||||||
|
color: colors.text
|
||||||
|
font.pixelSize: 12
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
onClicked: Qt.quit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
REPO="/home/henrov/Repos/nixos/Droidnix"
|
|
||||||
HOSTNAME="$(hostname)"
|
|
||||||
cd "$REPO"
|
|
||||||
echo "🔄 Updating flake..."
|
|
||||||
nix flake update
|
|
||||||
echo "🏗 Rebuilding NixOS..."
|
|
||||||
sudo nixos-rebuild switch --flake ".#$HOSTNAME"
|
|
||||||
echo "📦 Updating Flatpaks..."
|
|
||||||
flatpak update -y
|
|
||||||
+3
-1
@@ -1,8 +1,10 @@
|
|||||||
|
/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */
|
||||||
/* Catppuccin Mocha Palette */
|
/* Catppuccin Mocha Palette */
|
||||||
|
@define-color border #96cdd2;
|
||||||
@define-color crust #11111b;
|
@define-color crust #11111b;
|
||||||
@define-color mantle #181825;
|
@define-color mantle #181825;
|
||||||
@define-color base #1e1e2e;
|
@define-color base #1e1e2e;
|
||||||
@define-color base-alpha rgba(30, 30, 46, 0.9);
|
@define-color base-alpha rgba(30, 30, 46, 0.8);
|
||||||
|
|
||||||
@define-color surface0 #313244;
|
@define-color surface0 #313244;
|
||||||
@define-color surface1 #45475a;
|
@define-color surface1 #45475a;
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
# Tel toetsenborden met volledige toetsset (geen media-only apparaten)
|
||||||
|
COUNT=$(libinput list-devices | grep -c "^Device:.*[Kk]eyboard")
|
||||||
|
|
||||||
|
# Of via xinput / /proc alternatief:
|
||||||
|
# COUNT=$(cat /proc/bus/input/devices | grep -B5 'KEY=.*[a-f0-9]\{10\}' | grep -c 'Name=')
|
||||||
|
|
||||||
|
if [ "$COUNT" -ge 2 ]; then
|
||||||
|
numlockx on
|
||||||
|
echo $COUNT : On
|
||||||
|
else
|
||||||
|
numlockx off
|
||||||
|
fi
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
"$schema" = 'https://starship.rs/config-schema.json'
|
"$schema" = 'https://starship.rs/config-schema.json'
|
||||||
|
|
||||||
format = """
|
format = """
|
||||||
@@ -164,7 +165,7 @@ format = " in $duration "
|
|||||||
style = "bg:lavender"
|
style = "bg:lavender"
|
||||||
disabled = false
|
disabled = false
|
||||||
show_notifications = true
|
show_notifications = true
|
||||||
min_time_to_notify = 45000
|
min_time_to_notify = 60000
|
||||||
|
|
||||||
[palettes.catppuccin_mocha]
|
[palettes.catppuccin_mocha]
|
||||||
rosewater = "#f5e0dc"
|
rosewater = "#f5e0dc"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
enable = true;
|
enable = true;
|
||||||
base16Scheme = ../../../assets/system/theming/stylix/catppuccin-mocha.yaml;
|
base16Scheme = ../../../assets/system/theming/stylix/catppuccin-mocha.yaml;
|
||||||
image = ../../../assets/hyprland/wallpaperstuff/pictures/wall1.jpg;
|
|
||||||
polarity = "dark";
|
polarity = "dark";
|
||||||
|
|
||||||
cursor = {
|
cursor = {
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"positionX": "right",
|
||||||
|
"positionY": "top",
|
||||||
|
"layer": "overlay",
|
||||||
|
"control-center-layer": "top",
|
||||||
|
"layer-shell": true,
|
||||||
|
"cssPriority": "application",
|
||||||
|
"control-center-margin-top": 8,
|
||||||
|
"control-center-margin-bottom": 8,
|
||||||
|
"control-center-margin-right": 8,
|
||||||
|
"control-center-margin-left": 0,
|
||||||
|
"notification-2fa-action": true,
|
||||||
|
"notification-inline-replies": false,
|
||||||
|
"notification-icon-size": 48,
|
||||||
|
"notification-body-image-height": 100,
|
||||||
|
"notification-body-image-width": 200,
|
||||||
|
"timeout": 10,
|
||||||
|
"timeout-low": 5,
|
||||||
|
"timeout-critical": 0,
|
||||||
|
"fit-to-screen": true,
|
||||||
|
"control-center-height": -1,
|
||||||
|
"control-center-width": 300,
|
||||||
|
"notification-window-width": 400,
|
||||||
|
"keyboard-shortcuts": true,
|
||||||
|
"image-visibility": "when-available",
|
||||||
|
"transition-time": 200,
|
||||||
|
"hide-on-clear": false,
|
||||||
|
"hide-on-action": true,
|
||||||
|
"script-fail-notify": true,
|
||||||
|
"widgets": [
|
||||||
|
"inhibitors",
|
||||||
|
"title",
|
||||||
|
"dnd",
|
||||||
|
"notifications"
|
||||||
|
],
|
||||||
|
"widget-config": {
|
||||||
|
"inhibitors": {
|
||||||
|
"text": "Inhibitors",
|
||||||
|
"button-text": "Clear All",
|
||||||
|
"clear-all-button": true
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"text": "Notifications",
|
||||||
|
"clear-all-button": true,
|
||||||
|
"button-text": "Clear All"
|
||||||
|
},
|
||||||
|
"dnd": {
|
||||||
|
"text": "Do Not Disturb"
|
||||||
|
},
|
||||||
|
"notifications": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,184 @@
|
|||||||
|
/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */
|
||||||
|
@import url("/home/henrov/.config/shared/css/colors.css");
|
||||||
|
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
font-size: 13px;
|
||||||
|
font-family: sans-serif;
|
||||||
|
transition: 200ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Notification rows ─────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.notification-row {
|
||||||
|
outline: none;
|
||||||
|
margin: 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row:focus,
|
||||||
|
.notification-row:hover {
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Individual notification ───────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.notification {
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 8px;
|
||||||
|
margin: 4px 8px;
|
||||||
|
color: @text;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
|
||||||
|
|
||||||
|
/* gradient border */
|
||||||
|
border: 2px solid transparent;
|
||||||
|
background-image:
|
||||||
|
linear-gradient(@base-alpha, @base-alpha),
|
||||||
|
linear-gradient(45deg, @blue, @green);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: padding-box, border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-content {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action {
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-default-action:hover {
|
||||||
|
background: alpha(@blue, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Text elements ─────────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.summary {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time {
|
||||||
|
font-size: 11px;
|
||||||
|
color: @overlay0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
font-size: 12px;
|
||||||
|
color: @subtext1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Control center ────────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.control-center {
|
||||||
|
min-height: unset;
|
||||||
|
border-radius: 30px;
|
||||||
|
padding: 8px;
|
||||||
|
margin: 8px;
|
||||||
|
color: @text;
|
||||||
|
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.5);
|
||||||
|
border: 2px solid transparent;
|
||||||
|
background-image:
|
||||||
|
linear-gradient(@base-alpha, @base-alpha),
|
||||||
|
linear-gradient(45deg, @blue, @green);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: padding-box, border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-list {
|
||||||
|
background: transparent;
|
||||||
|
min-height: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center-list-placeholder {
|
||||||
|
opacity: 0.4;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Misc windows ──────────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.floating-notifications {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blank-window {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Widget: title ─────────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.widget-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: @blue;
|
||||||
|
padding: 8px 4px 4px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title > button {
|
||||||
|
font-size: 12px;
|
||||||
|
color: @overlay0;
|
||||||
|
background: alpha(@blue, 0.1);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title > button:hover {
|
||||||
|
background: alpha(@blue, 0.2);
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Widget: Do Not Disturb ────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.widget-dnd {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch {
|
||||||
|
border-radius: 20px;
|
||||||
|
background: alpha(@surface1, 0.3);
|
||||||
|
|
||||||
|
/* gradient border */
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background-image:
|
||||||
|
linear-gradient(alpha(@surface1, 0.3), alpha(@surface1, 0.3)),
|
||||||
|
linear-gradient(45deg, @blue, @green);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: padding-box, border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch:checked {
|
||||||
|
background-image:
|
||||||
|
linear-gradient(alpha(@blue, 0.5), alpha(@blue, 0.5)),
|
||||||
|
linear-gradient(45deg, @blue, @green);
|
||||||
|
background-clip: padding-box, border-box;
|
||||||
|
background-origin: padding-box, border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd > switch slider {
|
||||||
|
border-radius: 20px;
|
||||||
|
background: @text;
|
||||||
|
min-width: 20px;
|
||||||
|
min-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Widget: inhibitors ────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.widget-inhibitors {
|
||||||
|
padding: 4px;
|
||||||
|
color: @red;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Close button ──────────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
.close-button {
|
||||||
|
background: alpha(@red, 0.15);
|
||||||
|
border-radius: 6px;
|
||||||
|
color: @red;
|
||||||
|
padding: 2px 6px;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-button:hover {
|
||||||
|
background: alpha(@red, 0.3);
|
||||||
|
}
|
||||||
@@ -1,208 +0,0 @@
|
|||||||
{
|
|
||||||
"layer": "top",
|
|
||||||
"position": "top",
|
|
||||||
"autohide": true,
|
|
||||||
"autohide-blocked": false,
|
|
||||||
"exclusive": true,
|
|
||||||
"passthrough": false,
|
|
||||||
"gtk-layer-shell": true,
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************/
|
|
||||||
"modules-left": [],
|
|
||||||
|
|
||||||
"modules-center": [
|
|
||||||
"group/connections",
|
|
||||||
"group/workspaces",
|
|
||||||
"group/hardware",
|
|
||||||
],
|
|
||||||
|
|
||||||
"modules-right": [
|
|
||||||
"group/audio",
|
|
||||||
"tray",
|
|
||||||
"clock",
|
|
||||||
"idle_inhibitor"
|
|
||||||
],
|
|
||||||
|
|
||||||
/*******************************************************************/
|
|
||||||
"group/workspaces": {
|
|
||||||
"orientation": "horizontal",
|
|
||||||
"modules": [
|
|
||||||
"hyprland/workspaces",
|
|
||||||
"custom/windows"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
/*******************************************************************/
|
|
||||||
"group/hardware": {
|
|
||||||
"orientation": "horizontal",
|
|
||||||
"drawer": {
|
|
||||||
"transition-duration": 500,
|
|
||||||
"transition-left-to-right": true
|
|
||||||
},
|
|
||||||
"modules": [
|
|
||||||
"custom/hardware-anchor",
|
|
||||||
"battery",
|
|
||||||
"cpu",
|
|
||||||
"memory",
|
|
||||||
"temperature"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
"custom/hardware-anchor": {
|
|
||||||
|
|
||||||
"format": " ",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/*************************/
|
|
||||||
|
|
||||||
"group/connections": {
|
|
||||||
"orientation": "horizontal",
|
|
||||||
"drawer": {
|
|
||||||
"transition-duration": 500,
|
|
||||||
"transition-left-to-right": true
|
|
||||||
},
|
|
||||||
"modules": [
|
|
||||||
"custom/connections-anchor",
|
|
||||||
"custom/bluetooth",
|
|
||||||
"network"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
"custom/connections-anchor": {
|
|
||||||
|
|
||||||
"format": " ",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
|
|
||||||
/*************************/
|
|
||||||
|
|
||||||
"group/audio": {
|
|
||||||
"orientation": "horizontal",
|
|
||||||
"modules": [
|
|
||||||
"pulseaudio",
|
|
||||||
"pulseaudio/slider",
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
/*******************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
"hyprland/workspaces": {
|
|
||||||
"align": 1,
|
|
||||||
"format": "{name}",
|
|
||||||
"interval": 2,
|
|
||||||
},
|
|
||||||
|
|
||||||
"custom/windows": {
|
|
||||||
"align": 0,
|
|
||||||
"format": "{text}",
|
|
||||||
"exec": "~/.config/waybar/scripts/hypr-workspaces.sh",
|
|
||||||
"interval": 2,
|
|
||||||
"return-type": "json",
|
|
||||||
"on-click": "~/.config/waybar/scripts/hypr-workspacesmenu.sh",
|
|
||||||
"tooltip": true
|
|
||||||
},
|
|
||||||
|
|
||||||
"custom/bluetooth": {
|
|
||||||
"exec": "~/.config/waybar/scripts/bluetooth-status.sh",
|
|
||||||
"interval": 5,
|
|
||||||
"return-type": "json",
|
|
||||||
"on-click": "blueman-manager",
|
|
||||||
"format": "{}"
|
|
||||||
},
|
|
||||||
|
|
||||||
"idle_inhibitor": {
|
|
||||||
"tooltip": true,
|
|
||||||
"format": "{icon}",
|
|
||||||
"format-icons": {
|
|
||||||
"activated": " ",
|
|
||||||
"deactivated": " "
|
|
||||||
},
|
|
||||||
"tooltip-format-activated": "Staying awake",
|
|
||||||
"tooltip-format-deactivated": "Might sleep...."
|
|
||||||
},
|
|
||||||
|
|
||||||
"pulseaudio": {
|
|
||||||
"format": "{volume}% {icon}",
|
|
||||||
"format-bluetooth": "{volume}% {icon}",
|
|
||||||
"format-muted": "",
|
|
||||||
"format-icons": {
|
|
||||||
"headphones": "",
|
|
||||||
"headset": "",
|
|
||||||
"phone": "",
|
|
||||||
"portable": "",
|
|
||||||
"default": ["", ""]
|
|
||||||
},
|
|
||||||
"on-click": "pavucontrol"
|
|
||||||
},
|
|
||||||
|
|
||||||
"pulseaudio/slider": {
|
|
||||||
"min": 0,
|
|
||||||
"max": 100,
|
|
||||||
"orientation": "horizontal"
|
|
||||||
},
|
|
||||||
|
|
||||||
"network": {
|
|
||||||
"format-wifi": " ({bandwidthDownBits})",
|
|
||||||
"format-ethernet": " ({bandwidthDownBits})",
|
|
||||||
"format-disconnected": "Disconnected ⚠",
|
|
||||||
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
|
|
||||||
"tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}",
|
|
||||||
"on-click": "nm-connection-editor"
|
|
||||||
},
|
|
||||||
|
|
||||||
"cpu": {
|
|
||||||
"format": "{usage}% ",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
|
|
||||||
"memory": {
|
|
||||||
"format": "{percentage}% "
|
|
||||||
},
|
|
||||||
|
|
||||||
"temperature": {
|
|
||||||
"format": "{temperatureC}°C ",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
|
|
||||||
"tray": {
|
|
||||||
"spacing": 10,
|
|
||||||
"icon-size": 14
|
|
||||||
},
|
|
||||||
|
|
||||||
"clock": {
|
|
||||||
"format": "{:%H:%M}",
|
|
||||||
"tooltip-format": "<tt><small>{calendar}</small></tt>",
|
|
||||||
"calendar": {
|
|
||||||
"mode" : "year",
|
|
||||||
"mode-mon-col" : 3,
|
|
||||||
"weeks-pos" : "right",
|
|
||||||
"on-scroll" : 1,
|
|
||||||
"on-click-right": "mode",
|
|
||||||
"format": {
|
|
||||||
"months": "<span color='#ffead3'><b>{}</b></span>",
|
|
||||||
"days": "<span color='#ecc6d9'><b>{}</b></span>",
|
|
||||||
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
|
|
||||||
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
|
|
||||||
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"on-click": "flatpak run eu.betterbird.Betterbird -calendar"
|
|
||||||
},
|
|
||||||
|
|
||||||
"battery": {
|
|
||||||
"bat": "BAT0",
|
|
||||||
"states": {
|
|
||||||
"good": 95,
|
|
||||||
"warning": 30,
|
|
||||||
"critical": 15
|
|
||||||
},
|
|
||||||
"format": "{capacity}% {icon}",
|
|
||||||
"format-charging": "{capacity}% ",
|
|
||||||
"format-plugged": "{capacity}% ",
|
|
||||||
"format-icons": ["", "", "", "", " "]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,338 @@
|
|||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"autohide": true,
|
||||||
|
"autohide-blocked": false,
|
||||||
|
"exclusive": true,
|
||||||
|
"passthrough": false,
|
||||||
|
"gtk-layer-shell": true,
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
"modules-left": [
|
||||||
|
"group/hardware"
|
||||||
|
],
|
||||||
|
|
||||||
|
"modules-center": [
|
||||||
|
"group/workspaces"
|
||||||
|
,"group/sporadic"
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"modules-right": [
|
||||||
|
"group/audio"
|
||||||
|
,"group/tray"
|
||||||
|
,"group/datestuff"
|
||||||
|
,"group/system"
|
||||||
|
,"group/notifications"
|
||||||
|
],
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
"group/workspaces": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": [
|
||||||
|
"hyprland/workspaces",
|
||||||
|
"custom/windows"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
"group/hardware": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"drawer": {
|
||||||
|
"transition-duration": 500,
|
||||||
|
"transition-left-to-right": true
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"custom/hardware-anchor"
|
||||||
|
,"battery"
|
||||||
|
,"cpu"
|
||||||
|
,"memory"
|
||||||
|
,"temperature"
|
||||||
|
,"keyboard-state"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/hardware-anchor": {
|
||||||
|
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
"group/tray": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"drawer": {
|
||||||
|
"transition-duration": 500,
|
||||||
|
"transition-left-to-right": true
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"custom/tray-anchor"
|
||||||
|
,"tray"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/tray-anchor": {
|
||||||
|
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
"group/system": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"drawer": {
|
||||||
|
"transition-duration": 500,
|
||||||
|
"transition-left-to-right": true
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"custom/system-anchor"
|
||||||
|
,"custom/power"
|
||||||
|
,"idle_inhibitor"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/system-anchor": {
|
||||||
|
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
"group/connections": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"drawer": {
|
||||||
|
"transition-duration": 500,
|
||||||
|
"transition-left-to-right": true
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"custom/connections-anchor"
|
||||||
|
,"custom/bluetooth"
|
||||||
|
,"network"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/connections-anchor": {
|
||||||
|
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
"group/audio": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": [
|
||||||
|
/* "custom/media", */
|
||||||
|
"pulseaudio"
|
||||||
|
,"pulseaudio/slider"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
"group/sporadic": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": [
|
||||||
|
"custom/media"
|
||||||
|
,"custom/batterywarn"
|
||||||
|
/* ,"custom/kdeconnect" */
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
"group/datestuff": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": [
|
||||||
|
"clock"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
"group/notifications": {
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"modules": [
|
||||||
|
"custom/notifications"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
/*******************************************************************/
|
||||||
|
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"align": 1,
|
||||||
|
"format": "{name}",
|
||||||
|
"interval": 2,
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/windows": {
|
||||||
|
"align": 0,
|
||||||
|
"format": "{text}",
|
||||||
|
"exec": "~/.config/waybar/scripts/hypr-workspaces.sh",
|
||||||
|
"interval": 2,
|
||||||
|
"return-type": "json",
|
||||||
|
"on-click": "~/.config/waybar/scripts/hypr-workspacesmenu.sh",
|
||||||
|
"tooltip": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/media": {
|
||||||
|
"exec": "~/.config/waybar/scripts/media.sh",
|
||||||
|
"interval": 1,
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{}",
|
||||||
|
"on-click": "qs -c media",
|
||||||
|
"max-length": 20,
|
||||||
|
"scroll-step": 1,
|
||||||
|
"tooltip": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/bluetooth": {
|
||||||
|
"exec": "~/.config/waybar/scripts/bluetooth-status.sh",
|
||||||
|
"interval": 5,
|
||||||
|
"return-type": "json",
|
||||||
|
"on-click": "blueman-manager",
|
||||||
|
"format": "{}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/batterywarn": {
|
||||||
|
"exec": "~/.config/waybar/scripts/batterywarn.sh",
|
||||||
|
"interval": 60,
|
||||||
|
"format": "{}"
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/kdeconnect": {
|
||||||
|
"format": "{name} {battery}% ",
|
||||||
|
"interval": 10,
|
||||||
|
"exec": "~/.config/waybar/scripts/kdeconnect-status.sh",
|
||||||
|
"tooltip": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/notifications": {
|
||||||
|
"tooltip": false,
|
||||||
|
"return-type": "json",
|
||||||
|
"exec-if": "which swaync-client",
|
||||||
|
"exec": "swaync-client -swb",
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"notification": "",
|
||||||
|
"none": "",
|
||||||
|
"dnd-notification": "",
|
||||||
|
"dnd-none": "",
|
||||||
|
},
|
||||||
|
"on-click": "swaync-client -t",
|
||||||
|
"on-click-right": "swaync-client -d",
|
||||||
|
"on-click-middle": "swaync-client -dn",
|
||||||
|
},
|
||||||
|
|
||||||
|
"custom/power": {
|
||||||
|
"format": "",
|
||||||
|
"on-click": "qs -c powermenu",
|
||||||
|
"tooltip-format": "Power Menu"
|
||||||
|
},
|
||||||
|
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "{volume}% {icon}",
|
||||||
|
"format-bluetooth": "{volume}% {icon}",
|
||||||
|
"format-muted": "",
|
||||||
|
"format-icons": {
|
||||||
|
"headphones": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"default": ["", ""]
|
||||||
|
},
|
||||||
|
"on-click": "pavucontrol"
|
||||||
|
},
|
||||||
|
|
||||||
|
"pulseaudio/slider": {
|
||||||
|
"min": 0,
|
||||||
|
"max": 100,
|
||||||
|
"orientation": "horizontal"
|
||||||
|
},
|
||||||
|
|
||||||
|
"idle_inhibitor": {
|
||||||
|
"tooltip": true,
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"activated": " ",
|
||||||
|
"deactivated": " "
|
||||||
|
},
|
||||||
|
"tooltip-format-activated": "Staying awake",
|
||||||
|
"tooltip-format-deactivated": "Might sleep...."
|
||||||
|
},
|
||||||
|
|
||||||
|
"network": {
|
||||||
|
"format-wifi": " ({bandwidthDownBits})",
|
||||||
|
"format-ethernet": " ({bandwidthDownBits})",
|
||||||
|
"format-disconnected": "Disconnected ⚠",
|
||||||
|
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
|
||||||
|
"tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}",
|
||||||
|
"on-click": "networkmanager_dmenu --dmenu --style ~/.config/wofi/style.css --allow-images=false",
|
||||||
|
"on-click-right": "nm-connection-editor"
|
||||||
|
},
|
||||||
|
|
||||||
|
"cpu": {
|
||||||
|
"format": "{usage}% ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"memory": {
|
||||||
|
"format": "{percentage}% "
|
||||||
|
},
|
||||||
|
|
||||||
|
"temperature": {
|
||||||
|
"format": "{temperatureC}°C ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
|
||||||
|
"tray": {
|
||||||
|
"spacing": 10,
|
||||||
|
"icon-size": 13
|
||||||
|
},
|
||||||
|
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%H:%M}",
|
||||||
|
"tooltip-format": "<tt><small>{calendar}</small></tt>",
|
||||||
|
"calendar": {
|
||||||
|
"mode" : "year",
|
||||||
|
"mode-mon-col" : 3,
|
||||||
|
"weeks-pos" : "left",
|
||||||
|
"on-scroll" : 1,
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"format": {
|
||||||
|
"months": "<span color='#fab387'><b>{}</b></span>",
|
||||||
|
"days": "<span color='#cba6f7'><b>{}</b></span>",
|
||||||
|
"weeks": "<span color='#a6e3a1'><b>W{}</b></span>",
|
||||||
|
"weekdays": "<span color='#f9e2af'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#1e1e2e' bgcolor='#a6e3a1'>{}</span>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"on-click": "flatpak run eu.betterbird.Betterbird -calendar"
|
||||||
|
},
|
||||||
|
|
||||||
|
"battery": {
|
||||||
|
"bat": "BAT0",
|
||||||
|
"states": {
|
||||||
|
"good": 95,
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15
|
||||||
|
},
|
||||||
|
"format": "{capacity}% {icon}",
|
||||||
|
"format-charging": "{capacity}% ",
|
||||||
|
"format-plugged": "{capacity}% ",
|
||||||
|
"format-icons": ["", "", "", "", " "]
|
||||||
|
},
|
||||||
|
|
||||||
|
"keyboard-state": {
|
||||||
|
"numlock": true,
|
||||||
|
"capslock": true,
|
||||||
|
"format": "{name} {icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"locked": "",
|
||||||
|
"unlocked": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
capacity=$(cat /sys/class/power_supply/BAT*/capacity)
|
||||||
|
status=$(cat /sys/class/power_supply/BAT*/status)
|
||||||
|
|
||||||
|
if [ "$status" != "Charging" ] && [ "$capacity" -lt 15 ]; then
|
||||||
|
echo " $capacity%"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
Regular → Executable
+1
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
bt_connected=""
|
bt_connected=""
|
||||||
while read -r _ mac name_rest; do
|
while read -r _ mac name_rest; do
|
||||||
if [ "$(bluetoothctl info "$mac" | awk '/Connected:/ {print $2}')" = "yes" ]; then
|
if [ "$(bluetoothctl info "$mac" | awk '/Connected:/ {print $2}')" = "yes" ]; then
|
||||||
|
|||||||
Regular → Executable
+25
-11
@@ -1,19 +1,33 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Get active workspace ID
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
|
# Get focused monitor name
|
||||||
# Get clients in active workspace
|
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .name')
|
||||||
clients=$(hyprctl clients -j | jq -r \
|
monitor="${WAYBAR_OUTPUT_NAME:-$focused_monitor}"
|
||||||
".[] | select(.workspace.id==$active_ws) | \"\(.title)\"")
|
|
||||||
# Count clients
|
# Hide if not focused monitor
|
||||||
count=$(echo "$clients" | grep -c .)
|
if [ "$monitor" != "$focused_monitor" ]; then
|
||||||
# If no clients → hide module
|
|
||||||
if [ "$count" -eq 0 ]; then
|
|
||||||
jq -c -n '{text:"", class:"hidden"}'
|
jq -c -n '{text:"", class:"hidden"}'
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
# Build tooltip (newline separated)
|
|
||||||
|
# Get active workspace on this monitor
|
||||||
|
active_ws=$(hyprctl monitors -j | jq -r \
|
||||||
|
".[] | select(.name==\"$monitor\") | .activeWorkspace.id")
|
||||||
|
|
||||||
|
# Get clients
|
||||||
|
clients=$(hyprctl clients -j | jq -r \
|
||||||
|
".[] | select(.workspace.id==$active_ws) | \"\(.title)\"")
|
||||||
|
|
||||||
|
count=$(echo "$clients" | grep -c '\S')
|
||||||
|
|
||||||
|
# Hide if 0 or 1 clients — no point showing window switcher
|
||||||
|
if [ "$count" -le 1 ]; then
|
||||||
|
jq -c -n '{text:"", class:"hidden"}'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
tooltip=$(echo "$clients" | sed 's/^/• /' | paste -sd '\n' -)
|
tooltip=$(echo "$clients" | sed 's/^/• /' | paste -sd '\n' -)
|
||||||
# Output JSON
|
|
||||||
jq -c -n \
|
jq -c -n \
|
||||||
--arg text "$count" \
|
--arg text "$count" \
|
||||||
--arg tooltip "$tooltip" \
|
--arg tooltip "$tooltip" \
|
||||||
|
|||||||
Regular → Executable
+9
-2
@@ -1,8 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
|
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
|
||||||
clients=$(hyprctl clients -j | jq -r \
|
clients=$(hyprctl clients -j | jq -r \
|
||||||
".[] | select(.workspace.id==$active_ws) | \"\(.address)|\(.title)\"")
|
".[] | select(.workspace.id==$active_ws) | \"\(.address)|\(.title)\"")
|
||||||
choice=$(echo "$clients" | cut -d'|' -f2 | wofi -dmenu -j -p "Active apps" --style ~/.config/wofi/style.css)
|
|
||||||
|
choice=$(echo "$clients" | cut -d'|' -f2 \
|
||||||
|
| wofi --dmenu \
|
||||||
|
--style ~/.config/wofi/style.css \
|
||||||
|
--allow-images=false \
|
||||||
|
--prompt "Active windows ...")
|
||||||
|
|
||||||
[ -z "$choice" ] && exit 0
|
[ -z "$choice" ] && exit 0
|
||||||
addr=$(echo "$clients" | grep "|$choice" | head -n1 | cut -d'|' -f1)
|
addr=$(echo "$clients" | grep "|$choice" | head -n1 | cut -d'|' -f1)
|
||||||
hyprctl dispatch focuswindow address:$addr
|
hyprctl dispatch focuswindow address:"$addr"
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
DEVICE=$(kdeconnect-cli --list-devices | grep -oP '(?<=\().*?(?=\))' | head -n 1)
|
||||||
|
|
||||||
|
if [ -z "$DEVICE" ]; then
|
||||||
|
echo "No phone"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
NAME=$(kdeconnect-cli -d "$DEVICE" --name 2>/dev/null)
|
||||||
|
BATTERY=$(kdeconnect-cli -d "$DEVICE" --battery 2>/dev/null | grep -o '[0-9]\+' | head -n 1)
|
||||||
|
|
||||||
|
if [ -z "$BATTERY" ]; then
|
||||||
|
echo "$NAME"
|
||||||
|
else
|
||||||
|
echo "$NAME $BATTERY%"
|
||||||
|
fi
|
||||||
+92
@@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
|
||||||
|
# Player selection — prefer actively playing player
|
||||||
|
player=$(playerctl -l 2>/dev/null | while read -r p; do
|
||||||
|
st=$(playerctl --player="$p" status 2>/dev/null)
|
||||||
|
[ "$st" = "Playing" ] && echo "$p" && break
|
||||||
|
done)
|
||||||
|
[ -z "$player" ] && player=$(playerctl -l 2>/dev/null | head -n1)
|
||||||
|
|
||||||
|
if [ -z "$player" ]; then
|
||||||
|
jq -c -n '{text: "", tooltip: "", class: "inactive"}'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
status=$(playerctl --player="$player" status 2>/dev/null)
|
||||||
|
if [ "$status" != "Playing" ] && [ "$status" != "Paused" ]; then
|
||||||
|
jq -c -n '{text: "", tooltip: "", class: "inactive"}'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
artist=$(playerctl --player="$player" metadata artist 2>/dev/null)
|
||||||
|
title=$(playerctl --player="$player" metadata title 2>/dev/null)
|
||||||
|
album=$(playerctl --player="$player" metadata album 2>/dev/null)
|
||||||
|
art=$(playerctl --player="$player" metadata mpris:artUrl 2>/dev/null)
|
||||||
|
length=$(playerctl --player="$player" metadata mpris:length 2>/dev/null)
|
||||||
|
position=$(playerctl --player="$player" position 2>/dev/null)
|
||||||
|
|
||||||
|
# Progress percentage — pure bash, no bc needed
|
||||||
|
if [ -n "$length" ] && [ -n "$position" ] && [ "$length" -gt 0 ] 2>/dev/null; then
|
||||||
|
pos_us=$(echo "$position" | awk '{printf "%d", $1 * 1000000}')
|
||||||
|
progress=$(( pos_us * 100 / length ))
|
||||||
|
else
|
||||||
|
progress=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Spotify device
|
||||||
|
device=""
|
||||||
|
if [[ "$player" == *"spotify"* ]]; then
|
||||||
|
device=$(playerctl --player="$player" metadata xesam:url 2>/dev/null | grep -o 'device=[^&]*' | cut -d= -f2)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Icon
|
||||||
|
if [ "$status" = "Paused" ]; then
|
||||||
|
icon="⏸ "
|
||||||
|
else
|
||||||
|
icon="▶ "
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Scrolling ticker
|
||||||
|
CACHE_FILE="/tmp/waybar_media_scroll_${player//\//_}"
|
||||||
|
full_text="${artist} — ${title}"
|
||||||
|
text_len=${#full_text}
|
||||||
|
display_len=30
|
||||||
|
|
||||||
|
# Reset scroll offset when track changes
|
||||||
|
TRACK_FILE="/tmp/waybar_media_track_${player//\//_}"
|
||||||
|
last_track=""
|
||||||
|
[ -f "$TRACK_FILE" ] && last_track=$(cat "$TRACK_FILE")
|
||||||
|
if [ "$full_text" != "$last_track" ]; then
|
||||||
|
echo "0" > "$CACHE_FILE"
|
||||||
|
echo "$full_text" > "$TRACK_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$text_len" -le "$display_len" ]; then
|
||||||
|
text="$full_text"
|
||||||
|
else
|
||||||
|
offset=0
|
||||||
|
[ -f "$CACHE_FILE" ] && offset=$(cat "$CACHE_FILE")
|
||||||
|
|
||||||
|
padded="${full_text} ${full_text}"
|
||||||
|
text="${padded:$offset:$display_len}"
|
||||||
|
|
||||||
|
next_offset=$(( (offset + 1) % (text_len + 4) ))
|
||||||
|
echo "$next_offset" > "$CACHE_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build tooltip
|
||||||
|
tooltip="Artist: ${artist}
|
||||||
|
Title: ${title}
|
||||||
|
Album: ${album}"
|
||||||
|
if [ -n "$device" ]; then
|
||||||
|
tooltip="${tooltip}
|
||||||
|
${device}"
|
||||||
|
fi
|
||||||
|
tooltip="${tooltip}"
|
||||||
|
jq -c -n \
|
||||||
|
--arg text "${icon}${text}" \
|
||||||
|
--arg tooltip "$tooltip" \
|
||||||
|
--arg class "$player" \
|
||||||
|
--arg art "$art" \
|
||||||
|
'{text: $text, tooltip: $tooltip, class: $class, alt: $art}'
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */
|
||||||
|
@import url("file:///home/henrov/.config/shared/css/colors.css");
|
||||||
|
|
||||||
|
/* --- Global --- */
|
||||||
|
* {
|
||||||
|
font-family:
|
||||||
|
Aporetic Sans Mono,
|
||||||
|
Iosevka Nerd Font,
|
||||||
|
Roboto,
|
||||||
|
Helvetica,
|
||||||
|
Arial,
|
||||||
|
sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: transparent;
|
||||||
|
color: @text;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------GROUPS------------------------------------------------ */
|
||||||
|
|
||||||
|
/* --- Group-level theming --- */
|
||||||
|
#hardware,
|
||||||
|
#workspaces,
|
||||||
|
#sporadic,
|
||||||
|
#audio,
|
||||||
|
#tray,
|
||||||
|
#datestuff,
|
||||||
|
#system,
|
||||||
|
#notifications,
|
||||||
|
#connections {
|
||||||
|
color: @text;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 30px;
|
||||||
|
/* --- Option 1 Green blue filled
|
||||||
|
background:
|
||||||
|
linear-gradient(transparent, transparent) padding-box,
|
||||||
|
linear-gradient(45deg, @blue, @green) border-box;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
--- */
|
||||||
|
/* --- Option 2 default background green blue border
|
||||||
|
background:
|
||||||
|
linear-gradient(@base, @base) padding-box,
|
||||||
|
linear-gradient(45deg, @blue, @green) border-box;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
*/
|
||||||
|
/* --- Option 3 NO background, no border */
|
||||||
|
background: transparent;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
/* --- Option 5 Solid border
|
||||||
|
background: transparent;
|
||||||
|
border: 2px solid @border;
|
||||||
|
--- */
|
||||||
|
margin: 0px 3px;
|
||||||
|
padding: 1px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Group-level label padding --- */
|
||||||
|
#hardware label,
|
||||||
|
#workspaces label,
|
||||||
|
#sporadic label,
|
||||||
|
#audio label,
|
||||||
|
#tray label,
|
||||||
|
#datestuff label,
|
||||||
|
#system label,
|
||||||
|
#notifications label,
|
||||||
|
#connections label {
|
||||||
|
padding: 0px 5px;
|
||||||
|
transition: padding 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Group anchors default visible --- */
|
||||||
|
#custom-hardware-anchor,
|
||||||
|
#custom-tray-anchor,
|
||||||
|
#custom-system-anchor,
|
||||||
|
#custom-connections-anchor {
|
||||||
|
/* min-width: 80px; */
|
||||||
|
padding: 0 5px;
|
||||||
|
margin: 0 2px;
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity 0.2s ease, min-width 0.2s ease, padding 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Hide anchors on hover of the group --- */
|
||||||
|
#hardware:hover #custom-hardware-anchor,
|
||||||
|
#tray:hover #custom-tray-anchor,
|
||||||
|
#system:hover #custom-system-anchor,
|
||||||
|
#connections:hover #custom-connections-anchor {
|
||||||
|
opacity: 0;
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -----------------------------
|
||||||
|
WORKSPACES / WINDOWS MODULE
|
||||||
|
----------------------------- */
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable hover effects completely */
|
||||||
|
#workspaces button,
|
||||||
|
#workspaces button:hover {
|
||||||
|
border: 2px solid transparent;
|
||||||
|
padding: 0 6px;
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 30px;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active vs inactive workspace colors */
|
||||||
|
#workspaces button.active {
|
||||||
|
background: linear-gradient(45deg, @blue, @green);
|
||||||
|
color: @base;
|
||||||
|
}
|
||||||
|
|
||||||
|
activeworkspaces:not(.active) {
|
||||||
|
background: linear-gradient(@base-alpha, @base-alpha);
|
||||||
|
border: 2px solid transparent;
|
||||||
|
color: @text-muted;
|
||||||
|
}
|
||||||
|
|
||||||
|
label#custom-windows.module {
|
||||||
|
font-size: 14px;
|
||||||
|
color: @base;
|
||||||
|
padding: 0 8px;
|
||||||
|
border-radius: 30px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
label#custom-windows.active {
|
||||||
|
background: linear-gradient(45deg, alpha(@blue, 0.5), alpha(@green, 0.5));
|
||||||
|
}
|
||||||
|
|
||||||
|
label#custom-windows:not(.active) {
|
||||||
|
background: transparent;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- Media ---*/
|
||||||
|
|
||||||
|
#custom-media {
|
||||||
|
padding: 0 8px;
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-media.inactive {
|
||||||
|
background: transparent;
|
||||||
|
color: transparent;
|
||||||
|
opacity: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---- Pulseaudio ---*/
|
||||||
|
|
||||||
|
#pulseaudio-slider {
|
||||||
|
padding: 0 4px;
|
||||||
|
margin: 0;
|
||||||
|
min-width: 140px;
|
||||||
|
}
|
||||||
|
#pulseaudio-slider slider {
|
||||||
|
min-height: 0px;
|
||||||
|
min-width: 0px;
|
||||||
|
opacity: 0;
|
||||||
|
border-radius: 30px;
|
||||||
|
background: linear-gradient(45deg, @blue, @green);
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#pulseaudio-slider trough {
|
||||||
|
min-height: 10px;
|
||||||
|
min-width: 120px;
|
||||||
|
border-radius: 30px;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
#pulseaudio-slider highlight {
|
||||||
|
min-width: 10px;
|
||||||
|
border-radius: 30px;
|
||||||
|
background: linear-gradient(45deg, @blue, @green);
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------------------------------------- */
|
||||||
|
/* STATES / SPECIALS */
|
||||||
|
#custom-notifications.notification,
|
||||||
|
#custom-notifications.dnd-notification,
|
||||||
|
#idle_inhibitor.activated {
|
||||||
|
background: linear-gradient(45deg, @blue, @green);
|
||||||
|
border: 2px solid transparent;
|
||||||
|
color: @base;
|
||||||
|
border-radius: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
color: @green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#batterywarn {
|
||||||
|
color: @red;
|
||||||
|
animation: blink 0.5s linear infinite alternate;
|
||||||
|
border-radius: 30px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning:not(.charging) {
|
||||||
|
color: @text;
|
||||||
|
animation: blink 0.5s linear infinite alternate;
|
||||||
|
border-radius: 30px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-batterywarn {
|
||||||
|
margin: 0 5px;
|
||||||
|
padding: 0 10px;
|
||||||
|
color: @red;
|
||||||
|
animation: blink 0.5s linear infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: @base;
|
||||||
|
border-radius: 30px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disconnected {
|
||||||
|
background-color: @red;
|
||||||
|
border-radius: 30px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature.critical {
|
||||||
|
background-color: @red;
|
||||||
|
border-radius: 30px;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
}
|
||||||
@@ -1,184 +0,0 @@
|
|||||||
@import url("file:///home/henrov/.config/shared/colors.css");
|
|
||||||
|
|
||||||
/* --- Global --- */
|
|
||||||
* {
|
|
||||||
font-family:
|
|
||||||
Aporetic Sans Mono,
|
|
||||||
Iosevka Nerd Font,
|
|
||||||
Roboto,
|
|
||||||
Helvetica,
|
|
||||||
Arial,
|
|
||||||
sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
window#waybar {
|
|
||||||
background-color: transparent;
|
|
||||||
color: @text;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* --- Group anchors default visible --- */
|
|
||||||
#custom-hardware-anchor,
|
|
||||||
#custom-connections-anchor {
|
|
||||||
min-width: 80px;
|
|
||||||
padding: 0 5px;
|
|
||||||
margin: 0 2px;
|
|
||||||
opacity: 1;
|
|
||||||
transition: opacity 0.2s ease, min-width 0.2s ease, padding 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --- Hide anchors on hover of the group --- */
|
|
||||||
#hardware:hover #custom-hardware-anchor,
|
|
||||||
#connections:hover #custom-connections-anchor {
|
|
||||||
opacity: 0;
|
|
||||||
min-width: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#hardware:hover,
|
|
||||||
#connections:hover {
|
|
||||||
min-width: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* MODULES */
|
|
||||||
.modules-left > widget,
|
|
||||||
.modules-center > widget,
|
|
||||||
.modules-right > widget {
|
|
||||||
min-width: 80px;
|
|
||||||
color: @text;
|
|
||||||
font-weight: bold;
|
|
||||||
border-radius: 30px;
|
|
||||||
background:
|
|
||||||
linear-gradient(@base-alpha, @base-alpha) padding-box,
|
|
||||||
linear-gradient(45deg, @blue, @green) border-box;
|
|
||||||
border: 2px solid transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left > box + box,
|
|
||||||
.modules-center > box + box,
|
|
||||||
.modules-right > box + box {
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left > widget label,
|
|
||||||
.modules-left > label ,
|
|
||||||
.modules-center > widget label,
|
|
||||||
.modules-center > label,
|
|
||||||
.modules-right > widget label,
|
|
||||||
.modules-right > label {
|
|
||||||
padding: 0px 5px;
|
|
||||||
transition: padding 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
|
||||||
/* SLIDERS / SPECIAL MODULES */
|
|
||||||
|
|
||||||
/* -----------------------------
|
|
||||||
WORKSPACES / WINDOWS MODULE
|
|
||||||
----------------------------- */
|
|
||||||
|
|
||||||
/* Disable hover effects completely */
|
|
||||||
#workspaces button,
|
|
||||||
#workspaces button:hover {
|
|
||||||
border: 2px solid transparent;
|
|
||||||
padding: 0 6px;
|
|
||||||
margin: 0;
|
|
||||||
border-radius: 30px;
|
|
||||||
transition: none; /* disable hover animation */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set custom/windows font to match workspace font */
|
|
||||||
#custom-windows label {
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: @teal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Active vs inactive workspace colors */
|
|
||||||
#workspaces button.active {
|
|
||||||
background: linear-gradient(45deg, @blue, @green);
|
|
||||||
font-size: 14px;
|
|
||||||
color: @base;
|
|
||||||
}
|
|
||||||
|
|
||||||
activeworkspaces:not(.active) {
|
|
||||||
background: linear-gradient(@base-alpha, @base-alpha);
|
|
||||||
border: 2px solid transparent;
|
|
||||||
color: @text-muted; /* inactive text color */
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio-slider {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
#pulseaudio-slider slider {
|
|
||||||
min-height: 0px;
|
|
||||||
min-width: 0px;
|
|
||||||
opacity: 0;
|
|
||||||
border-radius: 30px;
|
|
||||||
background: linear-gradient(45deg, @blue, @green);
|
|
||||||
border: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
#pulseaudio-slider trough {
|
|
||||||
min-height: 10px;
|
|
||||||
min-width: 80px;
|
|
||||||
border-radius: 30px;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
#pulseaudio-slider highlight {
|
|
||||||
min-width: 10px;
|
|
||||||
border-radius: 30px;
|
|
||||||
background: linear-gradient(45deg, @blue, @green);
|
|
||||||
border: 2px solid transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
|
||||||
/* STATES / SPECIALS */
|
|
||||||
#idle_inhibitor.activated {
|
|
||||||
background: linear-gradient(45deg, @blue, @green);
|
|
||||||
border: 2px solid transparent;
|
|
||||||
color: @base;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery.charging {
|
|
||||||
color: @green;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery.warning:not(.charging) {
|
|
||||||
color: white;
|
|
||||||
animation: blink 0.5s linear infinite alternate;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blink {
|
|
||||||
to {
|
|
||||||
background-color: #ffffff;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#network.disconnected {
|
|
||||||
background-color: @red;
|
|
||||||
}
|
|
||||||
|
|
||||||
#temperature.critical {
|
|
||||||
background-color: @red;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------------------------------- */
|
|
||||||
/* GLOBAL MODULE SPACING */
|
|
||||||
#clock,
|
|
||||||
#idle_inhibitor,
|
|
||||||
#battery,
|
|
||||||
#cpu,
|
|
||||||
#memory,
|
|
||||||
#temperature,
|
|
||||||
#network,
|
|
||||||
#pulseaudio,
|
|
||||||
#tray {
|
|
||||||
margin: 0 5px;
|
|
||||||
padding: 0 10px;
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
[Settings]
|
[Settings]
|
||||||
language = en
|
language = en
|
||||||
backend = awww
|
backend = awww
|
||||||
|
|||||||
@@ -1,17 +1,7 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
[global]
|
[global]
|
||||||
allow_images = true
|
|
||||||
allow_markup = true
|
allow_markup = true
|
||||||
|
|
||||||
# Which modes are active
|
|
||||||
show_drun = true:apps,false:others
|
|
||||||
show_run = true
|
|
||||||
show_files = false
|
|
||||||
show_windowed = false
|
|
||||||
show_dmenu = false
|
|
||||||
show_ssh = false
|
|
||||||
show_power = true
|
|
||||||
|
|
||||||
# Layout / scrolling
|
|
||||||
location = center
|
location = center
|
||||||
anchor = center
|
anchor = center
|
||||||
|
|
||||||
@@ -26,15 +16,4 @@ cycle = true
|
|||||||
hide_scroll = false
|
hide_scroll = false
|
||||||
hide_search = false
|
hide_search = false
|
||||||
|
|
||||||
# Labels
|
|
||||||
show_labels = true
|
|
||||||
label_search = true
|
|
||||||
label_run = Run
|
|
||||||
label_files = Files
|
|
||||||
label_windowed = Windows
|
|
||||||
label_drun = Applications
|
|
||||||
label_dmenu = Commands
|
|
||||||
label_ssh = SSH
|
|
||||||
label_power = Power
|
|
||||||
|
|
||||||
prompt = > ...
|
prompt = > ...
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
wofi --show drun \
|
||||||
|
--style ~/.config/wofi/style.css \
|
||||||
|
--no-actions \
|
||||||
|
--allow-images=false \
|
||||||
|
--columns 1 \
|
||||||
|
--prompt "Apps ..."
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
@import url("file:///home/henrov/.config/shared/colors.css");
|
/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */
|
||||||
|
@import "~/.config/shared/css/colors.css";
|
||||||
|
|
||||||
/* Global styles */
|
|
||||||
* {
|
* {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: @text;
|
color: @text;
|
||||||
@@ -8,79 +8,81 @@
|
|||||||
font-size: 12pt;
|
font-size: 12pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- DRUN menu (full size) --- */
|
#window {
|
||||||
#main {
|
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||||||
background:
|
border-radius: 28px;
|
||||||
linear-gradient(@base-alpha, @base-alpha) padding-box, /* Inner fill */
|
padding: 2px;
|
||||||
linear-gradient(45deg, @blue, @green) border-box; /* Gradient border */
|
|
||||||
border: 2px solid transparent; /* required for border-box layering */
|
|
||||||
border-radius: 30px;
|
|
||||||
padding: 20px;
|
|
||||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
|
|
||||||
width: 800px;
|
|
||||||
height: 600px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- DMENU menu --- */
|
#outer-box {
|
||||||
#dmenu {
|
background-color: rgba(30, 30, 46, 0.98); /* almost solid */
|
||||||
background:
|
border-radius: 26px;
|
||||||
linear-gradient(@base-alpha, @base-alpha) padding-box,
|
padding: 12px;
|
||||||
linear-gradient(45deg, @blue, @green) border-box;
|
}
|
||||||
border: 2px solid transparent;
|
|
||||||
border-radius: 30px;
|
#inner-box {
|
||||||
padding: 10px; /* smaller padding for half-height */
|
background: transparent;
|
||||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
|
padding: 0;
|
||||||
width: 800px;
|
|
||||||
height: 150px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Input field */
|
|
||||||
#input {
|
#input {
|
||||||
background-color: @surface0;
|
background-color: @surface1; /* stronger than surface0 */
|
||||||
color: @text;
|
color: @text;
|
||||||
border: 1px solid @surface1;
|
border: 1px solid @surface2;
|
||||||
border-radius: 30px;
|
border-radius: 18px;
|
||||||
padding: 5px 10px;
|
padding: 10px 14px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Entries */
|
#input:focus {
|
||||||
|
border: 1px solid @blue;
|
||||||
|
background-color: @surface2;
|
||||||
|
}
|
||||||
|
|
||||||
#entry {
|
#entry {
|
||||||
background-color: rgba(200,200,200,0.2);
|
background-color: rgba(0, 0, 0, 0.35);
|
||||||
color: @text;
|
color: @subtext1;
|
||||||
border-radius: 30px;
|
border-radius: 18px;
|
||||||
padding: 5px 10px;
|
padding: 10px 14px;
|
||||||
margin: 2px 0;
|
margin: 2px 0;
|
||||||
border: 2px solid transparent; /* needed for gradient on selection */
|
transition: all 0.15s ease;
|
||||||
transition: all 0.2s ease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Entry focus (hover or typing) */
|
|
||||||
#entry:focus {
|
|
||||||
background:
|
|
||||||
linear-gradient(@base-alpha, @base-alpha) padding-box,
|
|
||||||
linear-gradient(45deg, @blue, @green) border-box;
|
|
||||||
color: @lavender;
|
|
||||||
border-radius: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Entry selection */
|
#entry:hover {
|
||||||
#entry:selected {
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
background:
|
|
||||||
linear-gradient(@base-alpha, @base-alpha) padding-box,
|
|
||||||
linear-gradient(45deg, @blue, @green) border-box;
|
|
||||||
color: @text;
|
color: @text;
|
||||||
border-radius: 30px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scrollbar */
|
#entry:focus {
|
||||||
|
background: linear-gradient(45deg, #89b4fa, #89b4fa);
|
||||||
|
color: @lavender;
|
||||||
|
border-radius: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||||||
|
border-radius: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry image {
|
||||||
|
margin-right: 10px;
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
#scrollbar {
|
#scrollbar {
|
||||||
background-color: @surface0;
|
background-color: @surface1;
|
||||||
border-radius: 30px;
|
border-radius: 20px;
|
||||||
width: 8px;
|
width: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#scrollbar.handle {
|
#scrollbar handle {
|
||||||
background-color: @blue;
|
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||||||
border-radius: 30px;
|
border-radius: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#prompt {
|
||||||
|
color: @subtext0;
|
||||||
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,21 +7,23 @@
|
|||||||
// custom settings, run `zed: open default settings` from the
|
// custom settings, run `zed: open default settings` from the
|
||||||
// command palette (cmd-shift-p / ctrl-shift-p)
|
// command palette (cmd-shift-p / ctrl-shift-p)
|
||||||
{
|
{
|
||||||
"icon_theme": "Catppuccin Mocha",
|
"theme": {
|
||||||
"agent": {
|
"mode": "system",
|
||||||
"default_model": {
|
"light": "Catppuccin Frappé",
|
||||||
"provider": "ollama",
|
"dark": "Catppuccin Mocha",
|
||||||
"model": "codellama:34b",
|
|
||||||
"enable_thinking": false
|
|
||||||
},
|
},
|
||||||
"favorite_models": [],
|
"icon_theme": {
|
||||||
"model_parameters": []
|
"mode": "system",
|
||||||
|
"light": "Catppuccin Frappé",
|
||||||
|
"dark": "Catppuccin Mocha"
|
||||||
|
},
|
||||||
|
"auto_install_extensions": {
|
||||||
|
"catppuccin": true,
|
||||||
|
"catppuccin-icons": true,
|
||||||
|
"org-mode": true,
|
||||||
|
"lua": true,
|
||||||
|
"sql": true
|
||||||
},
|
},
|
||||||
"ui_font_size": 16,
|
"ui_font_size": 16,
|
||||||
"buffer_font_size": 15,
|
"buffer_font_size": 15,
|
||||||
"theme": {
|
|
||||||
"mode": "dark",
|
|
||||||
"light": "One Light",
|
|
||||||
"dark": "Catppuccin Mocha",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
# Path to syntax highlighting installed by Nix
|
# Path to syntax highlighting installed by Nix
|
||||||
ZSH_SYNTAX_HIGHLIGHTING="${HOME}/.nix-profile/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
|
ZSH_SYNTAX_HIGHLIGHTING="${HOME}/.nix-profile/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
|
||||||
|
|
||||||
@@ -10,3 +11,15 @@ fi
|
|||||||
if command -v starship >/dev/null 2>&1; then
|
if command -v starship >/dev/null 2>&1; then
|
||||||
eval "$(starship init zsh)"
|
eval "$(starship init zsh)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
source /etc/profile.d/99-alias-functions.sh
|
||||||
|
eval "$(/run/current-system/sw/bin/z.lua --init zsh)"
|
||||||
|
cd() {
|
||||||
|
if [ "$#" -eq 0 ]; then
|
||||||
|
builtin cd ~
|
||||||
|
else
|
||||||
|
builtin cd "$@" || return
|
||||||
|
fi
|
||||||
|
|
||||||
|
command z "$PWD"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
#packages
|
#packages
|
||||||
_1password-gui
|
_1password-gui
|
||||||
audacity
|
audacity
|
||||||
baobab
|
baobab
|
||||||
bat
|
bat
|
||||||
blueman
|
blender
|
||||||
bluez
|
|
||||||
brave
|
brave
|
||||||
btop
|
btop
|
||||||
chromium
|
chromium
|
||||||
@@ -17,32 +17,40 @@ eza
|
|||||||
fd
|
fd
|
||||||
file
|
file
|
||||||
fzf
|
fzf
|
||||||
|
gimp
|
||||||
git
|
git
|
||||||
gparted
|
gparted
|
||||||
grim
|
grim
|
||||||
|
grimblast
|
||||||
|
gnome-calculator
|
||||||
|
qalculate-gtk
|
||||||
handbrake
|
handbrake
|
||||||
hyperfine
|
hyperfine
|
||||||
just
|
just
|
||||||
jq
|
jq
|
||||||
kdePackages.kdeconnect-kde
|
libinput
|
||||||
libreoffice
|
libreoffice
|
||||||
|
lua
|
||||||
nextcloud-client
|
nextcloud-client
|
||||||
nextcloud-talk-desktop
|
nextcloud-talk-desktop
|
||||||
nix-index
|
nix-index
|
||||||
nix-output-monitor
|
nix-output-monitor
|
||||||
nh
|
nh
|
||||||
|
numlockx
|
||||||
obsidian
|
obsidian
|
||||||
onlyoffice-desktopeditors
|
|
||||||
openssl
|
openssl
|
||||||
|
pandoc
|
||||||
postman
|
postman
|
||||||
python3
|
python3
|
||||||
qdirstat
|
qdirstat
|
||||||
ripgrep
|
ripgrep
|
||||||
signal-desktop
|
signal-desktop
|
||||||
slurp
|
slurp
|
||||||
|
solidtime-desktop
|
||||||
spotify
|
spotify
|
||||||
solaar
|
solaar
|
||||||
swappy
|
swappy
|
||||||
|
sweethome3d.application
|
||||||
tea
|
tea
|
||||||
todoist
|
todoist
|
||||||
tree
|
tree
|
||||||
@@ -53,9 +61,11 @@ wget
|
|||||||
wl-clipboard
|
wl-clipboard
|
||||||
wf-recorder
|
wf-recorder
|
||||||
yazi
|
yazi
|
||||||
|
z-lua
|
||||||
zed-editor
|
zed-editor
|
||||||
zoxide
|
zoxide
|
||||||
|
|
||||||
#flatpaks
|
#flatpaks
|
||||||
eu.betterbird.Betterbird
|
eu.betterbird.Betterbird
|
||||||
com.todoist.Todoist
|
com.todoist.Todoist
|
||||||
|
com.logseq.Logseq
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
#File & navigation
|
||||||
|
repo=cd ~/Repos && ls -lah
|
||||||
|
|
||||||
|
#Nix commands
|
||||||
|
nps=xdg-open https://search.nixos.org
|
||||||
|
|
||||||
|
#system commands
|
||||||
|
please=sudo
|
||||||
|
pls=sudo
|
||||||
|
rb=sudo reboot
|
||||||
|
po=sudo poweroff
|
||||||
|
|
||||||
|
#flatpak commands
|
||||||
|
fpl=flatpak list
|
||||||
|
fps=flatpak search
|
||||||
|
fpi=flatpak install
|
||||||
|
fpr=flatpak run
|
||||||
|
fpu=flatpak update
|
||||||
|
|
||||||
|
#ssh commands
|
||||||
|
nxc=ssh henrov@nextcloud.data-pro.nu
|
||||||
|
|
||||||
|
#app shortcuts
|
||||||
|
vs=code
|
||||||
|
keys=hyprctl binds
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ config, pkgs, lib, flakeRoot, ... }:
|
{ config, pkgs, lib, flakeRoot, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
boot.loader = {
|
boot.loader = {
|
||||||
systemd-boot.enable = true;
|
systemd-boot.enable = true;
|
||||||
@@ -7,16 +7,22 @@
|
|||||||
efi.efiSysMountPoint = "/boot";
|
efi.efiSysMountPoint = "/boot";
|
||||||
timeout = 5;
|
timeout = 5;
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
boot.kernelParams = [
|
boot.kernelParams = [
|
||||||
"quiet"
|
"quiet"
|
||||||
"splash"
|
"splash"
|
||||||
"udev.log_level=3"
|
"udev.log_level=3"
|
||||||
"rd.systemd.show_status=false"
|
"rd.systemd.show_status=false"
|
||||||
|
# Sleep / power management
|
||||||
|
"mem_sleep_default=deep" # Use S3 deep sleep, fixes sleep not working
|
||||||
|
"acpi_osi=Linux" # Tell ACPI this is a Linux system
|
||||||
|
"acpi_backlight=native" # Proper backlight control
|
||||||
|
# Intel GPU — fixes screen blinking on sleep/wake
|
||||||
|
"i915.enable_psr=0"
|
||||||
|
"i915.enable_psr2_sel_fetch=0"
|
||||||
|
# Prevent nvme from waking the system
|
||||||
|
"nvme.noacpi=1"
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.consoleLogLevel = 0;
|
boot.consoleLogLevel = 0;
|
||||||
#boot.initrd.systemd.enable = true;
|
#boot.initrd.systemd.enable = true;
|
||||||
boot.initrd.availableKernelModules = [
|
boot.initrd.availableKernelModules = [
|
||||||
@@ -26,15 +32,32 @@
|
|||||||
"sd_mod"
|
"sd_mod"
|
||||||
"rtsx_usb_sdmmc"
|
"rtsx_usb_sdmmc"
|
||||||
];
|
];
|
||||||
|
|
||||||
hardware.enableAllFirmware = true;
|
hardware.enableAllFirmware = true;
|
||||||
|
boot.kernelModules = [
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
"kvm-intel"
|
||||||
|
"asus_wmi" # Asus-specific power/fan/keyboard control
|
||||||
|
];
|
||||||
boot.plymouth = {
|
boot.plymouth = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
|
||||||
|
# Power management
|
||||||
|
powerManagement.enable = true;
|
||||||
|
services.logind.settings.Login = {
|
||||||
|
HandleSleepKey = "ignore";
|
||||||
|
HandleSleepKeyLongPress = "ignore";
|
||||||
|
};
|
||||||
|
services.thermald.enable = true; # Intel thermal management daemon
|
||||||
|
services.tlp = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
CPU_SCALING_GOVERNOR_ON_AC = "performance";
|
||||||
|
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
||||||
|
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
|
||||||
|
PLATFORM_PROFILE_ON_AC = "performance";
|
||||||
|
PLATFORM_PROFILE_ON_BAT = "low-power";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{
|
{
|
||||||
hostname,
|
hostname,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
|
{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -35,7 +36,8 @@ in
|
|||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
]
|
]
|
||||||
++ allModules
|
++ allModules
|
||||||
++ [ home-manager.nixosModules.home-manager ];
|
++ [ home-manager.nixosModules.home-manager ]
|
||||||
|
;
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Home Manager integration
|
# Home Manager integration
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ config, pkgs, lib, flakeRoot, ... }:
|
{ config, pkgs, lib, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
{ pkgs, config, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
############################
|
|
||||||
# System-level packages
|
|
||||||
############################
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
flameshot
|
|
||||||
];
|
|
||||||
|
|
||||||
############################
|
|
||||||
# Home Manager user-level configuration
|
|
||||||
############################
|
|
||||||
home-manager.users."${username}" = {
|
|
||||||
home.stateVersion = "26.05";
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
SCREENSHOT_TOOL = "flameshot";
|
|
||||||
USERNAME = username;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Create ~/Pictures/Screenshots by touching a dummy file
|
|
||||||
home.file."Pictures/Screenshots/.keep" = {
|
|
||||||
text = ""; # empty file
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
kdePackages.kdeconnect-kde
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.user.services.kdeconnect = {
|
||||||
|
enable = true;
|
||||||
|
description = "KDE Connect daemon";
|
||||||
|
wantedBy = ["default.target"];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.kdePackages.kdeconnect-kde}/bin/kdeconnectd";
|
||||||
|
Restart = "on-failure";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, pkgs, config, flakeRoot, ... }:
|
{ lib, pkgs, config, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
|
|
||||||
extraConfigFile = "${flakeRoot}/generated/.config/kitty/extra.conf";
|
extraConfigFile = "${flakeRoot}/generated/.config/kitty/extra.conf";
|
||||||
|
|
||||||
extraConfig =
|
extraConfig =
|
||||||
if builtins.pathExists extraConfigFile
|
if builtins.pathExists extraConfigFile
|
||||||
then builtins.readFile extraConfigFile
|
then builtins.readFile extraConfigFile
|
||||||
@@ -17,16 +16,13 @@ in
|
|||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
pkgs.kitty
|
pkgs.kitty
|
||||||
];
|
];
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Home Manager
|
# Home Manager
|
||||||
#################################
|
#################################
|
||||||
home-manager.users = {
|
home-manager.users = {
|
||||||
"${username}" = {
|
"${username}" = {
|
||||||
|
|
||||||
programs.kitty = {
|
programs.kitty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
confirm_os_window_close = lib.mkForce 0;
|
confirm_os_window_close = lib.mkForce 0;
|
||||||
dynamic_background_opacity = lib.mkForce true;
|
dynamic_background_opacity = lib.mkForce true;
|
||||||
@@ -35,11 +31,10 @@ in
|
|||||||
window_padding_width = lib.mkForce 10;
|
window_padding_width = lib.mkForce 10;
|
||||||
background_opacity = lib.mkForce "0.5";
|
background_opacity = lib.mkForce "0.5";
|
||||||
background_blur = lib.mkForce 5;
|
background_blur = lib.mkForce 5;
|
||||||
|
notify_on_command_complete = lib.mkForce "never";
|
||||||
};
|
};
|
||||||
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
${extraConfig}
|
${extraConfig}
|
||||||
|
|
||||||
# Theme
|
# Theme
|
||||||
include themes/Catppuccin-Mocha.conf
|
include themes/Catppuccin-Mocha.conf
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ pkgs, config, lib, ... }:
|
{ pkgs, config, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -15,6 +16,9 @@ in
|
|||||||
gvfs # support for external drives and network shares
|
gvfs # support for external drives and network shares
|
||||||
xarchiver # optional GUI archive manager
|
xarchiver # optional GUI archive manager
|
||||||
tumbler # Showing thumbnails
|
tumbler # Showing thumbnails
|
||||||
|
libmtp
|
||||||
|
mtpfs
|
||||||
|
jmtpfs
|
||||||
];
|
];
|
||||||
|
|
||||||
############################
|
############################
|
||||||
@@ -29,4 +33,6 @@ in
|
|||||||
USERNAME = username;
|
USERNAME = username;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
# Enable gvfs as a service
|
||||||
|
services.gvfs.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
assetPath = "${flakeRoot}/generated/.config/wofi";
|
sysName = "wofi";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/${sysName}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
environment.systemPackages = [ pkgs.wofi ];
|
environment.systemPackages = [ pkgs.wofi ];
|
||||||
|
|
||||||
home-manager.users = {
|
home-manager.users = {
|
||||||
${username} = {
|
${username} = {
|
||||||
home.file = {
|
home.activation.MakeWofiMutable = {
|
||||||
".config/wofi/config" = {
|
after = [ "writeBoundary" ];
|
||||||
text = builtins.readFile "${assetPath}/config";
|
before = [];
|
||||||
force = true;
|
data = ''
|
||||||
};
|
rm -rf $HOME/.config/${sysName}
|
||||||
".config/wofi/style.css" = {
|
mkdir -p $HOME/.config/${sysName}
|
||||||
text = builtins.replaceStrings ["PLACEHOLDER_USERNAME"] [username] (builtins.readFile "${assetPath}/style.css");
|
cp -r ${assetPath}/* $HOME/.config/${sysName}/
|
||||||
force = true;
|
chmod -R u+w $HOME/.config/${sysName}/
|
||||||
};
|
find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
sysName = "zed";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/${sysName}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.zed-editor ];
|
||||||
|
|
||||||
|
environment.sessionVariables = {
|
||||||
|
EDITOR = "zeditor";
|
||||||
|
VISUAL = "zeditor";
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.mime.defaultApplications = {
|
||||||
|
"text/plain" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-lua" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-sql" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-org" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-script.python" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-shellscript" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-csrc" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-chdr" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-rust" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-toml" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-yaml" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-json" = "dev.zed.Zed.desktop";
|
||||||
|
"application/json" = "dev.zed.Zed.desktop";
|
||||||
|
"text/markdown" = "dev.zed.Zed.desktop";
|
||||||
|
"text/x-nix" = "dev.zed.Zed.desktop";
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.${username} = {
|
||||||
|
home.activation.MakeZedMutable = {
|
||||||
|
after = [ "writeBoundary" ];
|
||||||
|
before = [];
|
||||||
|
data = ''
|
||||||
|
rm -rf $HOME/.config/${sysName}
|
||||||
|
mkdir -p $HOME/.config/${sysName}
|
||||||
|
cp -r ${assetPath}/* $HOME/.config/${sysName}/
|
||||||
|
chmod -R u+w $HOME/.config/${sysName}/
|
||||||
|
find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ config, pkgs, lib, zen-browser, ... }:
|
{ config, pkgs, lib, zen-browser, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,53 +1,105 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
# Default username fallback
|
#################################
|
||||||
|
# User config
|
||||||
|
#################################
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
# Path to optional per-user generated zshrc
|
|
||||||
generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc";
|
generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc";
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Alias parsing
|
||||||
|
#################################
|
||||||
|
aliasFile = "${flakeRoot}/generated/assets/aliases.conf";
|
||||||
|
content = builtins.readFile aliasFile;
|
||||||
|
|
||||||
|
lines =
|
||||||
|
lib.filter (l: l != "")
|
||||||
|
(map (l:
|
||||||
|
let
|
||||||
|
noComment = builtins.head (lib.splitString "#" l);
|
||||||
|
in lib.trim noComment
|
||||||
|
) (lib.splitString "\n" content));
|
||||||
|
|
||||||
|
parseLine = line:
|
||||||
|
let
|
||||||
|
parts = lib.splitString "=" line;
|
||||||
|
in
|
||||||
|
if lib.length parts < 2 then null else {
|
||||||
|
name = lib.trim (lib.head parts);
|
||||||
|
value = lib.trim (lib.concatStringsSep "=" (lib.tail parts));
|
||||||
|
};
|
||||||
|
|
||||||
|
parsed =
|
||||||
|
lib.filter (x: x != null)
|
||||||
|
(map parseLine lines);
|
||||||
|
|
||||||
|
functions =
|
||||||
|
lib.concatStringsSep "\n"
|
||||||
|
(map (x: ''
|
||||||
|
${x.name}() {
|
||||||
|
${x.value} "$@"
|
||||||
|
}
|
||||||
|
'') parsed);
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
#################################
|
#################################
|
||||||
# Install Zsh, Oh My Zsh, and Starship system-wide
|
# Packages
|
||||||
#################################
|
#################################
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
zsh
|
zsh
|
||||||
oh-my-zsh
|
oh-my-zsh
|
||||||
starship
|
starship
|
||||||
|
zsh-syntax-highlighting
|
||||||
];
|
];
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Set Zsh to use ~/.config/zsh as its config directory
|
# Zsh config location
|
||||||
#################################
|
#################################
|
||||||
environment.etc."zshenv".text = ''
|
environment.etc."zshenv".text = ''
|
||||||
export ZDOTDIR=$HOME/.config/zsh
|
export ZDOTDIR=$HOME/.config/zsh
|
||||||
'';
|
'';
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Deploy global zshrc for all users
|
# Generated alias functions (system-wide)
|
||||||
|
#################################
|
||||||
|
environment.etc."profile.d/99-alias-functions.sh".text = ''
|
||||||
|
# system-wide functions generated from aliases.conf
|
||||||
|
${functions}
|
||||||
|
'';
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Global zshrc
|
||||||
#################################
|
#################################
|
||||||
environment.etc."zshrc".text = ''
|
environment.etc."zshrc".text = ''
|
||||||
export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh
|
export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh
|
||||||
ZSH_THEME=""
|
ZSH_THEME=""
|
||||||
plugins=(git sudo extract colored-man-pages command-not-found history docker kubectl)
|
plugins=(git sudo extract colored-man-pages command-not-found history docker kubectl)
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
||||||
# Load optional per-user generated zshrc if it exists
|
# Init starship FIRST (prompt)
|
||||||
|
eval "$(starship init zsh)"
|
||||||
|
|
||||||
|
# Load alias functions
|
||||||
|
if [ -f /etc/profile.d/99-alias-functions.sh ]; then
|
||||||
|
source /etc/profile.d/99-alias-functions.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load optional generated user config
|
||||||
[ -f "${generatedZsh}" ] && source "${generatedZsh}"
|
[ -f "${generatedZsh}" ] && source "${generatedZsh}"
|
||||||
|
|
||||||
# Initialize Starship prompt
|
# Syntax highlighting MUST be last
|
||||||
eval "$(starship init zsh)"
|
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
'';
|
'';
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Set Zsh as default login shell for the user via Home Manager
|
# Home Manager integration
|
||||||
#################################
|
#################################
|
||||||
home-manager.users = {
|
home-manager.users.${username} = {
|
||||||
${username} = {
|
|
||||||
programs.zsh.enable = true;
|
programs.zsh.enable = true;
|
||||||
|
|
||||||
# Include the generated zshrc if you want
|
|
||||||
home.file.".config/zsh/.zshrc".source = generatedZsh;
|
home.file.".config/zsh/.zshrc".source = generatedZsh;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, pkgs, config, ... }:
|
{ lib, pkgs, config, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ pkgs, config, lib, ... }:
|
{ pkgs, config, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,37 +1,36 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }:
|
{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
assetPath = "${flakeRoot}/generated/.config/hypr";
|
sysName = "hypr";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/${sysName}";
|
||||||
hyprlandPkg =
|
hyprlandPkg =
|
||||||
pkgs.hyprland or
|
pkgs.hyprland or
|
||||||
pkgs.hyprland-git or
|
pkgs.hyprland-git or
|
||||||
inputs.hyprland.packages.${pkgs.system}.default;
|
inputs.hyprland.packages.${pkgs.system}.default;
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Install Hyprland systemwide
|
# Install Hyprland systemwide
|
||||||
|
programs.hyprland.enable = true;
|
||||||
|
programs.hyprland.withUWSM = true;
|
||||||
|
programs.hyprland.package = hyprlandPkg;
|
||||||
|
|
||||||
environment.systemPackages = [ hyprlandPkg ];
|
environment.systemPackages = [ hyprlandPkg ];
|
||||||
|
|
||||||
# Home Manager user configuration
|
# Home Manager user configuration
|
||||||
home-manager.users = {
|
home-manager.users = {
|
||||||
${username} = {
|
${username} = {
|
||||||
home.file = {
|
|
||||||
".config/hypr/animations.conf" = { source = "${assetPath}/animations.conf"; force = true; };
|
home.activation.MakeHyprMutable = {
|
||||||
".config/hypr/behaviour.conf" = { source = "${assetPath}/behaviour.conf"; force = true; };
|
after = [ "writeBoundary" ];
|
||||||
".config/hypr/bindings.conf" = { source = "${assetPath}/bindings.conf"; force = true; };
|
before = [];
|
||||||
".config/hypr/exec-once.conf" = { source = "${assetPath}/exec-once.conf"; force = true; };
|
data = ''
|
||||||
".config/hypr/hypridle.conf" = { source = "${assetPath}/hypridle.conf"; force = true; };
|
rm -rf $HOME/.config/${sysName}
|
||||||
".config/hypr/hyprland.conf" = { source = "${assetPath}/hyprland.conf"; force = true; };
|
mkdir -p $HOME/.config/${sysName}
|
||||||
".config/hypr/hyprlock.conf" = { source = "${assetPath}/hyprlock.conf"; force = true; };
|
cp -r ${assetPath}/* $HOME/.config/${sysName}/
|
||||||
".config/hypr/layer-rules.conf" = { source = "${assetPath}/layer-rules.conf"; force = true; };
|
chmod -R u+w $HOME/.config/${sysName}/
|
||||||
".config/hypr/layout.conf" = { source = "${assetPath}/layout.conf"; force = true; };
|
find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
|
||||||
".config/hypr/monitor-rules.conf" = { source = "${assetPath}/monitor-rules.conf"; force = true; };
|
'';
|
||||||
".config/hypr/scripts/layout-selector.sh" = { source = "${assetPath}/scripts/layout-selector.sh"; executable = true; force = true; };
|
|
||||||
".config/hypr/theming.css" = { source = "${assetPath}/theming.css"; force = true; };
|
|
||||||
".config/hypr/window-rules.conf" = { source = "${assetPath}/window-rules.conf"; force = true; };
|
|
||||||
".config/hypr/workspace-rules.conf" = { source = "${assetPath}/workspace-rules.conf"; force = true; };
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, stylix, ... }:
|
{ lib, config, pkgs, flakeRoot, stylix, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -5,15 +6,34 @@ let
|
|||||||
homeDir = "/home/${username}";
|
homeDir = "/home/${username}";
|
||||||
wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers";
|
wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers";
|
||||||
wallpaperDst = "${homeDir}/Wallpapers";
|
wallpaperDst = "${homeDir}/Wallpapers";
|
||||||
randoScript = "${homeDir}/Wallpapers/scripts/randomizeWallpapers.sh";
|
sysName = "awww";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/${sysName}";
|
||||||
|
randoScript = "${homeDir}/.config/${sysName}/scripts/randomizeWallpapers.sh";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Make bash available
|
# Make bash available
|
||||||
environment.systemPackages = [ pkgs.bash pkgs.rsync pkgs.jq pkgs.awww pkgs.waypaper pkgs.socat ];
|
environment.systemPackages = [
|
||||||
|
pkgs.bash
|
||||||
|
pkgs.rsync
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.awww
|
||||||
|
pkgs.waypaper pkgs.socat ];
|
||||||
|
|
||||||
# Create the copy script using Home Manager, following Waybar style
|
# Create the copy script using Home Manager, following Waybar style
|
||||||
|
# This can not be done using a prepared script
|
||||||
home-manager.users = {
|
home-manager.users = {
|
||||||
${username} = {
|
${username} = {
|
||||||
|
home.activation.MakeWallpaperMutable = {
|
||||||
|
after = [ "writeBoundary" ];
|
||||||
|
before = [];
|
||||||
|
data = ''
|
||||||
|
rm -rf $HOME/.config/${sysName}
|
||||||
|
mkdir -p $HOME/.config/${sysName}
|
||||||
|
cp -r ${assetPath}/* $HOME/.config/${sysName}/
|
||||||
|
chmod -R u+w $HOME/.config/${sysName}/
|
||||||
|
find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
|
||||||
|
'';
|
||||||
|
};
|
||||||
home.file = {
|
home.file = {
|
||||||
"copy-wallpapers.sh" = {
|
"copy-wallpapers.sh" = {
|
||||||
text = ''
|
text = ''
|
||||||
@@ -38,7 +58,6 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# User service to run the script that copies the Wallpaperstuff
|
# User service to run the script that copies the Wallpaperstuff
|
||||||
systemd.user.services.copyWallpapers = {
|
systemd.user.services.copyWallpapers = {
|
||||||
description = "Copy wallpapers from repo to ~/Wallpapers";
|
description = "Copy wallpapers from repo to ~/Wallpapers";
|
||||||
@@ -62,29 +81,4 @@ in
|
|||||||
};
|
};
|
||||||
wantedBy = [ "default.target" ];
|
wantedBy = [ "default.target" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
############################
|
|
||||||
# Random background per workspace at logon
|
|
||||||
############################
|
|
||||||
|
|
||||||
systemd.user.services.workspaceWallpapers = {
|
|
||||||
description = "Dynamic wallpapers per workspace for Hyprland";
|
|
||||||
after = [ "graphical-session.target" ];
|
|
||||||
wants = [ "graphical-session.target" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "simple";
|
|
||||||
ExecStart = "${homeDir}/Wallpapers/scripts/workspace-wallpapers.sh";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 5;
|
|
||||||
WorkingDirectory = homeDir;
|
|
||||||
Environment = [
|
|
||||||
"HYPRLAND_INSTANCE_SIGNATURE=${builtins.getEnv "HYPRLAND_INSTANCE_SIGNATURE"}"
|
|
||||||
"WAYLAND_DISPLAY=wayland-1"
|
|
||||||
"PATH=/run/current-system/sw/bin:/usr/bin:/bin"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
wantedBy = [ "default.target" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +1,31 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
let
|
let
|
||||||
# Use the config option defaultUser directly, fallback to "henrov"
|
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
assetPath = "${flakeRoot}/generated/.config/waybar";
|
sysName = "waybar";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/${sysName}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Install Waybar system-wide
|
|
||||||
environment.systemPackages = [ pkgs.waybar ];
|
environment.systemPackages = [ pkgs.waybar ];
|
||||||
|
|
||||||
home-manager.users = {
|
home-manager.users.${username} = {
|
||||||
${username} = {
|
home.activation.MakeWaybarMutable = {
|
||||||
home.file = {
|
after = [ "writeBoundary" ];
|
||||||
".config/waybar/config" = {
|
before = [];
|
||||||
text = builtins.readFile "${assetPath}/config";
|
data = ''
|
||||||
force = true;
|
rm -rf $HOME/.config/${sysName}
|
||||||
};
|
mkdir -p $HOME/.config/${sysName}
|
||||||
".config/waybar/style.css" = {
|
cp -r ${assetPath}/* $HOME/.config/${sysName}/
|
||||||
text = builtins.replaceStrings ["henrov"] [username] (builtins.readFile "${assetPath}/style.css");
|
chmod -R u+w $HOME/.config/${sysName}/
|
||||||
force = true;
|
find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
|
||||||
};
|
'';
|
||||||
".config/waybar/scripts/bluetooth-status.sh" = {
|
|
||||||
text = builtins.readFile "${assetPath}/scripts/bluetooth-status.sh";
|
|
||||||
force = true;
|
|
||||||
executable = true;
|
|
||||||
};
|
|
||||||
".config/waybar/scripts/hypr-workspaces.sh" = {
|
|
||||||
text = builtins.readFile "${assetPath}/scripts/hypr-workspaces.sh";
|
|
||||||
force = true;
|
|
||||||
executable = true;
|
|
||||||
};
|
|
||||||
".config/waybar/scripts/hypr-workspacesmenu.sh" = {
|
|
||||||
text = builtins.readFile "${assetPath}/scripts/hypr-workspacesmenu.sh";
|
|
||||||
force = true;
|
|
||||||
executable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Systemd user service for Waybar
|
|
||||||
systemd.user.services.waybar = {
|
systemd.user.services.waybar = {
|
||||||
description = "Waybar for Hyprland";
|
description = "Waybar for Hyprland";
|
||||||
after = [ "graphical-session.target" ];
|
after = [ "graphical-session.target" ];
|
||||||
|
wantedBy = [ "default.target" ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${pkgs.waybar}/bin/waybar";
|
ExecStart = "${pkgs.waybar}/bin/waybar";
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
@@ -51,7 +34,5 @@ in
|
|||||||
XDG_CURRENT_DESKTOP=Hyprland
|
XDG_CURRENT_DESKTOP=Hyprland
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
wantedBy = [ "default.target" ];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,44 +1,62 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
# Use the config option defaultUser directly, fallback to "henrov"
|
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
|
homeDir = "/home/${username}";
|
||||||
# Portal backends
|
basePortal = pkgs.xdg-desktop-portal-gtk;
|
||||||
basePortal = pkgs.xdg-desktop-portal-gtk; # full portal implementation
|
hyprlandPortal = pkgs.xdg-desktop-portal-hyprland;
|
||||||
hyprlandPortal = pkgs.xdg-desktop-portal-hyprland; # Hyprland screencast
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
#################################
|
#################################
|
||||||
# Enable XDG desktop portals system-wide
|
# XDG Desktop Portals (system)
|
||||||
#################################
|
#################################
|
||||||
xdg.portal.enable = true;
|
xdg.portal.enable = true;
|
||||||
|
xdg.portal.xdgOpenUsePortal = true;
|
||||||
# Base + Hyprland portals
|
xdg.portal.extraPortals = [
|
||||||
xdg.portal.extraPortals = [ basePortal hyprlandPortal ];
|
basePortal
|
||||||
|
hyprlandPortal
|
||||||
# Map screencast interface explicitly to Hyprland
|
];
|
||||||
xdg.portal.config = {
|
xdg.portal.config = {
|
||||||
"org.freedesktop.impl.portal.Screencast".backend = "hyprland";
|
common = {
|
||||||
|
default = [ "hyprland" "gtk" ];
|
||||||
|
};
|
||||||
|
hyprland = {
|
||||||
|
default = [ "hyprland" "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.Settings" = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
|
||||||
|
"org.freedesktop.impl.portal.Screenshot" = [ "hyprland" ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Install portal packages system-wide
|
# System packages
|
||||||
#################################
|
#################################
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
basePortal
|
basePortal
|
||||||
hyprlandPortal
|
hyprlandPortal
|
||||||
];
|
];
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Home Manager user configuration
|
# Home Manager user config
|
||||||
#################################
|
#################################
|
||||||
home-manager.users = {
|
home-manager.users.${username} = {
|
||||||
${username} = {
|
#################################
|
||||||
home.packages = [
|
# XDG user directories
|
||||||
basePortal
|
#################################
|
||||||
hyprlandPortal
|
xdg.userDirs = {
|
||||||
];
|
enable = true;
|
||||||
|
createDirectories = true;
|
||||||
|
desktop = null;
|
||||||
|
download = "${homeDir}/Downloads";
|
||||||
|
documents = "${homeDir}/Documents";
|
||||||
|
pictures = "${homeDir}/Pictures";
|
||||||
|
music = null;
|
||||||
|
publicShare = null;
|
||||||
|
templates = "${homeDir}/Experiments";
|
||||||
|
videos = "${homeDir}/Videos";
|
||||||
|
extraConfig = {
|
||||||
|
XDG_PROJECTS_DIR = "${homeDir}/Projects";
|
||||||
|
XDG_WORK_DIR = "${homeDir}/Work";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -8,5 +9,6 @@
|
|||||||
pulseaudio # PulseAudio daemon
|
pulseaudio # PulseAudio daemon
|
||||||
pavucontrol # GUI mixer
|
pavucontrol # GUI mixer
|
||||||
pamixer # CLI mixer
|
pamixer # CLI mixer
|
||||||
|
playerctl # Player controls
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
publish = {
|
||||||
|
enable = true;
|
||||||
|
addresses = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{ config, pkgs, flakeRoot, ... }:
|
|
||||||
let
|
|
||||||
username = "henrov"; # Replace with your username if needed
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home-manager.users = {
|
|
||||||
${username} = {
|
|
||||||
home.file = {
|
|
||||||
".config/shared/colors.css" = {
|
|
||||||
text = builtins.readFile "${flakeRoot}/generated/.config/shared/colors.css";
|
|
||||||
force = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, home-manager, ... }:
|
{ lib, config, pkgs, home-manager, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
############################
|
############################
|
||||||
# Bluetooth daemon
|
# Bluetooth daemon
|
||||||
############################
|
############################
|
||||||
@@ -12,4 +15,5 @@ in
|
|||||||
powerOnBoot = true;
|
powerOnBoot = true;
|
||||||
package = pkgs.bluez;
|
package = pkgs.bluez;
|
||||||
};
|
};
|
||||||
|
environment.systemPackages = with pkgs; [ blueman ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
let
|
||||||
|
colors = {
|
||||||
|
border = "#96cdd2";
|
||||||
|
crust = "#11111b";
|
||||||
|
mantle = "#181825";
|
||||||
|
base = "#1e1e2e";
|
||||||
|
surface0 = "#313244";
|
||||||
|
surface1 = "#45475a";
|
||||||
|
surface2 = "#585b70";
|
||||||
|
overlay0 = "#6c7086";
|
||||||
|
overlay1 = "#7f849c";
|
||||||
|
overlay2 = "#9399b2";
|
||||||
|
subtext0 = "#a6adc8";
|
||||||
|
subtext1 = "#bac2de";
|
||||||
|
text = "#cdd6f4";
|
||||||
|
rosewater = "#f5e0dc";
|
||||||
|
flamingo = "#f2cdcd";
|
||||||
|
pink = "#f5c2e7";
|
||||||
|
mauve = "#cba6f7";
|
||||||
|
red = "#f38ba8";
|
||||||
|
maroon = "#eba0ac";
|
||||||
|
peach = "#fab387";
|
||||||
|
yellow = "#f9e2af";
|
||||||
|
green = "#a6e3a1";
|
||||||
|
teal = "#94e2d5";
|
||||||
|
sapphire = "#74c7ec";
|
||||||
|
blue = "#89b4fa";
|
||||||
|
lavender = "#b4befe";
|
||||||
|
};
|
||||||
|
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
|
||||||
|
qmlContent = ''
|
||||||
|
pragma Singleton
|
||||||
|
// Catppuccin Mocha Palette - auto-generated, do not edit manually
|
||||||
|
import QtQuick
|
||||||
|
QtObject {
|
||||||
|
readonly property color baseAlpha: Qt.rgba(30/255, 30/255, 46/255, 0.9)
|
||||||
|
'' + lib.concatStringsSep "\n" (
|
||||||
|
lib.mapAttrsToList (name: value:
|
||||||
|
" readonly property color ${name}: \"${value}\""
|
||||||
|
) colors
|
||||||
|
) + "\n}";
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home-manager.users.${username} = {
|
||||||
|
home.file = {
|
||||||
|
".config/shared/css/colors.css" = {
|
||||||
|
source = "${flakeRoot}/generated/.config/shared/css/colors.css";
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
".config/quickshell/Colors.qml" = {
|
||||||
|
text = qmlContent;
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
".config/quickshell/powermenu/Colors.qml" = {
|
||||||
|
text = qmlContent;
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
".config/quickshell/powermenu/qmldir" = {
|
||||||
|
text = "singleton Colors 1.0 Colors.qml";
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,19 +1,33 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, flakeRoot, ... }:
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
username = config.defaultUser or "henrov";
|
username = config.defaultUser or "henrov";
|
||||||
scriptsPath = flakeRoot + "/generated/.config/scripts";
|
configPath = flakeRoot + "/generated/.config/shared/scripts";
|
||||||
|
allFiles = lib.filesystem.listFilesRecursive configPath;
|
||||||
|
|
||||||
|
toRelative = file:
|
||||||
|
let
|
||||||
|
base = toString flakeRoot + "/generated/";
|
||||||
|
relative = lib.removePrefix base (toString file);
|
||||||
|
in
|
||||||
|
builtins.unsafeDiscardStringContext relative;
|
||||||
|
|
||||||
|
isShellScript = file:
|
||||||
|
lib.hasSuffix ".sh" (toString file);
|
||||||
|
|
||||||
|
toFileEntry = file: {
|
||||||
|
name = toRelative file;
|
||||||
|
value = {
|
||||||
|
source = file;
|
||||||
|
executable = isShellScript file;
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
home-manager.users = {
|
home-manager.users = {
|
||||||
${username} = {
|
${username} = {
|
||||||
home.file = {
|
home.file = builtins.listToAttrs (map toFileEntry allFiles);
|
||||||
".config/scripts/update.sh" = {
|
|
||||||
text = builtins.readFile (flakeRoot + "/generated/.config/scripts/update.sh");
|
|
||||||
executable = true;
|
|
||||||
force = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Use nftables as the firewall backend
|
||||||
|
networking.nftables.enable = true;
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
filterForward = false; # don't filter forwarded traffic
|
||||||
|
# outbound is allowed by default UNLESS you've set:
|
||||||
|
|
||||||
|
# LAN-only ports — Wi-Fi interface
|
||||||
|
interfaces."wlan0" = {
|
||||||
|
allowedTCPPorts = [
|
||||||
|
22 # SSH
|
||||||
|
80 # allow HTTP globally for outbound
|
||||||
|
443 # allow HTTPS globally for outbound
|
||||||
|
631 # CUPS / IPP network printing
|
||||||
|
9100 # AppSocket/JetDirect printing
|
||||||
|
6566 # SANE network scanner
|
||||||
|
57621 # Spotify Connect
|
||||||
|
57622 # Spotify local file sync
|
||||||
|
];
|
||||||
|
allowedTCPPortRanges = [
|
||||||
|
{ from = 1714; to = 1764; } # KDE Connect
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
5353 # mDNS / Avahi (printer + device discovery)
|
||||||
|
631 # CUPS / IPP
|
||||||
|
67 # DHCP
|
||||||
|
123 # NTP time sync
|
||||||
|
1900 # UPnP device discovery
|
||||||
|
57621 # Spotify Connect
|
||||||
|
];
|
||||||
|
allowedUDPPortRanges = [
|
||||||
|
{ from = 1714; to = 1764; } # KDE Connect
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# LAN-only ports — ethernet (ready for when you plug in)
|
||||||
|
interfaces."enp0s31f6" = {
|
||||||
|
allowedTCPPorts = [
|
||||||
|
631 # CUPS / IPP network printing
|
||||||
|
9100 # AppSocket/JetDirect printing
|
||||||
|
6566 # SANE network scanner
|
||||||
|
57621 # Spotify Connect
|
||||||
|
57622 # Spotify local file sync
|
||||||
|
];
|
||||||
|
allowedTCPPortRanges = [
|
||||||
|
{ from = 1714; to = 1764; } # KDE Connect
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
5353 # mDNS / Avahi (printer + device discovery)
|
||||||
|
631 # CUPS / IPP
|
||||||
|
67 # DHCP
|
||||||
|
123 # NTP time sync
|
||||||
|
1900 # UPnP device discovery
|
||||||
|
57621 # Spotify Connect
|
||||||
|
];
|
||||||
|
allowedUDPPortRanges = [
|
||||||
|
{ from = 1714; to = 1764; } # KDE Connect
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# CLI tool for temporary rule changes without rebuilding
|
||||||
|
# Usage: sudo nixos-firewall-tool open tcp 8080
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
nixos-firewall-tool
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
basePath = "${flakeRoot}/generated/.config";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/hypr";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
#################################
|
||||||
|
# Install hypridle system-wide
|
||||||
|
#################################
|
||||||
|
environment.systemPackages = [ pkgs.hypridle ];
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Deploy config
|
||||||
|
#################################
|
||||||
|
home-manager.users = {
|
||||||
|
${username} = {
|
||||||
|
home.file = {
|
||||||
|
".config/hypr/hypridle.conf" = {
|
||||||
|
text = builtins.readFile "${assetPath}/hypridle.conf";
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Systemd user service
|
||||||
|
#################################
|
||||||
|
systemd.user.services.hypridle = {
|
||||||
|
description = "Hypridle (Hyprland idle daemon)";
|
||||||
|
after = [ "hyprland-session.target" ];
|
||||||
|
bindsTo = [ "hyprland-session.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.hypridle}/bin/hypridle";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = "5s";
|
||||||
|
Environment = [
|
||||||
|
"HOME=/home/${username}"
|
||||||
|
"WAYLAND_DISPLAY=wayland-1"
|
||||||
|
"XDG_RUNTIME_DIR=/run/user/1000"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wantedBy = [ "hyprland-session.target" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
basePath = "${flakeRoot}/generated/.config";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/hypr";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
#################################
|
||||||
|
# Install hyprlock system-wide
|
||||||
|
#################################
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.hyprlock
|
||||||
|
];
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Deploy configuration file
|
||||||
|
#################################
|
||||||
|
home-manager.users = {
|
||||||
|
${username} = {
|
||||||
|
home.file = {
|
||||||
|
".config/hypr/hyprlock.conf" = {
|
||||||
|
text = builtins.readFile "${assetPath}/hyprlock.conf";
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Optional: helper systemd user service (manual start use)
|
||||||
|
#################################
|
||||||
|
systemd.user.services.hyprlock = {
|
||||||
|
description = "Hyprlock (manual lock session)";
|
||||||
|
after = [ "graphical-session.target" ];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.hyprlock}/bin/hyprlock";
|
||||||
|
Restart = "no";
|
||||||
|
Environment = ''
|
||||||
|
WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"}
|
||||||
|
XDG_CURRENT_DESKTOP=Hyprland
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
wantedBy = [ ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,17 +1,15 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet";
|
tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet";
|
||||||
sessionsDir = "${pkgs.hyprland}/share/wayland-sessions";
|
sessionsDir = "${pkgs.uwsm}/share/wayland-sessions";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
#################################
|
#################################
|
||||||
# Greetd (tuigreet)
|
# Greetd (tuigreet)
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
services.greetd = {
|
services.greetd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
default_session = {
|
default_session = {
|
||||||
command = ''
|
command = ''
|
||||||
@@ -20,24 +18,21 @@ in
|
|||||||
--remember \
|
--remember \
|
||||||
--remember-session \
|
--remember-session \
|
||||||
--sessions ${sessionsDir} \
|
--sessions ${sessionsDir} \
|
||||||
--cmd "start-hyprland"
|
--cmd "uwsm start -e -D Hyprland hyprland.desktop"
|
||||||
'';
|
'';
|
||||||
user = "greeter";
|
user = "greeter";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# Fix TTY / boot noise issues
|
# Fix TTY / boot noise issues
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
systemd.services.greetd.serviceConfig = {
|
systemd.services.greetd.serviceConfig = {
|
||||||
Type = "idle";
|
Type = "idle";
|
||||||
StandardInput = "tty";
|
StandardInput = "tty";
|
||||||
StandardOutput = "tty";
|
StandardOutput = "tty";
|
||||||
StandardError = "journal";
|
StandardError = "journal";
|
||||||
|
TTYPath = "/dev/tty1";
|
||||||
# Prevent boot log spam on tty
|
|
||||||
TTYReset = true;
|
TTYReset = true;
|
||||||
TTYVHangup = true;
|
TTYVHangup = true;
|
||||||
TTYVTDisallocate = true;
|
TTYVTDisallocate = true;
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -8,8 +9,6 @@
|
|||||||
# Let DHCP be default unless overridden elsewhere
|
# Let DHCP be default unless overridden elsewhere
|
||||||
useDHCP = lib.mkDefault true;
|
useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
# Hostname comes from host.nix, do NOT redefine here
|
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
# NetworkManager (primary stack)
|
# NetworkManager (primary stack)
|
||||||
#################################
|
#################################
|
||||||
@@ -27,20 +26,6 @@
|
|||||||
# Allow user control via NM / CLI
|
# Allow user control via NM / CLI
|
||||||
settings.General.EnableNetworkConfiguration = true;
|
settings.General.EnableNetworkConfiguration = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
#################################
|
|
||||||
# Firewall
|
|
||||||
#################################
|
|
||||||
firewall = {
|
|
||||||
enable = true;
|
|
||||||
# KDE Connect support
|
|
||||||
allowedTCPPortRanges = [
|
|
||||||
{ from = 1714; to = 1764; }
|
|
||||||
];
|
|
||||||
allowedUDPPortRanges = [
|
|
||||||
{ from = 1714; to = 1764; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
@@ -50,5 +35,7 @@
|
|||||||
pkgs.networkmanager
|
pkgs.networkmanager
|
||||||
pkgs.linux-firmware
|
pkgs.linux-firmware
|
||||||
pkgs.networkmanagerapplet
|
pkgs.networkmanagerapplet
|
||||||
|
pkgs.networkmanager_dmenu
|
||||||
|
# pkgs.iwgtk
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, ... }:
|
{ lib, config, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
experimental-features = [ "nix-command" "flakes" ];
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
download-buffer-size = 536870912; # 512 MB
|
download-buffer-size = 536870912; # 512 MB
|
||||||
cores = 2;
|
cores = 8;
|
||||||
max-jobs = 1;
|
max-jobs = "auto";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nix.gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 30d";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.loader.systemd-boot.configurationLimit = 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
scriptSrc = "${flakeRoot}/generated/.config/shared/scripts/numlock-check.sh";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.numlockx pkgs.libinput ];
|
||||||
|
|
||||||
|
home-manager.users.${username} = {
|
||||||
|
home.activation.installNumlockScript = {
|
||||||
|
after = [ "writeBoundary" ];
|
||||||
|
before = [];
|
||||||
|
data = ''
|
||||||
|
mkdir -p $HOME/.config/shared/scripts
|
||||||
|
cp ${scriptSrc} $HOME/.config/shared/scripts/numlock-check.sh
|
||||||
|
chmod u+x $HOME/.config/shared/scripts/numlock-check.sh
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.numlock-check = {
|
||||||
|
description = "Check and set numlock based on keyboard count";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = "%h/.config/shared/scripts/numlock-check.sh";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.timers.numlock-check = {
|
||||||
|
description = "Run numlock check periodically";
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = "5s";
|
||||||
|
OnUnitActiveSec = "10s";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ pkgs, lib, config, flakeRoot, quickshell, ... }:
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
sysName = "quickshell";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/${sysName}";
|
||||||
|
quickshellPkg = quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
quickshellPkg
|
||||||
|
qt6.qtdeclarative
|
||||||
|
qt6.qttools
|
||||||
|
qt6.qtsvg
|
||||||
|
qt6.qtimageformats
|
||||||
|
qt6.qtmultimedia
|
||||||
|
qt6.qt5compat
|
||||||
|
];
|
||||||
|
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
platformTheme = "qt5ct";
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.${username} = {
|
||||||
|
home.activation.quickshellMutableFiles = {
|
||||||
|
after = [ "writeBoundary" ];
|
||||||
|
before = [];
|
||||||
|
data = ''
|
||||||
|
rm -rf $HOME/.config/${sysName}
|
||||||
|
mkdir -p $HOME/.config/${sysName}
|
||||||
|
cp -r ${assetPath}/* $HOME/.config/${sysName}/
|
||||||
|
chmod -R u+w $HOME/.config/${sysName}/
|
||||||
|
find $HOME/.config/${sysName}/ -name "*.sh" -exec chmod +x {} \;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
|
{ lib, config, pkgs, flakeRoot, ... }:
|
||||||
|
let
|
||||||
|
username = config.defaultUser or "henrov";
|
||||||
|
assetPath = "${flakeRoot}/generated/.config/swaync";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.swaynotificationcenter pkgs.libnotify ];
|
||||||
|
|
||||||
|
home-manager.users.${username} = {
|
||||||
|
# Do NOT enable services.swaync — it would claim the config files
|
||||||
|
# and conflict with our home.file entries below.
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/swaync/config.json" = {
|
||||||
|
text = builtins.readFile "${assetPath}/config.json";
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
".config/swaync/style.css" = {
|
||||||
|
text = builtins.replaceStrings ["henrov"] [username] (builtins.readFile "${assetPath}/style.css");
|
||||||
|
force = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Autostart swaync as a systemd user service instead
|
||||||
|
systemd.user.services.swaync = {
|
||||||
|
description = "SwayNotificationCenter";
|
||||||
|
after = [ "graphical-session.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync";
|
||||||
|
Restart = "always";
|
||||||
|
Environment = [
|
||||||
|
"WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-1"}"
|
||||||
|
"XDG_CURRENT_DESKTOP=Hyprland"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -11,7 +12,7 @@ in
|
|||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
home = "/home/${username}";
|
home = "/home/${username}";
|
||||||
hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/";
|
hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/";
|
||||||
extraGroups = [ "wheel" "networkmanager" "bluetooth" ];
|
extraGroups = [ "wheel" "networkmanager" "bluetooth" "input" ];
|
||||||
ignoreShellProgramCheck = true; # <-- avoids the assertion
|
ignoreShellProgramCheck = true; # <-- avoids the assertion
|
||||||
shell = pkgs.zsh;
|
shell = pkgs.zsh;
|
||||||
};
|
};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user