Compare commits
1299 Commits
595cabbb88
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c4510abf88 | |||
| 0c4cdd2d1e | |||
| c1418e1402 | |||
| ab59c50520 | |||
| 624a56e948 | |||
| fb269c0265 | |||
| 2a07ecef61 | |||
| aa830fc795 | |||
| 227a4fe53d | |||
| 99dfe10ebf | |||
| c002741419 | |||
| 448b3e5ef0 | |||
| fafadf4034 | |||
| a5845fb847 | |||
| 757d5e5c81 | |||
| 7b13880be2 | |||
| b895e85953 | |||
| ee3b95d986 | |||
| f5ed623d53 | |||
| d30fa3922b | |||
| 1c20cc3326 | |||
| e7a36abd8c | |||
| 635583669f | |||
| dec73a74d8 | |||
| ac23d88ca9 | |||
| 85df2e7886 | |||
| 7bb0f6fca4 | |||
| 486e273b97 | |||
| e7756a2959 | |||
| 68fa0d8c89 | |||
| b9c7c099e7 | |||
| e62790f2c7 | |||
| 3d36eb305e | |||
| 0952bfd827 | |||
| c6671fea4e | |||
| 55b3fde362 | |||
| 18f2e4d93a | |||
| dbac0fd1b9 | |||
| 26760d27a4 | |||
| eec5d54f59 | |||
| 1a0c85ec97 | |||
| 0037ba2e54 | |||
| 846112cd25 | |||
| 6233bd0867 | |||
| 6ba7fd28d5 | |||
| c75724de68 | |||
| 04f33a92ea | |||
| 3cc69cf68d | |||
| 5f5e5f8d4d | |||
| 2c5a115bf9 | |||
| 323fbe15c8 | |||
| f8b0f62606 | |||
| 0a222ed225 | |||
| a846849a80 | |||
| 092a4b47e6 | |||
| 385fcb3ee1 | |||
| 833d999027 | |||
| 0df8cdb354 | |||
| 23a89dab30 | |||
| 7ae0c01e8d | |||
| a975d9fb6c | |||
| 6684e2e7fe | |||
| 7f0726f443 | |||
| cb8ac3b848 | |||
| 3a1997f0c4 | |||
| a2a7c3c5a0 | |||
| ce6940b048 | |||
| e21411c2f9 | |||
| dcb525cce2 | |||
| dc630fe984 | |||
| ce90493654 | |||
| 0c553e7a7d | |||
| 4cf601df84 | |||
| c8e4337a14 | |||
| 49de518ad1 | |||
| 6c9312f509 | |||
| 3359426c48 | |||
| 0f0f038f5a | |||
| ab31842e58 | |||
| ea88fff4a4 | |||
| b3ab7dcb1c | |||
| adb1265800 | |||
| 40b2c821c8 | |||
| b59eb6889a | |||
| c538c5ad08 | |||
| 4236aa1def | |||
| 9ea3a7c984 | |||
| f57cabb186 | |||
| 0778b12305 | |||
| d9c3cb9889 | |||
| 9d22c210e3 | |||
| eb54ade226 | |||
| 1d5c1a7c2a | |||
| 0f7f9585b3 | |||
| ed24f55d15 | |||
| f5a490d452 | |||
| 88969087fe | |||
| b14e2e5a39 | |||
| 02f28ab1df | |||
| c048eb73c0 | |||
| b22c5bc935 | |||
| 7c46bae3e2 | |||
| 8a1f51873e | |||
| e03c77cdbc | |||
| a64d153004 | |||
| a78af6529c | |||
| c460bebb2d | |||
| b84944543a | |||
| 63f4c82c76 | |||
| 677b1b6666 | |||
| b827b518cd | |||
| 68eecd01c7 | |||
| 8fc4e23d3b | |||
| cf381042d0 | |||
| 2303988b74 | |||
| 791d90b703 | |||
| 29137a8cdd | |||
| dd175e99b8 | |||
| 3a5f1cf47e | |||
| 755f1f4a06 | |||
| 1cfc049326 | |||
| 09d2832948 | |||
| 85ab23eb5d | |||
| 76a31b3051 | |||
| 8e5cbe6350 | |||
| e75fc95b27 | |||
| 24ed3f03cd | |||
| b6453330bf | |||
| bd008cde04 | |||
| ffff1cfda1 | |||
| 0f369bdf6c | |||
| 600e55de1f | |||
| a390428ca9 | |||
| a5aeddc5c2 | |||
| e9748b0236 | |||
| 3902e2da67 | |||
| 42af1badc4 | |||
| 1eca0c995d | |||
| 92389f7048 | |||
| d6459d0d84 | |||
| 00e5c92c1e | |||
| c19afff26a | |||
| 8ea03f0a66 | |||
| 8f3f6ec66d | |||
| 3401ed7424 | |||
| bb6a380599 | |||
| 35fd4e61e2 | |||
| 01542dda96 | |||
| 8464884fdb | |||
| 33b022c659 | |||
| a8f3f222b1 | |||
| bf9ea37280 | |||
| 724c5c176b | |||
| 49e99e9de2 | |||
| ce0af2988a | |||
| 5a7afbfe82 | |||
| 87afec8955 | |||
| 2a1512f85b | |||
| 313e623ec4 | |||
| 4f7ab88634 | |||
| a8851e5a91 | |||
| 629f25c795 | |||
| b52d87d30b | |||
| 54114f99ab | |||
| 2fcde8ddd1 | |||
| a952136be1 | |||
| 7773d2a7a0 | |||
| c86a52e435 | |||
| c99738c210 | |||
| 8321d5e2ef | |||
| 46477cce25 | |||
| 4765527fa6 | |||
| 67f5aefc82 | |||
| 89c398a957 | |||
| d1fc192d26 | |||
| bc2790c7fb | |||
| e3f55a1fbd | |||
| c66cd0e28c | |||
| d5d395ed56 | |||
| e15f9a51cb | |||
| acafbf9a6a | |||
| 4952ea0634 | |||
| 6e2f28d601 | |||
| 143d31433f | |||
| a176c744f8 | |||
| 2fa0b1f36a | |||
| 520cd476fc | |||
| f985df8e61 | |||
| ec750ebb17 | |||
| f3fd842692 | |||
| 6ff168caeb | |||
| 0863445dab | |||
| 989a9626b3 | |||
| 7fa58a0421 | |||
| a477b2c5c3 | |||
| d2999ab763 | |||
| 5d7b8d520a | |||
| edbbd3efd5 | |||
| de0b4852bf | |||
| 3e66197dd8 | |||
| 495befc8c0 | |||
| c4ccfc3a92 | |||
| 02869d267a | |||
| 1e03157838 | |||
| bc3caec6ba | |||
| 2d9e1fd875 | |||
| 63ef553d6b | |||
| 11ed160935 | |||
|
|
7256c82b91 | ||
|
|
fcdb9d19fc | ||
| cec89af852 | |||
| 8de9913ecf | |||
| d71e7d0e5d | |||
| e643d22eda | |||
| c141508203 | |||
| 8ee1913d93 | |||
| ac4619f1a4 | |||
| d178a03b43 | |||
| 063f142ae5 | |||
| c90127e212 | |||
| f317f9409e | |||
| c13de26ee1 | |||
| ac5b97dba4 | |||
| 4e2c3473e4 | |||
| 8434ceb45a | |||
| b2d1ef4bb1 | |||
| c6ec0a5d1d | |||
| d9ea9d1d27 | |||
| 118595097f | |||
| d153c0aff5 | |||
| 85d1bbe82f | |||
| b4363eca8e | |||
| 7369600da7 | |||
| 0b58850f16 | |||
| cd3b5409b2 | |||
| 37b6ab1816 | |||
| c111de4fc4 | |||
| 426e09868e | |||
| 24ed262e96 | |||
| 1203d3de7c | |||
| 0b139ff795 | |||
| c186fcf306 | |||
| 4bfa0fe7c7 | |||
| e797bfbb62 | |||
| a494390998 | |||
| 37a81c143d | |||
| 39d92cd5d1 | |||
| d75c45f491 | |||
| 67c18fe456 | |||
| 1c1e3f9bd4 | |||
| 5c163d57b0 | |||
| 8b8a4a750c | |||
| 1d838b5658 | |||
| 6935bacbea | |||
| c775628986 | |||
| 86b6348950 | |||
| be38105e84 | |||
| 4fbecc4d34 | |||
| c584eafc94 | |||
| 57e40571bc | |||
| 72a354c7fa | |||
| 7075800b57 | |||
| 275e192247 | |||
| 3552473830 | |||
| 9bc91cb02c | |||
| 79b3f3a215 | |||
| 8366638782 | |||
| 83f89f4ec4 | |||
| a39ffee613 | |||
| 9463d3fdc5 | |||
| e8f025ba11 | |||
| a7b7360991 | |||
| 96f77e7ede | |||
| 3bfaf0b6e2 | |||
| 2ec25c1a86 | |||
| aca72d566c | |||
| 03d94ecfc4 | |||
| 19b6dfb257 | |||
| 343bf9a32a | |||
| cf2cdff505 | |||
| 9dbe430075 | |||
| c6e99b1906 | |||
| 275016fd2e | |||
| 7dbf16d5bb | |||
| 660dd366b5 | |||
| f5e784399b | |||
| 6382841d51 | |||
| feeac0c273 | |||
| 5548154061 | |||
| 24c8766ade | |||
| 9dcb173b0f | |||
| dc599f2b1d | |||
| 274397c9a9 | |||
| 784e270151 | |||
| 6f48fcf416 | |||
| a1b660112a | |||
| 7ee38d8dc9 | |||
| 56a1a081ab | |||
| a9e65c5732 | |||
| 49ee654169 | |||
| a140c9e508 | |||
| 643a7cd5d1 | |||
| 5ea1050197 | |||
| 9887d78c4a | |||
| 375fffdc2c | |||
| a075d3a156 | |||
| 950b09cc5b | |||
| d639a98468 | |||
| 63956418f1 | |||
| f040795e84 | |||
| 26f2ef9a62 | |||
| 0a63090c03 | |||
| e1a34c726d | |||
| b0b2abd6bd | |||
| 448e553e8e | |||
| bb75a1dca1 | |||
| 4f64dc7cf3 | |||
| 4276f4bfaf | |||
| d874b36f9b | |||
| b104067cdc | |||
| 39f952638b | |||
| 653b434f58 | |||
| 12e492328c | |||
| cb5d18370f | |||
| c0ed57ae6a | |||
| 861c6af10a | |||
| f70a2878c3 | |||
| cc076aa471 | |||
| 9482816cd5 | |||
| 7368b4471b | |||
| 2bc003b312 | |||
| 8f7a780671 | |||
| d4cd0f7806 | |||
| a9a7602807 | |||
| 06c51f35fa | |||
| b89e8b09ce | |||
| 662213d8c6 | |||
| e29326a34b | |||
| b65127dbd4 | |||
| a605297931 | |||
| 3f106f671e | |||
| fa233fb022 | |||
| 5fd3203035 | |||
| 550c1e9521 | |||
| e94421aff6 | |||
| 6f79b79bdd | |||
| e1abfa2502 | |||
| d46c1d0ea6 | |||
| ee54549a2c | |||
| ca8900fbea | |||
| dc4ebfc66b | |||
| 73fd4af9d2 | |||
| 71f4477a9f | |||
| ff47da96f6 | |||
| 001696844a | |||
| 6dff3ebec4 | |||
| c94ccd3903 | |||
| bce4e84cd0 | |||
| 75ca0033a2 | |||
| 88f20e3aee | |||
| 78094a0075 | |||
| 6327afdfa9 | |||
| eb76bf69c2 | |||
| 2f939ed531 | |||
| 6e816241cd | |||
| 8003b6231f | |||
| 6ded0b12d3 | |||
| bcad8acd9f | |||
| a117de9470 | |||
| da320c9dc4 | |||
| 7520bedbf4 | |||
| 125d379f50 | |||
| 7a14323817 | |||
| 9f821cd286 | |||
| f25bab5d77 | |||
| 7ab3062846 | |||
| 4c40b725ab | |||
| 46b077f2db | |||
| 72d972aea2 | |||
| 5ac67daf68 | |||
| 53eca03a5b | |||
| 858af21d6c | |||
| abc42942e4 | |||
| 2f64d10171 | |||
| f88afb52a8 | |||
| 5e5e0a4906 | |||
| 1d903c0c93 | |||
| 3fde62547d | |||
| 57d724cf36 | |||
| a2d4fa4853 | |||
| cb8cd98607 | |||
| ac72a7d7f3 | |||
| 1cba5fbc84 | |||
| d0550b342a | |||
| 4d542a32ea | |||
| 71725ce35b | |||
| 357b97a769 | |||
| 6a66cab489 | |||
| dfc0d89694 | |||
| cb72d938a1 | |||
| 547dc89e35 | |||
| 320587b035 | |||
| bfc1af68e3 | |||
| ac7e75225e | |||
| 9979969a15 | |||
| b91fb99ebe | |||
| f5bdce85a9 | |||
| a837ed2d04 | |||
| 73d2f5135d | |||
| c1f1cc8be6 | |||
| f0eea1e80d | |||
| 9c951e10fb | |||
| 8776f15789 | |||
| 6560e2e9a4 | |||
| 9c01f758fd | |||
| 1876c95c69 | |||
| 52640bfc18 | |||
| c91bd257bc | |||
| d154d564df | |||
| 84b74c8396 | |||
| 1b6e88b7c7 | |||
| c190fe59f1 | |||
| 705b492652 | |||
| 1f020a5ba3 | |||
| 33f86bb07c | |||
| 2510e98771 | |||
| 9e70b8a35c | |||
| 951bd79dc6 | |||
| cfe42355a0 | |||
| 4cb0a2a481 | |||
| 096b2d4f71 | |||
| 8dc75f466b | |||
| 840a38e3a0 | |||
| bd03545dda | |||
| 9ad7111831 | |||
| 17d1ea461e | |||
| 45502b95d5 | |||
| bab22fe2bf | |||
| e45f56e5a1 | |||
| d810950cb5 | |||
| 8fa3431d2f | |||
| 22cfd2da65 | |||
| 3625415a2e | |||
| 3abe32ee36 | |||
| 6f5edef1d9 | |||
| f239390ce2 | |||
| 3d63b16661 | |||
| d12d797e66 | |||
| c77d44af33 | |||
| 73160c6fce | |||
| dbd3ab0590 | |||
| e4e0dc73d8 | |||
| 3c8abe79fd | |||
| 84ac0526dc | |||
| 0b25af178a | |||
| 3fa0fe2e5f | |||
| 410a6318a2 | |||
| 33b589caff | |||
| dd772fb08a | |||
| 0a98cbe4b4 | |||
| 38873fa112 | |||
| b2dd862a51 | |||
| a2c8d4a508 | |||
| c0de20d3f8 | |||
| d1724c7043 | |||
| 8216c7ba2e | |||
| b78379e2d3 | |||
| 06d7bdd15c | |||
| 8af74f1f2e | |||
| 909b5bf8f0 | |||
| 66ed9aaae6 | |||
| 4ba006ceef | |||
| a568515ad9 | |||
| 231140b8e3 | |||
| 1bc9bc08fd | |||
| 87e36b8369 | |||
| 2d7082dba7 | |||
| 468b82c9e0 | |||
| 3c4708142f | |||
| 861166f890 | |||
| ea82765435 | |||
| 9fd9c0ba42 | |||
| 3a7b8738c3 | |||
| 8886840101 | |||
| dd37db3ffc | |||
| 3301d0c6a3 | |||
| c0abae0c1f | |||
| 5749b46505 | |||
| f0bcec96fc | |||
| e3dd9113f4 | |||
| 80429710c4 | |||
| 22f7479872 | |||
| a4c2a7894b | |||
| ea65fd3228 | |||
| 2c67f87bd6 | |||
| 2693c6b957 | |||
| a64a732d08 | |||
| b6e4ddf509 | |||
| a6af911f02 | |||
| 95ce6eb289 | |||
| af1d652354 | |||
| 1b3429c187 | |||
| 02b362180c | |||
| 3ece1966d8 | |||
| b2cf9a5390 | |||
| 1833370e44 | |||
| d3e6cde41c | |||
| 723a0a1828 | |||
| e39a455533 | |||
| 1dbf01aee3 | |||
| 20817e7a18 | |||
| 866ddc5fa9 | |||
| 7f384e4db7 | |||
| 6873e304b0 | |||
| a2461d5056 | |||
| c72ec3e60f | |||
| 33ef7a27c9 | |||
| d58b4a36af | |||
| b4c9de7922 | |||
| 92edd838ae | |||
| 0d22067637 | |||
| a69b9213c6 | |||
| e878e89e62 | |||
| 7f035753d3 | |||
| 7ab22f96bd | |||
| e96bd89a9c | |||
| 7714ecd7de | |||
| 9fed462f09 | |||
| 0ca6f41cc4 | |||
| 0b7dfd2a65 | |||
| 630ff61b3a | |||
| a6142b7d3a | |||
| ef5490b76b | |||
| ebb72ee031 | |||
| 2994e05c8f | |||
| a2dc73ef11 | |||
| b6f8e5492a | |||
| cadf31a566 | |||
| e44e2a7263 | |||
| a8ac313b18 | |||
| 44db910165 | |||
| ff0a38e376 | |||
| dfdab463d8 | |||
| 76ce07c342 | |||
| 589830878d | |||
| 1431f1dfc6 | |||
| 98ae2f590f | |||
| 1fd36b3eaa | |||
| 3677bc2629 | |||
| cb915e59a1 | |||
| 16766eafea | |||
| a22650254a | |||
| 0b59f1db5c | |||
| 492d2eec85 | |||
| 2d3eb380db | |||
| 54041d985d | |||
| bbcb20519a | |||
| 40079040b7 | |||
| bbeeacaf74 | |||
| ce3baa2cdf | |||
| f63bd54d8d | |||
| 374ff22a24 | |||
| a56c57bb90 | |||
| 9b789bf2b2 | |||
| 775ef92741 | |||
| 1ce4fd0747 | |||
| 432c8f1d88 | |||
| 105e23e5a8 | |||
| 168e7794d4 | |||
| e162bae40f | |||
| a48c6afaec | |||
| f8da4e2488 | |||
| d68baf1206 | |||
| 3be9de070e | |||
| 7f8339a4a6 | |||
| c684f1312f | |||
| e896d17fc4 | |||
| bcef7d8547 | |||
| e980fffff2 | |||
| 370051f6b1 | |||
| 4adcddebc4 | |||
| 7cdcbb47a4 | |||
| 646dd21ec8 | |||
| 925aa7788b | |||
| 8e9072a15b | |||
| 23e2321aa0 | |||
| 6ef2d320f1 | |||
| cc6327dd3f | |||
| 0e6fa0d835 | |||
| a951fa634e | |||
| 8d1e902732 | |||
| 9477c3f091 | |||
| 529296a747 | |||
| 3bd86fe458 | |||
| d2e99d4874 | |||
| b50081f17e | |||
| 1676895fd5 | |||
| f2d9758fe0 | |||
| b2c88e081d | |||
| ad85195dc8 | |||
| 1b4f71af87 | |||
| 32c6c57654 | |||
| 3897f3a2a0 | |||
| bf17e1464f | |||
| 2eb8e16200 | |||
| 019405af52 | |||
| 729306d051 | |||
|
|
55aa30845d | ||
| 9dd13430e6 | |||
| ff12434b50 | |||
| 890483732b | |||
| 1bfa76dc2c | |||
| c792241831 | |||
| a8a1416c50 | |||
| f7ab24dc21 | |||
| 4cc468da55 | |||
| 732368935f | |||
| 359989245d | |||
| 3091b4570f | |||
| b32cca36f4 | |||
| cfb35e1dcf | |||
| 29ddc2ef9e | |||
| 68525ceb0f | |||
| d137f8ec35 | |||
| 96777fe435 | |||
| cf37c8e850 | |||
| 746ee94409 | |||
| da1c7d741a | |||
| 9db91a8c7d | |||
| ee63010490 | |||
| f12724acb1 | |||
| 4211189c1a | |||
| 9376fcc6c8 | |||
| b2a8e6bf97 | |||
| f1b0bba857 | |||
| 64d7773ed4 | |||
| 790b51c993 | |||
| 1767d94665 | |||
| 15d503ef4a | |||
| 6edb84537a | |||
| c71b291f4c | |||
| 263238f7f4 | |||
| e329883776 | |||
| 9b3bff08b5 | |||
| 00421d1843 | |||
| b64fe23c86 | |||
| e04228a817 | |||
| 3ed3bf15ff | |||
| 7048f0848a | |||
| 4e2aed0e1d | |||
| cb89b0add4 | |||
| 2133e559aa | |||
| f7e8bb960d | |||
| 5c68dbf38f | |||
| 2317648d3e | |||
| 80de8d5f50 | |||
| 11a6beae9e | |||
| 775eed7456 | |||
| 75f0f54197 | |||
| 67d9c9c0a9 | |||
| c79ee4b4e4 | |||
| 59d01dfc80 | |||
| bd0a957c78 | |||
| 58d4223a85 | |||
| 39376dbb5d | |||
| e6a4c84b25 | |||
| 238996223a | |||
| 6357a64c06 | |||
| c09f2a21fe | |||
| b170456972 | |||
| 9d7b97f447 | |||
| 904c22eb3d | |||
| f72c755737 | |||
| dbb2f510a2 | |||
| 86337f44b8 | |||
| f1b9979796 | |||
| 0ec7c24f4e | |||
| 465b690404 | |||
| 0e89f2f49c | |||
| dca17cc5ef | |||
| 19d81043c0 | |||
| 1cd3f92aef | |||
| b85cd99004 | |||
| 778f531d68 | |||
| c36b2f340d | |||
| 632c4d3f11 | |||
| 3fb5f1d6d8 | |||
| a72f982ac8 | |||
| ae4ccbfd8d | |||
| 77bbc6bedf | |||
| 9230f8c847 | |||
| 5ad07b3261 | |||
| b315023fbd | |||
| 52a0fa2038 | |||
| eafb7bfa05 | |||
| ea5c5a318c | |||
| edd70f54d9 | |||
| d48f48b492 | |||
| 24a082a0cf | |||
| 61a24b0680 | |||
| 0417195c98 | |||
| 3749a4430f | |||
| 43f82f7f60 | |||
| d20c4facb8 | |||
| 43b8aaef25 | |||
| 5c9a55c703 | |||
| b194343a59 | |||
| 41d68bb576 | |||
| a7bc1d2dba | |||
| a7f93cec23 | |||
| 3e0b86d79d | |||
| b184e0ded9 | |||
| cc80a4350e | |||
| cfa1b8e077 | |||
| 4f98897de0 | |||
| fa7a5a7402 | |||
| 9831d3116d | |||
| 3aedcf771e | |||
| 8f93161de7 | |||
| de66933998 | |||
| 1a9c11bf59 | |||
| 01b9d5e7ea | |||
| 45ba9b7780 | |||
| 60fd2ae1a2 | |||
| 294e5d4f19 | |||
| a67ce56472 | |||
| b622f9e8ef | |||
| 1cf327948f | |||
| 802f96c88e | |||
| eb5fdd0e90 | |||
| 9b89dc92aa | |||
| dbe8a90764 | |||
| 544e54d0c2 | |||
| 02c522126e | |||
| 0453fbc54b | |||
| c72d040efa | |||
| 6b252287d9 | |||
| 4038483415 | |||
| 21f867d7e2 | |||
| b3b9d5f019 | |||
| 5d49875dee | |||
| ead867eedd | |||
| 9c2529ed81 | |||
| 479e8adcbd | |||
| 7c85a948c7 | |||
| 9fcdbbe018 | |||
| 79ed7b95e4 | |||
| 17aafe2308 | |||
| 8895139e47 | |||
| d24959da61 | |||
| 12a6498bd2 | |||
| 9fc2f6430d | |||
| acd1c693cc | |||
| 540922f41d | |||
| 6c7d25e0d5 | |||
| c83e389bd2 | |||
| 27ff07af16 | |||
| 1977c35a4e | |||
| 506e24b3d1 | |||
| c4604b86e3 | |||
| efec7e613b | |||
| bb9536ed64 | |||
| 0d42dded5d | |||
| cfc89a966b | |||
| db2ced576f | |||
| 14e48a56d2 | |||
| e006a71deb | |||
| 32b4db964f | |||
| 3e2b72ab5e | |||
| 0a758aac9c | |||
| c4734e3769 | |||
| a5630c07d8 | |||
| eec2dc2ace | |||
| 092b33fd91 | |||
| 12eafb7c93 | |||
| e0d479ed2a | |||
| 82efd873be | |||
| f61aabdc55 | |||
| e5432c8d02 | |||
| b169703eff | |||
| de25c3c66e | |||
| fbdef8b9da | |||
| d71a904e1e | |||
| 3d4386d7c8 | |||
|
|
14a6b620c3 | ||
| 1cf33f572f | |||
| 2f6e037ec2 | |||
| 6ead39987a | |||
| 392c3c7dda | |||
| 2bacc686ef | |||
| 59cd5c2caf | |||
| 2b82e9215f | |||
| b2325c9b81 | |||
| 07b9154148 | |||
| 55c103a1f8 | |||
| 0cede4f2c0 | |||
| 96c33e3bce | |||
| 3cd4221b58 | |||
| 14765b7ca8 | |||
| 64df0886d1 | |||
| 4b9c10db3c | |||
| f0f6ca36ff | |||
| 5876b4c31d | |||
| a2273f6197 | |||
| 1102b7af3d | |||
| 06216074b5 | |||
| 5caa515273 | |||
| da3f1861c7 | |||
| 379a838dbe | |||
| 6c029ba8f7 | |||
| 6185302965 | |||
| 433b9c4a0b | |||
| c4c8530cdc | |||
| 09eb56a828 | |||
| 416a8fe570 | |||
| fd15126606 | |||
| a3b456757c | |||
| a00afbe846 | |||
| f8b0588763 | |||
| 02c0816681 | |||
| b476884dd5 | |||
| e181999204 | |||
| 2e06e8ae5f | |||
| e397242437 | |||
| c00abf4071 | |||
| 232e3e0572 | |||
| 8fd1225ea5 | |||
| 859fb38a2c | |||
| de0c57915f | |||
| c72af5b50d | |||
| 811eb39614 | |||
| 81ad1080fc | |||
| f3a4044e55 | |||
| 9a9d84e2a8 | |||
| 60ad54caa5 | |||
| 8ed97fd59e | |||
| 03cc877c53 | |||
| fc47ea32b5 | |||
| d18d0625db | |||
| beff3e9ee8 | |||
| d8aa33ca29 | |||
| c428e6cf68 | |||
| be2124dfe1 | |||
| 5c17031ec1 | |||
| b9cd2605af | |||
| 6a807918b0 | |||
| 1c966ce160 | |||
| ff9c0be8ea | |||
| d9ba1a26f3 | |||
| e3059afd7b | |||
| bbfbd8c36b | |||
| b42ea1762d | |||
| f7b7540177 | |||
| 1d76b192d3 | |||
| 1c57f4475f | |||
| cdef13f57b | |||
| 855be09711 | |||
| 3083cdfa8b | |||
| 41dff5e7c0 | |||
| cad54ec5ea | |||
| 5d05672b2e | |||
| 1a4a26a0bb | |||
| 937a1e3030 | |||
| cd18718752 | |||
| 4f19c74cd7 | |||
| ab913e6ba5 | |||
| 3c38cc64ac | |||
| 81bd917039 | |||
| d1f3984178 | |||
| bf38fd536e | |||
| 6cd0bedf18 | |||
| a322227cb9 | |||
| a36755a35f | |||
| 82cce2cd8c | |||
| d3d340249a | |||
| ac1db5e2d0 | |||
| 397876ce86 | |||
| 0c6d6ca119 | |||
| 8a4c078f9a | |||
| 8b36cd35da | |||
| 4b3f782573 | |||
| d7f5271841 | |||
| 39e00da3ce | |||
| a397d4bab8 | |||
| f6f3fdbb3f | |||
| 367d7ed0fe | |||
| f094622c0f | |||
| c695712d12 | |||
| 962548e0aa | |||
| 32d1a064f3 | |||
| d09b6c8a6f | |||
| 5a20738a79 | |||
| a623a80fcf | |||
| 53fadef706 | |||
| c2aefd493d | |||
| 48fa268d7c | |||
| b93d741d33 | |||
| 56eb4ee1ea | |||
| 70ae7c8b6b | |||
| ec06cbcb0f | |||
| 598bda36aa | |||
| ea894360bd | |||
| 6475c3de7b | |||
| eac7ecd311 | |||
| 5855e84b8b | |||
| 6004cbebf1 | |||
| fe47ad05f4 | |||
| ab3d5d780a | |||
| 2d46526e8a | |||
| 845136d9ac | |||
| 9fc0ca9909 | |||
| a5f76083af | |||
| 0b56308234 | |||
| 4eacd9a89e | |||
| 53612c97a7 | |||
| f7bf494bd7 | |||
| 3b17057676 | |||
| 5aa694ac44 | |||
| 403ecdef54 | |||
| 0be6965447 | |||
| 3557dfe1ee | |||
| 74497a3374 | |||
| 9fa5f06e01 | |||
| e7f593d093 | |||
| 284f873ecc | |||
| b98a4471b7 | |||
| d94b1ad4c6 | |||
| 5701c88033 | |||
| 607ded1064 | |||
| 7ce53e468a | |||
| 3be6edbdb1 | |||
| 76d643a577 | |||
| 939cc7695e | |||
| 9af6394a43 | |||
| 0abf34ee0f | |||
| b24348455b | |||
| baa66b7256 | |||
| 9e3a1e5d36 | |||
| 8198deef0b | |||
| 3f7111aa97 | |||
| 532c193452 | |||
| 7738f9d1b8 | |||
| f0b86e8a6f | |||
| 180f994d6a | |||
| fe2dc6e48b | |||
| 9a097900c7 | |||
| 4b2ae132a0 | |||
| 6d81cc0193 | |||
| 794b766c24 | |||
| d81fc79294 | |||
| 538920439d | |||
| 7d15ec9b59 | |||
| dd049c8a26 | |||
| c06efc24cc | |||
| 938bcf43fb | |||
| 4c8bce8182 | |||
| a54b6dc231 | |||
| 590207ceba | |||
| 4031e66f40 | |||
| 0d697c7b01 | |||
| b995fa5de6 | |||
| c3c9cfd1f5 | |||
| dad7d8fbd5 | |||
| a096b52b3e | |||
| b2023f8f88 | |||
| ad92caaa04 | |||
| 8c7bcb0dd1 | |||
| 5f800e4ca1 | |||
| 066b056d57 | |||
| 71b7b7126d | |||
| 968981be58 | |||
| 91b2149fad | |||
| 8d52dc879d | |||
| 7f0f77dea7 | |||
| c41de6b145 | |||
| 571feb5ef2 | |||
| 9e62e9411a | |||
| c305bc6bb7 | |||
| 25f09af643 | |||
| a700b811f1 | |||
| 8483b2219e | |||
| 03016fe2a1 | |||
| cf2555ebe3 | |||
| aaf55257cf | |||
| f670b550dc | |||
| 16b389b443 | |||
| 145aebbf63 | |||
| 2dd0c9b9ac | |||
| 2f564e1d2f | |||
| 0245754eb7 | |||
| 897e15aa0e | |||
| 918367fa7e | |||
| ab8d34bd13 | |||
| 9c69094ea6 | |||
| 97a234ca89 | |||
| 9c40083aba | |||
| c5da8ae8ae | |||
| 589c8215b9 | |||
| 65ac565383 | |||
| be52e036b1 | |||
| dbc53d251b | |||
| 9b2ab55a90 | |||
|
|
0fd39e15e1 | ||
|
|
1d8aa79c46 | ||
|
|
c50404295b | ||
|
|
2c810898de | ||
|
|
1fc58cd80d | ||
|
|
f673550dc5 | ||
|
|
7759a28b45 | ||
|
|
b04849aae8 | ||
|
|
e19b459be5 | ||
|
|
a894866652 | ||
|
|
d0f394c50b | ||
|
|
99fd21fff1 | ||
|
|
bce6e388d4 | ||
| bce88a7980 | |||
| d9eb11f23b | |||
| 62f56a98d0 | |||
| aadd86660c | |||
| 5f2c656657 | |||
| 005f0da383 | |||
| 3e827facb3 | |||
| fb785009b4 | |||
| 28653f22e0 | |||
| 6b628200d2 | |||
| c27f346357 | |||
| 6736332508 | |||
| c099c91440 | |||
| 0b6fc51eaa | |||
| b6651eddbd | |||
| 46d49c2f77 | |||
| fec471f0ec | |||
| d8304808c4 | |||
| 3af410d0e6 | |||
| 1f9bf86359 | |||
| 4c44b7feb2 | |||
| b3934c2e9c | |||
| 8c45fc96ac | |||
| 13db4622fd | |||
| 981a7384f2 | |||
| 7bb857ca91 | |||
| c65e9f37f4 | |||
| af190078d9 | |||
| e199018f2d | |||
| c854734006 | |||
| 99ad250577 | |||
| 78cb61b9c6 | |||
| 9c57876554 | |||
| b24516fdd3 | |||
| 4ac176d66e | |||
| b0059cce03 | |||
| b7cecc06bf | |||
| a4f30d529a | |||
| e8215d86b8 | |||
| fe72ac2ee0 | |||
| d51fe16d4c | |||
| 86a8852ae8 | |||
|
|
5226bfd0ac | ||
|
|
da1fead66d | ||
|
|
262c8db970 | ||
|
|
78a0e1526b | ||
|
|
37dfdc25aa | ||
|
|
365b17ccf8 | ||
|
|
36e404a8ff | ||
|
|
9c65f5f5c6 | ||
|
|
fec5c22113 | ||
|
|
8dd3a15af1 | ||
|
|
9875e2b59c | ||
|
|
54a322f62c | ||
|
|
2dc0e02abe | ||
|
|
2014219019 | ||
|
|
7211776886 | ||
|
|
41df9da498 | ||
|
|
c90abb39c7 | ||
|
|
e520615fd9 | ||
|
|
23e20f83c8 | ||
|
|
07a66ef1d1 | ||
|
|
adb1ab9a7f | ||
|
|
3abfa0ae8b | ||
|
|
1a76180b0a | ||
|
|
42bb3f1c7c | ||
|
|
c8c0c96093 | ||
|
|
876af70074 | ||
|
|
48a39a28e4 | ||
|
|
3ec27485f4 | ||
|
|
5ca2ac6da1 | ||
|
|
7496879d5a | ||
|
|
ccd38f45ad | ||
|
|
609d246619 | ||
|
|
c02d16fd69 | ||
|
|
9b4d0093e0 | ||
|
|
085915699a | ||
|
|
f2d7684b12 | ||
|
|
d6cab5ae8b | ||
|
|
dcee7be534 | ||
|
|
b7f6b61f37 | ||
|
|
8868d22c9e | ||
|
|
1dca30c390 | ||
|
|
58c81b9c9f | ||
|
|
548254f9df | ||
|
|
09b165822d | ||
|
|
9f573675af | ||
|
|
5c02d0ca23 | ||
|
|
0df41f19d7 | ||
|
|
f552832ba3 | ||
|
|
2d0542e58d | ||
|
|
6b8be6e09d | ||
|
|
771120178c | ||
|
|
dd0a14213e | ||
|
|
354e68db53 | ||
|
|
88ff559a63 | ||
|
|
2623a3dff9 | ||
|
|
3ced7105c2 | ||
|
|
ee75702777 | ||
|
|
158d7d0daf | ||
|
|
115e8bf70d | ||
|
|
626525cae8 | ||
|
|
56f5ba1695 | ||
|
|
fd2dcca4e7 | ||
|
|
37fb128ea3 | ||
|
|
4265519649 | ||
|
|
f0ce7dd861 | ||
|
|
d3c8073d37 | ||
|
|
b3baf4037f | ||
|
|
20134c0e26 | ||
|
|
cc584aceed | ||
|
|
1368686356 | ||
|
|
2bf4759028 | ||
|
|
8ad90d0d1b | ||
|
|
23055eac38 | ||
|
|
4c886042d6 | ||
|
|
46d02a337d | ||
|
|
8b963cbb2b | ||
|
|
7dd3103d44 | ||
|
|
3257dc6d7e | ||
|
|
c3819c4d94 | ||
|
|
b0614f656b | ||
|
|
95b9a858cd | ||
|
|
cf8ae710dc | ||
|
|
51953d6e4e | ||
|
|
b871127b85 | ||
|
|
70d5e586c6 | ||
|
|
71372a078a | ||
|
|
17f3f0b2b4 | ||
|
|
bf6ac26140 | ||
|
|
a3ddb0e118 | ||
|
|
07cf7cd7a3 | ||
|
|
ed547bf316 | ||
|
|
3e2a4a73d6 | ||
|
|
bd4574a5e4 | ||
|
|
dc771a8056 | ||
|
|
fdbf788a6a | ||
|
|
803e55fccf | ||
|
|
b0a94ef24c | ||
|
|
b68b201c8e | ||
|
|
3666a182c5 | ||
|
|
753cd450e2 | ||
|
|
a0e85d34ac | ||
|
|
dec0169409 | ||
|
|
96852985f8 | ||
|
|
f1aac10aa6 | ||
|
|
3667cc9562 | ||
|
|
8c726fbfa4 | ||
|
|
7c67c04c2a | ||
|
|
7e1e873832 | ||
|
|
6e8e5acb02 | ||
|
|
3531d6e575 | ||
|
|
4640a9d444 | ||
|
|
3e4314ce1c | ||
|
|
eeab155682 | ||
|
|
d57e19c348 | ||
|
|
2d50ff36cc | ||
|
|
90e78d645a | ||
|
|
8dfe80b3b8 | ||
|
|
f3ac8466f8 | ||
|
|
12e11cc7c7 | ||
|
|
01e2781ddd | ||
|
|
d0b402c1d3 | ||
|
|
62874470bc | ||
|
|
2ed69a5fb8 | ||
|
|
d48d27d092 | ||
|
|
7abbbd8a08 | ||
|
|
0f4a7dd110 | ||
|
|
18782c08cd | ||
|
|
f29024f0b0 | ||
|
|
dc7b0c5333 | ||
|
|
c887514188 | ||
|
|
3d42f8eefb | ||
|
|
83cef6a363 | ||
|
|
23993523b6 | ||
|
|
dede22b065 | ||
|
|
585cc9fef4 | ||
|
|
6eface4997 | ||
|
|
d9ebec872e | ||
|
|
02577e8fd0 | ||
|
|
f74b443eeb | ||
|
|
95683a2bf1 | ||
|
|
3390cd904c | ||
|
|
44ac5914b3 | ||
|
|
15cd48b132 | ||
|
|
126ef6e2f7 | ||
|
|
c9b211d201 | ||
|
|
35b58f92b3 | ||
|
|
13f644145e | ||
|
|
b1e98ec3a8 | ||
|
|
044c5e5a75 | ||
|
|
58470cd1b1 | ||
|
|
858a755c85 | ||
|
|
a2fa52fd42 | ||
|
|
373d4df3ef | ||
|
|
1b783d433b | ||
|
|
89092e9df0 | ||
|
|
ff415a32cf | ||
|
|
31fa76e39c | ||
|
|
4088f61e5f | ||
|
|
f69cdb8eed | ||
|
|
966ee49ea9 | ||
|
|
d736c3d316 | ||
|
|
a6ffc24f39 | ||
|
|
0f07530564 | ||
|
|
6705a978fb | ||
|
|
4a4c26b180 | ||
|
|
83df744bc4 | ||
|
|
f404bfd5c2 | ||
|
|
9f20a5953b | ||
|
|
37643eeb04 | ||
|
|
8362cf8efe | ||
|
|
72ef54d6f7 | ||
|
|
f87a7cb18d | ||
|
|
db594586bc | ||
|
|
ebd303aff1 | ||
|
|
45357844a9 | ||
|
|
a21735f358 | ||
|
|
81c0d6f65a | ||
|
|
03ade79c9e | ||
|
|
52f2703850 | ||
|
|
e85d2b4aaf | ||
|
|
83d1fc54ca | ||
|
|
91136e007a | ||
|
|
f413ad2150 | ||
|
|
19bc0fc3dc | ||
|
|
60e47ab71e | ||
|
|
f1b36ac00a | ||
|
|
daceb8bcb1 | ||
|
|
3753fb5f62 | ||
|
|
83832c6114 | ||
|
|
908dab36c5 | ||
|
|
ec7c079ef8 | ||
|
|
1b13b9820f | ||
|
|
9288ac308e | ||
|
|
9b5a7c6c2c | ||
|
|
2c3dfef772 | ||
|
|
ad67258053 | ||
|
|
fa7b5bd155 | ||
|
|
20dc2383cc | ||
|
|
0170b6261f | ||
|
|
a9d7a8f7ca | ||
|
|
186119403b | ||
|
|
39a20b1cae | ||
|
|
07ec86ff7a | ||
|
|
fd8b8d105c | ||
|
|
6af633ae51 | ||
|
|
8f774e2f61 | ||
|
|
0204384823 | ||
|
|
27c12a63a1 | ||
|
|
d4caae1205 | ||
|
|
24d4710bd4 | ||
|
|
882b177df6 | ||
|
|
9a648c73e8 | ||
|
|
0b67aa4038 | ||
|
|
3458cbc622 | ||
|
|
fb2390fbf1 | ||
|
|
0c720d543a | ||
|
|
f3c143cc59 | ||
|
|
9207585f42 | ||
|
|
9ab9a58d2a | ||
|
|
97e443982b | ||
|
|
a4563511ca | ||
|
|
aea9b9a161 | ||
|
|
efd09d62ee | ||
|
|
d1109e3b65 | ||
|
|
7ef3cb34be | ||
|
|
e847b504a2 | ||
|
|
a03648de12 | ||
|
|
1535784802 | ||
|
|
5a40ecfc7f | ||
|
|
d5f9d30094 | ||
|
|
b9bec16929 | ||
|
|
596bb7e04c | ||
|
|
e24685d897 | ||
|
|
d0eb24a264 | ||
|
|
e26e92f1fb | ||
|
|
860bb2f6b9 | ||
|
|
93b527074a | ||
|
|
67c8a61f38 | ||
|
|
a43dfc80d8 | ||
|
|
3bb95e6afb | ||
|
|
d640ba3d34 | ||
|
|
21a570e173 |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,5 +1,12 @@
|
|||||||
|
#
|
||||||
|
.claude/
|
||||||
|
home/hosts/work/packages.local.nix
|
||||||
|
|
||||||
# ---> Nix
|
# ---> Nix
|
||||||
# Ignore build outputs from performing a nix-build or `nix build` command
|
# Ignore build outputs from performing a nix-build or `nix build` command
|
||||||
result
|
result
|
||||||
result-*
|
result-*
|
||||||
|
|
||||||
|
nixos-efi-vars.fd
|
||||||
|
|
||||||
|
/.pre-commit-config.yaml
|
||||||
|
|||||||
28
README.md
28
README.md
@@ -1,3 +1,27 @@
|
|||||||
# nixos
|
# NixOS flake
|
||||||
|
|
||||||
My NixOS config
|
## hosts
|
||||||
|
|
||||||
|
### NixOS
|
||||||
|
|
||||||
|
```
|
||||||
|
nixos-rebuild switch --flake .#<hostname>
|
||||||
|
```
|
||||||
|
|
||||||
|
### home manager
|
||||||
|
|
||||||
|
```
|
||||||
|
home-manager switch --flake .#work
|
||||||
|
```
|
||||||
|
|
||||||
|
### virtual machines
|
||||||
|
|
||||||
|
```
|
||||||
|
nix build -L '.#nixosConfigurations.vm.config.system.build.vmWithDisko'
|
||||||
|
./result/bin/disko-vm
|
||||||
|
```
|
||||||
|
|
||||||
|
## docs
|
||||||
|
|
||||||
|
* [deploy using colmena](./deploy/README.md)
|
||||||
|
* [SD installer images](./images/README.md)
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
system.stateVersion = "25.05";
|
|
||||||
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
./modules/bootloader.nix
|
|
||||||
./modules/hardware-configuration.nix # Include the results of the hardware scan.
|
|
||||||
./modules/networking.nix
|
|
||||||
./modules/users.nix
|
|
||||||
./modules/audio.nix
|
|
||||||
./modules/printing.nix
|
|
||||||
./modules/localization.nix
|
|
||||||
./modules/x.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
|
|
||||||
programs.git.enable = true;
|
|
||||||
programs.firefox.enable = true;
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ neovim ];
|
|
||||||
|
|
||||||
services.spice-vdagentd.enable = true;
|
|
||||||
services.openssh = {
|
|
||||||
enable = false;
|
|
||||||
startWhenNeeded = true;
|
|
||||||
settings = {
|
|
||||||
## hardening
|
|
||||||
PermitRootLogin = "no";
|
|
||||||
MaxAuthTries = 3;
|
|
||||||
LoginGraceTime = "1m";
|
|
||||||
PasswordAuthentication = false;
|
|
||||||
PermitEmptyPasswords = false;
|
|
||||||
ChallengeResponseAuthentication = false;
|
|
||||||
KerberosAuthentication = false;
|
|
||||||
GSSAPIAuthentication = false;
|
|
||||||
X11Forwarding = false;
|
|
||||||
PermitUserEnvironment = false;
|
|
||||||
AllowAgentForwarding = false;
|
|
||||||
AllowTcpForwarding = false;
|
|
||||||
PermitTunnel = false;
|
|
||||||
## sshd_config defaults on Arch Linux
|
|
||||||
KbdInteractiveAuthentication = false;
|
|
||||||
UsePAM = true;
|
|
||||||
PrintMotd = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
9
deploy/README.md
Normal file
9
deploy/README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# `colmena` deployments
|
||||||
|
|
||||||
|
* tags: `local`, `cloud`
|
||||||
|
* deployments can be made from `astyanax` and `andromache` hosts
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [docs: `colmena`](https://colmena.cli.rs/)
|
||||||
|
- [repo: `colmena`](https://github.com/zhaofengli/colmena)
|
||||||
32
deploy/colmena.nix
Normal file
32
deploy/colmena.nix
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
self,
|
||||||
|
inputs,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
mkNode = hostname: tags: {
|
||||||
|
imports = [ ../hosts/${hostname} ];
|
||||||
|
deployment = {
|
||||||
|
targetHost = self.nixosConfigurations.${hostname}.config.ssh.publicHostname;
|
||||||
|
targetUser = self.nixosConfigurations.${hostname}.config.ssh.username;
|
||||||
|
buildOnTarget = builtins.any (t: t != "local") tags;
|
||||||
|
inherit tags;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
inputs.colmena.lib.makeHive {
|
||||||
|
meta = {
|
||||||
|
nixpkgs = import inputs.nixpkgs {
|
||||||
|
localSystem = "x86_64-linux";
|
||||||
|
};
|
||||||
|
|
||||||
|
nodeNixpkgs = builtins.mapAttrs (_: v: v.pkgs) self.nixosConfigurations;
|
||||||
|
nodeSpecialArgs = builtins.mapAttrs (_: v: v._module.specialArgs or { }) self.nixosConfigurations;
|
||||||
|
};
|
||||||
|
|
||||||
|
astyanax = mkNode "astyanax" [ "local" ];
|
||||||
|
andromache = mkNode "andromache" [ "local" ];
|
||||||
|
vm = mkNode "vm" [ "local" ];
|
||||||
|
hecuba = mkNode "hecuba" [ "cloud" ];
|
||||||
|
eetion = mkNode "eetion" [ "arm" ];
|
||||||
|
}
|
||||||
59
dots/.bash_aliases/all
Normal file
59
dots/.bash_aliases/all
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
alias ..="cd .."
|
||||||
|
|
||||||
|
alias ls="ls --color=auto"
|
||||||
|
alias l="ls -1p"
|
||||||
|
alias ll="ls -lhp"
|
||||||
|
alias lt="ls -lhtp"
|
||||||
|
alias la="ls -lhap"
|
||||||
|
alias lta="ls -lhatp"
|
||||||
|
alias ldir="ls -dp" # list directories
|
||||||
|
|
||||||
|
alias grep="grep --color=auto"
|
||||||
|
|
||||||
|
alias rm="rm -I --preserve-root"
|
||||||
|
alias mv="mv -iv"
|
||||||
|
alias cp="cp -iv"
|
||||||
|
alias ln="ln -i"
|
||||||
|
alias mkdir="mkdir -pv"
|
||||||
|
alias chown="chown --preserve-root"
|
||||||
|
alias chmod="chmod --preserve-root"
|
||||||
|
alias chgrp="chgrp --preserve-root"
|
||||||
|
|
||||||
|
alias ip="ip --color"
|
||||||
|
alias ipa="ip -brief address"
|
||||||
|
alias ipl="ip -brief link"
|
||||||
|
alias ipr="ip route"
|
||||||
|
|
||||||
|
alias clip="xclip -sel clip"
|
||||||
|
|
||||||
|
alias df="df -kTh"
|
||||||
|
alias fzfpac="pacman -Slq | fzf -m --preview 'pacman -Si {1}' | xargs -ro sudo pacman -S"
|
||||||
|
alias path='echo -e ${PATH//:/\\n}' # Pretty print path variables
|
||||||
|
|
||||||
|
# Programs
|
||||||
|
alias h="history"
|
||||||
|
alias o="xdg-open"
|
||||||
|
alias v="nvim"
|
||||||
|
alias vf="fzf --bind 'enter:become(nvim {})'"
|
||||||
|
alias g='git'
|
||||||
|
alias k="kubectl"
|
||||||
|
alias t='task'
|
||||||
|
alias tsh='tasksh'
|
||||||
|
alias z='zathura --fork'
|
||||||
|
alias f='fzf'
|
||||||
|
alias fm='pcmanfm &>/dev/null &'
|
||||||
|
alias mm='micromamba'
|
||||||
|
|
||||||
|
# Languages
|
||||||
|
alias r5="plt-r5rs --no-prim"
|
||||||
|
alias hs="ghci"
|
||||||
|
alias pl="swipl"
|
||||||
|
alias py="python"
|
||||||
|
alias r="R"
|
||||||
|
|
||||||
|
alias azerty="setxkbmap be"
|
||||||
|
alias qwerty="setxkbmap us"
|
||||||
|
alias cole="setxkbmap us -variant colemak"
|
||||||
16
dots/.bash_aliases/dualboot
Normal file
16
dots/.bash_aliases/dualboot
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
reboot-to-windows ()
|
||||||
|
{
|
||||||
|
# Check if grub is installed by checking if the command exists, if it does
|
||||||
|
# not, then assume that the system is using systemd-boot
|
||||||
|
if grub-install --version &>/dev/null; then
|
||||||
|
windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2)
|
||||||
|
sudo grub-reboot "$windows_title"
|
||||||
|
echo "Grub set to reboot to Windows"
|
||||||
|
else
|
||||||
|
sudo bootctl set-oneshot windows.conf
|
||||||
|
echo "Systemd set to reboot to Windows"
|
||||||
|
fi
|
||||||
|
}
|
||||||
7
dots/.bash_aliases/hosts/desktop-arch
Normal file
7
dots/.bash_aliases/hosts/desktop-arch
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
source "$HOME/.bash_aliases/dualboot"
|
||||||
|
|
||||||
|
alias lm='ddcutil setvcp 10'
|
||||||
|
alias cuda-available='python -c "import torch; print(\"CUDA enabled:\", torch.cuda.is_available());"'
|
||||||
6
dots/.bash_aliases/hosts/flex-arch
Normal file
6
dots/.bash_aliases/hosts/flex-arch
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
source "$HOME/.bash_aliases/dualboot"
|
||||||
|
|
||||||
|
alias lm='xbacklight -set'
|
||||||
35
dots/.bash_aliases/lang-js
Normal file
35
dots/.bash_aliases/lang-js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
alias js="node"
|
||||||
|
alias ts="ts-node"
|
||||||
|
|
||||||
|
yarn() {
|
||||||
|
if [[ -f "package-lock.json" ]]; then
|
||||||
|
echo "WARNING: package-lock.json exists"
|
||||||
|
read -p "Are you sure you want to run yarn? [y/N] " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
command yarn "$@"
|
||||||
|
else
|
||||||
|
echo "Aborted"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
command yarn "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
npm() {
|
||||||
|
if [[ -f "yarn.lock" ]]; then
|
||||||
|
echo "WARNING: yarn.lock exists"
|
||||||
|
read -p "Are you sure you want to run npm? [y/N] " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
command npm "$@"
|
||||||
|
else
|
||||||
|
echo "Aborted"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
command npm "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
10
dots/.bash_profile
Normal file
10
dots/.bash_profile
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
[[ -f ~/.bashrc ]] && . ~/.bashrc
|
||||||
|
|
||||||
|
export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
|
||||||
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
|
||||||
|
if [[ -z "${DISPLAY}" ]] && [[ "${XDG_VTNR}" -eq 1 ]]; then
|
||||||
|
exec startx "$HOME/.config/X11/xinitrc" >& ~/.xsession-errors
|
||||||
|
fi
|
||||||
119
dots/.bashrc
Normal file
119
dots/.bashrc
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# shellcheck disable=SC1091,SC1090
|
||||||
|
# If not running interactively, don't do anything
|
||||||
|
[[ $- != *i* ]] && return
|
||||||
|
|
||||||
|
. /etc/os-release
|
||||||
|
|
||||||
|
# Editor & prompt configuration
|
||||||
|
[ -f "$HOME/.bashrc.d/editor" ] && . "$HOME/.bashrc.d/editor"
|
||||||
|
[ -f "$HOME/.bashrc.d/prompt" ] && . "$HOME/.bashrc.d/prompt"
|
||||||
|
|
||||||
|
# Aliases {{{
|
||||||
|
# Load aliases dynamically
|
||||||
|
[ -f "$HOME/.bash_aliases/all" ] && . "$HOME/.bash_aliases/all"
|
||||||
|
[ -f "$HOME/.bash_aliases/hosts/$HOSTNAME" ] && . "$HOME/.bash_aliases/hosts/$HOSTNAME"
|
||||||
|
[ -f "$HOME/.bash_aliases/private" ] && . "$HOME/.bash_aliases/private"
|
||||||
|
[ -f "$HOME/.bash_aliases/lang-js" ] && . "$HOME/.bash_aliases/lang-js"
|
||||||
|
|
||||||
|
# Completions {{{
|
||||||
|
[ -d "$HOME/.bash_completions" ] && for file in "$HOME/.bash_completions"/*; do
|
||||||
|
[ -f "$file" ] && . "$file"
|
||||||
|
done
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Host-specific and private configurations
|
||||||
|
[ -f "$HOME/.bashrc.d/hosts/$HOSTNAME" ] && . "$HOME/.bashrc.d/hosts/$HOSTNAME"
|
||||||
|
[ -f "$HOME/.bashrc.d/private" ] && . "$HOME/.bashrc.d/private"
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Prompt {{{
|
||||||
|
[ -f "$HOME/.bashrc.d/prompt" ] && . "$HOME/.bashrc.d/prompt"
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Path {{{
|
||||||
|
# Add ~/.bin to PATH
|
||||||
|
export PATH=~/.bin:$PATH
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# History {{{
|
||||||
|
export HISTSIZE=999999
|
||||||
|
export HISTFILESIZE= # Unlimited
|
||||||
|
export HISTCONTROL=ignoreboth:erasedups
|
||||||
|
export HISTIGNORE=" *:clear:l:ls:cd" # Omit commands from history (e.g. those prepended with space)
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Man pages {{{
|
||||||
|
# See `:h :Man` in NeoVim
|
||||||
|
export MANWIDTH=80
|
||||||
|
export PAGER=nvimpager
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# X11 {{{
|
||||||
|
export XDG_SESSION_TYPE=X11
|
||||||
|
export XDG_CONFIG_HOME=$HOME/.config
|
||||||
|
export XDG_DATA_HOME=$HOME/.local/share
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# FZF {{{
|
||||||
|
# Check if fzf is installed
|
||||||
|
if [ -f "/usr/bin/fzf" ]; then
|
||||||
|
# Fuzzy finder setup
|
||||||
|
export FZF_COMPLETION_TRIGGER='**'
|
||||||
|
export FZF_DEFAULT_COMMAND='ag -g ""'
|
||||||
|
export FZF_DEFAULT_OPTS="
|
||||||
|
--pointer='❭'
|
||||||
|
--height 10%
|
||||||
|
--color=fg:-1,bg:-1"
|
||||||
|
export FZF_CTRL_T_COMMAND="${FZF_DEFAULT_COMMAND}"
|
||||||
|
export FZF_CTRL_T_OPTS="--preview='bat {} | head -500'"
|
||||||
|
|
||||||
|
if [[ $ID == "raspbian" ]]; then
|
||||||
|
. /usr/share/doc/fzf/examples/completion.bash
|
||||||
|
. /usr/share/doc/fzf/examples/key-bindings.bash
|
||||||
|
elif [[ $ID == "arch" ]]; then
|
||||||
|
. /usr/share/fzf/completion.bash
|
||||||
|
. /usr/share/fzf/key-bindings.bash
|
||||||
|
fi
|
||||||
|
|
||||||
|
_fzf_setup_completion path vim zathura xournalpp nvim mpv
|
||||||
|
else
|
||||||
|
echo "fzf not installed"
|
||||||
|
fi
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Go {{{
|
||||||
|
export GOPATH="${XDG_DATA_HOME}/go"
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Jupyter {{{
|
||||||
|
export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Conda {{{
|
||||||
|
[ -f /opt/miniconda3/etc/profile.d/conda.sh ] && . /opt/miniconda3/etc/profile.d/conda.sh
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Zettelkasten {{{
|
||||||
|
export ZK_PATH="$HOME/.zk"
|
||||||
|
|
||||||
|
# SSH Agent {{{
|
||||||
|
if [[ -z "${SSH_CONNECTION}" ]]; then
|
||||||
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
|
||||||
|
fi
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
|
# Codi
|
||||||
|
# Usage: codi [filetype] [filename]
|
||||||
|
codi() {
|
||||||
|
local syntax="${1:-python}"
|
||||||
|
shift
|
||||||
|
nvim -c \
|
||||||
|
"let g:startify_disable_at_vimenter = 1 |\
|
||||||
|
set bt=nofile ls=0 noru nonu nornu |\
|
||||||
|
hi ColorColumn ctermbg=NONE |\
|
||||||
|
hi VertSplit ctermbg=NONE |\
|
||||||
|
hi NonText ctermfg=0 |\
|
||||||
|
Codi $syntax" "$@"
|
||||||
|
}
|
||||||
6
dots/.bashrc.d/editor
Normal file
6
dots/.bashrc.d/editor
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
# Set NeoVim as default editor
|
||||||
|
export EDITOR=nvim
|
||||||
|
export SUDO_EDITOR="$EDITOR"
|
||||||
1
dots/.bashrc.d/hosts/desktop-arch
Normal file
1
dots/.bashrc.d/hosts/desktop-arch
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Desktop configuration
|
||||||
19
dots/.bashrc.d/hosts/flex-arch
Normal file
19
dots/.bashrc.d/hosts/flex-arch
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
# >>> mamba initialize >>>
|
||||||
|
# !! Contents within this block are managed by 'mamba init' !!
|
||||||
|
export MAMBA_EXE="/usr/bin/micromamba";
|
||||||
|
export MAMBA_ROOT_PREFIX="/home/h/.local/share/micromamba";
|
||||||
|
__mamba_setup="$("$MAMBA_EXE" shell hook --shell bash --prefix "$MAMBA_ROOT_PREFIX" 2> /dev/null)"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
eval "$__mamba_setup"
|
||||||
|
else
|
||||||
|
if [ -f "/home/h/.local/share/micromamba/etc/profile.d/micromamba.sh" ]; then
|
||||||
|
. "/home/h/.local/share/micromamba/etc/profile.d/micromamba.sh"
|
||||||
|
else
|
||||||
|
export PATH="/home/h/.local/share/micromamba/bin:$PATH" # extra space after export prevents interference from conda init
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
unset __mamba_setup
|
||||||
|
# <<< mamba initialize <<<
|
||||||
22
dots/.bashrc.d/prompt
Normal file
22
dots/.bashrc.d/prompt
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# shellcheck shell=bash
|
||||||
|
# vim: set ft=bash :
|
||||||
|
|
||||||
|
get_branch_name() {
|
||||||
|
git symbolic-ref --quiet --short HEAD 2>/dev/null \
|
||||||
|
|| git rev-parse --short HEAD 2>/dev/null \
|
||||||
|
|| echo 'some branch'
|
||||||
|
}
|
||||||
|
get_git_info() {
|
||||||
|
git rev-parse --is-inside-work-tree &>/dev/null || return
|
||||||
|
echo -e "($(get_branch_name))"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ $SSH_CONNECTION ]]; then
|
||||||
|
PS1='\[\033[01;31m\]\u@\h\[\033[00m\] $(get_git_info)\W❭\[$(tput sgr0)\] '
|
||||||
|
else
|
||||||
|
PS1='\u $(get_git_info)\W❭\[$(tput sgr0)\] '
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ellipsis when deep in directory
|
||||||
|
export PROMPT_DIRTRIM=2
|
||||||
|
export PS1
|
||||||
26
dots/.bin/README.md
Normal file
26
dots/.bin/README.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Scripts
|
||||||
|
|
||||||
|
Mostly tiny helper scripts \& experiments, some more useful than others.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Make sure the scripts are in your `$PATH` and executable.
|
||||||
|
|
||||||
|
To add the complete directory of scripts to your `$PATH`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export PATH=~/.bin:$PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
To make a any script `<script>` executable:
|
||||||
|
```bash
|
||||||
|
chmod +x <script>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
Statusbar scripts are prefixed with `sb` under the assumption you're using
|
||||||
|
`polybar` (scripts my need changes to be used with different statusbars).
|
||||||
|
|
||||||
|
Some scripts have dependencies (e.g. `fzf`, `jq`, `xclip`, ...), make sure you
|
||||||
|
have them installed.
|
||||||
6
dots/.bin/aurpac
Executable file
6
dots/.bin/aurpac
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Tiny AUR clone helper
|
||||||
|
# aurpac <package-name>
|
||||||
|
|
||||||
|
git clone "https://aur.archlinux.org/$1.git"
|
||||||
32
dots/.bin/bak
Executable file
32
dots/.bin/bak
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# back up a file by copying it to a new file with a .bak extension
|
||||||
|
# reference: https://askubuntu.com/questions/962489/is-there-any-way-to-create-backup-copy-of-a-file-without-type-its-name-twice
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: bak [-t|--timestamp] <file to back up>"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
timestamp=false
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-t|--timestamp)
|
||||||
|
timestamp=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[ $# -eq 1 ] || usage
|
||||||
|
|
||||||
|
if $timestamp; then
|
||||||
|
date="$(date +%Y-%m-%d_%H-%M-%S)"
|
||||||
|
cp -vpn "$1"{,."$date".bak}
|
||||||
|
else
|
||||||
|
cp -vpn "$1"{,.bak}
|
||||||
|
fi
|
||||||
3
dots/.bin/calc
Executable file
3
dots/.bin/calc
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/env/bin bash
|
||||||
|
|
||||||
|
ipython -i /home/h/.bin/calc.py
|
||||||
5
dots/.bin/cam
Executable file
5
dots/.bin/cam
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Open webcam window
|
||||||
|
|
||||||
|
ffplay -f v4l2 -x 640 -y 480 -i /dev/video0 >/dev/null 2>&1 & disown
|
||||||
7
dots/.bin/count-json-objects.js
Executable file
7
dots/.bin/count-json-objects.js
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const fs = require('fs')
|
||||||
|
|
||||||
|
const objLength = obj => Object.keys(obj).length
|
||||||
|
|
||||||
|
fs.readFile(process.argv[2], (err, data) => (err ? console.error(err) : console.log(objLength(JSON.parse(data)))))
|
||||||
3
dots/.bin/devdocs
Executable file
3
dots/.bin/devdocs
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
xdg-open https://devdocs.io/offline
|
||||||
10
dots/.bin/fzf-bluetooth
Executable file
10
dots/.bin/fzf-bluetooth
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
options="Mouse\nHeadphones"
|
||||||
|
|
||||||
|
selected="$(echo -e "$options" | fzf)"
|
||||||
|
|
||||||
|
case "$selected" in
|
||||||
|
"Mouse") toggle-bt-device E4:19:21:56:C8:70;;
|
||||||
|
"Headphones") toggle-bt-device 38:18:4C:D4:74:42;;
|
||||||
|
esac
|
||||||
30
dots/.bin/fzf-book
Executable file
30
dots/.bin/fzf-book
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Generate menu of book filenames and save paths
|
||||||
|
# Preview window contains metadata
|
||||||
|
|
||||||
|
function get_book_paths {
|
||||||
|
find /home/h/doc/books/ -regex '.*\.\(pdf\|epub\|djvu\)' -type f | sort
|
||||||
|
}
|
||||||
|
|
||||||
|
function select_file {
|
||||||
|
get_book_paths | fzf --delimiter=/ --with-nth=-1
|
||||||
|
}
|
||||||
|
|
||||||
|
function open {
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
echo "Opening \"$1\""
|
||||||
|
zathura "$1" --fork
|
||||||
|
else
|
||||||
|
echo "No file selected"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--open) open "$(select_file)" ;;
|
||||||
|
--help) printf "open \n" >&2 ;;
|
||||||
|
*) open "$(select_file)" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[[ -n "$selected" ]] && xdg-open "$selected" &> /dev/null & disown
|
||||||
30
dots/.bin/fzf-fontnames
Executable file
30
dots/.bin/fzf-fontnames
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
fn="/tmp/fontnames.txt"
|
||||||
|
|
||||||
|
contains_dash() {
|
||||||
|
[[ "$1" =~ - ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
update() {
|
||||||
|
echo "" > "$fn"
|
||||||
|
|
||||||
|
font_list=$(fc-list -f "%{fullname}\n")
|
||||||
|
|
||||||
|
echo "$font_list" | while read line ; do
|
||||||
|
|
||||||
|
first="$(echo "$line" | cut -d',' -f1)"
|
||||||
|
last="$(echo "$line" | cut -d',' -f2)"
|
||||||
|
|
||||||
|
if $(contains_dash "$first"); then
|
||||||
|
echo "$last" >> "$fn"
|
||||||
|
else
|
||||||
|
echo "$first" >> "$fn"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--update) update;;
|
||||||
|
*) cat "$fn" | sort | uniq | awk 'NF' | fzf;;
|
||||||
|
esac
|
||||||
3
dots/.bin/fzf-ssh
Executable file
3
dots/.bin/fzf-ssh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
ssh "$(ssh-hosts | fzf)"
|
||||||
3
dots/.bin/get-anki-decks
Executable file
3
dots/.bin/get-anki-decks
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
curl 127.0.0.1:8765 -X POST -d '{"action": "deckNames", "version": 6}' | jq '.result[]' -r
|
||||||
12
dots/.bin/get-anki-reviews-status
Executable file
12
dots/.bin/get-anki-reviews-status
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Get Anki review status from exit code
|
||||||
|
|
||||||
|
num_reviews="$(cat /tmp/anki-reviews)"
|
||||||
|
|
||||||
|
if [ "$num_reviews" -ge "400" ]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
221
dots/.bin/git-cb
Executable file
221
dots/.bin/git-cb
Executable file
@@ -0,0 +1,221 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
readonly ALLOWED_MAIN_BRANCHES=("main" "master" "develop")
|
||||||
|
readonly BRANCH_TYPES=(
|
||||||
|
"feat For new features"
|
||||||
|
"hotfix For urgent fixes"
|
||||||
|
"fix For fixes"
|
||||||
|
"release For preparing releases"
|
||||||
|
"chore For non-code tasks"
|
||||||
|
)
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo "Error: $1" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
warn() {
|
||||||
|
echo "Warning: $1" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
check_dependencies() {
|
||||||
|
local missing=()
|
||||||
|
for cmd in git fzf; do
|
||||||
|
if ! command -v "$cmd" &> /dev/null; then
|
||||||
|
missing+=("$cmd")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#missing[@]} -gt 0 ]]; then
|
||||||
|
error "Missing required commands: ${missing[*]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_git_repo() {
|
||||||
|
if ! git rev-parse --git-dir &> /dev/null; then
|
||||||
|
error "Not in a git repository"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
check_current_branch() {
|
||||||
|
local current_branch
|
||||||
|
current_branch=$(git branch --show-current)
|
||||||
|
|
||||||
|
local is_main_branch=false
|
||||||
|
for branch in "${ALLOWED_MAIN_BRANCHES[@]}"; do
|
||||||
|
if [[ "$current_branch" == "$branch" ]]; then
|
||||||
|
is_main_branch=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$is_main_branch" == false ]]; then
|
||||||
|
warn "Not branching from a main branch (current: $current_branch)"
|
||||||
|
read -rp "Continue anyway? [y/N] " response
|
||||||
|
if [[ ! "$response" =~ ^[Yy]$ ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_user_email() {
|
||||||
|
local email
|
||||||
|
email=$(git config --get user.email 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -z "$email" ]]; then
|
||||||
|
error "Git user email not configured. Run: git config user.email 'your@email.com'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$email"
|
||||||
|
}
|
||||||
|
|
||||||
|
select_branch_type() {
|
||||||
|
local selected
|
||||||
|
selected=$(printf '%s\n' "${BRANCH_TYPES[@]}" | \
|
||||||
|
fzf --prompt="Select branch type: " \
|
||||||
|
--height=40% \
|
||||||
|
--border \
|
||||||
|
--info=inline) || error "Branch type selection cancelled"
|
||||||
|
|
||||||
|
echo "${selected%% *}"
|
||||||
|
}
|
||||||
|
|
||||||
|
select_jira_ticket() {
|
||||||
|
local email=$1
|
||||||
|
|
||||||
|
if ! command -v jira &> /dev/null; then
|
||||||
|
warn "Jira CLI not found. Proceeding without ticket ID."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Fetching Jira tickets for $email..." >&2
|
||||||
|
local jira_data
|
||||||
|
jira_data=$(jira issue list --assignee="$email" --order-by=priority --plain --no-headers 2>/dev/null) || {
|
||||||
|
warn "Could not fetch Jira tickets. Proceeding without ticket ID."
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -z "$jira_data" ]]; then
|
||||||
|
warn "No Jira tickets found. Proceeding without ticket ID."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$jira_data" >&2
|
||||||
|
echo "" >&2
|
||||||
|
|
||||||
|
local formatted_tickets
|
||||||
|
formatted_tickets=$(echo "$jira_data" | awk '{
|
||||||
|
ticket_id = $2
|
||||||
|
$1 = $2 = ""
|
||||||
|
description = $0
|
||||||
|
gsub(/^[ \t]+/, "", description)
|
||||||
|
if (length(description) > 60) {
|
||||||
|
description = substr(description, 1, 57) "..."
|
||||||
|
}
|
||||||
|
print ticket_id " - " description
|
||||||
|
}')
|
||||||
|
|
||||||
|
if [[ -z "$formatted_tickets" ]]; then
|
||||||
|
warn "No tickets to display. Proceeding without ticket ID."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local selected_ticket
|
||||||
|
selected_ticket=$(echo -e "SKIP - Create branch without ticket ID\n$formatted_tickets" | \
|
||||||
|
fzf --prompt="Select Jira ticket (or skip): " \
|
||||||
|
--height=40% \
|
||||||
|
--border \
|
||||||
|
--info=inline) || error "Ticket selection cancelled"
|
||||||
|
|
||||||
|
if [[ "$selected_ticket" != "SKIP"* ]]; then
|
||||||
|
echo "${selected_ticket%% -*}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_branch_description() {
|
||||||
|
local ticket_id=$1
|
||||||
|
local editor="${EDITOR:-vi}"
|
||||||
|
local tmpfile
|
||||||
|
tmpfile=$(mktemp)
|
||||||
|
|
||||||
|
trap "rm -f '$tmpfile'" EXIT
|
||||||
|
|
||||||
|
if [[ -n "$ticket_id" ]]; then
|
||||||
|
cat > "$tmpfile" << EOF
|
||||||
|
# Selected ticket: $ticket_id
|
||||||
|
# Enter your branch description below in kebab-case (e.g., my-description):
|
||||||
|
# The ticket ID will be automatically included in the branch name.
|
||||||
|
# Lines starting with # will be ignored.
|
||||||
|
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat > "$tmpfile" << 'EOF'
|
||||||
|
# Enter your branch description below in kebab-case (e.g., my-description):
|
||||||
|
# Lines starting with # will be ignored.
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$editor" "$tmpfile" < /dev/tty > /dev/tty
|
||||||
|
|
||||||
|
local desc
|
||||||
|
desc=$(grep -v '^#' "$tmpfile" | tr -d '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||||
|
|
||||||
|
echo "$desc"
|
||||||
|
}
|
||||||
|
|
||||||
|
validate_description() {
|
||||||
|
local desc=$1
|
||||||
|
|
||||||
|
if [[ -z "$desc" ]]; then
|
||||||
|
error "No description provided"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! "$desc" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
|
||||||
|
error "Invalid branch description format.\nUse lowercase letters, numbers, and hyphens only.\nNo trailing or consecutive hyphens allowed.\nExample: my-feature-description"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
create_branch() {
|
||||||
|
local type=$1
|
||||||
|
local ticket_id=$2
|
||||||
|
local desc=$3
|
||||||
|
|
||||||
|
local branch
|
||||||
|
if [[ -n "$ticket_id" ]]; then
|
||||||
|
branch="$type/$ticket_id-$desc"
|
||||||
|
else
|
||||||
|
branch="$type/$desc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git show-ref --verify --quiet "refs/heads/$branch"; then
|
||||||
|
error "Branch '$branch' already exists"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Creating branch: $branch"
|
||||||
|
git checkout -b "$branch"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
check_dependencies
|
||||||
|
check_git_repo
|
||||||
|
check_current_branch
|
||||||
|
|
||||||
|
local email
|
||||||
|
email=$(get_user_email)
|
||||||
|
|
||||||
|
local type
|
||||||
|
type=$(select_branch_type)
|
||||||
|
|
||||||
|
echo "About to call select_jira_ticket" >&2
|
||||||
|
local ticket_id=""
|
||||||
|
ticket_id=$(select_jira_ticket "$email")
|
||||||
|
local desc
|
||||||
|
desc=$(get_branch_description "$ticket_id")
|
||||||
|
validate_description "$desc"
|
||||||
|
create_branch "$type" "$ticket_id" "$desc"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
2
dots/.bin/jack-to-bt
Executable file
2
dots/.bin/jack-to-bt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
pactl load-module module-jack-source connect=0
|
||||||
|
pactl load-module module-loopback source=jack_in
|
||||||
5
dots/.bin/json-to-yaml
Executable file
5
dots/.bin/json-to-yaml
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import yaml, json, sys
|
||||||
|
|
||||||
|
print(yaml.dump(json.load(open(sys.argv[1])), allow_unicode=True), end='')
|
||||||
8
dots/.bin/notify
Executable file
8
dots/.bin/notify
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Pipe into notify-send
|
||||||
|
#
|
||||||
|
# e.g. `echo "Hello world" | notify`
|
||||||
|
|
||||||
|
read -r msg
|
||||||
|
notify-send "$msg" "$@"
|
||||||
3
dots/.bin/pacman-remove-unrequired
Executable file
3
dots/.bin/pacman-remove-unrequired
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sudo pacman -Qtdq | sudo pacman -Rns -
|
||||||
3
dots/.bin/pdftitle
Executable file
3
dots/.bin/pdftitle
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
pdfinfo "$1" | head -n 1 | awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}'
|
||||||
87
dots/.bin/pomo
Executable file
87
dots/.bin/pomo
Executable file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# vim: set filetype=python:
|
||||||
|
"""
|
||||||
|
Pomodoro timer
|
||||||
|
|
||||||
|
- Writes pomodoro timer to temporary file so statusbar can read it
|
||||||
|
- Notification on session finish
|
||||||
|
- Notification on break finish
|
||||||
|
"""
|
||||||
|
|
||||||
|
import atexit
|
||||||
|
import os
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
from plyer import notification
|
||||||
|
|
||||||
|
POMO_PATH = os.path.join(
|
||||||
|
os.getenv("XDG_DATA_HOME", os.path.expanduser("~/.local/share")), "pomo"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@atexit.register
|
||||||
|
def clear():
|
||||||
|
if os.path.exists(POMO_PATH):
|
||||||
|
os.remove(POMO_PATH)
|
||||||
|
|
||||||
|
|
||||||
|
def format_mins_secs(mins, secs):
|
||||||
|
return f"{mins:02d}:{secs:02d}"
|
||||||
|
|
||||||
|
|
||||||
|
def make_countdown():
|
||||||
|
def countdown(duration):
|
||||||
|
while duration != 0:
|
||||||
|
mins = duration // 60
|
||||||
|
secs = duration % 60
|
||||||
|
time_str = format_mins_secs(mins, secs)
|
||||||
|
os.system(f'echo -n "{time_str}" > {POMO_PATH}')
|
||||||
|
sleep(1)
|
||||||
|
duration -= 1
|
||||||
|
|
||||||
|
return countdown
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
work_duration = args.work_duration * 60
|
||||||
|
break_duration = args.break_duration * 60
|
||||||
|
repeats = args.repeats
|
||||||
|
|
||||||
|
work_countdown = make_countdown()
|
||||||
|
break_countdown = make_countdown()
|
||||||
|
|
||||||
|
while repeats != 0:
|
||||||
|
notification.notify(title="Get started")
|
||||||
|
work_countdown(work_duration)
|
||||||
|
if break_duration != 0:
|
||||||
|
notification.notify(title="Time for a break")
|
||||||
|
break_countdown(break_duration)
|
||||||
|
notification.notify(title="Break is over, back to work")
|
||||||
|
repeats -= 1
|
||||||
|
|
||||||
|
|
||||||
|
def handle_signal(signal, frame):
|
||||||
|
# Wait for clear to finish
|
||||||
|
clear()
|
||||||
|
print("Exiting")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
parser = ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
"-w", "--work-duration", type=int, help="Session duration", default=25
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-b", "--break-duration", type=int, help="Break duration", default=5
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-r", "--repeats", type=int, help="Numer of sessions", default=1
|
||||||
|
)
|
||||||
|
parser.add_argument("-c", "--clear", action="store_true", help="Clear timer")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
main(args)
|
||||||
9
dots/.bin/r5rs
Executable file
9
dots/.bin/r5rs
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
session="r5rs"
|
||||||
|
|
||||||
|
tmux attach-session -t "$session" || tmux new-session -s "$session" \; \
|
||||||
|
split-window -h -t $session \; \
|
||||||
|
send-keys -t 1 "nvim -c \"set ft=scheme\"" C-m \; \
|
||||||
|
send-keys -t 2 "plt-r5rs --no-prim" C-m \; \
|
||||||
|
select-pane -t 1
|
||||||
3
dots/.bin/remove-markdown-relative-link-prefix
Executable file
3
dots/.bin/remove-markdown-relative-link-prefix
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sed -i -r 's/\[*\]\(\.\/([A-z-]*.md)/\]\(\1/g' *.md
|
||||||
19
dots/.bin/restore-passwddb
Executable file
19
dots/.bin/restore-passwddb
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Backup existing password databases and
|
||||||
|
# database keys (using date in filename date -u
|
||||||
|
# +%Y-%m-%d_%H-%M-%S)
|
||||||
|
|
||||||
|
RCLONE_REMOTE="proton-drive"
|
||||||
|
|
||||||
|
for f in "$HOME/doc"/*.{kdbx,kdbx.key}; do
|
||||||
|
[ -e "$f" ] || continue
|
||||||
|
echo "Backing up $f to $f-$(date -u +%Y-%m-%d_%H-%M-%S)"
|
||||||
|
cp "$f" "$f-$(date -u +%Y-%m-%d_%H-%M-%S)"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Restoring KeePassXC databases and database keys"
|
||||||
|
rclone copyto \
|
||||||
|
"$RCLONE_REMOTE:doc"/ "$HOME/doc/" \
|
||||||
|
--progress \
|
||||||
|
--include "/*.{kdbx,kdbx.key}"
|
||||||
23
dots/.bin/reverse-tether-linux-android
Executable file
23
dots/.bin/reverse-tether-linux-android
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
function start() {
|
||||||
|
adb start-server
|
||||||
|
nohup gnirehtet autorun &> /dev/null &
|
||||||
|
printf "Started reverse tethering \n"
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop() {
|
||||||
|
adb kill-server
|
||||||
|
gnirehtet stop
|
||||||
|
pkill gnirehtet
|
||||||
|
printf "Stopped reverse tethering \n"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start) start ;;
|
||||||
|
stop) stop ;;
|
||||||
|
restart) stop; start ;;
|
||||||
|
*) printf "start | stop | restart \n" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
13
dots/.bin/rofi-trans
Executable file
13
dots/.bin/rofi-trans
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
options="nl:en\nen:nl\nnl:fr\nfr:nl\nen:fr\nfr:en\nnl:de\nde:nl"
|
||||||
|
|
||||||
|
selected=$(echo -en "$options" | rofi -dmenu -p "source?:target?" -i)
|
||||||
|
|
||||||
|
# notify-send --app-name= -t 3000 "$(trans "$selected" -b "$(rofi -dmenu -p "$selected" &)" \
|
||||||
|
# | tr -d '\n' \
|
||||||
|
# | xclip -sel clip -f)"
|
||||||
|
|
||||||
|
translation="$(trans "$selected" -b "$(rofi -dmenu -p "$selected" &)" | tr -d '\n')"
|
||||||
|
|
||||||
|
echo -e "Copy" | rofi -p "translation" -dmenu -i -mesg "$translation" | xargs -I{} echo -n "$translation" | xclip -selection clipboard
|
||||||
75
dots/.bin/save-passwddb
Executable file
75
dots/.bin/save-passwddb
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Save (encrypted) password database to cloud storage
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# save-passwddb - Save databases to cloud
|
||||||
|
# save-passwddb init - Restore databases from cloud (with single backup archive)
|
||||||
|
|
||||||
|
RCLONE_REMOTE="proton"
|
||||||
|
SOURCE_DIR="$HOME/doc"
|
||||||
|
TARGET_DIR="$RCLONE_REMOTE:doc"
|
||||||
|
BACKUP_DIR="$HOME/doc/bak"
|
||||||
|
|
||||||
|
function save_databases() {
|
||||||
|
if [ 0 -lt "$(ls $SOURCE_DIR/*.kdbx 2>/dev/null | wc -w)" ]; then
|
||||||
|
echo "[save] Saving KeePassXC databases and database keys"
|
||||||
|
rclone copy "$SOURCE_DIR" "$TARGET_DIR" \
|
||||||
|
--include "/*.{kdbx,kdbx.key}" \
|
||||||
|
--progress
|
||||||
|
echo "[save] Done"
|
||||||
|
else
|
||||||
|
echo "[save] No password database found, restore with:"
|
||||||
|
echo ""
|
||||||
|
echo " $0 init"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function backup_existing() {
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
local timestamp=$(date +%Y%m%d-%H%M%S)
|
||||||
|
local backup_file="$BACKUP_DIR/passwddb_backup_${timestamp}.tar.gz"
|
||||||
|
|
||||||
|
echo "[backup] Creating backup archive: ${backup_file}"
|
||||||
|
tar -czf "$backup_file" -C "$SOURCE_DIR" $(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -printf "%f ")
|
||||||
|
echo "[backup] Backup complete"
|
||||||
|
}
|
||||||
|
|
||||||
|
function restore_databases() {
|
||||||
|
echo "[init] Checking for existing files..."
|
||||||
|
|
||||||
|
local existing_files=$(find "$SOURCE_DIR" -maxdepth 1 -type f \( -name "*.kdbx" -o -name "*.kdbx.key" \) -print)
|
||||||
|
|
||||||
|
if [ -n "$existing_files" ]; then
|
||||||
|
echo "[init] Found existing database files:"
|
||||||
|
echo "$existing_files" | while read -r file; do
|
||||||
|
echo " - $file"
|
||||||
|
done
|
||||||
|
read -p "[init] Create backup archive of existing files? [y/N] " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
backup_existing
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[init] Restoring KeePassXC databases and database keys"
|
||||||
|
mkdir -p "$SOURCE_DIR"
|
||||||
|
rclone copy "$TARGET_DIR" "$SOURCE_DIR" \
|
||||||
|
--include "*.{kdbx,kdbx.key}" \
|
||||||
|
--progress
|
||||||
|
echo "[init] Done"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
""|save)
|
||||||
|
save_databases
|
||||||
|
;;
|
||||||
|
init)
|
||||||
|
restore_databases
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 [init|save]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
12
dots/.bin/save-ssh-host
Executable file
12
dots/.bin/save-ssh-host
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
selected_hosts="$(ssh-hosts | fzf -m)"
|
||||||
|
|
||||||
|
for host in $selected_hosts; do
|
||||||
|
echo "Saving $host"
|
||||||
|
directories="$(ssh "$host" ls | fzf -m)"
|
||||||
|
for directory in $directories; do
|
||||||
|
echo "Saving $host:$directory"
|
||||||
|
ssh "$host" "(tar cvzf - ~/$directory)" > "${host}_${directory}.tar.gz"
|
||||||
|
done
|
||||||
|
done
|
||||||
4
dots/.bin/save-zk
Executable file
4
dots/.bin/save-zk
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd "$ZK_PATH" || echo "No zettelkasten directory found"
|
||||||
|
git a . && git commit -m "Update" && git push
|
||||||
22
dots/.bin/sb-anki
Executable file
22
dots/.bin/sb-anki
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Anki review percentage for statusbar
|
||||||
|
|
||||||
|
num_to_review=200
|
||||||
|
|
||||||
|
# Get current card count from Anki
|
||||||
|
count=$(curl -s 127.0.0.1:8765 -X POST -d '{"action": "getNumCardsReviewedToday", "version": 6}' | jq '.result')
|
||||||
|
|
||||||
|
if [ -z "$count" ]
|
||||||
|
then
|
||||||
|
if [ -s /tmp/anki-reviews ]; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
echo "-1" > /tmp/anki-reviews
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$count" > /tmp/anki-reviews
|
||||||
|
fi
|
||||||
|
|
||||||
|
num_reviews=$(cat /tmp/anki-reviews)
|
||||||
|
echo -n -e " Reviews: $(python3 -c "print('{:.2%}'.format($num_reviews/$num_to_review))") "
|
||||||
13
dots/.bin/sb-battery
Executable file
13
dots/.bin/sb-battery
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cap="$(cat /sys/class/power_supply/BAT0/capacity)"
|
||||||
|
|
||||||
|
if [ "$cap" -ge 33 ];then
|
||||||
|
color="\x01"
|
||||||
|
elif [ "$cap" -ge 10 ]; then
|
||||||
|
color="\x03"
|
||||||
|
else
|
||||||
|
color="\x04"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n -e "$color $cap% \x01"
|
||||||
3
dots/.bin/sb-date
Executable file
3
dots/.bin/sb-date
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
echo -n -e "Week $(date '+%V') $(date '+%a %d %b %H:%M') "
|
||||||
7
dots/.bin/sb-internet
Executable file
7
dots/.bin/sb-internet
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if grep -xq 'up' /sys/class/net/w*/operstate 2>/dev/null ; then
|
||||||
|
wifiicon="$(awk '/^\s*w/ { print "WiFi", int($3 * 100 / 70) "% " }' /proc/net/wireless)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf " %s%s%s" "$wifiicon" "$(sed "s/down//;s/up/Ethernet/" /sys/class/net/e*/operstate 2>/dev/null)"
|
||||||
3
dots/.bin/sb-pomo
Executable file
3
dots/.bin/sb-pomo
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
[ -f "/home/h/.local/share/pomo" ] && cat /home/h/.local/share/pomo || echo ""
|
||||||
4
dots/.bin/sb-project
Executable file
4
dots/.bin/sb-project
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Render contents of $HOME/.project if present
|
||||||
|
[ -f "$HOME/.project" ] && cat "$HOME/.project" || echo ""
|
||||||
7
dots/.bin/sb-tasks
Executable file
7
dots/.bin/sb-tasks
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
num_done="$(task end.after:today status:completed count)"
|
||||||
|
num_pending="$(($(task count status:pending) + $num_done))"
|
||||||
|
num_waiting="$(($(task count status:waiting)))"
|
||||||
|
|
||||||
|
echo -e "Tasks: $num_done/$num_pending+$num_waiting"
|
||||||
12
dots/.bin/sb-wg
Executable file
12
dots/.bin/sb-wg
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
# Reference: https://github.com/mil-ad/polybar-wireguard
|
||||||
|
|
||||||
|
connected_interfaces=$(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)
|
||||||
|
|
||||||
|
if [ -n "$connected_interfaces" ];
|
||||||
|
then
|
||||||
|
for interface in $connected_interfaces; do echo "$interface"; done
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
52
dots/.bin/screen-temperature
Executable file
52
dots/.bin/screen-temperature
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
DEFAULT_TEMPERATURE = 3500
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open("/tmp/temperature", "r") as temp_file:
|
||||||
|
current_temperature = int(temp_file.read())
|
||||||
|
except FileNotFoundError:
|
||||||
|
current_temperature = DEFAULT_TEMPERATURE
|
||||||
|
|
||||||
|
# If no argument is given print the current temperature
|
||||||
|
if len(sys.argv) == 1:
|
||||||
|
print(current_temperature)
|
||||||
|
sys.exit(0)
|
||||||
|
elif len(sys.argv) != 2:
|
||||||
|
print(
|
||||||
|
"""
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
screen-temperature
|
||||||
|
print current temperature
|
||||||
|
|
||||||
|
screen-temperature <temperature>
|
||||||
|
set screen temperature to <temperature>
|
||||||
|
|
||||||
|
screen-temperature <+|-><temperature>
|
||||||
|
increase or decrease screen temperature by <temperature>
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
temperature_change = sys.argv[1]
|
||||||
|
|
||||||
|
if temperature_change.startswith("+"):
|
||||||
|
new_temperature = current_temperature + int(temperature_change[1:])
|
||||||
|
elif temperature_change.startswith("-"):
|
||||||
|
new_temperature = current_temperature - int(temperature_change[1:])
|
||||||
|
else:
|
||||||
|
new_temperature = int(temperature_change)
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.run(["redshift", "-O", str(new_temperature), "-P"], check=True)
|
||||||
|
with open("/tmp/temperature", "w") as temp_file:
|
||||||
|
temp_file.write(str(new_temperature) + "\n")
|
||||||
|
# Send notification
|
||||||
|
subprocess.run(["notify-send", str(new_temperature) + "K"])
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
print("Error: could not set screen temperature.")
|
||||||
|
sys.exit(1)
|
||||||
25
dots/.bin/script
Executable file
25
dots/.bin/script
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Script to create script
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: script <scriptname>"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
path="$HOME/.bin/$1"
|
||||||
|
|
||||||
|
# Prevent overwriting existing script
|
||||||
|
set -o noclobber
|
||||||
|
|
||||||
|
# Create script
|
||||||
|
cat > "$path" << EOF
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$path"
|
||||||
|
|
||||||
|
# Open script in editor on line 3
|
||||||
|
"$EDITOR" +3 "$path"
|
||||||
208
dots/.bin/setup
Executable file
208
dots/.bin/setup
Executable file
@@ -0,0 +1,208 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pac_list=(
|
||||||
|
at
|
||||||
|
automake
|
||||||
|
autopep8
|
||||||
|
base
|
||||||
|
base-devel
|
||||||
|
bash-completion
|
||||||
|
bash-language-server
|
||||||
|
bc
|
||||||
|
brightnessctl
|
||||||
|
chromium
|
||||||
|
dmidecode
|
||||||
|
entr
|
||||||
|
eslint_d
|
||||||
|
feh
|
||||||
|
firefox-developer-edition
|
||||||
|
firefox-tridactyl
|
||||||
|
firefox-tridactyl-native
|
||||||
|
firefox-tridactyl-native-debug
|
||||||
|
fzf
|
||||||
|
gcc
|
||||||
|
git
|
||||||
|
haskell-language-server
|
||||||
|
haskell-ormolu
|
||||||
|
hsetroot
|
||||||
|
htop
|
||||||
|
httpie
|
||||||
|
jq
|
||||||
|
keepassxc
|
||||||
|
kitty
|
||||||
|
lua-language-server
|
||||||
|
make
|
||||||
|
man-db
|
||||||
|
man-pages
|
||||||
|
neovim
|
||||||
|
nmap
|
||||||
|
nodejs-lts-jod
|
||||||
|
pacman-contrib
|
||||||
|
pandoc-cli
|
||||||
|
pandoc-crossref
|
||||||
|
parallel
|
||||||
|
pass
|
||||||
|
pkgbuild-language-server
|
||||||
|
pnpm
|
||||||
|
ripgrep
|
||||||
|
sshfs
|
||||||
|
stylelint
|
||||||
|
svelte-language-server
|
||||||
|
tailwindcss-language-server
|
||||||
|
task
|
||||||
|
tldr
|
||||||
|
tmux
|
||||||
|
tmuxp
|
||||||
|
tree
|
||||||
|
tree-sitter-cli
|
||||||
|
ts-node
|
||||||
|
typescript-language-server
|
||||||
|
unzip
|
||||||
|
vim-language-server
|
||||||
|
wget
|
||||||
|
xclip
|
||||||
|
yaml-language-server
|
||||||
|
)
|
||||||
|
|
||||||
|
aurpac_list=(
|
||||||
|
hadolint-bin
|
||||||
|
nvm
|
||||||
|
nvimpager
|
||||||
|
paru
|
||||||
|
tmux-bash-completion-git
|
||||||
|
ttf-iosevka-term-ss08
|
||||||
|
vim-plug
|
||||||
|
vtsls
|
||||||
|
xbanish
|
||||||
|
)
|
||||||
|
|
||||||
|
install() {
|
||||||
|
local package="$1"
|
||||||
|
if pacman -Qi "$package" &> /dev/null; then
|
||||||
|
echo "$package is already installed"
|
||||||
|
else
|
||||||
|
echo "Installing " "$package"
|
||||||
|
sudo pacman -S --noconfirm --needed "$package"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
aurpac() {
|
||||||
|
git clone "https://aur.archlinux.org/$1.git" "$HOME/.build/$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_packages() {
|
||||||
|
announce "Installing packages"
|
||||||
|
local count
|
||||||
|
for pac in "${pac_list[@]}" ; do
|
||||||
|
count=$((count+1))
|
||||||
|
install "$pac";
|
||||||
|
done
|
||||||
|
echo "$count packages installed"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_dotfiles() {
|
||||||
|
announce "Installing dotfiles"
|
||||||
|
origin="https://git.hektormisplon.xyz/hektor/dots"
|
||||||
|
git clone "$origin" "$HOME/dots"
|
||||||
|
cp -r "$HOME/dots/.git" "$HOME/.git"
|
||||||
|
git --git-dir="$HOME/.git" config --local status.showUntrackedFiles no
|
||||||
|
git --git-dir="$HOME/.git" stash -m "[dots]"
|
||||||
|
git --git-dir="$HOME/.git" stash apply
|
||||||
|
git --git-dir="$HOME/.git" restore "$HOME"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_aur_packages() {
|
||||||
|
announce "Installing AUR packages"
|
||||||
|
local count
|
||||||
|
for package in "${aurpac_list[@]}" ; do
|
||||||
|
if pacman -Qi "$1" &> /dev/null; then
|
||||||
|
echo "$1 is already installed"
|
||||||
|
else
|
||||||
|
count=$((count+1))
|
||||||
|
aurpac "$package" && makepkg -si -D "$HOME/.build/$package"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "$count AUR packages installed"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_neovim() {
|
||||||
|
announce "Setting up NeoVim"
|
||||||
|
git clone --depth=1 https://github.com/savq/paq-nvim.git \
|
||||||
|
"${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/paqs/start/paq-nvim
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_keyboard() {
|
||||||
|
announce "Setting up keyboard"
|
||||||
|
install "interception-tools"
|
||||||
|
install "interception-caps2esc"
|
||||||
|
udevmon_config_contents="\
|
||||||
|
- JOB: intercept -g \$DEVNODE | caps2esc -m 1 | uinput -d \$DEVNODE
|
||||||
|
DEVICE:
|
||||||
|
EVENTS:
|
||||||
|
EV_KEY: [KEY_CAPSLOCK]"
|
||||||
|
if [ -f /etc/interception/udevmon.yaml ] && diff -q <(echo "$udevmon_config_contents") /etc/interception/udevmon.yaml; then
|
||||||
|
echo "udevmon config already exists"
|
||||||
|
echo "$udevmon_config_contents"
|
||||||
|
elif [ -f /etc/interception/udevmon.yaml ]; then
|
||||||
|
echo "interception udevmon.yaml already exists"
|
||||||
|
cat /etc/interception/udevmon.yaml
|
||||||
|
echo "verify if this config matches the one below"
|
||||||
|
echo "$udevmon_config_contents"
|
||||||
|
else
|
||||||
|
echo "interception udevmon.yaml does not exist, creating one"
|
||||||
|
sudo bash -c "echo '$udevmon_config_contents' > /etc/interception/udevmon.yaml"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo systemctl enable --now udevmon.service
|
||||||
|
|
||||||
|
if pgrep -x caps2esc > /dev/null; then
|
||||||
|
echo "caps2esc is already running"
|
||||||
|
else
|
||||||
|
caps2esc -m 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
configure_gnome() {
|
||||||
|
announce "Configuring Gnome"; setup-gnome
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_firewall() {
|
||||||
|
announce "Configuring firewalld"
|
||||||
|
install firewalld
|
||||||
|
sudo systemctl enable --now firewalld
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_docker() {
|
||||||
|
announce "Setting up Docker"
|
||||||
|
install docker
|
||||||
|
install docker-compose
|
||||||
|
sudo systemctl enable --now docker.socket
|
||||||
|
sudo usermod -aG docker "$USER"
|
||||||
|
echo "User added to docker group, please restart your session"
|
||||||
|
}
|
||||||
|
|
||||||
|
announce() {
|
||||||
|
local message="$1"
|
||||||
|
echo " "
|
||||||
|
echo "[dots] $message"
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
|
||||||
|
confirm() {
|
||||||
|
local question="$1"
|
||||||
|
read -r -p "[dots] $question? [y/N]" -n 1
|
||||||
|
case "$REPLY" in y|Y ) "$2";; * ) echo "Skipping"; esac
|
||||||
|
}
|
||||||
|
|
||||||
|
printf '%s\n' "${pac_list[@]}"
|
||||||
|
confirm "Install these packages? " install_packages
|
||||||
|
printf '%s\n' "${aurpac_list[@]}"
|
||||||
|
confirm "Install these AUR packages? " install_aur_packages
|
||||||
|
confirm "Setup NeoVim? " setup_neovim
|
||||||
|
confirm "Install dotfiles? " install_dotfiles
|
||||||
|
confirm "Setup keyboard? " setup_keyboard
|
||||||
|
if pacman -Qi "gdm" &> /dev/null; then
|
||||||
|
confirm "Configure Gnome? " configure_gnome
|
||||||
|
fi
|
||||||
|
confirm "Setup firewall? " setup_firewall
|
||||||
|
confirm "Setup Docker? " setup_docker
|
||||||
20
dots/.bin/setup-zk
Executable file
20
dots/.bin/setup-zk
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ ! -d ~/.zk ]; then
|
||||||
|
echo "[zk] Setting up zettelkasten"
|
||||||
|
gh repo clone zk ~/.zk
|
||||||
|
else
|
||||||
|
echo "[zk] Zettelkasten already set up."
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Would you like open your zettelkasten? [y/N] " -n 1 -r
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
if [ -x "$(command -v zk)" ]; then
|
||||||
|
zk
|
||||||
|
else
|
||||||
|
echo "Error: 'zk' command not found or not executable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
5
dots/.bin/ssh-hosts
Executable file
5
dots/.bin/ssh-hosts
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
ssh_hosts="$(grep -E 'Host [a-z0-9\-]*$' ~/.ssh/config | awk '{print $2}')"
|
||||||
|
|
||||||
|
echo "$ssh_hosts"
|
||||||
144
dots/.bin/taskdeps
Executable file
144
dots/.bin/taskdeps
Executable file
@@ -0,0 +1,144 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
|
||||||
|
def get_task_data():
|
||||||
|
command = (
|
||||||
|
"task +PENDING or +WAITING -COMPLETED -DELETED export | "
|
||||||
|
"jq '[.[] | {uuid: .uuid, id, depends: .depends, description: .description, status: .status }]'"
|
||||||
|
)
|
||||||
|
output = subprocess.check_output(command, shell=True)
|
||||||
|
return json.loads(output)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_task_data(data):
|
||||||
|
dependency_graph = defaultdict(list)
|
||||||
|
task_details = {}
|
||||||
|
dependent_tasks = set()
|
||||||
|
|
||||||
|
for task in data:
|
||||||
|
task_id = task["uuid"]
|
||||||
|
task_details[task_id] = {
|
||||||
|
"id": task.get("id", "?"),
|
||||||
|
"description": task.get("description", "No description"),
|
||||||
|
"status": task.get("status", "Unknown status"),
|
||||||
|
}
|
||||||
|
if task["depends"]:
|
||||||
|
for dependency in task["depends"]:
|
||||||
|
dependency_graph[dependency].append(task_id)
|
||||||
|
dependent_tasks.add(task_id)
|
||||||
|
|
||||||
|
root_tasks = set(task_details.keys()) - dependent_tasks
|
||||||
|
return task_details, dependency_graph, root_tasks
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_parents(task_id, dependency_graph):
|
||||||
|
return [
|
||||||
|
parent for parent, children in dependency_graph.items() if task_id in children
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def build_ascii_dag(
|
||||||
|
task_id,
|
||||||
|
task_details,
|
||||||
|
dependency_graph,
|
||||||
|
prefix="",
|
||||||
|
is_last=True,
|
||||||
|
show_id=True,
|
||||||
|
visited=None,
|
||||||
|
):
|
||||||
|
if visited is None:
|
||||||
|
visited = set()
|
||||||
|
|
||||||
|
if task_id in visited:
|
||||||
|
return [f"{prefix}{'└── ' if is_last else '├── '}... (cycle detected)"]
|
||||||
|
|
||||||
|
visited.add(task_id)
|
||||||
|
|
||||||
|
task_info = task_details[task_id]
|
||||||
|
task_line = f"{prefix}{'└── ' if is_last else '├── '}{task_info['id'] + ': ' if show_id else ''}{task_info['description']} ({task_info['status']})"
|
||||||
|
lines = [task_line]
|
||||||
|
|
||||||
|
children = dependency_graph.get(task_id, [])
|
||||||
|
for idx, child in enumerate(children):
|
||||||
|
child_is_last = idx == len(children) - 1
|
||||||
|
child_prefix = prefix + (" " if is_last else "│ ")
|
||||||
|
lines.extend(
|
||||||
|
build_ascii_dag(
|
||||||
|
child,
|
||||||
|
task_details,
|
||||||
|
dependency_graph,
|
||||||
|
child_prefix,
|
||||||
|
child_is_last,
|
||||||
|
show_id,
|
||||||
|
visited.copy(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return lines
|
||||||
|
|
||||||
|
|
||||||
|
def render_dependency_dag(task_details, dependency_graph, root_tasks, show_id):
|
||||||
|
dag_lines = []
|
||||||
|
global_visited = set()
|
||||||
|
|
||||||
|
def dfs(task_id, prefix="", is_last=True, visited=None):
|
||||||
|
if visited is None:
|
||||||
|
visited = set()
|
||||||
|
|
||||||
|
if task_id in visited:
|
||||||
|
return
|
||||||
|
|
||||||
|
visited.add(task_id)
|
||||||
|
global_visited.add(task_id)
|
||||||
|
|
||||||
|
task_info = task_details[task_id]
|
||||||
|
task_line = f"{prefix}{'└── ' if is_last else '├── '}{str(task_info['id']) + ': ' if show_id else ''}{task_info['description']} ({task_info['status']})"
|
||||||
|
dag_lines.append(task_line)
|
||||||
|
|
||||||
|
children = dependency_graph.get(task_id, [])
|
||||||
|
for idx, child in enumerate(children):
|
||||||
|
child_is_last = idx == len(children) - 1
|
||||||
|
child_prefix = prefix + (" " if is_last else "│ ")
|
||||||
|
dfs(child, child_prefix, child_is_last, visited.copy())
|
||||||
|
|
||||||
|
root_tasks_with_children = [
|
||||||
|
root for root in root_tasks if dependency_graph.get(root, [])
|
||||||
|
]
|
||||||
|
for root in sorted(
|
||||||
|
root_tasks_with_children,
|
||||||
|
key=lambda x: len(dependency_graph.get(x, [])),
|
||||||
|
reverse=True,
|
||||||
|
):
|
||||||
|
if root not in global_visited:
|
||||||
|
dfs(root)
|
||||||
|
dag_lines.append("")
|
||||||
|
|
||||||
|
return "\n".join(dag_lines).rstrip()
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
data = get_task_data()
|
||||||
|
task_details, dependency_graph, root_tasks = parse_task_data(data)
|
||||||
|
ascii_dag = render_dependency_dag(
|
||||||
|
task_details, dependency_graph, root_tasks, show_id=args.show_id
|
||||||
|
)
|
||||||
|
print(ascii_dag)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Generates a task dependency DAG for Taskwarrior tasks."
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--show-id",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="Include task IDs in the output.",
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
main(args)
|
||||||
26
dots/.bin/tidalcycles
Executable file
26
dots/.bin/tidalcycles
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euf -o pipefail
|
||||||
|
|
||||||
|
VIM=${VIM:-"vim"}
|
||||||
|
TMUX=${TMUX:-"tmux"}
|
||||||
|
|
||||||
|
FILE=${FILE:-"$(date +%F).tidal"}
|
||||||
|
SESSION=${SESSION:-"tidal"}
|
||||||
|
|
||||||
|
TIDAL_BOOT_PATH=${TIDAL_BOOT_PATH:-""}
|
||||||
|
GHCI=${GHCI:-""}
|
||||||
|
|
||||||
|
args=${*:-$FILE}
|
||||||
|
|
||||||
|
# attach if session else create
|
||||||
|
$TMUX attach-session -t "$SESSION" || $TMUX new-session -s "$SESSION" \; \
|
||||||
|
split-window -h -t "$SESSION" \; \
|
||||||
|
send-keys -t 0 "$VIM $args" C-m \; \
|
||||||
|
send-keys -t 1 "TIDAL_BOOT_PATH=$TIDAL_BOOT_PATH GHCI=$GHCI tidal" C-m \; \
|
||||||
|
new-window -t "$SESSION":2 -n SuperDirt \; \
|
||||||
|
send-keys -t 0 "jack_control start && sclang ~/dev/live/scripts/start.scd" C-m \; \
|
||||||
|
select-window -t 1 \; \
|
||||||
|
resize-pane -t 1 -x 100 \; \
|
||||||
|
resize-pane -t 0 -x 125 \; \
|
||||||
|
select-pane -t 0
|
||||||
13
dots/.bin/tmux-workspace
Executable file
13
dots/.bin/tmux-workspace
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
session="main"
|
||||||
|
|
||||||
|
tmux attach-session -t $session || tmux new-session -s $session \; \
|
||||||
|
rename-window task \; \
|
||||||
|
send-keys -t 1 "task" C-m \; \
|
||||||
|
new-window -n zk \; \
|
||||||
|
send-keys -t 2 "nvim $ZK_PATH/index.md" C-m \; \
|
||||||
|
new-window -n term \; \
|
||||||
|
new-window -n music \; \
|
||||||
|
send-keys -t 4 "echo 'TODO: open music player'" C-m \; \
|
||||||
|
select-window -t 1 \;
|
||||||
11
dots/.bin/toggle-bt-device
Executable file
11
dots/.bin/toggle-bt-device
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
status="$(bluetoothctl info "$1" | grep Connected | cut -f 2 -d ':' | cut -f 2 -d ' ')"
|
||||||
|
|
||||||
|
if [ "$status" == "yes" ]
|
||||||
|
then
|
||||||
|
bluetoothctl disconnect "$1"
|
||||||
|
else
|
||||||
|
trust "$1"
|
||||||
|
bluetoothctl connect "$1"
|
||||||
|
fi
|
||||||
3
dots/.bin/update
Executable file
3
dots/.bin/update
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sudo pacman -Syu
|
||||||
35
dots/.bin/zk
Executable file
35
dots/.bin/zk
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
current_zettel_path="$ZK_PATH/$(cat "$ZK_PATH/current-zettel.txt")"
|
||||||
|
|
||||||
|
if [ "$TERM_PROGRAM" = tmux ]; then
|
||||||
|
cd "$ZK_PATH" && $EDITOR "$current_zettel_path"
|
||||||
|
else
|
||||||
|
echo 'Not in tmux'
|
||||||
|
echo 'Choose an option:'
|
||||||
|
echo '1. Open in tmux'
|
||||||
|
echo '2. Open in current terminal'
|
||||||
|
read -r -p 'Enter your choice: ' choice
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
# Check if a tmux session is running with a window named zk
|
||||||
|
if tmux list-windows -F '#{window_name}' | grep -q zk; then
|
||||||
|
# Attach to the session containing the 'zk' window
|
||||||
|
session="$(tmux list-windows -F '#{window_name} #{session_name}' | grep zk | head -n 1 | awk '{ print $2 }')"
|
||||||
|
tmux attach -t "$session"
|
||||||
|
else
|
||||||
|
# Create session with a window named 'zk' and start nvim
|
||||||
|
tmux new-session -s zk -n zk -d
|
||||||
|
tmux send-keys -t zk:zk "cd $ZK_PATH && $EDITOR $current_zettel_path" Enter
|
||||||
|
tmux attach -t zk
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
cd "$ZK_PATH" && $EDITOR "$current_zettel_path"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 'Not opening Zettelkasten'
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
0
dots/.build/.gitkeep
Normal file
0
dots/.build/.gitkeep
Normal file
1
dots/.config/Code/User/keybindings.json
Normal file
1
dots/.config/Code/User/keybindings.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{ "key": "ctrl+b", "command": "workbench.action.toggleSidebarVisibility" }]
|
||||||
114
dots/.config/Code/User/settings.json
Normal file
114
dots/.config/Code/User/settings.json
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
{
|
||||||
|
/* view */
|
||||||
|
"workbench.statusBar.visible": true,
|
||||||
|
"workbench.activityBar.visible": false,
|
||||||
|
"breadcrumbs.enabled": false,
|
||||||
|
"editor.minimap.enabled": false,
|
||||||
|
"window.menuBarVisibility": "hidden",
|
||||||
|
"workbench.editor.showTabs": false,
|
||||||
|
"workbench.editor.showIcons": false,
|
||||||
|
|
||||||
|
/* font */
|
||||||
|
"editor.fontSize": 20,
|
||||||
|
"editor.fontLigatures": true,
|
||||||
|
"editor.fontFamily": "Iosevka",
|
||||||
|
"terminal.integrated.fontSize": 20,
|
||||||
|
|
||||||
|
/* editor */
|
||||||
|
"editor.lineNumbers": "relative",
|
||||||
|
"editor.glyphMargin": false,
|
||||||
|
"terminal.integrated.allowMnemonics": false,
|
||||||
|
"workbench.colorCustomizations": {
|
||||||
|
"editorGroup.emptyBackground": "#0c0c0c",
|
||||||
|
"scrollbar.shadow": "#000",
|
||||||
|
"widget.shadow": "#000",
|
||||||
|
"editorWidget.background": "#0c0c0c",
|
||||||
|
"editor.background": "#0c0c0c",
|
||||||
|
"sideBar.background": "#0c0c0c",
|
||||||
|
"editorGroupHeader.noTabsBackground": "#0c0c0c",
|
||||||
|
"scrollbarSlider.background": "#222",
|
||||||
|
"scrollbarSlider.activeBackground": "#222",
|
||||||
|
"scrollbarSlider.hoverBackground": "#333",
|
||||||
|
"statusBar.noFolderBackground": "#0c0c0c",
|
||||||
|
"statusBar.border": "#0c0c0c",
|
||||||
|
"statusBar.background": "#0c0c0c",
|
||||||
|
"statusBar.foreground": "#555"
|
||||||
|
},
|
||||||
|
|
||||||
|
"editor.tokenColorCustomizations": {
|
||||||
|
"comments": "#555",
|
||||||
|
"functions": "#aaa",
|
||||||
|
"numbers": "#fff",
|
||||||
|
"strings": "#fff",
|
||||||
|
"types": "#aaa",
|
||||||
|
"variables": "#aaa",
|
||||||
|
"keywords": "#aaa"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* vim keybindings */
|
||||||
|
"vim.incsearch": true,
|
||||||
|
"vim.hlsearch": true,
|
||||||
|
"vim.leader": "<space>",
|
||||||
|
"vim.normalModeKeyBindingsNonRecursive": [
|
||||||
|
/* quick quit */
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "q"],
|
||||||
|
"commands": [":q"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "w"],
|
||||||
|
"commands": [":w"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "Q"],
|
||||||
|
"commands": [":q!"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "W"],
|
||||||
|
"commands": [":w!"]
|
||||||
|
},
|
||||||
|
/* split */
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "s", "s"],
|
||||||
|
"commands": [":sp"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "s", "v"],
|
||||||
|
"commands": [":vs"]
|
||||||
|
},
|
||||||
|
/* clear search highlight */
|
||||||
|
{
|
||||||
|
"before": ["<leader>", "<leader>"],
|
||||||
|
"commands": [":nohl"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
"vim.insertModeKeyBindings": [
|
||||||
|
/* quick exit insert */
|
||||||
|
{
|
||||||
|
"before": ["j", "j"],
|
||||||
|
"after": ["<Esc>"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
"vim.handleKeys": {
|
||||||
|
"<C-a>": false,
|
||||||
|
"<C-f>": false
|
||||||
|
},
|
||||||
|
|
||||||
|
/* eslint & prettier */
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.formatOnSave": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"workbench.colorTheme": "Absolute Black",
|
||||||
|
"window.zoomLevel": 1,
|
||||||
|
"javascript.updateImportsOnFileMove.enabled": "always"
|
||||||
|
}
|
||||||
1
dots/.config/X11/Xresources
Normal file
1
dots/.config/X11/Xresources
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Xcursor.size: 16
|
||||||
57
dots/.config/X11/xinitrc
Normal file
57
dots/.config/X11/xinitrc
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
userresources=$HOME/.config/X11/Xresources
|
||||||
|
usermodmap=$HOME/.config/X11/Xmodmap
|
||||||
|
sysresources=/etc/X11/xinit/.Xresources
|
||||||
|
sysmodmap=/etc/X11/xinit/.Xmodmap
|
||||||
|
|
||||||
|
if [ -f $sysresources ]; then xrdb -merge $sysresources; fi
|
||||||
|
if [ -f $sysmodmap ]; then xmodmap $sysmodmap; fi
|
||||||
|
if [ -f "$userresources" ]; then xrdb -merge "$userresources"; fi
|
||||||
|
if [ -f "$usermodmap" ]; then xmodmap "$usermodmap"; fi
|
||||||
|
|
||||||
|
# start some nice programs
|
||||||
|
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
|
||||||
|
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
|
||||||
|
[ -x "$f" ] && . "$f"
|
||||||
|
done
|
||||||
|
unset f
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ______________________________
|
||||||
|
|
||||||
|
xset -b # disable bell
|
||||||
|
xset r rate 200 30 # adjust typematic delay & rate
|
||||||
|
|
||||||
|
# Shared
|
||||||
|
xbindkeys -f "$HOME"/.config/xbindkeys/config
|
||||||
|
xbanish &
|
||||||
|
redshift -o -O "$(cat /tmp/temperature)" & # Run redshift in one shot mode
|
||||||
|
|
||||||
|
# DWM
|
||||||
|
# dwmblocks &
|
||||||
|
# udiskie &
|
||||||
|
# # No compositor
|
||||||
|
# # xsetroot -solid "#0a0a0a"
|
||||||
|
# # With compositor
|
||||||
|
# # hsetroot -solid "#0a0a0a"
|
||||||
|
# # picom &
|
||||||
|
# # execute dwm in a loop
|
||||||
|
# while true; do
|
||||||
|
# dwm 2> ~/.dwm.log
|
||||||
|
# done
|
||||||
|
|
||||||
|
# Openbox
|
||||||
|
# # udiskie --tray &
|
||||||
|
# # plank &
|
||||||
|
# # picom &
|
||||||
|
# # hsetroot -solid "#555555"
|
||||||
|
# # openbox
|
||||||
|
|
||||||
|
# Xmonad
|
||||||
|
xsetroot -solid "#0a0a0a"
|
||||||
|
xsetroot -cursor_name left_ptr
|
||||||
|
picom &
|
||||||
|
trayer --edge top --align right --SetDockType true --SetPartialStrut true \
|
||||||
|
--expand true --width 10 --transparent true --tint 0x111111 --height 25 &
|
||||||
|
exec xmonad
|
||||||
34
dots/.config/dunst/dunstrc
Normal file
34
dots/.config/dunst/dunstrc
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[global]
|
||||||
|
geometry="0-0+24"
|
||||||
|
monitor=0
|
||||||
|
follow=keyboard
|
||||||
|
indicate_hidden=yes
|
||||||
|
notification_height=0
|
||||||
|
padding=8
|
||||||
|
horizontal_padding=8
|
||||||
|
frame_width=1
|
||||||
|
frame_color="#333"
|
||||||
|
separator_height=1
|
||||||
|
idle_threshold=120
|
||||||
|
font=Iosevka Term SS08 12
|
||||||
|
markup=full
|
||||||
|
format="%s\n%b"
|
||||||
|
dmenu=/usr/bin/dmenu -p dunst:
|
||||||
|
browser=/usr/bin/brave -new-tab
|
||||||
|
verbosity=info
|
||||||
|
|
||||||
|
[urgency_low]
|
||||||
|
background="#111"
|
||||||
|
foreground="#aaa"
|
||||||
|
timeout=10
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
background="#111"
|
||||||
|
foreground="#aaa"
|
||||||
|
timeout=10
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
background="#111"
|
||||||
|
foreground="#fff"
|
||||||
|
frame_color="#f00"
|
||||||
|
timeout=0
|
||||||
12
dots/.config/feh/keys
Normal file
12
dots/.config/feh/keys
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
prev_img h
|
||||||
|
next_img l
|
||||||
|
scroll_left L
|
||||||
|
scroll_right H
|
||||||
|
scroll_up J
|
||||||
|
scroll_down K
|
||||||
|
zoom_in j
|
||||||
|
zoom_out k
|
||||||
|
zoom_fit z
|
||||||
|
zoom_default =
|
||||||
|
mirror bar
|
||||||
|
close q Q
|
||||||
3
dots/.config/feh/themes
Normal file
3
dots/.config/feh/themes
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
feh \
|
||||||
|
-B black \
|
||||||
|
--auto-zoom
|
||||||
36
dots/.config/flameshot/flameshot.ini
Normal file
36
dots/.config/flameshot/flameshot.ini
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
[General]
|
||||||
|
checkForUpdates=false
|
||||||
|
disabledTrayIcon=true
|
||||||
|
uiColor=#cccccc
|
||||||
|
fontFamily=Inter
|
||||||
|
drawColor=#ffffff
|
||||||
|
savePath=/home/h/doc/clips
|
||||||
|
copyPathAfterSave=true
|
||||||
|
saveLastRegion=true
|
||||||
|
saveAsFileExtension=png
|
||||||
|
userColors=picker, #800000, #ff0000, #ffff00, #00ff00, #00ffff, #0000ff, #ffffff, #000000
|
||||||
|
|
||||||
|
[Shortcuts]
|
||||||
|
TYPE_ARROW=a
|
||||||
|
TYPE_CIRCLE=o
|
||||||
|
TYPE_CIRCLECOUNT=Shift+o
|
||||||
|
TYPE_COMMIT_CURRENT_TOOL=Ctrl+Return
|
||||||
|
TYPE_COPY=y
|
||||||
|
TYPE_DELETE_CURRENT_TOOL=
|
||||||
|
TYPE_DRAWER=l
|
||||||
|
TYPE_EXIT=q
|
||||||
|
TYPE_IMAGEUPLOADER=
|
||||||
|
TYPE_MARKER=m
|
||||||
|
TYPE_MOVESELECTION=Ctrl+M
|
||||||
|
TYPE_MOVE_DOWN=j
|
||||||
|
TYPE_MOVE_LEFT=h
|
||||||
|
TYPE_MOVE_RIGHT=l
|
||||||
|
TYPE_MOVE_UP=k
|
||||||
|
TYPE_OPEN_APP=o
|
||||||
|
TYPE_PENCIL=d
|
||||||
|
TYPE_PIN=Enter
|
||||||
|
TYPE_PIXELATE=p
|
||||||
|
TYPE_RECTANGLE=r
|
||||||
|
TYPE_REDO=Ctrl+r
|
||||||
|
TYPE_RESIZE_DOWN=Shift+j
|
||||||
|
TYPE_RESIZE_LEFT=Shift+h
|
||||||
16
dots/.config/gh/config.yml
Normal file
16
dots/.config/gh/config.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
git_protocol: ssh
|
||||||
|
prompt: enabled
|
||||||
|
aliases:
|
||||||
|
co: pr checkout
|
||||||
|
c: repo clone
|
||||||
|
f: repo fork
|
||||||
|
rc: repo create
|
||||||
|
rv: repo view
|
||||||
|
re: repo edit
|
||||||
|
rm: repo remove
|
||||||
|
rn: repo rename
|
||||||
|
lr: repo list
|
||||||
|
li: issue list
|
||||||
|
al: alias
|
||||||
|
al-: alias delete
|
||||||
|
version: "1"
|
||||||
5
dots/.config/gtk-3.0/settings.ini
Normal file
5
dots/.config/gtk-3.0/settings.ini
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[Settings]
|
||||||
|
gtk-font-name=Inter 12
|
||||||
|
gtk-application-prefer-dark-theme=true
|
||||||
|
gtk-icon-theme-name=Adwaita
|
||||||
|
gtk-theme-name=Adwaita
|
||||||
1315
dots/.config/ipython/profile_default/ipython_config.py
Normal file
1315
dots/.config/ipython/profile_default/ipython_config.py
Normal file
File diff suppressed because it is too large
Load Diff
32
dots/.config/keepassxc/keepassxc.ini
Normal file
32
dots/.config/keepassxc/keepassxc.ini
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[General]
|
||||||
|
ConfigVersion=2
|
||||||
|
|
||||||
|
[Browser]
|
||||||
|
CustomProxyLocation=
|
||||||
|
Enabled=true
|
||||||
|
|
||||||
|
[GUI]
|
||||||
|
ApplicationTheme=dark
|
||||||
|
CompactMode=false
|
||||||
|
HidePreviewPanel=false
|
||||||
|
HideToolbar=false
|
||||||
|
MinimizeOnClose=true
|
||||||
|
MinimizeToTray=true
|
||||||
|
ShowTrayIcon=true
|
||||||
|
TrayIconAppearance=colorful
|
||||||
|
|
||||||
|
[KeeShare]
|
||||||
|
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
|
||||||
|
Foreign="<?xml version=\"1.0\"?>\n<KeeShare xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n <Foreign/>\n</KeeShare>\n"
|
||||||
|
Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ji74dnjo0qzbUFKEoNnMHsdX7mBXuJcu8zsl7vfkKLiAGIQiP9BQc/JnFr28W92fQz8uXVtm7NgnKJQkT7wzFyBdspmNDzosS58EIQVKe5p+uMaaGZ5z6j1DtLCFo7PLCnhasBluC0W1+37s7NtRD6bFo1r6QHupY63mBsSvJhAcmS+6bM7xS7PcK0WTVTsK1MWYZLOkYMWQ0AW/t4PZfqeKvalqheiR8oUIDeY7+7fqvQr5SAhL0yinbtaqWmPqcd5QWyPqVkbKclw4Uecw+JW+yR9uEOP9butP74r36LUUfsTJHE2/sB2KJFRN/aUm2ZEYhzexMYSfgnrq0KCLAgMBAAECggEACV8N7rN39BkUBV2qaPXLNKjFuZ6O2WnE28ejQ5LeZ0h5M6eDTGsa+BF2jhL7XYyzo0NiqvpnH+dWIkKJbG8i5OkdamcB4pJBkJZCj6LPL0yGcAbZmCLyzc1qMaOPJ1/f9YxUQDH/YItgbc7DEBwAFbkPyzT3ufRd7BuLLx1gu0iypHhBok9kXA4WgkUihLNXXVvSIGcVy+q9wpgOiw5jLC79qwqIp39Tlt6PKryODulqWIeoeSIgAu5tgUy4O3He6AZwqBprIfJSiJOwfdBd8FchQJQDgl0fyDR10VIUNbjgm+kxWssq4oNJ7+2n14Gdfwpy2K7oO9DYeqjBrv2p4QKBgQDqY8/5ufsJ9hKhQRX3vju+FEDLKvjjKH7/6puDwcvC1GgvshQSvCo9ZVIajwSmEoWq2LTDiPlUPFINKnALQiHCbRfNeS1Tws4cK4AAZnR+CGKkox9J5MWCDVzI2/82R9/9ZX4OO+As5+Od503Grmy+Zi0Redm+r4aK04gm3LfqGwKBgQDOlpOXFyYbb473TFkf9ZfyETZGkjlCzf4uPwPuJ3njWZfwPE2Gb+quZDLSmYp9JhzIFoapnQrjSFCVyzBYIIuz3jipb5MbQxc6FPSjw0pPowWdPkEL1CT5mpZFojop+I/TnEEG+Lv039O3cGlL2zagiBHRw0ediD6z0vnoOBeKUQKBgQDjlJBuKC9gp6XFHp4G05XMZHvZCNtqLHrLX28qSjPe80BJ9z1YR4032bYThYP9AAT7MripFskICh2dHPR3afm/fw9aeWsSZhab8XyyZsh7SwcEVkJeDBvdv720ZS9y8+y/bBkuFuL+lxVBz0GMRPXfFPRzgH10kZcwGl2bZjnIuwKBgQCVabQu95AZEbM9yps/ERom+ineGo2Ncnyep/bIvQZb1wWbu5F6ZOE/5boYNPJDl1gDor8cVzdzsG6QGBfL9SX1HgivCsJDWl+nI1bYRjsto8NAubDDxFhFqnd6v1z/1AT50C37w9P0xBlUt9mAAnjc2+y/YFQgbFSlLDaQrFjiMQKBgFJrLF21Uk6ALZa4R0eOyLKhuagw3uxmNvccNG8VL5DwYVCUS7/8SkPhO5yvbcA87Y1VnM20tUr047K4U83uFNxBnPMmxlhMsxtqjw+VV6Us6uh2ASaLZ9iP9iwkn5e37WLWX+XsewoGrW/YsONwIT0dnZDPRbxhPdJn8azSJqQr</PrivateKey><PublicKey><Signer>h</Signer><Key>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9Ji74dnjo0qzbUFKEoNnMHsdX7mBXuJcu8zsl7vfkKLiAGIQiP9BQc/JnFr28W92fQz8uXVtm7NgnKJQkT7wzFyBdspmNDzosS58EIQVKe5p+uMaaGZ5z6j1DtLCFo7PLCnhasBluC0W1+37s7NtRD6bFo1r6QHupY63mBsSvJhAcmS+6bM7xS7PcK0WTVTsK1MWYZLOkYMWQ0AW/t4PZfqeKvalqheiR8oUIDeY7+7fqvQr5SAhL0yinbtaqWmPqcd5QWyPqVkbKclw4Uecw+JW+yR9uEOP9butP74r36LUUfsTJHE2/sB2KJFRN/aUm2ZEYhzexMYSfgnrq0KCLAgMBAAECggEACV8N7rN39BkUBV2qaPXLNKjFuZ6O2WnE28ejQ5LeZ0h5M6eDTGsa+BF2jhL7XYyzo0NiqvpnH+dWIkKJbG8i5OkdamcB4pJBkJZCj6LPL0yGcAbZmCLyzc1qMaOPJ1/f9YxUQDH/YItgbc7DEBwAFbkPyzT3ufRd7BuLLx1gu0iypHhBok9kXA4WgkUihLNXXVvSIGcVy+q9wpgOiw5jLC79qwqIp39Tlt6PKryODulqWIeoeSIgAu5tgUy4O3He6AZwqBprIfJSiJOwfdBd8FchQJQDgl0fyDR10VIUNbjgm+kxWssq4oNJ7+2n14Gdfwpy2K7oO9DYeqjBrv2p4QKBgQDqY8/5ufsJ9hKhQRX3vju+FEDLKvjjKH7/6puDwcvC1GgvshQSvCo9ZVIajwSmEoWq2LTDiPlUPFINKnALQiHCbRfNeS1Tws4cK4AAZnR+CGKkox9J5MWCDVzI2/82R9/9ZX4OO+As5+Od503Grmy+Zi0Redm+r4aK04gm3LfqGwKBgQDOlpOXFyYbb473TFkf9ZfyETZGkjlCzf4uPwPuJ3njWZfwPE2Gb+quZDLSmYp9JhzIFoapnQrjSFCVyzBYIIuz3jipb5MbQxc6FPSjw0pPowWdPkEL1CT5mpZFojop+I/TnEEG+Lv039O3cGlL2zagiBHRw0ediD6z0vnoOBeKUQKBgQDjlJBuKC9gp6XFHp4G05XMZHvZCNtqLHrLX28qSjPe80BJ9z1YR4032bYThYP9AAT7MripFskICh2dHPR3afm/fw9aeWsSZhab8XyyZsh7SwcEVkJeDBvdv720ZS9y8+y/bBkuFuL+lxVBz0GMRPXfFPRzgH10kZcwGl2bZjnIuwKBgQCVabQu95AZEbM9yps/ERom+ineGo2Ncnyep/bIvQZb1wWbu5F6ZOE/5boYNPJDl1gDor8cVzdzsG6QGBfL9SX1HgivCsJDWl+nI1bYRjsto8NAubDDxFhFqnd6v1z/1AT50C37w9P0xBlUt9mAAnjc2+y/YFQgbFSlLDaQrFjiMQKBgFJrLF21Uk6ALZa4R0eOyLKhuagw3uxmNvccNG8VL5DwYVCUS7/8SkPhO5yvbcA87Y1VnM20tUr047K4U83uFNxBnPMmxlhMsxtqjw+VV6Us6uh2ASaLZ9iP9iwkn5e37WLWX+XsewoGrW/YsONwIT0dnZDPRbxhPdJn8azSJqQr</Key></PublicKey></KeeShare>\n"
|
||||||
|
QuietSuccess=true
|
||||||
|
|
||||||
|
[PasswordGenerator]
|
||||||
|
AdditionalChars=
|
||||||
|
ExcludedChars=
|
||||||
|
Length=40
|
||||||
|
Logograms=true
|
||||||
|
WordCount=9
|
||||||
|
|
||||||
|
[SSHAgent]
|
||||||
|
Enabled=true
|
||||||
166
dots/.config/kitty/kitty.conf
Normal file
166
dots/.config/kitty/kitty.conf
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
#: Fonts {{{
|
||||||
|
|
||||||
|
font_family Iosevka Term SS08
|
||||||
|
bold_font auto
|
||||||
|
italic_font auto
|
||||||
|
bold_italic_font auto
|
||||||
|
font_size 12.0
|
||||||
|
disable_ligatures never
|
||||||
|
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
#: Cursor {{{
|
||||||
|
|
||||||
|
cursor_shape block
|
||||||
|
cursor_blink_interval 0
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Scrollback {{{
|
||||||
|
|
||||||
|
scrollback_lines 8192
|
||||||
|
scrollbar scrolled
|
||||||
|
scrollback_pager_history_size 1024
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Mouse {{{
|
||||||
|
|
||||||
|
mouse_hide_wait 0.0
|
||||||
|
paste_actions quote-urls-at-prompt,confirm
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Performance tuning {{{
|
||||||
|
|
||||||
|
repaint_delay 8
|
||||||
|
input_delay 2
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Terminal bell {{{
|
||||||
|
|
||||||
|
enable_audio_bell yes
|
||||||
|
window_alert_on_bell yes
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Window layout {{{
|
||||||
|
|
||||||
|
remember_window_size no
|
||||||
|
remember_window_position no
|
||||||
|
enabled_layouts *
|
||||||
|
hide_window_decorations yes
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Tab bar {{{
|
||||||
|
|
||||||
|
tab_bar_edge bottom
|
||||||
|
tab_bar_style powerline
|
||||||
|
tab_bar_min_tabs 1
|
||||||
|
tab_powerline_style slanted
|
||||||
|
tab_activity_symbol !
|
||||||
|
tab_title_template "{index}{fmt.fg.red}{bell_symbol}{fmt.fg.tab}{activity_symbol}:{tab.last_focused_progress_percent}{title}"
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Advanced {{{
|
||||||
|
|
||||||
|
notify_on_cmd_finish unfocused
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: OS specific tweaks {{{
|
||||||
|
|
||||||
|
linux_display_server auto
|
||||||
|
wayland_enable_ime no
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
#: Keyboard shortcuts {{{
|
||||||
|
|
||||||
|
kitty_mod ctrl+shift
|
||||||
|
map kitty_mod+c copy_to_clipboard
|
||||||
|
map kitty_mod+v paste_from_clipboard
|
||||||
|
map cmd+v
|
||||||
|
# map kitty_mod+o pass_selection_to_program
|
||||||
|
# map kitty_mod+o pass_selection_to_program firefox
|
||||||
|
# map kitty_mod+y new_window less @selection
|
||||||
|
map kitty_mod+z scroll_to_prompt -1
|
||||||
|
map kitty_mod+x scroll_to_prompt 1
|
||||||
|
map kitty_mod+h show_scrollback
|
||||||
|
# map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
|
||||||
|
#:: For more details on piping screen and buffer contents to external
|
||||||
|
#:: programs, see launch <https://sw.kovidgoyal.net/kitty/launch/>.
|
||||||
|
# map kitty_mod+g show_last_command_output
|
||||||
|
# map kitty_mod+enter launch --cwd=current
|
||||||
|
# map cmd+enter
|
||||||
|
# map ctrl+n launch --location=neighbor
|
||||||
|
# map ctrl+f launch --location=first
|
||||||
|
map kitty_mod+n
|
||||||
|
map cmd+n
|
||||||
|
map kitty_mod+w
|
||||||
|
map shift+cmd+d
|
||||||
|
map kitty_mod+]
|
||||||
|
map kitty_mod+[
|
||||||
|
map kitty_mod+f
|
||||||
|
map kitty_mod+b
|
||||||
|
map kitty_mod+`
|
||||||
|
map kitty_mod+r
|
||||||
|
map cmd+r
|
||||||
|
map kitty_mod+1
|
||||||
|
map cmd+1
|
||||||
|
map kitty_mod+2
|
||||||
|
map cmd+2
|
||||||
|
map kitty_mod+3
|
||||||
|
map cmd+3
|
||||||
|
map kitty_mod+4
|
||||||
|
map cmd+4
|
||||||
|
map kitty_mod+5
|
||||||
|
map cmd+5
|
||||||
|
map kitty_mod+6
|
||||||
|
map cmd+6
|
||||||
|
map kitty_mod+7
|
||||||
|
map cmd+7
|
||||||
|
map kitty_mod+8
|
||||||
|
map cmd+8
|
||||||
|
map kitty_mod+9
|
||||||
|
map cmd+9
|
||||||
|
map kitty_mod+0
|
||||||
|
map f1 goto_tab 1
|
||||||
|
map f2 goto_tab 2
|
||||||
|
map f3 goto_tab 3
|
||||||
|
map f4 goto_tab 4
|
||||||
|
map f5 goto_tab 5
|
||||||
|
map f6 goto_tab 6
|
||||||
|
map f7 goto_tab 7
|
||||||
|
map f8 goto_tab 8
|
||||||
|
# map kitty_mod+c new_tab # FIXME: conflict with 'copy'
|
||||||
|
map cmd+t
|
||||||
|
map kitty_mod+q
|
||||||
|
map cmd+w
|
||||||
|
map kitty_mod+.
|
||||||
|
map kitty_mod+,
|
||||||
|
map kitty_mod+alt+t
|
||||||
|
map shift+cmd+i
|
||||||
|
map kitty_mod+f1
|
||||||
|
map kitty_mod+f11
|
||||||
|
map ctrl+cmd+f
|
||||||
|
map kitty_mod+f10
|
||||||
|
map opt+cmd+s
|
||||||
|
map kitty_mod+u kitten unicode_input
|
||||||
|
map ctrl+cmd+space
|
||||||
|
map kitty_mod+/ kitty_shell window
|
||||||
|
map kitty_mod+f5
|
||||||
|
map kitty_mod+r load_config_file
|
||||||
|
|
||||||
|
map shift+cmd+/
|
||||||
|
map cmd+h
|
||||||
|
map opt+cmd+
|
||||||
|
map cmd+m
|
||||||
|
map cmd+q
|
||||||
|
|
||||||
|
#: }}}
|
||||||
|
|
||||||
|
include ./nvim.conf
|
||||||
8
dots/.config/kitty/nvim.conf
Normal file
8
dots/.config/kitty/nvim.conf
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
allow_remote_control socket-only
|
||||||
|
listen_on unix:/tmp/kitty
|
||||||
|
shell_integration enabled
|
||||||
|
|
||||||
|
action_alias kitty_scrollback_nvim kitten ~/.local/share/nvim/site/pack/paqs/start/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py
|
||||||
|
map kitty_mod+h kitty_scrollback_nvim
|
||||||
|
map kitty_mod+g kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
|
||||||
|
mouse_map ctrl+shift+right press ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
|
||||||
20
dots/.config/mimeapps.list
Normal file
20
dots/.config/mimeapps.list
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[Default Applications]
|
||||||
|
inode/x-empty=nvim.desktop
|
||||||
|
inode/directory=nvim.desktop
|
||||||
|
text/plain=nvim.desktop
|
||||||
|
text/html=firefoxdeveloperedition.desktop
|
||||||
|
image/gif=feh.desktop
|
||||||
|
image/jpeg=feh.desktop
|
||||||
|
image/png=feh.desktop
|
||||||
|
video/mp4=mpv.desktop
|
||||||
|
video/webm=mpv.desktop
|
||||||
|
model/stl=com.ultimaker.cura.desktop
|
||||||
|
application/pdf=org.pwmt.zathura.desktop
|
||||||
|
x-scheme-handler/msteams=teams-for-linux.desktop
|
||||||
|
x-scheme-handler/web+stremio=firefox.desktop
|
||||||
|
x-scheme-handler/http=firefoxdeveloperedition.desktop
|
||||||
|
x-scheme-handler/https=firefoxdeveloperedition.desktop
|
||||||
|
x-scheme-handler/chrome=firefoxdeveloperedition.desktop
|
||||||
|
x-scheme-handler/sidequest=SideQuest.desktop
|
||||||
|
x-scheme-handler/mailto=firefox.desktop
|
||||||
|
x-scheme-handler/webcal=firefox.desktop
|
||||||
BIN
dots/.config/mpv/fonts/oscc.ttf
Normal file
BIN
dots/.config/mpv/fonts/oscc.ttf
Normal file
Binary file not shown.
15
dots/.config/mpv/input.conf
Normal file
15
dots/.config/mpv/input.conf
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
l seek +5
|
||||||
|
h seek -5
|
||||||
|
k seek +30
|
||||||
|
j seek -30
|
||||||
|
|
||||||
|
+ add video-zoom 0.1
|
||||||
|
- add video-zoom -0.1
|
||||||
|
= set video-zoom 0; set video-pan-x 0; set video-pan-y 0
|
||||||
|
|
||||||
|
H add video-pan-x 0.01
|
||||||
|
L add video-pan-x -0.01
|
||||||
|
K add video-pan-y 0.01
|
||||||
|
J add video-pan-y -0.01
|
||||||
|
|
||||||
|
m cycle mute
|
||||||
16
dots/.config/mpv/mpv.conf
Normal file
16
dots/.config/mpv/mpv.conf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
vo=gpu
|
||||||
|
profile=gpu-hq
|
||||||
|
hwdec=auto
|
||||||
|
|
||||||
|
msg-color=yes
|
||||||
|
|
||||||
|
cursor-autohide=300
|
||||||
|
cursor-autohide-fs-only=yes
|
||||||
|
save-position-on-quit=yes
|
||||||
|
keep-open=yes
|
||||||
|
|
||||||
|
# Custom osc
|
||||||
|
osc=no
|
||||||
|
cursor-autohide=3500
|
||||||
|
osd-bar=no
|
||||||
|
osc-vidscale=no
|
||||||
2495
dots/.config/mpv/scripts/oscc.lua
Normal file
2495
dots/.config/mpv/scripts/oscc.lua
Normal file
File diff suppressed because it is too large
Load Diff
45
dots/.config/ncspot/config.toml
Normal file
45
dots/.config/ncspot/config.toml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
default_keybindings = false
|
||||||
|
flip_status_indicators = true
|
||||||
|
library_tabs = ["tracks", "albums", "artists", "playlists", "browse"] # remove podcasts tab
|
||||||
|
|
||||||
|
[keybindings]
|
||||||
|
"Enter" = "play"
|
||||||
|
" " = "playpause"
|
||||||
|
"S" = "stop"
|
||||||
|
"<" = "seek -10000"
|
||||||
|
">" = "seek +10000"
|
||||||
|
"H" = "previous"
|
||||||
|
"L" = "next"
|
||||||
|
"r" = "repeat"
|
||||||
|
"z" = "shuffle"
|
||||||
|
"d" = "delete"
|
||||||
|
"s" = "save"
|
||||||
|
"O" = "open current"
|
||||||
|
"o" = "open selected"
|
||||||
|
"Backspace" = "back"
|
||||||
|
"A" = "goto artist"
|
||||||
|
"a" = "goto album"
|
||||||
|
"q" = "queue"
|
||||||
|
"J" = "shift down 1"
|
||||||
|
"K" = "shift up 1"
|
||||||
|
"c" = "clear"
|
||||||
|
"=" = "volup 1"
|
||||||
|
"-" = "voldown 1"
|
||||||
|
"1" = "focus queue"
|
||||||
|
"2" = "focus search"
|
||||||
|
"3" = "focus library"
|
||||||
|
"4" = "focus cover"
|
||||||
|
"h" = "move left 1"
|
||||||
|
"j" = "move down 1"
|
||||||
|
"k" = "move up 1"
|
||||||
|
"l" = "move right 1"
|
||||||
|
"g" = "move top"
|
||||||
|
"G" = "move bottom"
|
||||||
|
"t" = "sort added d"
|
||||||
|
"T" = "sort title a"
|
||||||
|
"y" = "share current"
|
||||||
|
"Y" = "share selected"
|
||||||
|
"U" = "update"
|
||||||
|
|
||||||
|
backend="pipe"
|
||||||
|
notify="false"
|
||||||
39
dots/.config/newsboat/config
Normal file
39
dots/.config/newsboat/config
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
auto-reload yes
|
||||||
|
reload-threads 100
|
||||||
|
|
||||||
|
# color background color240 black
|
||||||
|
# color listnormal color238 black
|
||||||
|
# color listfocus white black
|
||||||
|
# color listnormal_unread color240 black bold
|
||||||
|
# color listfocus_unread default black bold
|
||||||
|
# color info default black
|
||||||
|
# color article default black
|
||||||
|
|
||||||
|
bind-key h quit articlelist
|
||||||
|
bind-key h quit article
|
||||||
|
bind-key h quit tagselection
|
||||||
|
bind-key h quit feedlist
|
||||||
|
bind-key j down feedlist
|
||||||
|
bind-key j down tagselection
|
||||||
|
bind-key j next articlelist
|
||||||
|
bind-key j down article
|
||||||
|
bind-key J next-feed articlelist
|
||||||
|
bind-key k up feedlist
|
||||||
|
bind-key k prev articlelist
|
||||||
|
bind-key k up tagselection
|
||||||
|
bind-key K prev-feed articlelist
|
||||||
|
bind-key k up article
|
||||||
|
bind-key l open articlelist
|
||||||
|
bind-key l open feedlist
|
||||||
|
bind-key l open tagselection
|
||||||
|
|
||||||
|
bind-key G end
|
||||||
|
bind-key g home
|
||||||
|
|
||||||
|
text-width 80
|
||||||
|
|
||||||
|
browser "brave"
|
||||||
|
macro m set browser "mpv %u"; open-in-browser ; set browser "brave"
|
||||||
|
|
||||||
|
show-title-bar false
|
||||||
|
show-keymap-hint false
|
||||||
1
dots/.config/nix/nix.conf
Normal file
1
dots/.config/nix/nix.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
experimental-features = nix-command flakes
|
||||||
6
dots/.config/nvim/README.md
Normal file
6
dots/.config/nvim/README.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Neovim configuration
|
||||||
|
|
||||||
|
My neovim configuration. Available as a Nix flake [^nixcats]. When installing manually,
|
||||||
|
`paq.nvim` is used as a fallback plugin manager.
|
||||||
|
|
||||||
|
[^nixcats]: Based on [this nixCats `example` template](https://github.com/BirdeeHub/nixCats-nvim/tree/77dffad8235eb77684fcb7599487c8e9f23d5b8f/templates/example)
|
||||||
37
dots/.config/nvim/after/ftplugin/pandoc/sandwich.vim.lua
Normal file
37
dots/.config/nvim/after/ftplugin/pandoc/sandwich.vim.lua
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
vim.cmd([[
|
||||||
|
function GetClozeNumber()
|
||||||
|
let REGEX_CLOZE_START = '{{c\d\+::'
|
||||||
|
|
||||||
|
" Find previous cloze match
|
||||||
|
let prev_match = searchpos(REGEX_CLOZE_START, 'bW', line("gg"))
|
||||||
|
" Only get number if cloze was matched (i.e. when cursor does not end up at
|
||||||
|
" start of file)
|
||||||
|
if max(prev_match) != 0
|
||||||
|
" Get word under cursor (ignoring curly braces and `::`),
|
||||||
|
" get the second character of the word and cast it to an int
|
||||||
|
" add one for the next cloze number
|
||||||
|
return str2nr(expand("<cword>")[1]) + 1
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Wrap the next cloze number
|
||||||
|
function GetClozeStart()
|
||||||
|
return "{{c" . GetClozeNumber() . "::"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function GetClozeEnd()
|
||||||
|
return "}}"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let g:sandwich#recipes += [
|
||||||
|
\ {
|
||||||
|
\ 'buns': ['GetClozeStart()', 'GetClozeEnd()'],
|
||||||
|
\ 'expr' : 1,
|
||||||
|
\ 'filetype': ['pandoc'],
|
||||||
|
\ 'input': ['c'],
|
||||||
|
\ 'nesting': 1
|
||||||
|
\ }
|
||||||
|
\ ]
|
||||||
|
]])
|
||||||
3
dots/.config/nvim/after/plugin/auto-session.lua
Normal file
3
dots/.config/nvim/after/plugin/auto-session.lua
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
require("auto-session").setup({
|
||||||
|
auto_session_enabled = vim.env.KITTY_SCROLLBACK_NVIM ~= "true", -- See kitty-scrollback.nvim
|
||||||
|
})
|
||||||
61
dots/.config/nvim/after/plugin/claude-code.nvim.lua
Normal file
61
dots/.config/nvim/after/plugin/claude-code.nvim.lua
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
require("claude-code").setup({
|
||||||
|
-- Terminal window settings
|
||||||
|
window = {
|
||||||
|
split_ratio = 0.3, -- Percentage of screen for the terminal window (height for horizontal, width for vertical splits)
|
||||||
|
position = "vertical", -- Position of the window: "botright", "topleft", "vertical", "float", etc.
|
||||||
|
enter_insert = true, -- Whether to enter insert mode when opening Claude Code
|
||||||
|
hide_numbers = true, -- Hide line numbers in the terminal window
|
||||||
|
hide_signcolumn = true, -- Hide the sign column in the terminal window
|
||||||
|
|
||||||
|
-- Floating window configuration (only applies when position = "float")
|
||||||
|
float = {
|
||||||
|
width = "80%", -- Width: number of columns or percentage string
|
||||||
|
height = "80%", -- Height: number of rows or percentage string
|
||||||
|
row = "center", -- Row position: number, "center", or percentage string
|
||||||
|
col = "center", -- Column position: number, "center", or percentage string
|
||||||
|
relative = "editor", -- Relative to: "editor" or "cursor"
|
||||||
|
border = "rounded", -- Border style: "none", "single", "double", "rounded", "solid", "shadow"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- File refresh settings
|
||||||
|
refresh = {
|
||||||
|
enable = true, -- Enable file change detection
|
||||||
|
updatetime = 100, -- updatetime when Claude Code is active (milliseconds)
|
||||||
|
timer_interval = 1000, -- How often to check for file changes (milliseconds)
|
||||||
|
show_notifications = true, -- Show notification when files are reloaded
|
||||||
|
},
|
||||||
|
-- Git project settings
|
||||||
|
git = {
|
||||||
|
use_git_root = true, -- Set CWD to git root when opening Claude Code (if in git project)
|
||||||
|
},
|
||||||
|
-- Shell-specific settings
|
||||||
|
shell = {
|
||||||
|
separator = "&&", -- Command separator used in shell commands
|
||||||
|
pushd_cmd = "pushd", -- Command to push directory onto stack (e.g., 'pushd' for bash/zsh, 'enter' for nushell)
|
||||||
|
popd_cmd = "popd", -- Command to pop directory from stack (e.g., 'popd' for bash/zsh, 'exit' for nushell)
|
||||||
|
},
|
||||||
|
-- Command settings
|
||||||
|
command = "claude", -- Command used to launch Claude Code
|
||||||
|
-- Command variants
|
||||||
|
command_variants = {
|
||||||
|
-- Conversation management
|
||||||
|
continue = "--continue", -- Resume the most recent conversation
|
||||||
|
resume = "--resume", -- Display an interactive conversation picker
|
||||||
|
|
||||||
|
-- Output options
|
||||||
|
verbose = "--verbose", -- Enable verbose logging with full turn-by-turn output
|
||||||
|
},
|
||||||
|
-- Keymaps
|
||||||
|
keymaps = {
|
||||||
|
toggle = {
|
||||||
|
normal = "<C-,>", -- Normal mode keymap for toggling Claude Code, false to disable
|
||||||
|
terminal = "<C-,>", -- Terminal mode keymap for toggling Claude Code, false to disable
|
||||||
|
variants = {
|
||||||
|
continue = "<leader>cC", -- Normal mode keymap for Claude Code with continue flag
|
||||||
|
verbose = "<leader>cV", -- Normal mode keymap for Claude Code with verbose flag
|
||||||
|
},
|
||||||
|
},
|
||||||
|
window_navigation = true, -- Enable window navigation keymaps (<C-h/j/k/l>)
|
||||||
|
scrolling = true, -- Enable scrolling keymaps (<C-f/b>) for page up/down
|
||||||
|
},
|
||||||
|
})
|
||||||
22
dots/.config/nvim/after/plugin/codecompanion.nvim.lua
Normal file
22
dots/.config/nvim/after/plugin/codecompanion.nvim.lua
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
require("codecompanion").setup({
|
||||||
|
ignore_warnings = true,
|
||||||
|
strategies = {
|
||||||
|
chat = { adapter = "openai" },
|
||||||
|
inline = { adapter = "openai" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Load mcphub extension after codecompanion is initialized
|
||||||
|
-- and ensure the config structure exists
|
||||||
|
local ok, cc_config = pcall(require, "codecompanion.config")
|
||||||
|
if ok then
|
||||||
|
cc_config.interactions = cc_config.interactions or {}
|
||||||
|
cc_config.interactions.chat = cc_config.interactions.chat or {}
|
||||||
|
cc_config.interactions.chat.tools = cc_config.interactions.chat.tools or {}
|
||||||
|
|
||||||
|
require("mcphub.extensions.codecompanion").setup({
|
||||||
|
make_vars = true,
|
||||||
|
make_slash_commands = true,
|
||||||
|
show_result_in_chat = true,
|
||||||
|
})
|
||||||
|
end
|
||||||
30
dots/.config/nvim/after/plugin/conform.lua
Normal file
30
dots/.config/nvim/after/plugin/conform.lua
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
require("conform").setup({
|
||||||
|
format_after_save = {
|
||||||
|
lsp_fallback = false,
|
||||||
|
async = false,
|
||||||
|
timeout_ms = 500,
|
||||||
|
},
|
||||||
|
formatters_by_ft = {
|
||||||
|
awk = { "awk" },
|
||||||
|
bash = { "shellcheck" },
|
||||||
|
c = { "clang-format" },
|
||||||
|
cpp = { "clang-format" },
|
||||||
|
css = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
gdscript = { "gdformat" },
|
||||||
|
haskell = { "ormolu" },
|
||||||
|
html = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
javascript = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||||
|
javascriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||||
|
json = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
jsonc = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
lua = { "stylua" }, -- configured in stylua.toml
|
||||||
|
markdown = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
nix = { "nixfmt" },
|
||||||
|
python = { "isort", "black" },
|
||||||
|
rust = { "rustfmt", lsp_fallback = "fallback" },
|
||||||
|
svelte = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
|
||||||
|
typescript = { "eslint_d", "prettierd", "prettier", stop_after_first = true },
|
||||||
|
typescriptreact = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
|
||||||
|
-- yaml = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
},
|
||||||
|
})
|
||||||
1
dots/.config/nvim/after/plugin/copilot-cmp.lua
Normal file
1
dots/.config/nvim/after/plugin/copilot-cmp.lua
Normal file
@@ -0,0 +1 @@
|
|||||||
|
require("copilot_cmp").setup()
|
||||||
1
dots/.config/nvim/after/plugin/copilot.lua
Normal file
1
dots/.config/nvim/after/plugin/copilot.lua
Normal file
@@ -0,0 +1 @@
|
|||||||
|
require("copilot").setup({})
|
||||||
7
dots/.config/nvim/after/plugin/eyeliner.nvim.lua
Normal file
7
dots/.config/nvim/after/plugin/eyeliner.nvim.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
require("eyeliner").setup({
|
||||||
|
highlight_on_key = true,
|
||||||
|
dim = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_set_hl(0, "EyelinerPrimary", { bold = true, underline = true })
|
||||||
|
vim.api.nvim_set_hl(0, "EyelinerSecondary", { underline = true })
|
||||||
1
dots/.config/nvim/after/plugin/fidget.nvim.lua
Normal file
1
dots/.config/nvim/after/plugin/fidget.nvim.lua
Normal file
@@ -0,0 +1 @@
|
|||||||
|
require("fidget").setup()
|
||||||
16
dots/.config/nvim/after/plugin/fzf-lua.lua
Normal file
16
dots/.config/nvim/after/plugin/fzf-lua.lua
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
local fzf = require("fzf-lua")
|
||||||
|
|
||||||
|
fzf.setup({ "max-perf" })
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>f<leader>", fzf.builtin) -- Help
|
||||||
|
vim.keymap.set("n", "<leader>fc", fzf.commands)
|
||||||
|
vim.keymap.set("n", "<leader>ff", fzf.files)
|
||||||
|
vim.keymap.set("n", "<leader>fg", fzf.live_grep_native)
|
||||||
|
vim.keymap.set("n", "<leader>fb", fzf.buffers)
|
||||||
|
vim.keymap.set("n", "<leader>fd", fzf.diagnostics_workspace)
|
||||||
|
vim.keymap.set("n", "<leader>fhe", fzf.help_tags)
|
||||||
|
vim.keymap.set("n", "<leader>fhi", fzf.search_history)
|
||||||
|
vim.keymap.set("n", "<leader>fma", fzf.marks)
|
||||||
|
vim.keymap.set("n", "<leader>fmp", fzf.man_pages)
|
||||||
|
|
||||||
|
vim.keymap.set("i", "<c-f>", fzf.complete_path)
|
||||||
12
dots/.config/nvim/after/plugin/gitsigns.nvim.lua
Normal file
12
dots/.config/nvim/after/plugin/gitsigns.nvim.lua
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
local gitsigns = require("gitsigns")
|
||||||
|
|
||||||
|
gitsigns.setup({
|
||||||
|
current_line_blame_formatter = "<author>, <author_time:%R> - <summary>",
|
||||||
|
linehl = true,
|
||||||
|
current_line_blame_opts = {
|
||||||
|
delay = 0,
|
||||||
|
virt_text_pos = "right_align",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("Blame", gitsigns.toggle_current_line_blame, { nargs = "?" })
|
||||||
10
dots/.config/nvim/after/plugin/image.nvim.lua
Normal file
10
dots/.config/nvim/after/plugin/image.nvim.lua
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
require("image").setup({
|
||||||
|
backend = "kitty",
|
||||||
|
kitty_method = "normal",
|
||||||
|
processor = "magick_cli",
|
||||||
|
integrations = {
|
||||||
|
markdown = {
|
||||||
|
filetypes = { "markdown", "pandoc" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
1
dots/.config/nvim/after/plugin/kitty-scrollback.nvim.lua
Normal file
1
dots/.config/nvim/after/plugin/kitty-scrollback.nvim.lua
Normal file
@@ -0,0 +1 @@
|
|||||||
|
require("kitty-scrollback").setup()
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user