Compare commits
571 Commits
0acbe579e4
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 |
+2895
-920
File diff suppressed because it is too large
Load Diff
+2462
-604
File diff suppressed because it is too large
Load Diff
Generated
+39
-18
@@ -109,11 +109,11 @@
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775841973,
|
||||
"narHash": "sha256-Fr3lUUcptivEeRyaKLPPgDrQdIMzyZwVVfXPN/IXMgI=",
|
||||
"lastModified": 1776362623,
|
||||
"narHash": "sha256-GT9GB1EWzAS9sVxeqL8zEdXpBJFFp/qoklaVeLzL76o=",
|
||||
"owner": "nix-community",
|
||||
"repo": "emacs-overlay",
|
||||
"rev": "8d4d36e62a3715ed453dc7b53f58454861e6b7fb",
|
||||
"rev": "1a0129b355cbc765ae868529997175a5af59959d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -252,11 +252,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775781825,
|
||||
"narHash": "sha256-L5yKTpR+alrZU2XYYvIxCeCP4LBHU5jhwSj7H1VAavg=",
|
||||
"lastModified": 1776184304,
|
||||
"narHash": "sha256-No6QGBmIv5ChiwKCcbkxjdEQ/RO2ZS1gD7SFy6EZ7rc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "e35c39fca04fee829cecdf839a50eb9b54d8a701",
|
||||
"rev": "3c7524c68348ef79ce48308e0978611a050089b2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -340,11 +340,11 @@
|
||||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775828308,
|
||||
"narHash": "sha256-XsijqtwDQd8pf/PweiGGuX7O1250f3YOchQ+oGm0eCc=",
|
||||
"lastModified": 1776365273,
|
||||
"narHash": "sha256-Tzjt/E5JNuo07CQ/PPiY5zh11PqWzd07A/3mSZvtm0Y=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"rev": "f7755322fc515108cc9eed8113c09492d4a352c1",
|
||||
"rev": "b5ea887f072fa055cf23ec389ed81e3ee4c5319a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -617,11 +617,11 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1775595990,
|
||||
"narHash": "sha256-OEf7YqhF9IjJFYZJyuhAypgU+VsRB5lD4DuiMws5Ltc=",
|
||||
"lastModified": 1776067740,
|
||||
"narHash": "sha256-B35lpsqnSZwn1Lmz06BpwF7atPgFmUgw1l8KAV3zpVQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4e92bbcdb030f3b4782be4751dc08e6b6cb6ccf2",
|
||||
"rev": "7e495b747b51f95ae15e74377c5ce1fe69c1765f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -633,11 +633,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1775710090,
|
||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
||||
"lastModified": 1776169885,
|
||||
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
||||
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -695,6 +695,26 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"quickshell": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776066068,
|
||||
"narHash": "sha256-SwKVkgEsqsp5ki9m7fqvhncb5MjvH1hlZqbn3s+x/Uk=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "fb08eced449e87e47321e95beeb890a63d2c67bd",
|
||||
"revCount": 801,
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"emacs-overlay": "emacs-overlay",
|
||||
@@ -703,6 +723,7 @@
|
||||
"hyprland": "hyprland",
|
||||
"import-tree": "import-tree",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"quickshell": "quickshell",
|
||||
"stylix": "stylix",
|
||||
"zen-browser": "zen-browser"
|
||||
}
|
||||
@@ -727,11 +748,11 @@
|
||||
"tinted-zed": "tinted-zed"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775429060,
|
||||
"narHash": "sha256-wbFF5cRxQOCzL/wHOKYm21t5AHPH2Lfp0mVPCOAvEoc=",
|
||||
"lastModified": 1776170745,
|
||||
"narHash": "sha256-Tl1aZVP5EIlT+k0+iAKH018GLHJpLz3hhJ0LNQOWxCc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "stylix",
|
||||
"rev": "d27951a6539951d87f75cf0a7cda8a3a24016019",
|
||||
"rev": "e3861617645a43c9bbefde1aa6ac54dd0a44bfa9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
+39
-13
@@ -1,58 +1,84 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
# --- 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";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
quickshell = {
|
||||
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
import-tree.url = "github:vic/import-tree";
|
||||
|
||||
stylix = {
|
||||
url = "github:nix-community/stylix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
flatpak = {
|
||||
url = "github:gmodena/nix-flatpak";
|
||||
};
|
||||
|
||||
emacs-overlay = {
|
||||
url = "github:nix-community/emacs-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
zen-browser = {
|
||||
url = "github:youwen5/zen-browser-flake";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, home-manager, import-tree, stylix, hyprland, emacs-overlay, zen-browser, flatpak, ... }:
|
||||
outputs = { self, nixpkgs, home-manager, import-tree, stylix, hyprland,
|
||||
emacs-overlay, zen-browser, flatpak, ... }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
flakeRoot = self;
|
||||
buildUser = "henrov";
|
||||
repoPath = "/home/${buildUser}/Repos/nixos/Droidnix";
|
||||
mutableConfigPath = "${repoPath}/generated/.config";
|
||||
in {
|
||||
nixosConfigurations = {
|
||||
traveldroid = nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
|
||||
modules = [
|
||||
({ ... }: {
|
||||
nixpkgs.overlays = [ emacs-overlay.overlays.default ];
|
||||
})
|
||||
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
|
||||
buildUser
|
||||
repoPath
|
||||
mutableConfigPath
|
||||
;
|
||||
};
|
||||
}
|
||||
./generated/hosts/traveldroid/host.nix
|
||||
./generated/users/henrov.nix
|
||||
];
|
||||
specialArgs = {
|
||||
inherit flakeRoot;
|
||||
inherit home-manager import-tree stylix hyprland zen-browser;
|
||||
inherit
|
||||
flakeRoot
|
||||
home-manager
|
||||
import-tree
|
||||
stylix
|
||||
hyprland
|
||||
zen-browser
|
||||
buildUser
|
||||
repoPath
|
||||
mutableConfigPath
|
||||
;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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 -*-
|
||||
;;; Commentary:
|
||||
;;; 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 -*-
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# ./assets/conf/desktop/hypr/animations.conf
|
||||
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
animations {
|
||||
enabled = yes
|
||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
# Keyboard and mouse settings
|
||||
input {
|
||||
numlock_by_default = true
|
||||
touchpad {
|
||||
natural_scroll = true
|
||||
tap-to-click = true
|
||||
drag_lock = true
|
||||
}
|
||||
}
|
||||
# Scrolling modifier settings
|
||||
# Touchpad settings (applies to all touchpads)
|
||||
# Focus settings
|
||||
|
||||
@@ -1,30 +1,54 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
$mainMod = SUPER
|
||||
|
||||
# Terminal / launcher / kill / reload
|
||||
bind = $mainMod, E, exec, thunar
|
||||
bind = $mainMod, RETURN, exec, kitty
|
||||
bind = $mainMod, Space, exec, wofi --show drun --style ~/.config/wofi/style.css
|
||||
bind = ALT, Space, exec, wofi --show drun
|
||||
# launcher / kill / reload
|
||||
|
||||
bind = $mainMod, Space, exec, ~/.config/scripts/wofi-launcher.sh
|
||||
bind = ALT, Space, exec, ~/.config/scripts/wofi-launcher.sh
|
||||
bind = $mainMod, Q, killactive,
|
||||
bind = $mainMod SHIFT, Q, exit,
|
||||
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
|
||||
|
||||
# Flameshot keybindings
|
||||
# bind = $mainMod SHIFT, P, exec, flameshot full -p ~/Pictures/Screenshots -c
|
||||
# bind = $mainMod SHIFT, S, exec, flameshot gui 2>/dev/null
|
||||
# bind = , XF86Screenshot, exec, flameshot gui 2>/dev/null
|
||||
# bind = $mainMod ALT, P, exec, flameshot full -d 5000 -p ~/Pictures/Screenshots -c
|
||||
# bind = $mainMod CTRL, P, exec, flameshot screen -n 0 -p ~/Pictures/Screenshots -c
|
||||
|
||||
# Switch windows
|
||||
bind = ALT, TAB, cyclenext,
|
||||
# bind = ALT SHIFT, TAB, cyclenext prev
|
||||
bind = ALT, 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
|
||||
|
||||
bind = $mainMod, T , exec, qs -c layoutswitcher
|
||||
|
||||
# Hyprscrolling
|
||||
bind = $mainMod, period, layoutmsg, move +col
|
||||
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)
|
||||
bind = $mainMod, S, togglegroup
|
||||
# Cycle tabs in the group
|
||||
bind = $mainMod, L, changegroupactive, f
|
||||
bind = $mainMod, H, changegroupactive, b
|
||||
bind = $mainMod, T, exec, ~/.config/hypr/scripts/layout-selector.sh
|
||||
bind = $mainMod, bracketright, changegroupactive, f
|
||||
bind = $mainMod, bracketleft, changegroupactive, b
|
||||
|
||||
# Focus movement
|
||||
bind = $mainMod, H, movefocus, l
|
||||
@@ -88,12 +112,6 @@ bind = $mainMod, mouse_up, workspace, e-1
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
#########################
|
||||
# Screenshots
|
||||
#########################
|
||||
bind = $mainMod SHIFT, s, exec, flameshot gui
|
||||
bind = , XF86Screenshot, exec, flameshot full -c -p ~/Pictures/Screenshots
|
||||
|
||||
#########################
|
||||
# Audio (pamixer)
|
||||
#########################
|
||||
@@ -105,7 +123,7 @@ bind = , XF86AudioMicMute, exec, pamixer --default-source -t
|
||||
#########################
|
||||
# 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 = , XF86AudioNext, exec, playerctl next
|
||||
bind = , XF86AudioPrev, exec, playerctl previous
|
||||
@@ -125,27 +143,24 @@ bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%
|
||||
bind = , XF86Sleep, exec, systemctl suspend
|
||||
bind = , XF86PowerOff, exec, systemctl poweroff
|
||||
bind = , XF86WakeUp, exec, systemctl suspend
|
||||
bind = $mainMod, L, 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
|
||||
bind = , XF86ScreenSaver, exec, loginctl lock-session
|
||||
|
||||
#########################
|
||||
# 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, S, exec, spotify
|
||||
bind = $mainMod, Z, exec, zeditor
|
||||
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
|
||||
bind = , workspace, exec, ~/.config/scripts/set-workspace-wallpaper.sh
|
||||
|
||||
#########################
|
||||
# System stuff
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
# --- 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 = hypridleconfig/hypr/exec-once
|
||||
exec-once = systemd-run --user --scope --unit=elephant elephant
|
||||
exec-once = waybar
|
||||
exec-once = systemctl --user start --no-block xdg-desktop-portal-hyprland
|
||||
exec-once = systemctl --user start --no-block xdg-desktop-portal
|
||||
exec-once = hypridle
|
||||
exec-once = awww-daemon
|
||||
exec-once = awww img ~/Wallpapers/pictures/01.jpg
|
||||
exec-once = ~/.config/hypr/scripts/set-workspace-wallpaper.sh
|
||||
exec-once = ~/.config/hypr/scripts/workspace-listener.sh
|
||||
exec-once = ~/.config/scripts/set-workspace-wallpaper.sh
|
||||
exec-once = ~/.config/scripts/workspace-listener.sh
|
||||
exec-once = /run/current-system/sw/libexec/polkit-gnome-authentication-agent-1
|
||||
exec-once = nextcloud --background
|
||||
# exec-once = QT_QPA_PLATFORM=wayland flameshot 2> >(grep -v "wlroots" >&2)
|
||||
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 {
|
||||
lock_cmd = hyprlock
|
||||
before_sleep_cmd = hyprlock
|
||||
after_sleep_cmd = hyprctl dispatch dpms on
|
||||
ignore_dbus_inhibit = false
|
||||
}
|
||||
@@ -14,3 +16,8 @@ listener {
|
||||
on-timeout = hyprctl dispatch dpms off
|
||||
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 = ./bindings.conf
|
||||
source = ./behaviour.conf
|
||||
@@ -8,30 +9,3 @@ source = ./layout.conf
|
||||
source = ./monitor-rules.conf
|
||||
source = ./window-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 {
|
||||
grace = 2
|
||||
ignore_empty_input = true
|
||||
grace = 2
|
||||
hide_cursor = true
|
||||
}
|
||||
|
||||
background {
|
||||
path = ~/.config/hypr/lock.png
|
||||
blur_passes = 2
|
||||
blur_size = 6
|
||||
monitor =
|
||||
path = screenshot
|
||||
blur_passes = 3
|
||||
blur_size = 8
|
||||
}
|
||||
|
||||
input-field {
|
||||
size = 320, 60
|
||||
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
|
||||
}
|
||||
monitor =
|
||||
size = 250, 50
|
||||
position = 0, -80
|
||||
outline_thickness = 2
|
||||
|
||||
label {
|
||||
text = $TIME
|
||||
font_size = 72
|
||||
position = 0, 120
|
||||
halign = center
|
||||
valign = center
|
||||
dots_center = true
|
||||
fade_on_empty = false
|
||||
}
|
||||
|
||||
@@ -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 = 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-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
|
||||
monitor=DP-1,3840x1080@144,1920x0,1
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
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
|
||||
windowrule {
|
||||
name = Network-Manager-editor
|
||||
@@ -16,12 +18,58 @@ windowrule {
|
||||
size = 900 700
|
||||
}
|
||||
|
||||
|
||||
# Blueman Manager
|
||||
windowrule {
|
||||
name = blueman
|
||||
match:class = .blueman-manager-leaderped
|
||||
match:class = .blueman-manager-wrapped
|
||||
float = on
|
||||
move = move onscreen 100%-w 0
|
||||
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 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
|
||||
# (match: fields do not support $variables, hardcoded intentionally)
|
||||
windowrule {
|
||||
name = wofi
|
||||
match:class = ^(wofi)$
|
||||
border_color = rgb(89b4fa) rgb(a6e3a1) 45deg
|
||||
rounding = 14
|
||||
}
|
||||
|
||||
@@ -1,15 +1,7 @@
|
||||
#Load random wallpaper
|
||||
workspacecreated = exec $HOME/.local/bin/wallpaper-sync-and-set.sh $workspace
|
||||
|
||||
|
||||
# Workspace definitions (modern syntax)
|
||||
workspace = 1
|
||||
workspace = 2
|
||||
workspace = 3
|
||||
workspace = 4
|
||||
workspace = 5
|
||||
workspace = 6
|
||||
workspace = 7
|
||||
workspace = 8
|
||||
workspace = 9
|
||||
workspace = 10
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
workspace = 1, monitor:eDP-1 #, layout:master
|
||||
workspace = 2, monitor:eDP-1 #, layout:monocle
|
||||
workspace = 3, monitor:eDP-1 #, layout:master
|
||||
workspace = 4, monitor:DP-1 #, layout:scrolling
|
||||
workspace = 5, monitor:DP-1 #, layout:dwindle
|
||||
workspace = 6, monitor:DP-1 #, layout:dwindle
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+10
@@ -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
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
bt_connected=""
|
||||
while read -r _ mac name_rest; do
|
||||
if [ "$(bluetoothctl info "$mac" | awk '/Connected:/ {print $2}')" = "yes" ]; then
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
# Get focused monitor name
|
||||
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .name')
|
||||
monitor="${WAYBAR_OUTPUT_NAME:-$focused_monitor}"
|
||||
|
||||
# Hide if not focused monitor
|
||||
if [ "$monitor" != "$focused_monitor" ]; then
|
||||
jq -c -n '{text:"", class:"hidden"}'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 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' -)
|
||||
|
||||
jq -c -n \
|
||||
--arg text "$count" \
|
||||
--arg tooltip "$tooltip" \
|
||||
--arg class "active" \
|
||||
'{text:$text, tooltip:$tooltip, class:$class}'
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/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')
|
||||
clients=$(hyprctl clients -j | jq -r \
|
||||
".[] | select(.workspace.id==$active_ws) | \"\(.address)|\(.title)\"")
|
||||
|
||||
choice=$(echo "$clients" | cut -d'|' -f2 \
|
||||
| wofi --dmenu \
|
||||
--style ~/.config/wofi/style.css \
|
||||
--allow-images=false \
|
||||
--prompt "Active windows ...")
|
||||
|
||||
[ -z "$choice" ] && exit 0
|
||||
addr=$(echo "$clients" | grep "|$choice" | head -n1 | cut -d'|' -f1)
|
||||
hyprctl dispatch focuswindow address:"$addr"
|
||||
+17
@@ -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
|
||||
Executable
+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}'
|
||||
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
#
|
||||
# Launch a power menu
|
||||
#
|
||||
# Requires fzf and systemd (loginctl, systemctl)
|
||||
#
|
||||
# Author: Jesse Mirabel <sejjymvm@gmail.com>
|
||||
# Date: August 19, 2025
|
||||
# License: MIT
|
||||
|
||||
main() {
|
||||
local list=(
|
||||
" Lock"
|
||||
" Shutdown"
|
||||
" Reboot"
|
||||
" Logout"
|
||||
" Hibernate"
|
||||
" Suspend"
|
||||
)
|
||||
|
||||
local options=(
|
||||
"--border=sharp"
|
||||
"--border-label= Power Menu "
|
||||
"--cycle"
|
||||
"--ghost=Search"
|
||||
"--height=~100%"
|
||||
"--highlight-line"
|
||||
"--info=inline-right"
|
||||
"--pointer="
|
||||
"--reverse"
|
||||
)
|
||||
|
||||
local selected
|
||||
selected=$(printf "%s\n" "${list[@]}" | fzf "${options[@]}")
|
||||
|
||||
case $selected in
|
||||
Lock) loginctl lock-session ;;
|
||||
Shutdown) systemctl poweroff ;;
|
||||
Reboot) systemctl reboot ;;
|
||||
Logout) loginctl terminate-session "$XDG_SESSION_ID" ;;
|
||||
Hibernate) systemctl hibernate ;;
|
||||
Suspend) systemctl suspend ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
main
|
||||
Regular → Executable
+8
-1
@@ -1,11 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
set -e
|
||||
REPO="/home/henrov/Repos/nixos/Droidnix"
|
||||
REPO="/home/$USER/Repos/nixos/Droidnix"
|
||||
HOSTNAME="$(hostname)"
|
||||
cd "$REPO"
|
||||
|
||||
echo "🔧 Fixing ownership..."
|
||||
sudo chown "$USER":"$USER" flake.lock 2>/dev/null || true
|
||||
|
||||
echo "🔄 Updating flake..."
|
||||
nix flake update
|
||||
|
||||
echo "🏗 Rebuilding NixOS..."
|
||||
sudo nixos-rebuild switch --flake ".#$HOSTNAME"
|
||||
|
||||
echo "📦 Updating Flatpaks..."
|
||||
flatpak update -y
|
||||
|
||||
+8
@@ -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,8 +1,10 @@
|
||||
/* --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. --- */
|
||||
/* Catppuccin Mocha Palette */
|
||||
@define-color border #97C9E6;
|
||||
@define-color crust #11111b;
|
||||
@define-color mantle #181825;
|
||||
@define-color base #1e1e2e;
|
||||
@define-color base-alpha rgba(30, 30, 46, 0.9);
|
||||
@define-color base-alpha rgba(30, 30, 46, 0.2);
|
||||
|
||||
@define-color surface0 #313244;
|
||||
@define-color surface1 #45475a;
|
||||
|
||||
@@ -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'
|
||||
|
||||
format = """
|
||||
@@ -164,7 +165,7 @@ format = " in $duration "
|
||||
style = "bg:lavender"
|
||||
disabled = false
|
||||
show_notifications = true
|
||||
min_time_to_notify = 45000
|
||||
min_time_to_notify = 60000
|
||||
|
||||
[palettes.catppuccin_mocha]
|
||||
rosewater = "#f5e0dc"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
enable = true;
|
||||
base16Scheme = ../../../assets/system/theming/stylix/catppuccin-mocha.yaml;
|
||||
image = ../../../assets/hyprland/wallpaperstuff/pictures/wall1.jpg;
|
||||
|
||||
@@ -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/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,327 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
},
|
||||
|
||||
"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/scripts/hypr-workspaces.sh",
|
||||
"interval": 2,
|
||||
"return-type": "json",
|
||||
"on-click": "~/.config/scripts/hypr-workspacesmenu.sh",
|
||||
"tooltip": true
|
||||
},
|
||||
|
||||
"custom/media": {
|
||||
"exec": "~/.config/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/scripts/bluetooth-status.sh",
|
||||
"interval": 5,
|
||||
"return-type": "json",
|
||||
"on-click": "blueman-manager",
|
||||
"format": "{}"
|
||||
},
|
||||
|
||||
"custom/batterywarn": {
|
||||
"exec": "~/.config/scripts/batterywarn.sh",
|
||||
"interval": 60,
|
||||
"format": "{}"
|
||||
},
|
||||
|
||||
"custom/kdeconnect": {
|
||||
"format": "{name} {battery}% ",
|
||||
"interval": 10,
|
||||
"exec": "~/.config/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": ["", "", "", "", " "]
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Get active workspace ID
|
||||
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
|
||||
# Get clients in active workspace
|
||||
clients=$(hyprctl clients -j | jq -r \
|
||||
".[] | select(.workspace.id==$active_ws) | \"\(.title)\"")
|
||||
# Count clients
|
||||
count=$(echo "$clients" | grep -c .)
|
||||
# If no clients → hide module
|
||||
if [ "$count" -eq 0 ]; then
|
||||
jq -c -n '{text:"", class:"hidden"}'
|
||||
exit 0
|
||||
fi
|
||||
# Build tooltip (newline separated)
|
||||
tooltip=$(echo "$clients" | sed 's/^/• /' | paste -sd '\n' -)
|
||||
# Output JSON
|
||||
jq -c -n \
|
||||
--arg text "$count" \
|
||||
--arg tooltip "$tooltip" \
|
||||
--arg class "active" \
|
||||
'{text:$text, tooltip:$tooltip, class:$class}'
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
active_ws=$(hyprctl activeworkspace -j | jq -r '.id')
|
||||
clients=$(hyprctl clients -j | jq -r \
|
||||
".[] | select(.workspace.id==$active_ws) | \"\(.address)|\(.title)\"")
|
||||
choice=$(echo "$clients" | cut -d'|' -f2 | wofi -dmenu -j -p "Active apps" --style ~/.config/wofi/style.css)
|
||||
[ -z "$choice" ] && exit 0
|
||||
addr=$(echo "$clients" | grep "|$choice" | head -n1 | cut -d'|' -f1)
|
||||
hyprctl dispatch focuswindow address:$addr
|
||||
@@ -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/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]
|
||||
language = en
|
||||
backend = awww
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
[global]
|
||||
allow_images = 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
|
||||
anchor = center
|
||||
|
||||
@@ -26,15 +16,4 @@ cycle = true
|
||||
hide_scroll = 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 = > ...
|
||||
|
||||
@@ -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/colors.css";
|
||||
|
||||
/* Global styles */
|
||||
* {
|
||||
background-color: transparent;
|
||||
color: @text;
|
||||
@@ -8,79 +8,81 @@
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
/* --- DRUN menu (full size) --- */
|
||||
#main {
|
||||
background:
|
||||
linear-gradient(@base-alpha, @base-alpha) padding-box, /* Inner fill */
|
||||
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;
|
||||
#window {
|
||||
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||||
border-radius: 28px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
/* --- DMENU menu --- */
|
||||
#dmenu {
|
||||
background:
|
||||
linear-gradient(@base-alpha, @base-alpha) padding-box,
|
||||
linear-gradient(45deg, @blue, @green) border-box;
|
||||
border: 2px solid transparent;
|
||||
border-radius: 30px;
|
||||
padding: 10px; /* smaller padding for half-height */
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
|
||||
width: 800px;
|
||||
height: 150px;
|
||||
#outer-box {
|
||||
background-color: rgba(30, 30, 46, 0.98); /* almost solid */
|
||||
border-radius: 26px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Input field */
|
||||
#input {
|
||||
background-color: @surface0;
|
||||
background-color: @surface1; /* stronger than surface0 */
|
||||
color: @text;
|
||||
border: 1px solid @surface1;
|
||||
border-radius: 30px;
|
||||
padding: 5px 10px;
|
||||
border: 1px solid @surface2;
|
||||
border-radius: 18px;
|
||||
padding: 10px 14px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Entries */
|
||||
#input:focus {
|
||||
border: 1px solid @blue;
|
||||
background-color: @surface2;
|
||||
}
|
||||
|
||||
#entry {
|
||||
background-color: rgba(200,200,200,0.2);
|
||||
color: @text;
|
||||
border-radius: 30px;
|
||||
padding: 5px 10px;
|
||||
background-color: rgba(0, 0, 0, 0.35);
|
||||
color: @subtext1;
|
||||
border-radius: 18px;
|
||||
padding: 10px 14px;
|
||||
margin: 2px 0;
|
||||
border: 2px solid transparent; /* needed for gradient on selection */
|
||||
transition: all 0.2s ease;
|
||||
transition: all 0.15s 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:selected {
|
||||
background:
|
||||
linear-gradient(@base-alpha, @base-alpha) padding-box,
|
||||
linear-gradient(45deg, @blue, @green) border-box;
|
||||
#entry:hover {
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
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 {
|
||||
background-color: @surface0;
|
||||
border-radius: 30px;
|
||||
width: 8px;
|
||||
background-color: @surface1;
|
||||
border-radius: 20px;
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
#scrollbar.handle {
|
||||
background-color: @blue;
|
||||
border-radius: 30px;
|
||||
#scrollbar handle {
|
||||
background: linear-gradient(45deg, #89b4fa, #a6e3a1);
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
#prompt {
|
||||
color: @subtext0;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
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
|
||||
eval "$(starship init zsh)"
|
||||
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
|
||||
_1password-gui
|
||||
audacity
|
||||
baobab
|
||||
bat
|
||||
blueman
|
||||
bluez
|
||||
blender
|
||||
brave
|
||||
btop
|
||||
chromium
|
||||
@@ -17,32 +17,38 @@ eza
|
||||
fd
|
||||
file
|
||||
fzf
|
||||
gimp
|
||||
git
|
||||
gparted
|
||||
grim
|
||||
grimblast
|
||||
gnome-calculator
|
||||
qalculate-gtk
|
||||
handbrake
|
||||
hyperfine
|
||||
just
|
||||
jq
|
||||
kdePackages.kdeconnect-kde
|
||||
libreoffice
|
||||
lua
|
||||
nextcloud-client
|
||||
nextcloud-talk-desktop
|
||||
nix-index
|
||||
nix-output-monitor
|
||||
nh
|
||||
obsidian
|
||||
onlyoffice-desktopeditors
|
||||
openssl
|
||||
pandoc
|
||||
postman
|
||||
python3
|
||||
qdirstat
|
||||
ripgrep
|
||||
signal-desktop
|
||||
slurp
|
||||
solidtime-desktop
|
||||
spotify
|
||||
solaar
|
||||
swappy
|
||||
sweethome3d.application
|
||||
tea
|
||||
todoist
|
||||
tree
|
||||
@@ -53,9 +59,11 @@ wget
|
||||
wl-clipboard
|
||||
wf-recorder
|
||||
yazi
|
||||
z-lua
|
||||
zed-editor
|
||||
zoxide
|
||||
|
||||
#flatpaks
|
||||
eu.betterbird.Betterbird
|
||||
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
|
||||
@@ -0,0 +1,52 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ 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.sessionVariables = {
|
||||
SCREENSHOT_TOOL = "flameshot";
|
||||
USERNAME = username;
|
||||
};
|
||||
|
||||
# Create ~/Pictures/Screenshots by touching a dummy file
|
||||
home.file."Pictures/Screenshots/.keep" = {
|
||||
text = ""; # empty file
|
||||
};
|
||||
|
||||
services.flameshot = {
|
||||
enable = true;
|
||||
settings = {
|
||||
General = {
|
||||
uiColor = "#97cbbe";
|
||||
contrastUiColor = "#1e1e2e";
|
||||
showDesktopNotification = true;
|
||||
savePath = "/home/${username}/Pictures/Screenshots";
|
||||
filenamePattern = "$Y-$m-$d_$H-$M-$S";
|
||||
useGrimAdapter = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services.flameshot = {
|
||||
Service = {
|
||||
Environment = [
|
||||
"WAYLAND_DISPLAY=wayland-1"
|
||||
"XDG_CURRENT_DESKTOP=hyprland"
|
||||
"XDG_SESSION_TYPE=wayland"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
{ config, pkgs, lib, flakeRoot, ... }:
|
||||
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ config, pkgs, lib, repoPath, ... }:
|
||||
{
|
||||
boot.loader = {
|
||||
systemd-boot.enable = true;
|
||||
@@ -7,16 +8,22 @@
|
||||
efi.efiSysMountPoint = "/boot";
|
||||
timeout = 5;
|
||||
};
|
||||
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
boot.kernelParams = [
|
||||
"quiet"
|
||||
"splash"
|
||||
"udev.log_level=3"
|
||||
"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.initrd.systemd.enable = true;
|
||||
boot.initrd.availableKernelModules = [
|
||||
@@ -26,15 +33,32 @@
|
||||
"sd_mod"
|
||||
"rtsx_usb_sdmmc"
|
||||
];
|
||||
|
||||
hardware.enableAllFirmware = true;
|
||||
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
|
||||
boot.kernelModules = [
|
||||
"kvm-intel"
|
||||
"asus_wmi" # Asus-specific power/fan/keyboard control
|
||||
];
|
||||
boot.plymouth = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
enable = true;
|
||||
};
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
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,
|
||||
pkgs,
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, import-tree, home-manager, ... }:
|
||||
|
||||
let
|
||||
hostname = "traveldroid";
|
||||
modulesPath = "${flakeRoot}/generated/modules/${hostname}";
|
||||
modulesPath = "${repoPath}/generated/modules/${hostname}";
|
||||
hostModules = import-tree modulesPath;
|
||||
allModules = hostModules.imports;
|
||||
in
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
|
||||
let
|
||||
#################################
|
||||
# FILE
|
||||
#################################
|
||||
confPath = "${flakeRoot}/generated/assets/2_b_installed.conf";
|
||||
confPath = "${repoPath}/generated/assets/2_b_installed.conf";
|
||||
raw = builtins.readFile confPath;
|
||||
lines = lib.splitString "\n" raw;
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{ config, pkgs, lib, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ config, pkgs, lib, repoPath, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
assetPath = "${flakeRoot}/generated/.config/emacs";
|
||||
assetPath = "${repoPath}/generated/.config/emacs";
|
||||
|
||||
# Emacs package with Tree-sitter support
|
||||
emacsPkg = pkgs.emacs-pgtk.override { withTreeSitter = true; };
|
||||
|
||||
@@ -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,21 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
# --- 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 @@
|
||||
{ lib, pkgs, config, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, pkgs, config, repoPath, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
extraConfigFile = "${flakeRoot}/generated/.config/kitty/extra.conf";
|
||||
|
||||
extraConfigFile = "${repoPath}/generated/.config/kitty/extra.conf";
|
||||
extraConfig =
|
||||
if builtins.pathExists extraConfigFile
|
||||
then builtins.readFile extraConfigFile
|
||||
@@ -17,16 +16,13 @@ in
|
||||
environment.systemPackages = [
|
||||
pkgs.kitty
|
||||
];
|
||||
|
||||
#################################
|
||||
# Home Manager
|
||||
#################################
|
||||
home-manager.users = {
|
||||
"${username}" = {
|
||||
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
confirm_os_window_close = lib.mkForce 0;
|
||||
dynamic_background_opacity = lib.mkForce true;
|
||||
@@ -35,11 +31,10 @@ in
|
||||
window_padding_width = lib.mkForce 10;
|
||||
background_opacity = lib.mkForce "0.5";
|
||||
background_blur = lib.mkForce 5;
|
||||
notify_on_command_complete = lib.mkForce "never";
|
||||
};
|
||||
|
||||
extraConfig = ''
|
||||
${extraConfig}
|
||||
|
||||
# Theme
|
||||
include themes/Catppuccin-Mocha.conf
|
||||
'';
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
|
||||
let
|
||||
# Default username fallback
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Path to the starship config in assets
|
||||
starshipConfSrc = "${flakeRoot}/generated/.config/starship.toml";
|
||||
starshipConfSrc = "${repoPath}/generated/.config/starship.toml";
|
||||
in
|
||||
{
|
||||
#################################
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ pkgs, config, lib, ... }:
|
||||
|
||||
let
|
||||
@@ -15,6 +16,9 @@ in
|
||||
gvfs # support for external drives and network shares
|
||||
xarchiver # optional GUI archive manager
|
||||
tumbler # Showing thumbnails
|
||||
libmtp
|
||||
mtpfs
|
||||
jmtpfs
|
||||
];
|
||||
|
||||
############################
|
||||
@@ -29,4 +33,6 @@ in
|
||||
USERNAME = username;
|
||||
};
|
||||
};
|
||||
# Enable gvfs as a service
|
||||
services.gvfs.enable = true;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
assetPath = "${flakeRoot}/generated/.config/wofi";
|
||||
assetPath = "${repoPath}/generated/.config/wofi";
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [ pkgs.wofi ];
|
||||
|
||||
@@ -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, ... }:
|
||||
|
||||
let
|
||||
|
||||
@@ -1,53 +1,105 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
|
||||
let
|
||||
# Default username fallback
|
||||
#################################
|
||||
# User config
|
||||
#################################
|
||||
username = config.defaultUser or "henrov";
|
||||
# Path to optional per-user generated zshrc
|
||||
generatedZsh = "${flakeRoot}/generated/.config/zsh/.zshrc";
|
||||
generatedZsh = "${repoPath}/generated/.config/zsh/.zshrc";
|
||||
|
||||
#################################
|
||||
# Alias parsing
|
||||
#################################
|
||||
aliasFile = "${repoPath}/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
|
||||
{
|
||||
#################################
|
||||
# Install Zsh, Oh My Zsh, and Starship system-wide
|
||||
# Packages
|
||||
#################################
|
||||
environment.systemPackages = with pkgs; [
|
||||
zsh
|
||||
oh-my-zsh
|
||||
starship
|
||||
zsh-syntax-highlighting
|
||||
];
|
||||
|
||||
#################################
|
||||
# Set Zsh to use ~/.config/zsh as its config directory
|
||||
# Zsh config location
|
||||
#################################
|
||||
environment.etc."zshenv".text = ''
|
||||
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 = ''
|
||||
export ZSH=${pkgs.oh-my-zsh}/share/oh-my-zsh
|
||||
ZSH_THEME=""
|
||||
plugins=(git sudo extract colored-man-pages command-not-found history docker kubectl)
|
||||
|
||||
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}"
|
||||
|
||||
# Initialize Starship prompt
|
||||
eval "$(starship init zsh)"
|
||||
# Syntax highlighting MUST be last
|
||||
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 = {
|
||||
${username} = {
|
||||
programs.zsh.enable = true;
|
||||
|
||||
# Include the generated zshrc if you want
|
||||
home.file.".config/zsh/.zshrc".source = generatedZsh;
|
||||
};
|
||||
home-manager.users.${username} = {
|
||||
programs.zsh.enable = true;
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ pkgs, config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
@@ -1,36 +1,37 @@
|
||||
{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }:
|
||||
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, home-manager, inputs, ... }:
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
assetPath = "${flakeRoot}/generated/.config/hypr";
|
||||
|
||||
assetPath = "${repoPath}/generated/.config/hypr";
|
||||
hyprlandPkg =
|
||||
pkgs.hyprland or
|
||||
pkgs.hyprland-git or
|
||||
inputs.hyprland.packages.${pkgs.system}.default;
|
||||
|
||||
in
|
||||
{
|
||||
# Install Hyprland systemwide
|
||||
programs.hyprland.enable = true;
|
||||
programs.hyprland.withUWSM = true;
|
||||
programs.hyprland.package = hyprlandPkg;
|
||||
|
||||
environment.systemPackages = [ hyprlandPkg ];
|
||||
|
||||
# Home Manager user configuration
|
||||
home-manager.users = {
|
||||
${username} = {
|
||||
home.file = {
|
||||
".config/hypr/animations.conf" = { source = "${assetPath}/animations.conf"; force = true; };
|
||||
".config/hypr/behaviour.conf" = { source = "${assetPath}/behaviour.conf"; force = true; };
|
||||
".config/hypr/bindings.conf" = { source = "${assetPath}/bindings.conf"; force = true; };
|
||||
".config/hypr/exec-once.conf" = { source = "${assetPath}/exec-once.conf"; force = true; };
|
||||
".config/hypr/hypridle.conf" = { source = "${assetPath}/hypridle.conf"; force = true; };
|
||||
".config/hypr/hyprland.conf" = { source = "${assetPath}/hyprland.conf"; force = true; };
|
||||
".config/hypr/hyprlock.conf" = { source = "${assetPath}/hyprlock.conf"; force = true; };
|
||||
".config/hypr/layer-rules.conf" = { source = "${assetPath}/layer-rules.conf"; force = true; };
|
||||
".config/hypr/layout.conf" = { source = "${assetPath}/layout.conf"; force = true; };
|
||||
".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/animations.conf" = { source = "${assetPath}/animations.conf"; force = true; };
|
||||
".config/hypr/behaviour.conf" = { source = "${assetPath}/behaviour.conf"; force = true; };
|
||||
".config/hypr/bindings.conf" = { source = "${assetPath}/bindings.conf"; force = true; };
|
||||
".config/hypr/exec-once.conf" = { source = "${assetPath}/exec-once.conf"; force = true; };
|
||||
".config/hypr/hypridle.conf" = { source = "${assetPath}/hypridle.conf"; force = true; };
|
||||
".config/hypr/hyprland.conf" = { source = "${assetPath}/hyprland.conf"; force = true; };
|
||||
".config/hypr/hyprlock.conf" = { source = "${assetPath}/hyprlock.conf"; force = true; };
|
||||
".config/hypr/layer-rules.conf" = { source = "${assetPath}/layer-rules.conf"; force = true; };
|
||||
".config/hypr/layout.conf" = { source = "${assetPath}/layout.conf"; force = true; };
|
||||
".config/hypr/monitor-rules.conf" = { source = "${assetPath}/monitor-rules.conf"; force = true; };
|
||||
".config/hypr/theming.conf" = { source = "${assetPath}/theming.conf"; 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,10 +1,11 @@
|
||||
{ lib, config, pkgs, flakeRoot, stylix, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, stylix, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
moduleName = "stylix";
|
||||
|
||||
assetPath = "${flakeRoot}/generated/.config/${moduleName}";
|
||||
assetPath = "${repoPath}/generated/.config/${moduleName}";
|
||||
|
||||
stylixConfFile = "${assetPath}/stylix.conf";
|
||||
stylixConf =
|
||||
@@ -37,7 +38,7 @@ in
|
||||
stylix = {
|
||||
enable = true;
|
||||
|
||||
base16Scheme = "${flakeRoot}/assets/traveldroid/theming/stylix/catppuccin-mocha.yaml";
|
||||
base16Scheme = "${repoPath}/assets/traveldroid/theming/stylix/catppuccin-mocha.yaml";
|
||||
polarity = "dark";
|
||||
|
||||
targets = {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
homeDir = "/home/${username}";
|
||||
wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers";
|
||||
wallpaperSrc = "${repoPath}/assets/traveldroid/Wallpapers";
|
||||
wallpaperDst = "${homeDir}/Wallpapers";
|
||||
randoScript = "${homeDir}/Wallpapers/scripts/randomizeWallpapers.sh";
|
||||
in
|
||||
|
||||
@@ -1,48 +1,37 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, buildUser, mutableConfigPath, ... }:
|
||||
let
|
||||
# Use the config option defaultUser directly, fallback to "henrov"
|
||||
username = config.defaultUser or "henrov";
|
||||
assetPath = "${flakeRoot}/generated/.config/waybar";
|
||||
waybarPath = "${mutableConfigPath}/waybar";
|
||||
scriptsPath = "${mutableConfigPath}/scripts";
|
||||
in
|
||||
{
|
||||
# Install Waybar system-wide
|
||||
environment.systemPackages = [ pkgs.waybar ];
|
||||
|
||||
home-manager.users = {
|
||||
${username} = {
|
||||
home.file = {
|
||||
".config/waybar/config" = {
|
||||
text = builtins.readFile "${assetPath}/config";
|
||||
force = true;
|
||||
};
|
||||
".config/waybar/style.css" = {
|
||||
text = builtins.replaceStrings ["henrov"] [username] (builtins.readFile "${assetPath}/style.css");
|
||||
force = true;
|
||||
};
|
||||
".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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
home-manager.users.${username} = { config, lib, ... }:
|
||||
let
|
||||
link = path: config.lib.file.mkOutOfStoreSymlink path;
|
||||
in
|
||||
{
|
||||
home.file = {
|
||||
".config/waybar/config.jsonc".source =
|
||||
link "${waybarPath}/config.jsonc";
|
||||
".config/waybar/style-dark.css".source =
|
||||
link "${waybarPath}/style-dark.css";
|
||||
|
||||
# ".config/scripts/bluetooth-status.sh".source =
|
||||
# link "${scriptsPath}/bluetooth-status.sh";
|
||||
# ".config/scripts/hypr-workspaces.sh".source =
|
||||
# link "${scriptsPath}/hypr-workspaces.sh";
|
||||
# ".config/scripts/hypr-workspacesmenu.sh".source =
|
||||
# link "${scriptsPath}/hypr-workspacesmenu.sh";
|
||||
};
|
||||
};
|
||||
|
||||
# Systemd user service for Waybar
|
||||
systemd.user.services.waybar = {
|
||||
description = "Waybar for Hyprland";
|
||||
after = [ "graphical-session.target" ];
|
||||
|
||||
wantedBy = [ "default.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.waybar}/bin/waybar";
|
||||
Restart = "always";
|
||||
@@ -51,7 +40,5 @@ in
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
|
||||
@@ -1,44 +1,62 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
let
|
||||
# Use the config option defaultUser directly, fallback to "henrov"
|
||||
username = config.defaultUser or "henrov";
|
||||
|
||||
# Portal backends
|
||||
basePortal = pkgs.xdg-desktop-portal-gtk; # full portal implementation
|
||||
hyprlandPortal = pkgs.xdg-desktop-portal-hyprland; # Hyprland screencast
|
||||
homeDir = "/home/${username}";
|
||||
basePortal = pkgs.xdg-desktop-portal-gtk;
|
||||
hyprlandPortal = pkgs.xdg-desktop-portal-hyprland;
|
||||
in
|
||||
{
|
||||
#################################
|
||||
# Enable XDG desktop portals system-wide
|
||||
# XDG Desktop Portals (system)
|
||||
#################################
|
||||
xdg.portal.enable = true;
|
||||
|
||||
# Base + Hyprland portals
|
||||
xdg.portal.extraPortals = [ basePortal hyprlandPortal ];
|
||||
|
||||
# Map screencast interface explicitly to Hyprland
|
||||
xdg.portal.xdgOpenUsePortal = true;
|
||||
xdg.portal.extraPortals = [
|
||||
basePortal
|
||||
hyprlandPortal
|
||||
];
|
||||
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 = [
|
||||
basePortal
|
||||
hyprlandPortal
|
||||
];
|
||||
|
||||
#################################
|
||||
# Home Manager user configuration
|
||||
# Home Manager user config
|
||||
#################################
|
||||
home-manager.users = {
|
||||
${username} = {
|
||||
home.packages = [
|
||||
basePortal
|
||||
hyprlandPortal
|
||||
];
|
||||
home-manager.users.${username} = {
|
||||
#################################
|
||||
# XDG user directories
|
||||
#################################
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
@@ -8,5 +9,6 @@
|
||||
pulseaudio # PulseAudio daemon
|
||||
pavucontrol # GUI 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, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
in
|
||||
{
|
||||
|
||||
|
||||
############################
|
||||
# Bluetooth daemon
|
||||
############################
|
||||
@@ -11,5 +14,6 @@ in
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
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, repoPath, ... }:
|
||||
let
|
||||
colors = {
|
||||
border = "#97C9E6";
|
||||
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/colors.css" = {
|
||||
source = "${repoPath}/generated/.config/shared/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 @@
|
||||
{ lib, config, pkgs, flakeRoot, ... }:
|
||||
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
scriptsPath = flakeRoot + "/generated/.config/scripts";
|
||||
configPath = repoPath + "/generated/.config/scripts";
|
||||
allFiles = lib.filesystem.listFilesRecursive configPath;
|
||||
|
||||
toRelative = file:
|
||||
let
|
||||
base = toString repoPath + "/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
|
||||
{
|
||||
home-manager.users = {
|
||||
${username} = {
|
||||
home.file = {
|
||||
".config/scripts/update.sh" = {
|
||||
text = builtins.readFile (flakeRoot + "/generated/.config/scripts/update.sh");
|
||||
executable = true;
|
||||
force = true;
|
||||
};
|
||||
};
|
||||
home.file = builtins.listToAttrs (map toFileEntry allFiles);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ 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, ... }:
|
||||
|
||||
{
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
basePath = "${repoPath}/generated/.config";
|
||||
assetPath = "${repoPath}/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, repoPath, ... }:
|
||||
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
basePath = "${repoPath}/generated/.config";
|
||||
assetPath = "${repoPath}/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, ... }:
|
||||
|
||||
let
|
||||
tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet";
|
||||
sessionsDir = "${pkgs.hyprland}/share/wayland-sessions";
|
||||
sessionsDir = "${pkgs.uwsm}/share/wayland-sessions";
|
||||
in
|
||||
{
|
||||
#################################
|
||||
# Greetd (tuigreet)
|
||||
#################################
|
||||
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
default_session = {
|
||||
command = ''
|
||||
@@ -20,24 +18,20 @@ in
|
||||
--remember \
|
||||
--remember-session \
|
||||
--sessions ${sessionsDir} \
|
||||
--cmd "start-hyprland"
|
||||
--cmd "uwsm start hyprland-uwsm.desktop"
|
||||
'';
|
||||
user = "greeter";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#################################
|
||||
# Fix TTY / boot noise issues
|
||||
#################################
|
||||
|
||||
systemd.services.greetd.serviceConfig = {
|
||||
Type = "idle";
|
||||
StandardInput = "tty";
|
||||
StandardOutput = "tty";
|
||||
StandardError = "journal";
|
||||
|
||||
# Prevent boot log spam on tty
|
||||
TTYReset = true;
|
||||
TTYVHangup = 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, ... }:
|
||||
|
||||
{
|
||||
@@ -8,8 +9,6 @@
|
||||
# Let DHCP be default unless overridden elsewhere
|
||||
useDHCP = lib.mkDefault true;
|
||||
|
||||
# Hostname comes from host.nix, do NOT redefine here
|
||||
|
||||
#################################
|
||||
# NetworkManager (primary stack)
|
||||
#################################
|
||||
@@ -27,20 +26,6 @@
|
||||
# Allow user control via NM / CLI
|
||||
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.linux-firmware
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
nix.settings = {
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
download-buffer-size = 536870912; # 512 MB
|
||||
cores = 2;
|
||||
max-jobs = 1;
|
||||
cores = 8;
|
||||
max-jobs = "auto";
|
||||
};
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
|
||||
boot.loader.systemd-boot.configurationLimit = 3;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ pkgs, lib, config, repoPath, ... }:
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
quickshellPath = repoPath + "/generated/.config/quickshell";
|
||||
allFiles = lib.filesystem.listFilesRecursive quickshellPath;
|
||||
|
||||
toRelative = file:
|
||||
let
|
||||
base = toString repoPath + "/generated/";
|
||||
relative = lib.removePrefix base (toString file);
|
||||
in
|
||||
builtins.unsafeDiscardStringContext relative;
|
||||
|
||||
toFileEntry = file: {
|
||||
name = toRelative file;
|
||||
value = {
|
||||
source = file;
|
||||
force = true;
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
quickshell
|
||||
qt6.qtdeclarative
|
||||
qt6.qttools
|
||||
qt6.qtsvg
|
||||
qt6.qtimageformats
|
||||
qt6.qtmultimedia
|
||||
qt6.qt5compat
|
||||
];
|
||||
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme = "qt5ct";
|
||||
};
|
||||
|
||||
home-manager.users = {
|
||||
${username} = {
|
||||
home.file = builtins.listToAttrs (map toFileEntry allFiles);
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
# --- This file has been auto-generated. For permanent changes alter the appropriate block in the README.org. ---
|
||||
{ lib, config, pkgs, repoPath, ... }:
|
||||
let
|
||||
username = config.defaultUser or "henrov";
|
||||
assetPath = "${repoPath}/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, ... }:
|
||||
|
||||
let
|
||||
@@ -11,7 +12,7 @@ in
|
||||
isNormalUser = true;
|
||||
home = "/home/${username}";
|
||||
hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/";
|
||||
extraGroups = [ "wheel" "networkmanager" "bluetooth" ];
|
||||
extraGroups = [ "wheel" "networkmanager" "bluetooth" "input" ];
|
||||
ignoreShellProgramCheck = true; # <-- avoids the assertion
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user