mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-30 18:42:18 +00:00
Compare commits
829 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cbfc9049a1 | |||
| 12391d7757 | |||
| 10fd3862aa | |||
| 77b3173531 | |||
| e53a880e75 | |||
|
|
8efdde88a3 | ||
|
|
575a80ffff | ||
|
|
e86c137529 | ||
|
|
cb35b5eb62 | ||
|
|
0ae6b106b7 | ||
|
|
c61127abbe | ||
|
|
4b8a53f687 | ||
|
|
712187578f | ||
|
|
db4b663e64 | ||
| 6bb804ec7f | |||
|
|
892216a8fc | ||
|
|
a2a99445ff | ||
|
|
678466b898 | ||
| bd5eff8bce | |||
| 2979cc6cfc | |||
|
|
5630200d95 | ||
| 961efec364 | |||
| 4b0e38ffd2 | |||
|
|
c6ba0e4036 | ||
|
|
7b1ed2f596 | ||
|
|
82d48c8989 | ||
|
|
48f61fa917 | ||
|
|
abc3408609 | ||
|
|
8bef11095e | ||
| 7d427d29bb | |||
|
|
fd71a1ad32 | ||
|
|
277d47098f | ||
|
|
d35014ed2e | ||
|
|
8e7af8ddc7 | ||
| 099e6672c8 | |||
| e578e52aff | |||
|
|
0b5f80cb03 | ||
|
|
72f42835ff | ||
|
|
a949f0d4cf | ||
|
|
8b1e4462b3 | ||
|
|
055cf7ef2e | ||
|
|
8c2b3fb475 | ||
| 3fa1efe88d | |||
| 9cc81c4cbf | |||
| bba76843db | |||
| 9018d1a038 | |||
|
|
a8595e2e07 | ||
|
|
beb89e9490 | ||
|
|
cb381fe57d | ||
|
|
7be770a2af | ||
|
|
d16ce9ad0f | ||
| ab67f6be5a | |||
| efadbb4248 | |||
| ded4bf3bb3 | |||
|
|
62eb417935 | ||
| d22f9ece7d | |||
| 79be2d41bc | |||
|
|
743ebb0e9f | ||
|
|
8fcab21a67 | ||
|
|
43a714513f | ||
|
|
044298af74 | ||
|
|
6604f7a2ca | ||
|
|
065eb2f9c0 | ||
|
|
49b7fa43ad | ||
|
|
8f652a2a9b | ||
|
|
b81adc62b1 | ||
|
|
fd044776b9 | ||
| 5472634f08 | |||
| 33db70e725 | |||
| 56b2fdabf1 | |||
| 3f2d1b85ed | |||
|
|
0bd72c6d51 | ||
|
|
69684c23b9 | ||
|
|
28a36b5d6b | ||
|
|
00fd6fc5dc | ||
|
|
abfe7cc011 | ||
|
|
95e21a124b | ||
|
|
5178bec1a0 | ||
|
|
1b94674e6b | ||
|
|
7e9d2df990 | ||
| 91be3b9edc | |||
| 6bfcd38773 | |||
| 74a3d58417 | |||
| 7b6e95c4ab | |||
| 88a2b3dadf | |||
|
|
416523660a | ||
|
|
1e15c0cad2 | ||
|
|
93129c0fd0 | ||
|
|
7c835df7dc | ||
|
|
729efdd406 | ||
| ebb22064ce | |||
|
|
c4a55efd7c | ||
|
|
508b44fd48 | ||
|
|
2fdcd839a4 | ||
|
|
cdf791bb63 | ||
|
|
cd72b003a0 | ||
| bb93200f52 | |||
|
|
7715e1c8b0 | ||
|
|
e91f31a049 | ||
|
|
56791753f7 | ||
| e9bd3708fa | |||
| 0a2b0b8a45 | |||
|
|
1be21eb247 | ||
|
|
dd89164b8b | ||
|
|
aae39dd913 | ||
|
|
4ab8182d90 | ||
|
|
b281efc576 | ||
|
|
35ede87808 | ||
|
|
2e184aa6c1 | ||
|
|
ffd4121eef | ||
|
|
a424347974 | ||
|
|
574cafed0e | ||
|
|
099a80c78b | ||
|
|
081ac55dd7 | ||
|
|
4136b66d9f | ||
|
|
4183bc0a24 | ||
|
|
cc8578ed4c | ||
| 65d5040af2 | |||
| 5606cff9fd | |||
| 530ce0df4f | |||
|
|
f6252c871e | ||
| caf5722b95 | |||
|
|
185562737c | ||
| 579685e4ee | |||
| 9ece4c64c6 | |||
| b413eefd37 | |||
| 06c1275fa5 | |||
| c2a5d45998 | |||
| 94038a71bf | |||
| 4bfa54972e | |||
| 25831458aa | |||
|
|
41315f7c53 | ||
|
|
fecbb3568c | ||
| f18d08ec5f | |||
| b9fac1a444 | |||
| a5fe70d3c2 | |||
| fdaa1883a7 | |||
|
|
e67abce6ed | ||
|
|
ab07793804 | ||
|
|
ba87c82d51 | ||
|
|
cf5ce57a57 | ||
|
|
17a0dfd6e1 | ||
|
|
e3e0f99eaf | ||
|
|
3399288a81 | ||
|
|
fe0d7408cf | ||
|
|
0223e08da8 | ||
|
|
bfe46f0a90 | ||
|
|
a60ce374b5 | ||
| 5f59851c7a | |||
|
|
9c68e8b05c | ||
| 84e3351125 | |||
| 363ae046c8 | |||
|
|
9ac792b924 | ||
|
|
e377d9212a | ||
|
|
125fd027f7 | ||
|
|
ecd099edbd | ||
| 3baa7547e1 | |||
|
|
782eeb78ec | ||
|
|
7b211489fd | ||
| d3ec2e7332 | |||
|
|
0b11f6456a | ||
|
|
58064a7b9b | ||
|
|
4723d5c61c | ||
|
|
4e0e4b8883 | ||
|
|
5b6f43e22f | ||
| ca594f9b2d | |||
| 685a843d78 | |||
| 470acd8956 | |||
| a6907d890e | |||
|
|
c37fdb7cd3 | ||
| bad1ce2a34 | |||
| e67d4285b6 | |||
| f577ad28a9 | |||
|
|
e9ac5e48ac | ||
|
|
cc01f4fdde | ||
| 52a5f226e9 | |||
|
|
9b94302270 | ||
|
|
fe7e9173d0 | ||
|
|
fb5aae3deb | ||
| 036392d38a | |||
| 2cb11292d4 | |||
| a163d6338a | |||
| 191488c081 | |||
| cc47614280 | |||
| 91cde60dba | |||
| 5dea757707 | |||
| f8833fca73 | |||
| 9cd99dbc88 | |||
| 14f67cb5ca | |||
|
|
4ce76fbd70 | ||
|
|
ca68803fb9 | ||
| fb97f10f64 | |||
| 6dbbc439b3 | |||
| 368fbfc7c8 | |||
| d6d5a8ca36 | |||
|
|
d65c25819f | ||
|
|
62c620efad | ||
| 07fe18af75 | |||
|
|
29d3676b38 | ||
| 0b9e1803d4 | |||
|
|
c45ad9710d | ||
| cf7ca2109f | |||
| 1531647e01 | |||
|
|
15aff17f03 | ||
|
|
42a5b79048 | ||
| a72c8ff33a | |||
| 19d9035214 | |||
| 7ca077c852 | |||
| 48604d81d6 | |||
|
|
405e68f895 | ||
| 6d62352127 | |||
| 017d82abc5 | |||
|
|
24ad4bf5b7 | ||
| 07264c594f | |||
|
|
7b58f660ac | ||
|
|
b000f2b0c4 | ||
| 4d548687e1 | |||
| 519d8398de | |||
| 2203bb3957 | |||
|
|
ddafdfe3c9 | ||
| a3f35b2d18 | |||
| 90020a4998 | |||
| 0f806c172d | |||
|
|
e8eb9b98b2 | ||
| 7e0a88cf8f | |||
| f72f57ebf0 | |||
| b5e56e2cbb | |||
|
|
179938132c | ||
|
|
bae84c176c | ||
| be8a6761af | |||
| c348f3625f | |||
| 094f19c99c | |||
| 5a23ae8f01 | |||
|
|
ee47821089 | ||
|
|
b834ce04f7 | ||
|
|
6a62d73d7f | ||
|
|
440842ed34 | ||
|
|
d0563e4a29 | ||
|
|
bc404bfbea | ||
| 923f881725 | |||
| ccc5903290 | |||
|
|
786efc48fa | ||
| 2a11a28422 | |||
| 812a27ea61 | |||
| e73e61f01b | |||
| 314679b4fc | |||
|
|
516b27384a | ||
|
|
9e1af3053d | ||
|
|
9e4f8741b3 | ||
| c0995c1b49 | |||
| c9f1e824c3 | |||
| 3d301daeb1 | |||
| 8b4198dc90 | |||
| 66461f9b1b | |||
| 80851d1efd | |||
|
|
c457c0f3ab | ||
| 9936e4bd76 | |||
| c3a45e2653 | |||
| 506360a027 | |||
|
|
00074ec3ff | ||
|
|
7c7daf89ea | ||
|
|
267c54aa56 | ||
|
|
d72409efc0 | ||
| 3d9e0477b0 | |||
| cfab48eee0 | |||
| 624920b2ab | |||
|
|
fd82f1e36c | ||
|
|
48ec8cd7a7 | ||
|
|
3a61bd2b72 | ||
| 895b0ad353 | |||
| 3c733ec7eb | |||
| 5321ad7bd7 | |||
| 196077bea9 | |||
|
|
75147c7dd6 | ||
| f28ad41f67 | |||
| 61b66d3114 | |||
| 282f760a4f | |||
| 4a9c9b4cb9 | |||
| 16311ee5b4 | |||
| 2fddfa82c0 | |||
| 8f5f44db2d | |||
| 8ad1f5c4d0 | |||
| ac0aa1fbc0 | |||
| e8c6794ff6 | |||
| 4de9a649f0 | |||
|
|
e7f115680e | ||
| f3b4551d0c | |||
| 64725c57dc | |||
| b32ee414e3 | |||
|
|
6ea7807718 | ||
| 6a776bd3dd | |||
| 6ffe581326 | |||
| 5d476e8eed | |||
|
|
bf84c67f08 | ||
| 9cb400dd3f | |||
| fce649619a | |||
| 8b0148e468 | |||
| 9cb27eb9dc | |||
| f1ed88a98e | |||
| ec35f1cb1e | |||
| dab8504cfd | |||
| 0f9a76e36f | |||
|
|
97244d5287 | ||
| 50ea9bea89 | |||
| 688469ad8b | |||
|
|
af32914d71 | ||
|
|
840bd85232 | ||
| c81ee240bf | |||
| e215fe0a2f | |||
| 38e340ac8d | |||
| c9383f955c | |||
| 8eeaea802a | |||
| d626731736 | |||
| e459cd99e7 | |||
| 3e4391adda | |||
| a6400943d2 | |||
| 5ec8e89641 | |||
|
|
115dac4fb4 | ||
|
|
405e2d5c77 | ||
| 535925aeaf | |||
|
|
7fa29ae3d6 | ||
|
|
b1a01b6717 | ||
|
|
b9d2ee01ed | ||
| e81938a04d | |||
| 3bbcb248ba | |||
| 17194755e6 | |||
| 45f95422ef | |||
| b8f0bb570e | |||
| a0d8069455 | |||
|
|
8b1eb0a582 | ||
|
|
9cb10250c5 | ||
| 2836ed19cf | |||
| 21eb5086a9 | |||
| 56f49ab314 | |||
| 5e1a2d0dd0 | |||
| 5fdd26bf80 | |||
| 0c93dd9ad8 | |||
| 9deb613b5b | |||
|
|
bf4031c238 | ||
| 087b33cc97 | |||
|
|
361657cdec | ||
| 4855e56f3c | |||
| c119d4c20b | |||
| 4815e8678b | |||
| 31a45fed19 | |||
| 5aae400c92 | |||
| 26e11047ce | |||
| 1f0826c7e7 | |||
| 9f71f3c8aa | |||
| 5d929c6466 | |||
| afc04db93a | |||
|
|
eca0321e21 | ||
| def3372b9a | |||
|
|
5aaa177756 | ||
| 31a6ea351d | |||
| 333995c7f4 | |||
| d6b24c27a1 | |||
| 89ae4003f9 | |||
| 7a008c3ae8 | |||
| a6f89e80bd | |||
| 3d987e491e | |||
| e1729fd925 | |||
| 4e5dae4161 | |||
| 6b30ebfddb | |||
|
|
0aafae5d97 | ||
| 32cc561d20 | |||
| 784fddea64 | |||
| 0a058aaf22 | |||
| ff6876a56d | |||
| ccbd29fc40 | |||
| 9251225d3e | |||
| 241eed66f5 | |||
| 6de8e92968 | |||
| 2cdda605ef | |||
| 87a4ec8ecf | |||
| 87613d10ec | |||
| f6dc193f6a | |||
| 4adbbdb47a | |||
| bdbe10f612 | |||
| 531488001f | |||
| 4f2b47d5c3 | |||
|
|
dfbdb89aca | ||
|
|
c9489ae50f | ||
| 9fdb4cdfb0 | |||
| f4da515120 | |||
| fae9665671 | |||
| d5e34d168b | |||
| e8b43d76dc | |||
| 4f9757ad2b | |||
| 611a3bfa72 | |||
| 10da4ea372 | |||
| 68525d5ae4 | |||
|
|
7311f2576e | ||
| 721d3c0d15 | |||
| c82e183ff9 | |||
| 1b6a93650b | |||
| aa85bb0c72 | |||
| ceb452aa68 | |||
| 467a1c2ff9 | |||
| f73cd32309 | |||
| 0be2a5b879 | |||
| 8c015ac251 | |||
| 894ec12fd8 | |||
| 8cf3602de1 | |||
| 57c4f0438e | |||
|
|
02907d6a6b | ||
|
|
127edd1b2c | ||
|
|
76dc53b50a | ||
| f88a5298b2 | |||
| b436472bbb | |||
| 4e4a2eaab1 | |||
| d59204f25f | |||
| b299e3df1e | |||
| 5bcc06d53b | |||
|
|
7c09a7ff74 | ||
| 88efedf26b | |||
|
|
cdd68748e0 | ||
|
|
f8ff2699e6 | ||
| c5e06888b8 | |||
|
|
4f138eee73 | ||
|
|
90258e5105 | ||
| efc53fc9bf | |||
|
|
f62c17d940 | ||
|
|
fb15b93887 | ||
|
|
222276486a | ||
|
|
4446d59e73 | ||
| a22709a0f0 | |||
| 76598ad33b | |||
| 56ccb7c136 | |||
|
|
b6d933d018 | ||
| f9856a27b9 | |||
| b36b52ad57 | |||
| 1e60ccf49b | |||
|
|
9ca9439b9a | ||
| 6d30ae7e84 | |||
| 031e124663 | |||
| bb50c9fe18 | |||
| 8e608de501 | |||
|
|
8917b7736b | ||
| 18ff879f1d | |||
| c5a258d7be | |||
| 7525f1f71d | |||
| 3b665bdba0 | |||
| 99477364bd | |||
|
|
629fdf6d4c | ||
| 1288599b1f | |||
| be3a68fecb | |||
| 101e4da1d6 | |||
| 23430a609a | |||
| bb0d56e403 | |||
| d3b08bdf4f | |||
| e1ec501c55 | |||
| f92c3407f0 | |||
| b5971439b6 | |||
| 8ea8a2797a | |||
| b0f9222482 | |||
| 825ccc1031 | |||
| dab7a8a38a | |||
| 1dbc7ae5cd | |||
| 7038da568e | |||
| bfcaa26070 | |||
| f6488aecce | |||
| ad166e8012 | |||
| 2a76a414a0 | |||
| bb8ddf0bba | |||
| bf3e746010 | |||
|
|
b9957e4f0e | ||
| e1deba4ccf | |||
| 36e4de3035 | |||
| 3eab1faeab | |||
| 1eb4098646 | |||
| f7db8cae15 | |||
| 97dd3dc21d | |||
| 6da6797f1b | |||
|
|
88356f1392 | ||
| 174bb842e9 | |||
| f6e7590118 | |||
| 498996a6e2 | |||
| 0961985fb4 | |||
| 293452604d | |||
|
|
9582f18c7d | ||
| 051e3604ee | |||
| 09d62dd159 | |||
| 8a3763e168 | |||
| c37793f649 | |||
| 7bc7230990 | |||
| 067df4e34b | |||
| 4d28499423 | |||
| b685af82fb | |||
|
|
b8a4b82431 | ||
| 0b03acebd8 | |||
| d172b86cb8 | |||
| f910dfb9ac | |||
| ee95d57ba0 | |||
| f8a317f3c7 | |||
| 3762e10932 | |||
| afda96902b | |||
| 3060b6ad66 | |||
|
|
4f154cf509 | ||
| 863d803483 | |||
| 07bb2b56d1 | |||
| 84a753100e | |||
| c8b01f3fda | |||
| 8e6a110aac | |||
| a8baa1671f | |||
| 2ccdd042f6 | |||
|
|
8cf43ed555 | ||
| e22094e0da | |||
| 6186c5cba4 | |||
| c453dcbf84 | |||
| 4daaa62aed | |||
| f56d5682d1 | |||
| 439638b686 | |||
| a8a473a46d | |||
| eb91a43bbd | |||
|
|
193fae662e | ||
|
|
117ca1a944 | ||
| 1f1a6d42ad | |||
| cca265cd99 | |||
| cc6abb53ba | |||
| ab34c148a6 | |||
|
|
910b29ed9f | ||
| 3fb0a75a62 | |||
|
|
f73abb508b | ||
|
|
1dd3d952cf | ||
| 1ffd6e1569 | |||
| a76033a48a | |||
| 34dc18883e | |||
| 832d8b94f3 | |||
| c40eb765f8 | |||
|
|
1bb7e9076b | ||
|
|
17821dfefa | ||
| 19327947ed | |||
| 2356fc4c61 | |||
| 45219deccb | |||
| 5471aba1a4 | |||
|
|
6f6ee3611c | ||
|
|
d8f9cdf265 | ||
| abb6de05be | |||
| 60ef48e918 | |||
| e58c79a3c3 | |||
| d47f21286d | |||
| 3f108c9353 | |||
|
|
4a68146786 | ||
|
|
cf79e61943 | ||
| 43dcb303a0 | |||
| 1b03f0bbd6 | |||
| 8a52c9a97e | |||
| 8e84c3aef7 | |||
| acd2f7fc6d | |||
| 1e4aa1558a | |||
| b314c0ba76 | |||
| ece46561c4 | |||
| 196d217c34 | |||
| 7d2fc55791 | |||
| 74fb12f093 | |||
|
|
d7988bcad7 | ||
| 320ae35dcd | |||
| 0964253be5 | |||
|
|
f3f7ecc522 | ||
|
|
b88de0c3ae | ||
| c5e6860595 | |||
| b5a3c34fc3 | |||
| 87c89cf828 | |||
|
|
8d57c9425e | ||
|
|
cfe97d81a7 | ||
| 2f13ad324a | |||
|
|
d203fc9d51 | ||
| bf279b6def | |||
| 87926f8d9b | |||
| 6b056f6072 | |||
| 823cdbc07f | |||
| 0f6157eb04 | |||
| 721fe614a7 | |||
| 5ea16d4653 | |||
| 900e6a8f85 | |||
| 16673de789 | |||
| c732a75184 | |||
|
|
96280e6e9b | ||
| 5ab0f89765 | |||
| d585d61537 | |||
| 746646ae55 | |||
|
|
6e69ec6410 | ||
| af123e5138 | |||
| 3879289559 | |||
| 392628e733 | |||
| aa70eab5fb | |||
| e5311ca285 | |||
| d5618c9b5f | |||
| d091f5a88f | |||
| cb9195e3ad | |||
| c91cc387b6 | |||
| 083091ea46 | |||
| 7ff74f0e15 | |||
| 9d1f62fcca | |||
| a563e82e33 | |||
| 62ff7836e7 | |||
| 88cb573027 | |||
| 82772d8208 | |||
|
|
240035569c | ||
|
|
9697c200f9 | ||
| fd11f9966b | |||
| 722b3c0cde | |||
| 4fcb9d9741 | |||
| fc232f26f7 | |||
| 8b078309cf | |||
| 5a8f990e52 | |||
| c76c5d08b0 | |||
| b2857e226c | |||
| dfbac0c736 | |||
| fdd713908c | |||
| 60210c9bec | |||
| eaf8d2bdca | |||
| cc00055626 | |||
|
|
567de68844 | ||
|
|
ed0b229757 | ||
| c8b6243c0b | |||
|
|
21a92eb145 | ||
| 8ec317f582 | |||
|
|
42201d8b68 | ||
|
|
0c003ae5b9 | ||
| d383031ec8 | |||
|
|
fa5e5f16da | ||
| f82396236e | |||
| b127c2514d | |||
|
|
b06ac3bc0f | ||
|
|
7e4ea90a05 | ||
|
|
d264a33d21 | ||
| 224ee56461 | |||
|
|
8147490c65 | ||
|
|
c6d501347a | ||
|
|
d8044f2b6a | ||
|
|
1b3fe6d12e | ||
| 76b66d8c61 | |||
| 9c8644de17 | |||
| 120345b562 | |||
| 8accd4a60b | |||
| 8fb03660ad | |||
| 8b2dc74f2a | |||
| 8fa63e63bb | |||
| 4ca5b63b75 | |||
| 5a59872377 | |||
| 38419eda28 | |||
| fc85dbaa6c | |||
| 250e7f5666 | |||
| 8f96922033 | |||
| 4c4de2dc26 | |||
| b8c163e028 | |||
| 0a974c2a17 | |||
| fd8d72ab38 | |||
| 0908a23231 | |||
| 2e070eed83 | |||
| e22762255d | |||
| 093f58f129 | |||
| 9b6e39b4af | |||
|
|
6f1e1a0416 | ||
| 36e0f36e06 | |||
| e2c37d29e8 | |||
| 78716fa8ce | |||
| 81e9b20eb6 | |||
|
|
94e58b307b | ||
| 98aca096a9 | |||
| 121e31c7d4 | |||
| f6bcd10ac5 | |||
| 619c772fcc | |||
| 746d44151c | |||
| b9585209be | |||
| 930dcf00c4 | |||
| bb8e3bba56 | |||
| 6431c2e6dc | |||
| 248eca1ae6 | |||
| 4b1ab2e1b8 | |||
| c0f537439b | |||
| 9ab132d37c | |||
| 2b9ddc232b | |||
| 1a244ce0b1 | |||
| fdc0f45b23 | |||
| 3fa90eef3b | |||
| 7ea7c12f0b | |||
| f76492b942 | |||
| 7947340663 | |||
| 300c48b1e9 | |||
| 772527cc66 | |||
|
|
370fdcbcbe | ||
| b32c86bac2 | |||
| 8d85809b1c | |||
| 7fc40e3eab | |||
|
|
1aca769ebf | ||
| 57df4edf6c | |||
| 240ac35aa8 | |||
| ad0ba59b67 | |||
| bbc26e66dd | |||
| 1803d41969 | |||
| 34d547433f | |||
| dff4b9a9c5 | |||
| c33404eb27 | |||
| 99e7578d60 | |||
| d8011728c7 | |||
| 2f67d4a2e2 | |||
|
|
ef37681087 | ||
|
|
0c014033d1 | ||
|
|
14635009d2 | ||
| 70118fee52 | |||
|
|
0dce28ea6a | ||
| ba15f82302 | |||
| d4972ea30d | |||
| ed7263dfee | |||
| 4cda063305 | |||
| d251ea9cdc | |||
| bc4e906ff6 | |||
| 75c36bacf9 | |||
| e7cda5ac0c | |||
| 41024b1eb5 | |||
| 74afeb61c8 | |||
| 104bc369bc | |||
| 57e63847ce | |||
| 2dc08e5e51 | |||
| 989b5b5111 | |||
| 24a5dd1ff6 | |||
| 5826e35853 | |||
| e329868568 | |||
| dc76fa8914 | |||
| 3413365d41 | |||
| 37299f4893 | |||
| 71a78c6e0c | |||
| 3f8a4deb05 | |||
| ffe288aba3 | |||
| 28a1fc2831 | |||
| 28aae89f70 | |||
| e8fe5c570b | |||
| 26f6024292 | |||
| 4e4692321b | |||
| 3ea221ccf9 | |||
| e7774c4ab1 | |||
| 1f2ca90ca5 | |||
| adecceda7a | |||
| 8a3b2e703c | |||
| 1ee726e30c | |||
| 9857c8eb00 | |||
| a919d9544e | |||
| 7bc7921a17 | |||
| 735807f245 | |||
| 6d531e2d40 | |||
| 77f89c0f48 | |||
| 7f3c7b7e1c | |||
| fc16b8231e | |||
| 64a626d5c4 | |||
| 54816c2ce9 | |||
| 3acaea5611 | |||
| e4a313abe7 | |||
| 0b1c75cbdd | |||
| cab0f4da49 | |||
| cef15eddce | |||
| f8987818b8 | |||
|
|
15d1f6a59a | ||
| ba586fca7d | |||
|
|
d93bc7aae3 | ||
| 77b0428cec | |||
| 387432b27b | |||
| 88fa706b75 | |||
| 96ce9fec0c | |||
| 66d5fbc8ac | |||
| cc3ceb4176 | |||
| 0f9c69bb65 | |||
| c754746b9f | |||
| df5cab6a88 | |||
| b9ddba4666 | |||
| 77e92ef15e | |||
| 383bc2b052 | |||
| 0e109c3da3 | |||
| 50abd5aa30 | |||
| 082e27fb0a | |||
| e05e68f5d1 | |||
| 074c169e3c | |||
| 636ea749ac | |||
| da2a2e0f81 | |||
| 0ef12b61ac | |||
| c6fc3db52f | |||
| 1bde81a673 | |||
| d60248f356 | |||
| 40e8b9443b | |||
| 8a032a2804 | |||
| 367be373c4 | |||
| cf2f98d5c0 | |||
| a3704f7db9 | |||
| 7c359ffea0 | |||
| 9542624323 | |||
|
|
b0d74bad1a | ||
| fcade15933 | |||
| 6860909d39 | |||
| 493ad17c15 | |||
|
|
0495ac1ea8 | ||
| 9b5d372a74 | |||
| 9d04343a26 | |||
|
|
4aa0fba682 | ||
| ad6482b34a | |||
| 113e27734a | |||
| 378abfe896 | |||
| eadf1e5c84 | |||
| ea4d185fb4 | |||
| 22bd8ca870 | |||
| 7ee81b005c | |||
| 3faf8224e8 | |||
| d028f37c00 | |||
| 1df05ac0ba | |||
| e54e202281 | |||
| c226943aa9 | |||
| dda4b65458 | |||
| 7d564d0b4d | |||
| bc30e5f7a6 | |||
| 9e2f7e8f1b | |||
| 7b47e49804 | |||
| 1be7649122 | |||
| 453d54bc7f | |||
| 7ede7b9ac1 | |||
| a90743a09c | |||
| 185d28e587 | |||
|
|
37f023351d | ||
| 39523e9234 | |||
|
|
1f8fc0d289 | ||
| c083d2a20a | |||
| 75c6a0bccd | |||
| 5ce86b3229 | |||
| 885189e4ff | |||
| 8f3f4d7ed9 | |||
| 03a1b5fb85 | |||
| 7b83f6e943 | |||
| 261ff41e28 | |||
| 36ad2a2ad9 |
@@ -1 +1 @@
|
|||||||
extends @ivuorinen/browserslist-config
|
extends @ivuorinen/browserslist-config
|
||||||
|
|||||||
@@ -8,18 +8,26 @@ indent_style = space
|
|||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
[*.php]
|
[*.fish]
|
||||||
|
max_line_length = 120
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
max_line_length = 120
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.lua]
|
||||||
|
max_line_length = 90
|
||||||
|
|
||||||
|
[*.{php,fish}]
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
[.git{ignore,modules}]
|
[.git{ignore,modules}]
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 1
|
indent_size = 1
|
||||||
|
|
||||||
[*.plist]
|
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
|
||||||
indent_size = 1
|
indent_size = 2
|
||||||
indent_style = tab
|
tab_width = 2
|
||||||
|
|
||||||
[{local/bin/*,**/*.sh,**/zshrc,config/*}]
|
|
||||||
shell_variant = bash # --language-variant
|
shell_variant = bash # --language-variant
|
||||||
binary_next_line = true
|
binary_next_line = true
|
||||||
switch_case_indent = true # --case-indent
|
switch_case_indent = true # --case-indent
|
||||||
@@ -27,3 +35,20 @@ space_redirects = true
|
|||||||
keep_padding = false
|
keep_padding = false
|
||||||
function_next_line = true # --func-next-line
|
function_next_line = true # --func-next-line
|
||||||
|
|
||||||
|
[{*.plist,config/git/**,**/config/git/**}]
|
||||||
|
indent_size = 1
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
# Ignore the entire "third_party" directory when calling shfmt on directories,
|
||||||
|
# such as "shfmt -l -w .". When formatting files directly,
|
||||||
|
# like "shfmt -w third_party/foo.sh" or "shfmt --filename=third_party/foo.sh",
|
||||||
|
# the ignore logic is applied only when the --apply-ignore flag is given.
|
||||||
|
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**,config/tmux/plugins/**}]
|
||||||
|
ignore = true
|
||||||
|
|
||||||
|
[plan]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
max_line_length = off
|
||||||
|
|
||||||
|
[base/hammerspoon/hammerspoon.types.lua]
|
||||||
|
max_line_length = off
|
||||||
|
|||||||
@@ -1,11 +1,21 @@
|
|||||||
{
|
{
|
||||||
"Version": "2.7.0",
|
|
||||||
"Verbose": false,
|
"Verbose": false,
|
||||||
"Debug": false,
|
"Debug": false,
|
||||||
"IgnoreDefaults": false,
|
"IgnoreDefaults": false,
|
||||||
"SpacesAftertabs": false,
|
"SpacesAfterTabs": false,
|
||||||
"NoColor": false,
|
"NoColor": false,
|
||||||
"Exclude": [],
|
"Exclude": [
|
||||||
|
"base/plan",
|
||||||
|
"config/fish/completions/.*",
|
||||||
|
"config/fish/conf.d/.*",
|
||||||
|
"config/fish/functions/.*",
|
||||||
|
"config/fzf/key-bindings.fish",
|
||||||
|
"config/irssi/scripts/autorun/.*",
|
||||||
|
"config/vim/autoload/.*",
|
||||||
|
"docs/.*",
|
||||||
|
"local/man/.*",
|
||||||
|
"local/share/.*"
|
||||||
|
],
|
||||||
"AllowedContentTypes": [],
|
"AllowedContentTypes": [],
|
||||||
"PassedFiles": [],
|
"PassedFiles": [],
|
||||||
"Disable": {
|
"Disable": {
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": ["@ivuorinen"]
|
|
||||||
}
|
|
||||||
53
.gitattributes
vendored
53
.gitattributes
vendored
@@ -1,4 +1,4 @@
|
|||||||
## GITATTRIBUTES FOR WEB PROJECTS
|
## GITATTRIBUTES
|
||||||
#
|
#
|
||||||
# These settings are for any web project.
|
# These settings are for any web project.
|
||||||
#
|
#
|
||||||
@@ -20,20 +20,23 @@
|
|||||||
*.bat text eol=crlf
|
*.bat text eol=crlf
|
||||||
*.cmd text eol=crlf
|
*.cmd text eol=crlf
|
||||||
*.coffee text
|
*.coffee text
|
||||||
*.css text diff=css
|
*.css text diff=css eol=lf
|
||||||
*.htm text diff=html
|
*.fish text diff=shell eol=lf
|
||||||
*.html text diff=html
|
*.htm text diff=html eol=lf
|
||||||
|
*.html text diff=html eol=lf
|
||||||
*.inc text
|
*.inc text
|
||||||
*.ini text
|
*.ini text
|
||||||
*.js text
|
*.js text
|
||||||
*.json text
|
*.json text
|
||||||
*.jsx text
|
*.jsx text
|
||||||
*.less text
|
*.less text
|
||||||
|
*.lua text diff=lua eol=lf
|
||||||
*.ls text
|
*.ls text
|
||||||
*.map text -diff
|
*.map text -diff
|
||||||
*.od text
|
*.od text
|
||||||
*.onlydata text
|
*.onlydata text
|
||||||
*.php text diff=php
|
*.php text diff=php
|
||||||
|
*.plist text eol=lf
|
||||||
*.pl text
|
*.pl text
|
||||||
*.ps1 text eol=crlf
|
*.ps1 text eol=crlf
|
||||||
*.py text diff=python
|
*.py text diff=python
|
||||||
@@ -41,15 +44,18 @@
|
|||||||
*.sass text
|
*.sass text
|
||||||
*.scm text
|
*.scm text
|
||||||
*.scss text diff=css
|
*.scss text diff=css
|
||||||
*.sh text eol=lf
|
*.sh text eol=lf diff=shell
|
||||||
.husky/* text eol=lf
|
.husky/* text eol=lf
|
||||||
*.sql text
|
*.sql text
|
||||||
*.styl text
|
*.styl text
|
||||||
*.tag text
|
*.tag text
|
||||||
|
*.tmux text eol=lf diff=tmux
|
||||||
*.ts text
|
*.ts text
|
||||||
*.tsx text
|
*.tsx text
|
||||||
|
*.vim text eol=lf
|
||||||
*.xml text
|
*.xml text
|
||||||
*.xhtml text diff=html
|
*.xhtml text diff=html
|
||||||
|
*.zsh text diff=zsh eol=lf
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
Dockerfile text
|
Dockerfile text
|
||||||
@@ -68,6 +74,7 @@ Dockerfile text
|
|||||||
AUTHORS text
|
AUTHORS text
|
||||||
CHANGELOG text
|
CHANGELOG text
|
||||||
CHANGES text
|
CHANGES text
|
||||||
|
CODEOWNERS text
|
||||||
CONTRIBUTING text
|
CONTRIBUTING text
|
||||||
COPYING text
|
COPYING text
|
||||||
copyright text
|
copyright text
|
||||||
@@ -78,6 +85,7 @@ LICENSE text
|
|||||||
NEWS text
|
NEWS text
|
||||||
readme text
|
readme text
|
||||||
*README* text
|
*README* text
|
||||||
|
# Files literally named "TODO", not a todo list item
|
||||||
TODO text
|
TODO text
|
||||||
|
|
||||||
# Templates
|
# Templates
|
||||||
@@ -105,6 +113,8 @@ TODO text
|
|||||||
*.config text
|
*.config text
|
||||||
.editorconfig text
|
.editorconfig text
|
||||||
.env text
|
.env text
|
||||||
|
*.env text
|
||||||
|
*.env.* text
|
||||||
.gitattributes text
|
.gitattributes text
|
||||||
.gitconfig text
|
.gitconfig text
|
||||||
.htaccess text
|
.htaccess text
|
||||||
@@ -113,7 +123,8 @@ package.json text eol=lf
|
|||||||
package-lock.json text eol=lf -diff
|
package-lock.json text eol=lf -diff
|
||||||
pnpm-lock.yaml text eol=lf -diff
|
pnpm-lock.yaml text eol=lf -diff
|
||||||
.prettierrc text
|
.prettierrc text
|
||||||
yarn.lock text -diff
|
# Ensure yarn.lock shows textual diffs
|
||||||
|
yarn.lock text eol=lf
|
||||||
*.toml text
|
*.toml text
|
||||||
*.yaml text
|
*.yaml text
|
||||||
*.yml text
|
*.yml text
|
||||||
@@ -208,20 +219,38 @@ Procfile text
|
|||||||
|
|
||||||
*.gitignore text
|
*.gitignore text
|
||||||
*.gitkeep text
|
*.gitkeep text
|
||||||
.gitattributes export-ignore
|
.gitattributes text export-ignore
|
||||||
|
*.gitattributes text export-ignore
|
||||||
|
.gitmodules text export-ignore
|
||||||
|
*.gitmodules text export-ignore
|
||||||
**/.gitignore export-ignore
|
**/.gitignore export-ignore
|
||||||
**/.gitkeep export-ignore
|
**/.gitkeep export-ignore
|
||||||
|
|
||||||
# Repo specials
|
# Repo specials
|
||||||
local/bin/* text eol=lf
|
local/bin/* text eol=lf diff=shell
|
||||||
|
local/bin/*.md text eol=lf diff=markdown
|
||||||
config/antigen.zsh text
|
config/antigen.zsh text
|
||||||
git/* text
|
git/* text
|
||||||
**/git/* text
|
**/git/* text
|
||||||
**/alias text
|
**/alias text
|
||||||
ssh/* text
|
ssh/* text
|
||||||
|
ssh/shared.d/* text
|
||||||
|
ssh/local.d/* text
|
||||||
|
|
||||||
# Git Crypt special files
|
# Auto-generated rules - 2025-04-16 10:28:04
|
||||||
*-secret filter=git-crypt diff=git-crypt
|
# Shell scripts detected by content
|
||||||
*.key filter=git-crypt diff=git-crypt
|
install text eol=lf diff=shell
|
||||||
secrets/** filter=git-crypt diff=git-crypt
|
|
||||||
|
|
||||||
|
# File extension-based rules
|
||||||
|
*.1 text eol=lf
|
||||||
|
*.applescript text eol=lf
|
||||||
|
*.d/work-git text eol=lf
|
||||||
|
*.dirs text eol=lf
|
||||||
|
*.example text eol=lf
|
||||||
|
*.itermcolors text eol=lf
|
||||||
|
*.locale text eol=lf
|
||||||
|
*.python-version text eol=lf
|
||||||
|
*.snippets text eol=lf
|
||||||
|
*.theme text eol=lf
|
||||||
|
*.yamlfmt text eol=lf
|
||||||
|
*.bats text eol=lf diff=shell
|
||||||
|
|||||||
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* @ivuorinen
|
||||||
8
.github/CODE_OF_CONDUCT.md
vendored
8
.github/CODE_OF_CONDUCT.md
vendored
@@ -60,7 +60,7 @@ representative at an online or offline event.
|
|||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported to the community leaders responsible for enforcement at
|
reported to the community leaders responsible for enforcement at
|
||||||
ismo@ivuorinen.net.
|
<ismo@ivuorinen.net>.
|
||||||
All complaints will be reviewed and investigated promptly and fairly.
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
@@ -116,7 +116,7 @@ the community.
|
|||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
version 2.0, available at
|
version 2.0, available at
|
||||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
<https://www.contributor-covenant.org/version/2/0/code_of_conduct.html>.
|
||||||
|
|
||||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
enforcement ladder](https://github.com/mozilla/diversity).
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
@@ -124,5 +124,5 @@ enforcement ladder](https://github.com/mozilla/diversity).
|
|||||||
[homepage]: https://www.contributor-covenant.org
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the FAQ at
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
https://www.contributor-covenant.org/faq. Translations are available at
|
<https://www.contributor-covenant.org/faq>. Translations are available at
|
||||||
https://www.contributor-covenant.org/translations.
|
<https://www.contributor-covenant.org/translations>.
|
||||||
|
|||||||
98
.github/README.md
vendored
98
.github/README.md
vendored
@@ -6,7 +6,10 @@ aware of yet. As I find more interesting tools, configs and other stuff,
|
|||||||
this repository will live accordingly.
|
this repository will live accordingly.
|
||||||
|
|
||||||
Please for the love of everything good do not use these 1:1 as your own dotfiles,
|
Please for the love of everything good do not use these 1:1 as your own dotfiles,
|
||||||
fork or download the repo as a zip and go from there with your own configs.
|
fork or download the repository as a zip and go from there with your own configs.
|
||||||
|
|
||||||
|
It would be nice if you'd add an issue linking to your fork or repo so I can
|
||||||
|
see what interesting stuff you've done with it. Sharing is caring.
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
@@ -23,7 +26,11 @@ fork or download the repo as a zip and go from there with your own configs.
|
|||||||
|
|
||||||
## The looks
|
## The looks
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Interesting files and locations
|
## Interesting files and locations
|
||||||
|
|
||||||
@@ -31,11 +38,17 @@ fork or download the repo as a zip and go from there with your own configs.
|
|||||||
|
|
||||||
| Path | Description |
|
| Path | Description |
|
||||||
| ------------------- | -------------------------------------------- |
|
| ------------------- | -------------------------------------------- |
|
||||||
| `.github` | GitHub Repository configuration files. |
|
| `.github` | GitHub Repository configuration files, meta. |
|
||||||
| `hosts/{hostname}/` | Configs that should apply to that host only. |
|
| `hosts/{hostname}/` | Configs that should apply to that host only. |
|
||||||
| `local/bin` | Helper scripts that I've collected or wrote. |
|
| `local/bin` | Helper scripts that I've collected or wrote. |
|
||||||
| `scripts` | Setup scripts. |
|
| `scripts` | Setup scripts. |
|
||||||
|
|
||||||
|
### Host specific configuration
|
||||||
|
|
||||||
|
Configurations under `hosts/<hostname>` are applied only when running on the
|
||||||
|
matching machine. Each host folder contains its own `install.conf.yaml` that
|
||||||
|
is processed by Dotbot during installation.
|
||||||
|
|
||||||
### dotfile folders
|
### dotfile folders
|
||||||
|
|
||||||
| Repo | Destination | Description |
|
| Repo | Destination | Description |
|
||||||
@@ -45,9 +58,26 @@ fork or download the repo as a zip and go from there with your own configs.
|
|||||||
| `local/` | `.local/` | XDG Base folder: `bin`, `share` and `state` |
|
| `local/` | `.local/` | XDG Base folder: `bin`, `share` and `state` |
|
||||||
| `ssh/` | `.ssh/` | SSH Configurations. |
|
| `ssh/` | `.ssh/` | SSH Configurations. |
|
||||||
|
|
||||||
### dfm - the dotfiles manager
|
### `dfm` - the dotfiles manager
|
||||||
|
|
||||||
`.local/bin/dfm` is a shell script that has some tools that help with dotfiles management.
|
[`.local/bin/dfm`][dfm] is a shell script that has some tools that help with dotfiles management.
|
||||||
|
|
||||||
|
Running `dfm` gives you a list of available commands.
|
||||||
|
|
||||||
|
#### Documentation generation
|
||||||
|
|
||||||
|
`dfm docs` generates Markdown documentation under the `docs/` directory. The
|
||||||
|
subcommands are:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dfm docs alias # regenerate alias table
|
||||||
|
dfm docs folders # document interesting folders
|
||||||
|
dfm docs keybindings # update keybinding docs for tmux, nvim and others
|
||||||
|
dfm docs all # run every docs task
|
||||||
|
```
|
||||||
|
|
||||||
|
The `docs/` folder contains generated cheat sheets, keybindings and other
|
||||||
|
reference files. New documentation can be added without modifying this README.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
@@ -62,51 +92,33 @@ The folder structure follows [XDG Base Directory Specification][xdg] where possi
|
|||||||
| `$XDG_DATA_HOME` | `$HOME/.local/share` | User-specific data files |
|
| `$XDG_DATA_HOME` | `$HOME/.local/share` | User-specific data files |
|
||||||
| `$XDG_STATE_HOME` | `$HOME/.local/state` | App state that should persist between restarts |
|
| `$XDG_STATE_HOME` | `$HOME/.local/state` | App state that should persist between restarts |
|
||||||
|
|
||||||
#### XDG_BIN_HOME (`$HOME/.local/bin`)
|
Please see [docs/folders.md][docs-folders] for more information.
|
||||||
|
|
||||||
`$XDG_BIN_HOME` defines directory that contains local binaries.
|
## Managing submodules
|
||||||
|
|
||||||
User-specific executable files may be stored in `$HOME/.local/bin`.
|
This repository uses Git submodules for external dependencies. After cloning,
|
||||||
Distributions should ensure this directory shows up in the UNIX `$PATH`
|
run:
|
||||||
environment variable, at an appropriate place.
|
|
||||||
|
|
||||||
#### XDG_DATA_HOME (`$HOME/.local/share`)
|
```bash
|
||||||
|
git submodule update --init --recursive
|
||||||
|
```
|
||||||
|
|
||||||
`$XDG_DATA_HOME` defines the base directory relative to which
|
To pull submodule updates later use:
|
||||||
user-specific _data files_ should be stored.
|
|
||||||
|
|
||||||
If `$XDG_DATA_HOME` is either not set or empty,
|
```bash
|
||||||
a default equal to `$HOME/.local/share` should be used.
|
git submodule update --remote --merge
|
||||||
|
```
|
||||||
|
|
||||||
#### XDG_CONFIG_HOME (`$HOME/.config`)
|
The helper script `add-submodules.sh` documents how each submodule is added and
|
||||||
|
configured. Submodules are automatically updated by the
|
||||||
|
[update-submodules.yml](.github/workflows/update-submodules.yml) workflow.
|
||||||
|
|
||||||
`$XDG_CONFIG_HOME` defines the base directory relative to which
|
## Testing
|
||||||
user-specific _configuration files_ should be stored.
|
|
||||||
|
|
||||||
If `$XDG_CONFIG_HOME` is either not set or empty,
|
Shell scripts under `local/bin` are validated with [Bats](https://github.com/bats-core/bats-core).
|
||||||
a default equal to `$HOME/.config` should be used.
|
Run `yarn test` to execute every test file. Bats is installed as a development
|
||||||
|
dependency, so run `yarn install` first if needed.
|
||||||
#### XDG_STATE_HOME (`$HOME/.local/state`)
|
|
||||||
|
|
||||||
`$XDG_STATE_HOME` defines the base directory relative to which
|
|
||||||
user-specific _state files_ should be stored.
|
|
||||||
|
|
||||||
If `$XDG_STATE_HOME` is either not set or empty,
|
|
||||||
a default equal to `$HOME/.local/state` should be used.
|
|
||||||
|
|
||||||
The `$XDG_STATE_HOME` contains _state data_ that should
|
|
||||||
_persist between (application) restarts_, but that is not important or
|
|
||||||
portable enough to the user that it should be stored in `$XDG_DATA_HOME`.
|
|
||||||
|
|
||||||
- It may contain:
|
|
||||||
- actions history (logs, history, recently used files, …)
|
|
||||||
- current state of the application that can be reused
|
|
||||||
on a restart (view, layout, open files, undo history, …)
|
|
||||||
|
|
||||||
#### XDG_DATA_DIRS
|
|
||||||
|
|
||||||
`$XDG_DATA_DIRS` defines the preference-ordered set of base directories
|
|
||||||
to search for data files in addition to the `$XDG_DATA_HOME` base directory.
|
|
||||||
The directories in `$XDG_DATA_DIRS` should be seperated with a colon ':'.
|
|
||||||
|
|
||||||
|
[dfm]: https://github.com/ivuorinen/dotfiles/blob/main/local/bin/dfm
|
||||||
|
[docs-folders]: https://github.com/ivuorinen/dotfiles/blob/main/docs/folders.md
|
||||||
[xdg]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
[xdg]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
|
|||||||
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -1,7 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
# Maintain dependencies for GitHub Actions
|
|
||||||
- package-ecosystem: 'github-actions'
|
|
||||||
directory: '/'
|
|
||||||
schedule:
|
|
||||||
interval: 'weekly'
|
|
||||||
2
.github/renovate.json
vendored
2
.github/renovate.json
vendored
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
"extends": ["local>ivuorinen/.github:renovate-config"]
|
"extends": ["local>ivuorinen/renovate-config"]
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
.github/screenshots/oh-my-posh.png
vendored
BIN
.github/screenshots/oh-my-posh.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 45 KiB |
BIN
.github/screenshots/tmux-nvim-kickstart-dark.png
vendored
Normal file
BIN
.github/screenshots/tmux-nvim-kickstart-dark.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
BIN
.github/screenshots/tmux-nvim-kickstart-light.png
vendored
Normal file
BIN
.github/screenshots/tmux-nvim-kickstart-light.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 87 KiB |
8
.github/tag-changelog-config.js
vendored
8
.github/tag-changelog-config.js
vendored
@@ -16,10 +16,10 @@ module.exports = {
|
|||||||
|
|
||||||
excludeTypes: [],
|
excludeTypes: [],
|
||||||
|
|
||||||
renderTypeSection: function (label, commits) {
|
renderTypeSection: (label, commits) => {
|
||||||
let text = `\n## ${label}\n\n`
|
let text = `\n## ${label}\n\n`
|
||||||
|
|
||||||
commits.forEach(commit => {
|
commits.forEach((commit) => {
|
||||||
const scope = commit.scope ? `**${commit.scope}:** ` : ''
|
const scope = commit.scope ? `**${commit.scope}:** ` : ''
|
||||||
text += `- ${scope}${commit.subject}\n`
|
text += `- ${scope}${commit.subject}\n`
|
||||||
})
|
})
|
||||||
@@ -27,10 +27,10 @@ module.exports = {
|
|||||||
return text
|
return text
|
||||||
},
|
},
|
||||||
|
|
||||||
renderChangelog: function (release, changes) {
|
renderChangelog: (release, changes) => {
|
||||||
const now = new Date()
|
const now = new Date()
|
||||||
const d = now.toISOString().substring(0, 10)
|
const d = now.toISOString().substring(0, 10)
|
||||||
const header = `# ${release} - ${d}\n`
|
const header = `# ${release} - ${d}\n`
|
||||||
return header + changes + '\n\n'
|
return `${header}${changes}\n\n`
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
21
.github/workflows/changelog.yml
vendored
21
.github/workflows/changelog.yml
vendored
@@ -1,17 +1,32 @@
|
|||||||
|
---
|
||||||
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
name: Debug Changelog # Workflow name displayed on GitHub
|
name: Debug Changelog # Workflow name displayed on GitHub
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch: # Trigger manually
|
workflow_dispatch: # Trigger manually
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
debug-changelog:
|
debug-changelog:
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions: write-all
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- name: Create changelog text
|
- name: Create changelog text
|
||||||
id: changelog
|
id: changelog
|
||||||
uses: loopwerk/tag-changelog@v1
|
uses: loopwerk/tag-changelog@941366edb8920e2071eae0449031830984b9f26e # v1.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
config_file: .github/tag-changelog-config.js
|
config_file: .github/tag-changelog-config.js
|
||||||
|
|
||||||
- name: 'Echo results'
|
- name: 'Echo results'
|
||||||
id: output-changelog
|
id: output-changelog
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
71
.github/workflows/linters.yml
vendored
71
.github/workflows/linters.yml
vendored
@@ -1,39 +1,38 @@
|
|||||||
name: reviewdog
|
---
|
||||||
on: [push]
|
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||||
|
name: Lint Code Base
|
||||||
|
|
||||||
|
# yamllint disable-line
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [master, main]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linters:
|
Linter:
|
||||||
name: Linters
|
name: PR Lint
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 15
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
packages: read
|
||||||
|
pull-requests: write
|
||||||
|
statuses: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout
|
||||||
- name: GitHub Actions
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
uses: reviewdog/action-actionlint@v1
|
|
||||||
|
- name: Yarn Lock Changes
|
||||||
|
uses: Simek/yarn-lock-changes@61d1a0595070b79c1abdc8e1e5a5f5d98b18918c # v0.12.2
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
reporter: github-pr-review
|
|
||||||
- name: detect-secrets
|
- name: Run PR Lint
|
||||||
uses: reviewdog/action-detect-secrets@master
|
uses: ivuorinen/actions/pr-lint@f98ae7cd7d0feb1f9d6b01de0addbb11414cfc73 # v2026.01.21
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
reporter: github-pr-review
|
|
||||||
- name: markdownlint
|
|
||||||
uses: reviewdog/action-markdownlint@v0
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
reporter: github-pr-review
|
|
||||||
- name: shfmt
|
|
||||||
uses: reviewdog/action-shfmt@v1
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
shfmt_flags: |
|
|
||||||
--find
|
|
||||||
--list
|
|
||||||
--write
|
|
||||||
--diff
|
|
||||||
--simplify
|
|
||||||
--language-dialect bash
|
|
||||||
--indent 2
|
|
||||||
--binary-next-line
|
|
||||||
--case-indent
|
|
||||||
--space-redirects
|
|
||||||
--func-next-line
|
|
||||||
|
|||||||
40
.github/workflows/new-release.yml
vendored
40
.github/workflows/new-release.yml
vendored
@@ -1,34 +1,48 @@
|
|||||||
name: Release Daily State # Workflow name displayed on GitHub
|
---
|
||||||
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
|
name: Release Daily State
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch: # Trigger manually
|
workflow_dispatch:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '30 20 * * *' # UTC is 2-3 hours behind Europe/Helsinki, my timezone
|
- cron: '0 21 * * *' # 00:00 at Europe/Helsinki
|
||||||
permissions:
|
|
||||||
contents: write
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
new-daily-release:
|
new-daily-release:
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions: write-all
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
created: ${{ steps.daily-version.outputs.created }}
|
created: ${{ steps.daily-version.outputs.created }}
|
||||||
version: ${{ steps.daily-version.outputs.version }}
|
version: ${{ steps.daily-version.outputs.version }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4 # Checkout our working repository
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
- name: Create tag if necessary
|
- name: Create tag if necessary
|
||||||
uses: fregante/daily-version-action@v2
|
uses: fregante/daily-version-action@fb1a60b7c4daf1410cd755e360ebec3901e58588 # v2.1.3
|
||||||
id: daily-version
|
id: daily-version
|
||||||
|
|
||||||
- name: Create changelog text
|
- name: Create changelog text
|
||||||
if: steps.daily-version.outputs.created
|
if: steps.daily-version.outputs.created
|
||||||
id: changelog
|
id: changelog
|
||||||
uses: loopwerk/tag-changelog@v1
|
uses: loopwerk/tag-changelog@941366edb8920e2071eae0449031830984b9f26e # v1.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
config_file: .github/tag-changelog-config.js
|
config_file: .github/tag-changelog-config.js
|
||||||
|
|
||||||
- name: Create release
|
- name: Create release
|
||||||
if: steps.daily-version.outputs.created
|
if: steps.daily-version.outputs.created
|
||||||
uses: actions/create-release@latest
|
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
tag_name: ${{ steps.daily-version.outputs.version }}
|
tag_name: ${{ steps.daily-version.outputs.version }}
|
||||||
release_name: Release ${{ steps.daily-version.outputs.version }}
|
name: Release ${{ steps.daily-version.outputs.version }}
|
||||||
body: ${{ steps.changelog.outputs.changes }}
|
body: ${{ steps.changelog.outputs.changes }}
|
||||||
|
|||||||
38
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
38
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
|
name: Pre-commit autoupdate
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# At 04:00 on Monday and Thursday.
|
||||||
|
- cron: '0 4 * * 1,4'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
auto-update:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
|
||||||
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
|
|
||||||
|
- run: pip install pre-commit && pre-commit autoupdate
|
||||||
|
|
||||||
|
- uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
branch: update/pre-commit-hooks
|
||||||
|
title: 'chore: update pre-commit hooks'
|
||||||
|
commit-message: 'chore: update pre-commit hooks'
|
||||||
|
body: Update versions of pre-commit hooks to latest version.
|
||||||
28
.github/workflows/semantic-pr.yml
vendored
Normal file
28
.github/workflows/semantic-pr.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
|
name: Semantic PR
|
||||||
|
|
||||||
|
# yamllint disable-line
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- edited
|
||||||
|
- synchronize
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
semantic-pr:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
validateSingleCommit: true
|
||||||
32
.github/workflows/sync-labels.yml
vendored
Normal file
32
.github/workflows/sync-labels.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
|
name: Sync labels
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- .github/workflows/sync-labels.yml
|
||||||
|
- .github/labels.yml
|
||||||
|
schedule:
|
||||||
|
- cron: '34 5 * * *'
|
||||||
|
workflow_call:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
SyncLabels:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: ivuorinen/actions/sync-labels@f98ae7cd7d0feb1f9d6b01de0addbb11414cfc73 # v2026.01.21
|
||||||
56
.github/workflows/update-submodules.yml
vendored
56
.github/workflows/update-submodules.yml
vendored
@@ -1,36 +1,56 @@
|
|||||||
|
---
|
||||||
|
# $schema: "https://json.schemastore.org/github-workflow.json"
|
||||||
name: Update submodules
|
name: Update submodules
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule: [{ cron: 0 3 * * * }]
|
schedule:
|
||||||
|
# At 04:00 on Monday and Thursday.
|
||||||
|
- cron: '0 4 * * 1'
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
permissions:
|
|
||||||
contents: write
|
concurrency:
|
||||||
issues: write
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
pull-requests: write
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: read-all
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update-submodules:
|
update-submodules:
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions: write-all
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
fetch-depth: 0
|
fetch-depth: 2
|
||||||
token: ${{secrets.GITHUB_TOKEN}}
|
token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
|
||||||
- name: Config Git User
|
- name: Config Git User
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name "${{ github.actor }}"
|
git config --global user.name "${{ github.actor }}"
|
||||||
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
|
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
|
||||||
- name: Update submodules
|
|
||||||
run: |
|
|
||||||
if git commit -am"chore(git): Update submodules (automated)
|
|
||||||
|
|
||||||
$(git submodule --quiet foreach \
|
- name: Update submodules
|
||||||
'tag="$(git describe --tags --abbrev=0 origin/HEAD)"
|
shell: bash
|
||||||
if [ "$(git describe --tags)" != "$tag" ]; then
|
run: |
|
||||||
git checkout --quiet "$tag"
|
git submodule sync
|
||||||
echo "$name" "$tag"
|
git submodule foreach --quiet "
|
||||||
fi')"
|
tag=\"$(git describe --tags --abbrev=0 origin/HEAD)\"
|
||||||
then
|
if [ \"$(git describe --tags)\" != \"$tag\" ]; then
|
||||||
|
git checkout --quiet \"$tag\"
|
||||||
|
echo \"$name updated to $tag\"
|
||||||
|
fi
|
||||||
|
"
|
||||||
|
|
||||||
|
if git diff --quiet; then
|
||||||
|
echo "No updates for submodules."
|
||||||
|
else
|
||||||
|
git add .
|
||||||
|
git commit -m "chore(git): Update submodules (automated)"
|
||||||
git show --raw
|
git show --raw
|
||||||
git push
|
git push
|
||||||
fi
|
fi
|
||||||
|
|||||||
68
.gitignore
vendored
68
.gitignore
vendored
@@ -1,24 +1,60 @@
|
|||||||
Brewfile.lock.json
|
!.gitkeep
|
||||||
config/nvim/lazy-lock.json
|
|
||||||
*.log
|
|
||||||
*-secret
|
*-secret
|
||||||
|
*.bak
|
||||||
|
*.log
|
||||||
|
*.socket
|
||||||
|
*.swp
|
||||||
|
*.old
|
||||||
*cache
|
*cache
|
||||||
|
.env
|
||||||
.idea
|
.idea
|
||||||
|
.nfs*
|
||||||
|
.scannerwork
|
||||||
.vscode
|
.vscode
|
||||||
|
.yarn/
|
||||||
|
!config/git/local.d/.gitkeep
|
||||||
|
!config/nvim/spell/.gitkeep
|
||||||
|
!config/zed/settings.json
|
||||||
|
!ssh/local.d/.gitkeep
|
||||||
|
**/exports-secret.fish
|
||||||
|
**/exports.secret.fish
|
||||||
|
*.tmp.*
|
||||||
|
Brewfile.lock.json
|
||||||
|
antidote_plugins.zsh
|
||||||
|
config/alacritty/theme-active.toml
|
||||||
config/cheat/cheatsheets/pure-bash-bible/*
|
config/cheat/cheatsheets/pure-bash-bible/*
|
||||||
config/cheat/cheatsheets/tldr/*
|
config/cheat/cheatsheets/tldr/*
|
||||||
|
config/fish/completions/asdf.fish
|
||||||
|
config/fish/fish_variables
|
||||||
|
config/fish/fish_variables.*
|
||||||
|
config/gh/hosts.yml
|
||||||
config/git/credentials
|
config/git/credentials
|
||||||
config/npm/npmrc
|
config/git/local.d/*
|
||||||
config/zsh/.zcompdump
|
config/gnupg/S.*
|
||||||
ssh/local.d/*
|
config/gnupg/private-keys-v1.d
|
||||||
!ssh/local.d/.gitkeep
|
config/gnupg/s
|
||||||
!.gitkeep
|
|
||||||
.env
|
|
||||||
local/share/fonts/*
|
|
||||||
node_modules
|
|
||||||
.nfs*
|
|
||||||
*.socket
|
|
||||||
iTermServer-*
|
|
||||||
lock
|
|
||||||
config/iterm2/AppSupport
|
config/iterm2/AppSupport
|
||||||
|
config/karabiner/automatic_backups
|
||||||
|
config/npm/npmrc
|
||||||
|
config/nvim/lazy-lock.json
|
||||||
|
config/nvim/spell/*
|
||||||
|
config/op/plugins/gh.json
|
||||||
|
config/op/plugins/used_items/gh.json
|
||||||
|
config/vim/.netrwhist
|
||||||
|
config/vim/extra/*
|
||||||
|
config/vim/fzf
|
||||||
|
config/vim/plugged/*
|
||||||
|
config/zed/*
|
||||||
|
config/zed/settings.json
|
||||||
|
config/zsh/.zcompdump
|
||||||
|
dependency-check-report.html
|
||||||
|
iTermServer-*
|
||||||
|
lazy-lock.json
|
||||||
|
local/bin/asdf/plugins/*
|
||||||
|
local/bin/yabai
|
||||||
|
local/man/yabai.1
|
||||||
|
local/share/fonts/*
|
||||||
|
lock
|
||||||
|
node_modules
|
||||||
|
ssh/local.d/*
|
||||||
|
config/fish/fish_variables*
|
||||||
|
|||||||
38
.gitmodules
vendored
38
.gitmodules
vendored
@@ -1,4 +1,4 @@
|
|||||||
# vim: set expandtab:
|
# vim: noexpandtab filetype=gitconfig
|
||||||
[submodule "dotbot"]
|
[submodule "dotbot"]
|
||||||
path = tools/dotbot
|
path = tools/dotbot
|
||||||
url = https://github.com/anishathalye/dotbot.git
|
url = https://github.com/anishathalye/dotbot.git
|
||||||
@@ -23,38 +23,66 @@
|
|||||||
path = config/tmux/plugins/tmux-continuum
|
path = config/tmux/plugins/tmux-continuum
|
||||||
url = https://github.com/tmux-plugins/tmux-continuum
|
url = https://github.com/tmux-plugins/tmux-continuum
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "tmux/tmux-resurrect"]
|
|
||||||
path = config/tmux/plugins/tmux-resurrect
|
|
||||||
url = https://github.com/tmux-plugins/tmux-resurrect
|
|
||||||
ignore = dirty
|
|
||||||
[submodule "tmux/tmux-sensible"]
|
[submodule "tmux/tmux-sensible"]
|
||||||
path = config/tmux/plugins/tmux-sensible
|
path = config/tmux/plugins/tmux-sensible
|
||||||
url = https://github.com/tmux-plugins/tmux-sensible.git
|
url = https://github.com/tmux-plugins/tmux-sensible.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "tmux/tmux-sessionist"]
|
[submodule "tmux/tmux-sessionist"]
|
||||||
path = config/tmux/plugins/tmux-sessionist
|
path = config/tmux/plugins/tmux-sessionist
|
||||||
url = https://github.com/tmux-plugins/tmux-sessionist.git
|
url = https://github.com/tmux-plugins/tmux-sessionist.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "tmux/tmux-yank"]
|
[submodule "tmux/tmux-yank"]
|
||||||
path = config/tmux/plugins/tmux-yank
|
path = config/tmux/plugins/tmux-yank
|
||||||
url = https://github.com/tmux-plugins/tmux-yank.git
|
url = https://github.com/tmux-plugins/tmux-yank.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "tmux/tmux-window-name"]
|
[submodule "tmux/tmux-window-name"]
|
||||||
path = config/tmux/plugins/tmux-window-name
|
path = config/tmux/plugins/tmux-window-name
|
||||||
url = https://github.com/ivuorinen/tmux-window-name.git
|
url = https://github.com/ivuorinen/tmux-window-name.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "dotbot-pip"]
|
[submodule "dotbot-pip"]
|
||||||
path = tools/dotbot-pip
|
path = tools/dotbot-pip
|
||||||
url = https://github.com/sobolevn/dotbot-pip.git
|
url = https://github.com/sobolevn/dotbot-pip.git
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "tmux/tmux-suspend"]
|
[submodule "tmux/tmux-suspend"]
|
||||||
path = config/tmux/plugins/tmux-suspend
|
path = config/tmux/plugins/tmux-suspend
|
||||||
url = https://github.com/MunifTanjim/tmux-suspend.git
|
url = https://github.com/MunifTanjim/tmux-suspend.git
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "tmux/tmux-mode-indicator"]
|
[submodule "tmux/tmux-mode-indicator"]
|
||||||
path = config/tmux/plugins/tmux-mode-indicator
|
path = config/tmux/plugins/tmux-mode-indicator
|
||||||
url = https://github.com/MunifTanjim/tmux-mode-indicator.git
|
url = https://github.com/MunifTanjim/tmux-mode-indicator.git
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "tmux/tmux-current-pane-hostname"]
|
[submodule "tmux/tmux-current-pane-hostname"]
|
||||||
path = config/tmux/plugins/tmux-current-pane-hostname
|
path = config/tmux/plugins/tmux-current-pane-hostname
|
||||||
url = https://github.com/soyuka/tmux-current-pane-hostname.git
|
url = https://github.com/soyuka/tmux-current-pane-hostname.git
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
[submodule "cheat-tldr"]
|
[submodule "cheat-tldr"]
|
||||||
path = config/cheat/cheatsheets/tldr
|
path = config/cheat/cheatsheets/tldr
|
||||||
url = https://github.com/ivuorinen/cheatsheet-tldr.git
|
url = https://github.com/ivuorinen/cheatsheet-tldr.git
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
|
[submodule "tmux/tmux-dark-notify"]
|
||||||
|
path = config/tmux/plugins/tmux-dark-notify
|
||||||
|
url = https://github.com/ivuorinen/tmux-dark-notify.git
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
|
[submodule "antidote"]
|
||||||
|
path = tools/antidote
|
||||||
|
url = https://github.com/mattmc3/antidote.git
|
||||||
|
shallow = true
|
||||||
|
ignore = dirty
|
||||||
|
|
||||||
|
[submodule "tmux/tmux-resurrect"]
|
||||||
|
path = config/tmux/plugins/tmux-resurrect
|
||||||
|
url = https://github.com/tmux-plugins/tmux-resurrect.git
|
||||||
|
[submodule "tmux/catppuccin"]
|
||||||
|
path = config/tmux/plugins/catppuccin
|
||||||
|
url = https://github.com/catppuccin/tmux.git
|
||||||
|
|||||||
1
.go-version
Normal file
1
.go-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1.25.5
|
||||||
9
.ignore
9
.ignore
@@ -1,6 +1,11 @@
|
|||||||
|
**/__pycache__/**
|
||||||
|
*.pyc
|
||||||
.git/**
|
.git/**
|
||||||
config/cheat/cheatsheets/community/**
|
config/cheat/cheatsheets/community/**
|
||||||
tools/dotbot/**
|
config/tmux/plugins/**
|
||||||
|
config/vim/plugged/**
|
||||||
|
node_modules
|
||||||
|
tools/antidote/**
|
||||||
tools/dotbot-brew/**
|
tools/dotbot-brew/**
|
||||||
tools/dotbot-include/**
|
tools/dotbot-include/**
|
||||||
node_modules
|
tools/dotbot/**
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "@ivuorinen/markdownlint-config",
|
|
||||||
"code-block-style": {
|
|
||||||
"style": "fenced"
|
|
||||||
},
|
|
||||||
"code-fence-style": {
|
|
||||||
"style": "backtick"
|
|
||||||
},
|
|
||||||
"heading-style": {
|
|
||||||
"style": "atx"
|
|
||||||
},
|
|
||||||
"no-duplicate-heading": {
|
|
||||||
"siblings_only": true
|
|
||||||
},
|
|
||||||
"required-headings": false,
|
|
||||||
"ul-style": {
|
|
||||||
"style": "dash"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
# only care about files that are under our control
|
# only care about files that are directly under our control
|
||||||
|
.git/*
|
||||||
config/cheat/cheatsheets/community/*
|
config/cheat/cheatsheets/community/*
|
||||||
|
config/cheat/cheatsheets/tldr/*
|
||||||
|
config/op/plugins/used_plugins/*
|
||||||
config/tmux/plugins/*
|
config/tmux/plugins/*
|
||||||
tools/*
|
config/vim/*
|
||||||
|
local/bin/asdf/*
|
||||||
node_modules/*
|
node_modules/*
|
||||||
|
tools/*
|
||||||
|
|||||||
24
.mega-linter.yml
Normal file
24
.mega-linter.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
# Configuration file for MegaLinter
|
||||||
|
# See all available variables at
|
||||||
|
# https://megalinter.io/configuration/ and in linters documentation
|
||||||
|
APPLY_FIXES: all
|
||||||
|
SHOW_ELAPSED_TIME: false # Show elapsed time at the end of MegaLinter run
|
||||||
|
PARALLEL: true
|
||||||
|
VALIDATE_ALL_CODEBASE: true
|
||||||
|
FILEIO_REPORTER: false # Generate file.io report
|
||||||
|
GITHUB_STATUS_REPORTER: true # Generate GitHub status report
|
||||||
|
IGNORE_GENERATED_FILES: true # Ignore generated files
|
||||||
|
JAVASCRIPT_DEFAULT_STYLE: prettier # Default style for JavaScript
|
||||||
|
PRINT_ALPACA: false # Print Alpaca logo in console
|
||||||
|
SARIF_REPORTER: true # Generate SARIF report
|
||||||
|
SHOW_SKIPPED_LINTERS: false # Show skipped linters in MegaLinter log
|
||||||
|
TYPESCRIPT_DEFAULT_STYLE: prettier # Default style for TypeScript
|
||||||
|
DISABLE_LINTERS:
|
||||||
|
- REPOSITORY_DEVSKIM
|
||||||
|
- JAVASCRIPT_ES # using biome
|
||||||
|
- JAVASCRIPT_PRETTIER # using biome
|
||||||
|
YAML_YAMLLINT_CONFIG_FILE: .yamllint.yml
|
||||||
|
REPOSITORY_GIT_DIFF_DISABLE_ERRORS: true
|
||||||
|
FILTER_REGEX_EXCLUDE: >
|
||||||
|
(node_modules|tools|config/cheat/cheatsheets/community|config/cheat/cheatsheets/tldr|config/fzf|config/zsh|config/tmux/plugins)
|
||||||
62
.pre-commit-config.yaml
Normal file
62
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v6.0.0
|
||||||
|
hooks:
|
||||||
|
- id: requirements-txt-fixer
|
||||||
|
- id: detect-aws-credentials
|
||||||
|
- id: detect-private-key
|
||||||
|
- id: trailing-whitespace
|
||||||
|
args: [--markdown-linebreak-ext=md]
|
||||||
|
- id: check-case-conflict
|
||||||
|
- id: check-merge-conflict
|
||||||
|
- id: check-executables-have-shebangs
|
||||||
|
- id: check-shebang-scripts-are-executable
|
||||||
|
- id: check-symlinks
|
||||||
|
- id: check-toml
|
||||||
|
- id: check-xml
|
||||||
|
- id: check-yaml
|
||||||
|
args: [--allow-multiple-documents]
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: mixed-line-ending
|
||||||
|
args: [--fix=auto]
|
||||||
|
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: biome-check
|
||||||
|
name: Biome Check
|
||||||
|
entry: yarn biome check --write --files-ignore-unknown=true --no-errors-on-unmatched
|
||||||
|
language: system
|
||||||
|
files: \.(js|ts|jsx|tsx|json|md)$
|
||||||
|
|
||||||
|
- repo: https://github.com/adrienverge/yamllint
|
||||||
|
rev: v1.38.0
|
||||||
|
hooks:
|
||||||
|
- id: yamllint
|
||||||
|
|
||||||
|
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||||
|
rev: v0.11.0.1
|
||||||
|
hooks:
|
||||||
|
- id: shellcheck
|
||||||
|
|
||||||
|
- repo: https://github.com/scop/pre-commit-shfmt
|
||||||
|
rev: v3.12.0-2
|
||||||
|
hooks:
|
||||||
|
- id: shfmt
|
||||||
|
|
||||||
|
- repo: https://github.com/rhysd/actionlint
|
||||||
|
rev: v1.7.10
|
||||||
|
hooks:
|
||||||
|
- id: actionlint
|
||||||
|
|
||||||
|
- repo: https://github.com/JohnnyMorganz/StyLua
|
||||||
|
rev: v2.3.1
|
||||||
|
hooks:
|
||||||
|
- id: stylua # or stylua-system / stylua-github
|
||||||
|
exclude: hammerspoon\.types\.lua$
|
||||||
|
|
||||||
|
- repo: https://github.com/hugoh/pre-commit-fish.git
|
||||||
|
rev: v1.2
|
||||||
|
hooks:
|
||||||
|
- id: fish_syntax
|
||||||
|
- id: fish_indent
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
.mypy_cache/*
|
|
||||||
tools/dotbot*
|
|
||||||
local/bin/antigen.zsh
|
|
||||||
config/cheat/cheatsheets/community
|
|
||||||
config/tmux/plugins/*
|
|
||||||
lazy-lock.json
|
|
||||||
Brewfile.lock.json
|
|
||||||
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
...require('@ivuorinen/prettier-config'),
|
|
||||||
trailingComma: 'all',
|
|
||||||
// Add custom options below:
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: '*.md',
|
|
||||||
options: {
|
|
||||||
printWidth: 120,
|
|
||||||
proseWrap: 'preserve',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
@@ -1 +1 @@
|
|||||||
3.12
|
3.14.2
|
||||||
|
|||||||
1
.serena/.gitignore
vendored
Normal file
1
.serena/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/cache
|
||||||
67
.serena/memories/areas_for_improvement.md
Normal file
67
.serena/memories/areas_for_improvement.md
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# Areas for Improvement
|
||||||
|
|
||||||
|
## Code Quality Enhancements
|
||||||
|
|
||||||
|
### 1. Configuration Management
|
||||||
|
|
||||||
|
- **Inconsistent indentation**: Mixed tabs/spaces across config files
|
||||||
|
- **Line length management**: Need consistent enforcement of limits
|
||||||
|
- **Template standardization**: Memory files need consistent formatting template
|
||||||
|
|
||||||
|
### 2. Linting Configuration Improvements
|
||||||
|
|
||||||
|
- **Shellcheck exclusions**: Add proper ignore patterns for submodules
|
||||||
|
- **EditorConfig refinement**: Some rules too strict for generated/third-party content
|
||||||
|
- **Prettier ignore patterns**: Better exclusion of binary/generated files
|
||||||
|
|
||||||
|
### 3. Testing Infrastructure
|
||||||
|
|
||||||
|
- **Bats test errors**: Tests failing due to missing `rm` command in PATH
|
||||||
|
- **Test coverage**: Limited test coverage for shell functions
|
||||||
|
- **CI/CD integration**: Need automated linting in GitHub Actions
|
||||||
|
|
||||||
|
### 4. Documentation Gaps
|
||||||
|
|
||||||
|
- **Onboarding docs**: Missing clear setup instructions for new contributors
|
||||||
|
- **Troubleshooting guide**: Need common error resolution steps
|
||||||
|
- **Architecture overview**: Missing high-level system architecture
|
||||||
|
|
||||||
|
## Performance & Maintenance
|
||||||
|
|
||||||
|
### 5. Submodule Management
|
||||||
|
|
||||||
|
- **Large submodules**: Some submodules contain unnecessary files
|
||||||
|
- **Update frequency**: Need systematic submodule update process
|
||||||
|
- **Dependency tracking**: Better documentation of submodule purposes
|
||||||
|
|
||||||
|
### 6. Cross-Platform Considerations
|
||||||
|
|
||||||
|
- **Darwin-specific paths**: Some hardcoded macOS paths could be parameterized
|
||||||
|
- **Shell compatibility**: More testing across bash/zsh/fish environments
|
||||||
|
- **Tool availability**: Better fallbacks when optional tools missing
|
||||||
|
|
||||||
|
### 7. Security & Privacy
|
||||||
|
|
||||||
|
- **Secret management**: Better examples for secret configuration
|
||||||
|
- **Permission handling**: Some scripts could use more restrictive permissions
|
||||||
|
- **Audit trail**: Track configuration changes and their impact
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
### 8. Automation Opportunities
|
||||||
|
|
||||||
|
- **Auto-formatting**: Pre-commit hooks for consistent formatting
|
||||||
|
- **Dependency updates**: Automated updates for package.json dependencies
|
||||||
|
- **Health checks**: Scripts to validate configuration integrity
|
||||||
|
|
||||||
|
### 9. Error Handling
|
||||||
|
|
||||||
|
- **Graceful degradation**: Better fallbacks when tools unavailable
|
||||||
|
- **Error messages**: More informative error output
|
||||||
|
- **Recovery procedures**: Automated recovery from common failures
|
||||||
|
|
||||||
|
### 10. Modularity
|
||||||
|
|
||||||
|
- **Configuration splitting**: Some large config files could be modularized
|
||||||
|
- **Feature flags**: Optional components for minimal installations
|
||||||
|
- **Host-specific configs**: Better organization of machine-specific settings
|
||||||
50
.serena/memories/code_style_conventions.md
Normal file
50
.serena/memories/code_style_conventions.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Code Style and Conventions
|
||||||
|
|
||||||
|
## EditorConfig Rules (.editorconfig)
|
||||||
|
|
||||||
|
- **Charset**: UTF-8
|
||||||
|
- **Line endings**: LF
|
||||||
|
- **Indent style**: Spaces (except for specific files)
|
||||||
|
- **Indent size**: 2 spaces (default)
|
||||||
|
- **Final newline**: Required
|
||||||
|
- **Trailing whitespace**: Trimmed
|
||||||
|
|
||||||
|
### Language-specific Rules
|
||||||
|
|
||||||
|
- **Fish scripts**: 4-space indent, 80 char line limit
|
||||||
|
- **PHP files**: 4-space indent
|
||||||
|
- **Markdown**: 120 char line limit
|
||||||
|
- **Lua**: 90 char line limit
|
||||||
|
- **Git files**: Tab indentation
|
||||||
|
- **Shell scripts**: 2-space indent with specific shfmt settings
|
||||||
|
|
||||||
|
## Prettier Configuration
|
||||||
|
|
||||||
|
- Extends `@ivuorinen/prettier-config`
|
||||||
|
- **Trailing commas**: Always
|
||||||
|
- **Markdown**: 120 char width, preserve prose wrapping
|
||||||
|
|
||||||
|
## ESLint Configuration
|
||||||
|
|
||||||
|
- Extends `@ivuorinen` base configuration
|
||||||
|
- Applied to JavaScript/TypeScript files
|
||||||
|
|
||||||
|
## Shell Script Standards (.shellcheckrc)
|
||||||
|
|
||||||
|
- External sources following enabled
|
||||||
|
- Disabled checks: SC2039, SC2166, SC2154, SC1091, SC2174, SC2016
|
||||||
|
- Must include shebang or `# shellcheck shell=bash`
|
||||||
|
|
||||||
|
## Formatting Tools
|
||||||
|
|
||||||
|
- **Shell scripts**: shfmt with specific rules
|
||||||
|
- **Markdown**: markdownlint + prettier
|
||||||
|
- **JavaScript/TypeScript**: prettier + eslint
|
||||||
|
- **YAML**: yamllint
|
||||||
|
|
||||||
|
## Naming Conventions
|
||||||
|
|
||||||
|
- **Shell functions**: Use `x-` prefix for cross-shell compatibility
|
||||||
|
- **Environment variables**: UPPERCASE with underscores
|
||||||
|
- **File names**: lowercase with hyphens for scripts
|
||||||
|
- **Directory structure**: lowercase, organized by tool/purpose
|
||||||
80
.serena/memories/critical_linting_errors.md
Normal file
80
.serena/memories/critical_linting_errors.md
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# Critical Linting Errors That Must Be Fixed
|
||||||
|
|
||||||
|
## Current Status: BLOCKING Issues Identified
|
||||||
|
|
||||||
|
The linting system has revealed 150+ violations across multiple categories that must be addressed immediately.
|
||||||
|
|
||||||
|
## EditorConfig Violations (High Priority)
|
||||||
|
|
||||||
|
### Missing Final Newlines
|
||||||
|
|
||||||
|
- All `.serena/memories/*.md` files missing final newlines
|
||||||
|
- Multiple project configuration files affected
|
||||||
|
- This is a BLOCKING issue per user instructions
|
||||||
|
|
||||||
|
### Line Length Violations
|
||||||
|
|
||||||
|
- Fish shell configs exceed 80-character limit (`.editorconfig` enforced)
|
||||||
|
- Memory files have lines exceeding 120-character limit
|
||||||
|
- WezTerm configuration files have long lines
|
||||||
|
|
||||||
|
### Indentation Errors
|
||||||
|
|
||||||
|
- Git configuration using tabs instead of spaces
|
||||||
|
- WezTerm color scheme files using tabs vs spaces
|
||||||
|
- Perl scripts with inconsistent indentation
|
||||||
|
|
||||||
|
## Markdownlint Issues (Memory Files)
|
||||||
|
|
||||||
|
### Systematic Problems Across All Memory Files
|
||||||
|
|
||||||
|
- Missing blank lines around headings (MD022)
|
||||||
|
- Lists not surrounded by blank lines (MD032)
|
||||||
|
- Fenced code blocks not surrounded by blank lines (MD031)
|
||||||
|
- Trailing punctuation in headings (MD026)
|
||||||
|
- Missing language specification for fenced code blocks (MD040)
|
||||||
|
- Missing final newlines (MD047)
|
||||||
|
|
||||||
|
### Specific Files Affected
|
||||||
|
|
||||||
|
- `areas_for_improvement.md`: 20+ violations
|
||||||
|
- `code_style_conventions.md`: 15+ violations
|
||||||
|
- `critical_linting_errors.md`: 25+ violations
|
||||||
|
- `darwin_system_utilities.md`: 15+ violations
|
||||||
|
- `immediate_action_items.md`: 25+ violations
|
||||||
|
- `project_overview.md`: 15+ violations
|
||||||
|
- `project_structure.md`: 20+ violations
|
||||||
|
- `shellcheck_issues.md`: 15+ violations
|
||||||
|
- `suggested_commands.md`: 25+ violations
|
||||||
|
- `task_completion_checklist.md`: 10+ violations
|
||||||
|
|
||||||
|
## Prettier Formatting Issues
|
||||||
|
|
||||||
|
### JSON Configuration Files
|
||||||
|
|
||||||
|
- `.commitlintrc.json`, `.eslintrc.json`, `.luarc.json`
|
||||||
|
- `.releaserc.json`, `.github/renovate.json`
|
||||||
|
- Host-specific configurations in `config/` directory
|
||||||
|
|
||||||
|
### YAML Files
|
||||||
|
|
||||||
|
- `.mega-linter.yml` formatting inconsistencies
|
||||||
|
- Various configuration files needing formatting
|
||||||
|
|
||||||
|
## Immediate Action Required
|
||||||
|
|
||||||
|
1. **Fix memory files**: Apply markdown formatting rules
|
||||||
|
2. **Run auto-fixers**: `yarn fix` to address automatic fixes
|
||||||
|
3. **Manual corrections**: Address remaining EditorConfig violations
|
||||||
|
4. **Validation**: Ensure `yarn lint` passes completely
|
||||||
|
|
||||||
|
## Impact Assessment
|
||||||
|
|
||||||
|
These violations prevent:
|
||||||
|
|
||||||
|
- Successful CI/CD pipeline execution
|
||||||
|
- Code quality standards compliance
|
||||||
|
- Pre-commit hook success
|
||||||
|
- Project maintainability standards
|
||||||
|
|
||||||
|
Per user instructions: "Linting issues ARE NOT ACCEPTABLE" and "EditorConfig problems are blocking errors"
|
||||||
66
.serena/memories/darwin_system_utilities.md
Normal file
66
.serena/memories/darwin_system_utilities.md
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# Darwin (macOS) System Utilities
|
||||||
|
|
||||||
|
## Available Command Paths
|
||||||
|
|
||||||
|
Based on the current system setup:
|
||||||
|
|
||||||
|
### Core System Commands
|
||||||
|
|
||||||
|
- `git`: `/opt/homebrew/bin/git` (Homebrew version)
|
||||||
|
- `find`: `/usr/bin/find` (system version)
|
||||||
|
- `cd`: shell built-in command
|
||||||
|
- `ls`: aliased to `eza -h -s=type --git --icons --group-directories-first`
|
||||||
|
- `grep`: aliased to `grep --color`
|
||||||
|
|
||||||
|
### Modern Alternatives (Rust-based)
|
||||||
|
|
||||||
|
- `fd`: `/Users/ivuorinen/.local/share/cargo/bin/fd` (modern find)
|
||||||
|
- `rg`: `/Users/ivuorinen/.local/share/cargo/bin/rg` (ripgrep for text search)
|
||||||
|
|
||||||
|
## Recommended Usage Patterns
|
||||||
|
|
||||||
|
### File Search
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Use fd instead of find when possible
|
||||||
|
fd "*.sh" # Find shell scripts
|
||||||
|
fd -t f -e lua # Find Lua files
|
||||||
|
find . -name "*.sh" # Fallback to system find
|
||||||
|
```
|
||||||
|
|
||||||
|
### Text Search
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Use rg (ripgrep) instead of grep when possible
|
||||||
|
rg "function.*bash" # Search for bash functions
|
||||||
|
rg -t shell "export" # Search in shell files only
|
||||||
|
grep "pattern" file.txt # Fallback to system grep
|
||||||
|
```
|
||||||
|
|
||||||
|
### Directory Navigation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Use eza features via ls alias
|
||||||
|
ls # Shows icons, git status, grouped directories
|
||||||
|
ls -la # Long format with hidden files
|
||||||
|
cd /full/path # Always use full paths in scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
## Path Configuration
|
||||||
|
|
||||||
|
The system is configured with these PATH priorities:
|
||||||
|
|
||||||
|
1. `~/.local/bin` (user scripts)
|
||||||
|
2. `~/.dotfiles/local/bin` (dotfiles scripts)
|
||||||
|
3. `~/.local/share/bob/nvim-bin` (Neovim)
|
||||||
|
4. `~/.local/share/cargo/bin` (Rust tools like fd, rg)
|
||||||
|
5. `/opt/homebrew/bin` (Homebrew packages)
|
||||||
|
6. `/usr/local/bin` (system packages)
|
||||||
|
|
||||||
|
## Shell Compatibility
|
||||||
|
|
||||||
|
The dotfiles support multiple shells through `config/shared.sh`:
|
||||||
|
|
||||||
|
- Functions prefixed with `x-` work across bash, zsh, and fish
|
||||||
|
- Path management handled automatically per shell
|
||||||
|
- Environment variables set appropriately per shell
|
||||||
114
.serena/memories/immediate_action_items.md
Normal file
114
.serena/memories/immediate_action_items.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# Immediate Action Items - Priority Order
|
||||||
|
|
||||||
|
## HIGH PRIORITY (Must Fix Before Any Development)
|
||||||
|
|
||||||
|
### 1. Fix Memory File Formatting (BLOCKING)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# These files prevent any linting from passing:
|
||||||
|
- .serena/memories/code_style_conventions.md
|
||||||
|
- .serena/memories/darwin_system_utilities.md
|
||||||
|
- .serena/memories/project_overview.md
|
||||||
|
- .serena/memories/project_structure.md
|
||||||
|
- .serena/memories/suggested_commands.md
|
||||||
|
- .serena/memories/task_completion_checklist.md
|
||||||
|
|
||||||
|
# Issues: Missing final newlines, markdown formatting, line length
|
||||||
|
# Impact: Blocks all linting commands
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Fix Fish Shell Line Length Violations (BLOCKING)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Files exceeding 80-char limit:
|
||||||
|
config/fish/alias.fish (4 violations)
|
||||||
|
config/fish/exports.fish (15 violations)
|
||||||
|
|
||||||
|
# These are CRITICAL - Fish config has strict limits
|
||||||
|
# Must be fixed before any fish-related changes
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Fix Git Configuration Indentation (BLOCKING)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Files with tab/space mixing:
|
||||||
|
config/git/shared (40+ violations)
|
||||||
|
hosts/s/config/git/overrides/config
|
||||||
|
hosts/s/config/git/local.d/work-git
|
||||||
|
|
||||||
|
# Impact: Git configuration may not work correctly
|
||||||
|
```
|
||||||
|
|
||||||
|
## MEDIUM PRIORITY (Fix During Next Development Cycle)
|
||||||
|
|
||||||
|
### 4. Prettier Formatting Issues
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 17 files need prettier formatting:
|
||||||
|
yarn fix:prettier
|
||||||
|
# Most are JSON/YAML configuration files
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. WezTerm Color Scheme Indentation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# All files in config/wezterm/colors/ using tabs instead of spaces
|
||||||
|
# Affects terminal appearance configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Update Linting Configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add shellcheck exclusions for submodules:
|
||||||
|
# - tools/antidote/
|
||||||
|
# - config/tmux/plugins/
|
||||||
|
# - config/vim/extra/fzf/
|
||||||
|
# - config/cheat/cheatsheets/tldr/
|
||||||
|
```
|
||||||
|
|
||||||
|
## LOW PRIORITY (Future Improvements)
|
||||||
|
|
||||||
|
### 7. Test Infrastructure
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fix bats test PATH issues
|
||||||
|
# Tests pass but show rm command not found errors
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Documentation Updates
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add troubleshooting section to AGENTS.md
|
||||||
|
# Create shellcheck exclusion documentation
|
||||||
|
```
|
||||||
|
|
||||||
|
## Immediate Commands to Run
|
||||||
|
|
||||||
|
### Step 1: Auto-fix What's Possible
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn fix:prettier # Fix 17 files
|
||||||
|
yarn fix:markdown # Attempt markdown fixes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Manual Fixes Required
|
||||||
|
|
||||||
|
- Add final newlines to all memory files
|
||||||
|
- Wrap long lines in Fish configuration files
|
||||||
|
- Convert tabs to spaces in Git configuration files
|
||||||
|
|
||||||
|
### Step 3: Verify Progress
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lint:ec # Check EditorConfig compliance
|
||||||
|
yarn lint:markdown # Check markdown issues
|
||||||
|
yarn lint:prettier # Check remaining prettier issues
|
||||||
|
```
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
✅ `yarn lint` passes without errors
|
||||||
|
✅ All EditorConfig violations resolved
|
||||||
|
✅ Memory files properly formatted
|
||||||
|
✅ Fish configuration under line limits
|
||||||
|
✅ Git configuration uses consistent indentation
|
||||||
61
.serena/memories/project_overview.md
Normal file
61
.serena/memories/project_overview.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# .dotfiles Project Overview
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This is a comprehensive personal dotfiles repository for managing development
|
||||||
|
environment configurations across macOS systems. The project uses **Dotbot** as
|
||||||
|
the primary installation framework to manage symlinks and setup configurations.
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
|
||||||
|
- Automated configuration management using Dotbot
|
||||||
|
- Support for multiple development tools and applications
|
||||||
|
- Host-specific configurations in `/hosts/` directory
|
||||||
|
- Comprehensive testing and linting setup with pre-commit hooks
|
||||||
|
- Cross-shell compatibility (bash, zsh, fish)
|
||||||
|
- Large collection of custom utility scripts in `local/bin/`
|
||||||
|
- Git submodules for external tools (dotbot, antidote, tmux plugins)
|
||||||
|
- Environment-specific configurations (secrets management)
|
||||||
|
|
||||||
|
## Recent Notable Changes (from git status)
|
||||||
|
|
||||||
|
- New everforest color theme configurations added
|
||||||
|
- Multiple temporary fish configuration files present
|
||||||
|
- Updates to various configuration files (.commitlintrc.json, .eslintrc.json, etc.)
|
||||||
|
- New x-pr-comments script and documentation added
|
||||||
|
- Various tmux plugin updates
|
||||||
|
- Husky configuration relocated from base/ to config/husky/
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
- **Shell**: Bash (primary), with Fish and Zsh support
|
||||||
|
- **Configuration Manager**: Dotbot with plugins (asdf, brew, include, pip)
|
||||||
|
- **Package Manager**: Yarn 1.22.22 (Node.js), Homebrew (macOS), pipx (Python)
|
||||||
|
- **Testing**: Bats test framework, custom test-all.sh script
|
||||||
|
- **Linting**: MegaLinter, Prettier, ESLint, Markdownlint, ShellCheck, EditorConfig
|
||||||
|
- **Automation**: Pre-commit hooks, GitHub Actions, Renovate
|
||||||
|
|
||||||
|
## Project Structure Highlights
|
||||||
|
|
||||||
|
- `/config/` - Main configuration directory (74+ subdirectories)
|
||||||
|
- `/local/bin/` - Custom utility scripts (100+ scripts with documentation)
|
||||||
|
- `/hosts/` - Host-specific configurations
|
||||||
|
- `/tools/` - Git submodules for external tools
|
||||||
|
- `/base/` - Base configuration files
|
||||||
|
- `/secrets/` - Secret management configurations
|
||||||
|
- `/scripts/` - Installation and setup scripts
|
||||||
|
- `/.github/` - GitHub Actions workflows and configurations
|
||||||
|
|
||||||
|
## Target System
|
||||||
|
|
||||||
|
- **Platform**: Darwin (macOS) - Version 24.6.0
|
||||||
|
- **Architecture**: Universal (Intel/Apple Silicon via Homebrew)
|
||||||
|
- **Dependencies**: Git, Homebrew, Yarn, various CLI tools managed via asdf/aqua
|
||||||
|
|
||||||
|
## Development Environment
|
||||||
|
|
||||||
|
- Node.js managed via nvm/asdf
|
||||||
|
- Go version specified (.go-version)
|
||||||
|
- Python version specified (.python-version)
|
||||||
|
- Package management via Yarn with lockfile
|
||||||
|
- TypeScript support for configuration files
|
||||||
116
.serena/memories/project_structure.md
Normal file
116
.serena/memories/project_structure.md
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
# Project Structure
|
||||||
|
|
||||||
|
## Root Directory
|
||||||
|
|
||||||
|
```text
|
||||||
|
.dotfiles/
|
||||||
|
├── install # Main installation script (Dotbot runner)
|
||||||
|
├── install.conf.yaml # Dotbot configuration
|
||||||
|
├── package.json # Node.js dependencies for linting/testing (Yarn managed)
|
||||||
|
├── AGENTS.md # Project documentation and guidelines
|
||||||
|
├── test-all.sh # Bats test runner
|
||||||
|
├── add-submodules.sh # Git submodule management
|
||||||
|
└── .serena/ # Claude Code/Serena analysis cache (new)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Main Directories
|
||||||
|
|
||||||
|
### `config/` (74+ subdirectories)
|
||||||
|
|
||||||
|
Configuration files for development tools and applications:
|
||||||
|
|
||||||
|
- `git/` - Git configuration with delta integration and everforest theme
|
||||||
|
- `nvim/` - Neovim configuration with Lua plugins
|
||||||
|
- `tmux/` - Tmux configuration with multiple plugins (dark-notify, window-name, etc.)
|
||||||
|
- `fish/` - Fish shell configuration with completions and functions
|
||||||
|
- `zsh/` - Zsh configuration with antidote plugin manager
|
||||||
|
- `fzf/` - Fuzzy finder configuration with everforest theme
|
||||||
|
- `wezterm/` - WezTerm terminal configuration
|
||||||
|
- `homebrew/` - Homebrew environment configuration
|
||||||
|
- `starship.toml` - Starship prompt configuration
|
||||||
|
- `shared.sh` - Cross-shell compatibility functions
|
||||||
|
- `aerospace/`, `amethyst/`, `yabai/`, `skhd/` - Window managers
|
||||||
|
- `direnv/`, `asdf/`, `aqua/` - Development environment tools
|
||||||
|
- `gpg-tui/`, `op/`, `gh/` - Security and CLI tools
|
||||||
|
- Theme configurations: everforest color schemes across multiple tools
|
||||||
|
|
||||||
|
### `base/`
|
||||||
|
|
||||||
|
Dotfiles that get symlinked to home directory with `.` prefix:
|
||||||
|
|
||||||
|
- Contains traditional dotfiles like `.bashrc`, `.zshrc`, etc.
|
||||||
|
- `plan` - Planning/note-taking configuration
|
||||||
|
- `shellcheckrc` - ShellCheck rules
|
||||||
|
|
||||||
|
### `local/`
|
||||||
|
|
||||||
|
- `bin/` - 100+ custom scripts with comprehensive documentation
|
||||||
|
- Homegrown utilities (dfm, git tools, backup scripts, etc.)
|
||||||
|
- Sourced utilities (from skx/sysadmin-util, mvdan/dotfiles)
|
||||||
|
- Each script has corresponding .md documentation
|
||||||
|
- Recent additions: x-pr-comments for GitHub PR analysis
|
||||||
|
- `share/fonts/` - JetBrains Mono font files
|
||||||
|
- `man/` - Manual pages
|
||||||
|
|
||||||
|
### `ssh/`
|
||||||
|
|
||||||
|
SSH configuration files (mode 0600/0700)
|
||||||
|
|
||||||
|
- `shared.d/` - Shared SSH configurations for specific hosts
|
||||||
|
|
||||||
|
### `tools/` (Git submodules)
|
||||||
|
|
||||||
|
External tools and Dotbot plugins:
|
||||||
|
|
||||||
|
- `dotbot/` - Dotbot installation framework
|
||||||
|
- `dotbot-*` - Dotbot plugins (asdf, brew, include, pip)
|
||||||
|
- `antidote/` - Zsh plugin manager
|
||||||
|
- Various tmux plugins (continuum, resurrect, yank, etc.)
|
||||||
|
|
||||||
|
### `hosts/`
|
||||||
|
|
||||||
|
Host-specific configurations:
|
||||||
|
|
||||||
|
- `air/`, `s/`, `v/` - Individual host configurations
|
||||||
|
- Applied after main configuration
|
||||||
|
|
||||||
|
### `secrets/`
|
||||||
|
|
||||||
|
Secret and credential management configuration
|
||||||
|
|
||||||
|
### `scripts/`
|
||||||
|
|
||||||
|
Installation and setup automation scripts
|
||||||
|
|
||||||
|
### `.github/`
|
||||||
|
|
||||||
|
- GitHub Actions workflows
|
||||||
|
- Renovate configuration
|
||||||
|
- Issue templates and documentation
|
||||||
|
|
||||||
|
### Development Configuration Files
|
||||||
|
|
||||||
|
- `.editorconfig` - Editor configuration rules
|
||||||
|
- `.prettierrc.js` - Prettier formatting rules
|
||||||
|
- `.eslintrc.json` - ESLint linting rules
|
||||||
|
- `.commitlintrc.json` - Commit message linting
|
||||||
|
- `.shellcheckrc` - ShellCheck configuration
|
||||||
|
- `.mega-linter.yml` - MegaLinter configuration
|
||||||
|
- `.luarc.json` - Lua language server configuration
|
||||||
|
- `.nvmrc`, `.go-version`, `.python-version` - Version management
|
||||||
|
- Various ignore files (.gitignore, .prettierignore, .yamlignore, etc.)
|
||||||
|
|
||||||
|
## Testing Infrastructure
|
||||||
|
|
||||||
|
- `tests/` - Bats test files
|
||||||
|
- `test-all.sh` - Main test runner
|
||||||
|
- Pre-commit hooks for automated testing
|
||||||
|
- GitHub Actions for CI/CD
|
||||||
|
|
||||||
|
## Recent Structural Changes
|
||||||
|
|
||||||
|
- Husky configuration moved from `base/huskyrc` to `config/husky/init.sh`
|
||||||
|
- Addition of everforest theme configurations across multiple tools
|
||||||
|
- New .serena directory for AI analysis caching
|
||||||
|
- Multiple temporary fish configuration files (everforest themes)
|
||||||
|
- Enhanced git configuration with delta and everforest theming
|
||||||
62
.serena/memories/shellcheck_issues.md
Normal file
62
.serena/memories/shellcheck_issues.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# ShellCheck Issues Analysis
|
||||||
|
|
||||||
|
## Critical Shell Script Problems
|
||||||
|
|
||||||
|
### Missing Shebangs (SC2148)
|
||||||
|
|
||||||
|
Multiple shell scripts missing proper shebang lines:
|
||||||
|
|
||||||
|
- `tools/antidote/tests/` - Test scripts
|
||||||
|
- `config/vim/*/test/lib/common.sh` - FZF test libraries
|
||||||
|
- `config/tmux/plugins/*/scripts/helpers.sh` - Plugin helper scripts
|
||||||
|
- Various submodule scripts
|
||||||
|
|
||||||
|
### Syntax Errors (SC1036, SC1088, SC1073)
|
||||||
|
|
||||||
|
- `config/vim/fzf/test/lib/common.sh` - Invalid ERB template syntax
|
||||||
|
- `config/cheat/cheatsheets/tldr/` - Markdown files incorrectly parsed as shell
|
||||||
|
- `tmux-sessionist/scripts/list_sessions.sh` - Brace parsing errors
|
||||||
|
|
||||||
|
### Variable Assignment Issues (SC1007, SC2155)
|
||||||
|
|
||||||
|
- `config/vim/extra/fzf/test/lib/common.sh` - Incorrect empty variable assignments
|
||||||
|
- Multiple tmux plugin scripts - Declare and assign should be separate
|
||||||
|
|
||||||
|
### Quoting Problems (SC2086, SC2006)
|
||||||
|
|
||||||
|
- Unquoted variable expansions in tmux plugin scripts
|
||||||
|
- Legacy backtick usage instead of $(...) syntax
|
||||||
|
- Missing quotes around variable expansions
|
||||||
|
|
||||||
|
## Third-Party Code Issues
|
||||||
|
|
||||||
|
### Submodule Problems
|
||||||
|
|
||||||
|
Most shellcheck errors are in **third-party submodules**:
|
||||||
|
|
||||||
|
- `tools/antidote/` - Zsh plugin manager
|
||||||
|
- `config/tmux/plugins/` - Tmux plugins
|
||||||
|
- `config/vim/extra/fzf/` - FZF integration
|
||||||
|
- `config/cheat/cheatsheets/tldr/` - Cheat sheet collection
|
||||||
|
|
||||||
|
### Recommendation
|
||||||
|
|
||||||
|
- These should be **excluded from shellcheck** via configuration
|
||||||
|
- Focus linting only on **project-owned scripts**
|
||||||
|
- Add shellcheck ignore patterns for submodule directories
|
||||||
|
|
||||||
|
## Project-Owned Script Issues
|
||||||
|
|
||||||
|
### Main Scripts Status
|
||||||
|
|
||||||
|
- `install` - ✅ Clean (no shellcheck errors)
|
||||||
|
- `test-all.sh` - ✅ Clean
|
||||||
|
- `add-submodules.sh` - ✅ Clean
|
||||||
|
- `config/shared.sh` - ✅ Clean
|
||||||
|
- Scripts in `local/bin/` - ✅ Mostly clean
|
||||||
|
|
||||||
|
### Minor Issues Found
|
||||||
|
|
||||||
|
- Some scripts could benefit from stricter quoting
|
||||||
|
- Consistent shebang usage across all scripts
|
||||||
|
- Consider adding `set -euo pipefail` to more scripts
|
||||||
121
.serena/memories/suggested_commands.md
Normal file
121
.serena/memories/suggested_commands.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
# Essential Commands for .dotfiles Development
|
||||||
|
|
||||||
|
## Installation & Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Initial setup - install linting tools and dependencies
|
||||||
|
yarn install
|
||||||
|
|
||||||
|
# Install/update all dotfiles configurations
|
||||||
|
./install
|
||||||
|
|
||||||
|
# Update git submodules (multiple approaches)
|
||||||
|
git submodule update --remote --merge
|
||||||
|
git submodule update --init --recursive --force
|
||||||
|
bash add-submodules.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Linting (run all linters - ALWAYS fix all issues)
|
||||||
|
yarn lint
|
||||||
|
|
||||||
|
# Individual linting commands
|
||||||
|
yarn lint:markdown # Markdownlint
|
||||||
|
yarn lint:prettier # Prettier check
|
||||||
|
yarn lint:ec # EditorConfig checker
|
||||||
|
|
||||||
|
# Auto-fixing (use these BEFORE manual linting)
|
||||||
|
yarn fix # Fix all format issues
|
||||||
|
yarn fix:markdown # Fix markdown formatting
|
||||||
|
yarn fix:prettier # Fix prettier formatting
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
yarn test # Run all Bats tests
|
||||||
|
bash test-all.sh # Alternative test runner
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pre-commit Hooks (Comprehensive)
|
||||||
|
|
||||||
|
Current pre-commit configuration includes:
|
||||||
|
|
||||||
|
- **Security**: detect-aws-credentials, detect-private-key
|
||||||
|
- **File integrity**: check-case-conflict, check-merge-conflict, check-symlinks
|
||||||
|
- **Shell scripts**: shellcheck, shfmt (formatting)
|
||||||
|
- **YAML/JSON**: yamllint, check-yaml, check-toml, pretty-format-json
|
||||||
|
- **Markdown**: markdownlint with auto-fix
|
||||||
|
- **Lua**: stylua formatting for Neovim configs
|
||||||
|
- **Fish**: fish_syntax, fish_indent for shell configs
|
||||||
|
- **GitHub Actions**: actionlint validation
|
||||||
|
- **Renovate**: renovate-config-validator
|
||||||
|
- **General**: trailing-whitespace, end-of-file-fixer, mixed-line-ending
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run pre-commit manually
|
||||||
|
pre-commit run --all-files
|
||||||
|
```
|
||||||
|
|
||||||
|
## Version Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check current versions
|
||||||
|
node --version # Managed by nvm (.nvmrc: v20.18.1)
|
||||||
|
go version # Managed by asdf (.go-version)
|
||||||
|
python --version # Managed by asdf (.python-version)
|
||||||
|
```
|
||||||
|
|
||||||
|
## System Utilities (Darwin-specific)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Modern CLI tools available
|
||||||
|
ls # aliased to eza with icons and git info
|
||||||
|
grep # aliased to grep --color
|
||||||
|
fd pattern # modern find alternative
|
||||||
|
rg pattern # ripgrep for text search
|
||||||
|
bat file # modern cat with syntax highlighting
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project-specific Scripts (100+ available)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Dotfiles management
|
||||||
|
bash local/bin/dfm install all
|
||||||
|
|
||||||
|
# Git utilities
|
||||||
|
git-dirty # Check for dirty git repositories
|
||||||
|
git-fsck-dirs # Run fsck on git directories
|
||||||
|
git-update-dirs # Update multiple git directories
|
||||||
|
|
||||||
|
# Development utilities
|
||||||
|
x-pr-comments <pr> # Analyze GitHub PR comments (NEW)
|
||||||
|
x-set-php-aliases # Generate PHP version aliases
|
||||||
|
x-env-list # List environment variables
|
||||||
|
x-open-ports # Check open network ports
|
||||||
|
|
||||||
|
# Backup utilities
|
||||||
|
x-backup-folder # Backup directories
|
||||||
|
x-backup-mysql-with-prefix # MySQL backup with prefix
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Management
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Load shell configurations
|
||||||
|
source config/shared.sh # Cross-shell compatibility functions
|
||||||
|
source x-set-php-aliases # PHP version management
|
||||||
|
|
||||||
|
# Host-specific configurations
|
||||||
|
# Automatically applied: hosts/{hostname}/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quality Assurance (CRITICAL)
|
||||||
|
|
||||||
|
**All linting errors are BLOCKING and must be fixed:**
|
||||||
|
|
||||||
|
- EditorConfig violations are considered blocking errors
|
||||||
|
- ShellCheck warnings must be addressed
|
||||||
|
- Prettier formatting must be consistent
|
||||||
|
- Markdownlint rules must be followed
|
||||||
|
- NEVER use --no-verify with git operations
|
||||||
|
- ALWAYS run autofixers before manual intervention
|
||||||
115
.serena/memories/task_completion_checklist.md
Normal file
115
.serena/memories/task_completion_checklist.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
# Task Completion Checklist
|
||||||
|
|
||||||
|
When completing any development task in this dotfiles repository, follow this
|
||||||
|
checklist to ensure compliance with project standards.
|
||||||
|
|
||||||
|
## Required Steps (BLOCKING)
|
||||||
|
|
||||||
|
### 1. Code Quality Checks
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all linting tools - MUST PASS with zero errors
|
||||||
|
yarn lint
|
||||||
|
|
||||||
|
# Individual checks if needed:
|
||||||
|
yarn lint:markdown # Markdownlint validation
|
||||||
|
yarn lint:prettier # Prettier formatting check
|
||||||
|
yarn lint:ec # EditorConfig compliance verification
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Shell Script Validation (if applicable)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# All shell scripts must pass shellcheck without warnings
|
||||||
|
find . -path ./node_modules -prune -o -name '*.sh' -print0 | xargs -0 shellcheck
|
||||||
|
|
||||||
|
# For individual scripts:
|
||||||
|
shellcheck path/to/script.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Testing Infrastructure
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all tests - MUST PASS completely
|
||||||
|
yarn test
|
||||||
|
# OR alternative runner
|
||||||
|
bash test-all.sh
|
||||||
|
|
||||||
|
# For specific test categories:
|
||||||
|
# Bats tests in tests/ directory
|
||||||
|
# Individual script functionality tests
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. EditorConfig Compliance (CRITICAL)
|
||||||
|
|
||||||
|
- **BLOCKING REQUIREMENT**: EditorConfig violations prevent completion
|
||||||
|
- All code must follow `.editorconfig` rules exactly:
|
||||||
|
- UTF-8 charset
|
||||||
|
- LF line endings
|
||||||
|
- Final newline required
|
||||||
|
- Trailing whitespace removal
|
||||||
|
- Language-specific indentation (2-space default, 4-space for Fish)
|
||||||
|
- Use autofixers before attempting manual fixes
|
||||||
|
- Never modify linting configuration to bypass errors
|
||||||
|
|
||||||
|
## Auto-fixing Protocol
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ALWAYS run auto-fixers first, in this order:
|
||||||
|
yarn fix # Fix all auto-fixable issues
|
||||||
|
yarn fix:markdown # Fix markdown formatting violations
|
||||||
|
yarn fix:prettier # Fix code formatting issues
|
||||||
|
|
||||||
|
# Verify fixes applied correctly:
|
||||||
|
yarn lint # Should show reduced error count
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pre-commit Hook Integration
|
||||||
|
|
||||||
|
Current pre-commit configuration enforces:
|
||||||
|
|
||||||
|
- Security checks (credentials, private keys)
|
||||||
|
- Shell script validation (shellcheck, shfmt)
|
||||||
|
- Markdown formatting (markdownlint with auto-fix)
|
||||||
|
- YAML/JSON validation and formatting
|
||||||
|
- Lua formatting (stylua for Neovim configs)
|
||||||
|
- Fish shell syntax validation
|
||||||
|
- GitHub Actions validation (actionlint)
|
||||||
|
- Renovate configuration validation
|
||||||
|
|
||||||
|
## Memory File Maintenance
|
||||||
|
|
||||||
|
When updating memory files:
|
||||||
|
|
||||||
|
1. Follow markdown best practices (blank lines around headings/lists)
|
||||||
|
2. Specify language for fenced code blocks
|
||||||
|
3. Ensure final newline exists
|
||||||
|
4. Respect line length limits (120 chars for markdown)
|
||||||
|
5. Use proper heading hierarchy
|
||||||
|
|
||||||
|
## Critical Success Criteria
|
||||||
|
|
||||||
|
✅ **REQUIRED FOR TASK COMPLETION:**
|
||||||
|
|
||||||
|
- `yarn lint` exits with code 0 (no errors)
|
||||||
|
- `yarn test` passes all test suites
|
||||||
|
- EditorConfig compliance verified
|
||||||
|
- No trailing whitespace or missing final newlines
|
||||||
|
- Shell scripts have proper shebangs and pass shellcheck
|
||||||
|
- All temporary/cache files cleaned up
|
||||||
|
|
||||||
|
❌ **BLOCKING ISSUES:**
|
||||||
|
|
||||||
|
- Any linting errors or warnings
|
||||||
|
- EditorConfig violations of any kind
|
||||||
|
- Test failures or incomplete test coverage
|
||||||
|
- Use of `--no-verify` flag with git operations
|
||||||
|
- Modified linting configurations to bypass errors
|
||||||
|
|
||||||
|
## Quality Assurance Notes
|
||||||
|
|
||||||
|
- **Use `which command`** to get full paths in scripts
|
||||||
|
- **Prefer modern tools**: `rg` over `grep`, `fd` over `find`, `bat` over `cat`
|
||||||
|
- **Test cross-shell compatibility**: bash, zsh, fish
|
||||||
|
- **Validate host-specific configurations** don't break general setup
|
||||||
|
- **Document any new utilities** in `local/bin/README.md`
|
||||||
90
.serena/project.yml
Normal file
90
.serena/project.yml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby)
|
||||||
|
# * For C, use cpp
|
||||||
|
# * For JavaScript, use typescript
|
||||||
|
# Special requirements:
|
||||||
|
# * csharp: Requires the presence of a .sln file in the project folder.
|
||||||
|
language: bash
|
||||||
|
|
||||||
|
# whether to use the project's gitignore file to ignore files
|
||||||
|
# Added on 2025-04-07
|
||||||
|
ignore_all_files_in_gitignore: true
|
||||||
|
# list of additional paths to ignore
|
||||||
|
# same syntax as gitignore, so you can use * and **
|
||||||
|
# Was previously called `ignored_dirs`, please update your config if you are using that.
|
||||||
|
# Added (renamed) on 2025-04-07
|
||||||
|
ignored_paths:
|
||||||
|
- '*.swp'
|
||||||
|
- '*.tmp'
|
||||||
|
- '*.tmp.*'
|
||||||
|
- '.DS_Store'
|
||||||
|
- '.git/**'
|
||||||
|
- /config/cheat/cheatsheets/community/**
|
||||||
|
- /config/cheat/cheatsheets/pure-bash-bible/**
|
||||||
|
- /config/cheat/cheatsheets/tldr/**
|
||||||
|
- /config/fish/cheatsheets/community/**
|
||||||
|
- /config/fzf/**
|
||||||
|
- /config/nvim/snippets/**
|
||||||
|
- /config/nvim/spell/**
|
||||||
|
- /config/op/plugins/**
|
||||||
|
- /config/tmux/plugins/**
|
||||||
|
- /config/vim/extra/**
|
||||||
|
- /config/zsh/completions/**
|
||||||
|
- /config/zsh/plugins/**
|
||||||
|
- /local/man/fzf
|
||||||
|
- /local/share/fonts
|
||||||
|
- /tools/antidote
|
||||||
|
- /tools/dotbot
|
||||||
|
- /tools/dotbot-*/**
|
||||||
|
- node_modules/**
|
||||||
|
|
||||||
|
# whether the project is in read-only mode
|
||||||
|
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
|
||||||
|
# Added on 2025-04-18
|
||||||
|
read_only: false
|
||||||
|
|
||||||
|
# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
|
||||||
|
# Below is the complete list of tools for convenience.
|
||||||
|
# To make sure you have the latest list of tools, and to view their descriptions,
|
||||||
|
# execute `uv run scripts/print_tool_overview.py`.
|
||||||
|
#
|
||||||
|
# * `activate_project`: Activates a project by name.
|
||||||
|
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
|
||||||
|
# * `create_text_file`: Creates/overwrites a file in the project directory.
|
||||||
|
# * `delete_lines`: Deletes a range of lines within a file.
|
||||||
|
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
|
||||||
|
# * `execute_shell_command`: Executes a shell command.
|
||||||
|
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
|
||||||
|
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
|
||||||
|
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
|
||||||
|
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
|
||||||
|
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
|
||||||
|
# * `initial_instructions`: Gets the initial instructions for the current project.
|
||||||
|
# Should only be used in settings where the system prompt cannot be set,
|
||||||
|
# e.g. in clients you have no control over, like Claude Desktop.
|
||||||
|
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
|
||||||
|
# * `insert_at_line`: Inserts content at a given line in a file.
|
||||||
|
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
|
||||||
|
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
|
||||||
|
# * `list_memories`: Lists memories in Serena's project-specific memory store.
|
||||||
|
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
|
||||||
|
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
|
||||||
|
# * `read_file`: Reads a file within the project directory.
|
||||||
|
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
|
||||||
|
# * `remove_project`: Removes a project from the Serena configuration.
|
||||||
|
# * `replace_lines`: Replaces a range of lines within a file with new content.
|
||||||
|
# * `replace_symbol_body`: Replaces the full definition of a symbol.
|
||||||
|
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
|
||||||
|
# * `search_for_pattern`: Performs a search for a pattern in the project.
|
||||||
|
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
|
||||||
|
# * `switch_modes`: Activates modes by providing a list of their names
|
||||||
|
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
|
||||||
|
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
|
||||||
|
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
|
||||||
|
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
|
||||||
|
excluded_tools: []
|
||||||
|
|
||||||
|
# initial prompt for the project. It will always be given to the LLM upon activating the project
|
||||||
|
# (contrary to the memories, which are loaded on demand).
|
||||||
|
initial_prompt: ''
|
||||||
|
|
||||||
|
project_name: '.dotfiles'
|
||||||
@@ -24,3 +24,7 @@ disable=SC1091
|
|||||||
# SC2174: When used with -p, -m only applies to the deepest directory.
|
# SC2174: When used with -p, -m only applies to the deepest directory.
|
||||||
# https://github.com/koalaman/shellcheck/wiki/SC2174
|
# https://github.com/koalaman/shellcheck/wiki/SC2174
|
||||||
disable=SC2174
|
disable=SC2174
|
||||||
|
|
||||||
|
# SC2016: Expressions don't expand in single quotes, use double quotes for that.
|
||||||
|
# https://www.shellcheck.net/wiki/SC2016
|
||||||
|
disable=SC2016
|
||||||
|
|||||||
5
.sonarlint/connectedMode.json
Normal file
5
.sonarlint/connectedMode.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"sonarCloudOrganization": "ivuorinen",
|
||||||
|
"projectKey": "ivuorinen_dotfiles",
|
||||||
|
"region": "EU"
|
||||||
|
}
|
||||||
16
.yamlignore
Normal file
16
.yamlignore
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# vim: ft=gitignore
|
||||||
|
.mypy_cache/*
|
||||||
|
Brewfile.lock.json
|
||||||
|
config/cheat/cheatsheets/community
|
||||||
|
config/cheat/cheatsheets/tldr
|
||||||
|
config/fzf/*
|
||||||
|
config/nvim/*
|
||||||
|
config/op/plugins/used_plugins/*
|
||||||
|
config/tmux/plugins/*
|
||||||
|
config/vim/plugged/*
|
||||||
|
config/zsh/*
|
||||||
|
lazy-lock.json
|
||||||
|
local/bin/antigen.zsh
|
||||||
|
local/bin/asdf
|
||||||
|
tools/antidote/*
|
||||||
|
tools/dotbot*
|
||||||
21
.yamllint.yml
Normal file
21
.yamllint.yml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
extends: default
|
||||||
|
|
||||||
|
ignore: |
|
||||||
|
node_modules
|
||||||
|
tools
|
||||||
|
config/tmux/plugins
|
||||||
|
|
||||||
|
rules:
|
||||||
|
empty-lines:
|
||||||
|
level: warning
|
||||||
|
max: 1
|
||||||
|
line-length:
|
||||||
|
max: 200
|
||||||
|
level: warning
|
||||||
|
truthy:
|
||||||
|
check-keys: false
|
||||||
|
comments:
|
||||||
|
min-spaces-from-content: 1
|
||||||
|
trailing-spaces:
|
||||||
|
level: warning
|
||||||
1
.yarnrc.yml
Normal file
1
.yarnrc.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
nodeLinker: node-modules
|
||||||
55
AGENTS.md
Normal file
55
AGENTS.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# Project guidelines
|
||||||
|
|
||||||
|
This repository contains configuration files and helper scripts for managing
|
||||||
|
a development environment.
|
||||||
|
Dotbot drives installation, and host-specific folders under `hosts/` contain extra configs.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Run `yarn install` to fetch linting tools and the Bats test framework.
|
||||||
|
2. Re-run `yarn install` whenever `package.json` changes.
|
||||||
|
3. Yarn is the package manager of choice; avoid `npm` commands.
|
||||||
|
|
||||||
|
## Keeping the repository up to date
|
||||||
|
|
||||||
|
1. Update submodules with `git submodule update --remote --merge`.
|
||||||
|
2. Pull the latest changes and run `./install`.
|
||||||
|
|
||||||
|
## Linting and tests
|
||||||
|
|
||||||
|
- Format files with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn fix:prettier
|
||||||
|
yarn fix:markdown
|
||||||
|
```
|
||||||
|
|
||||||
|
- Shell scripts must pass `shellcheck`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
find . -path ./node_modules -prune -o -name '*.sh' -print0 | xargs -0 shellcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
- Ensure `.editorconfig` rules pass:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tools/install-ec.sh
|
||||||
|
ec
|
||||||
|
```
|
||||||
|
|
||||||
|
- Execute tests with `yarn test` when code changes.
|
||||||
|
|
||||||
|
## Debugging lint issues
|
||||||
|
|
||||||
|
- `yarn lint:prettier` and `yarn lint:markdown` show formatting errors.
|
||||||
|
- Ensure shell scripts have a shebang or `# shellcheck shell=bash` directive.
|
||||||
|
- Consult `.shellcheckrc` for project specific checks.
|
||||||
|
|
||||||
|
Scripts rely on helpers in `config/shared.sh` so they run under Bash, Zsh and Fish by default.
|
||||||
|
|
||||||
|
## Commits and PRs
|
||||||
|
|
||||||
|
- Use Semantic Commit messages: `type(scope): summary`.
|
||||||
|
- Keep PR titles in the same format.
|
||||||
|
|
||||||
|
<!-- vim: set ft=markdown spell spelllang=en_us cc=80 : -->
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
git submodule sync --recursive
|
||||||
|
|
||||||
# dotbot and plugins
|
# dotbot and plugins
|
||||||
git submodule add --name dotbot \
|
git submodule add --name dotbot \
|
||||||
-f https://github.com/anishathalye/dotbot.git tools/dotbot
|
-f https://github.com/anishathalye/dotbot.git tools/dotbot
|
||||||
@@ -15,6 +17,9 @@ git submodule add --name cheat-community \
|
|||||||
-f https://github.com/cheat/cheatsheets.git config/cheat/cheatsheets/community
|
-f https://github.com/cheat/cheatsheets.git config/cheat/cheatsheets/community
|
||||||
git submodule add --name cheat-tldr \
|
git submodule add --name cheat-tldr \
|
||||||
-f https://github.com/ivuorinen/cheatsheet-tldr.git config/cheat/cheatsheets/tldr
|
-f https://github.com/ivuorinen/cheatsheet-tldr.git config/cheat/cheatsheets/tldr
|
||||||
|
git submodule add --name antidote \
|
||||||
|
--depth 1 \
|
||||||
|
-f https://github.com/mattmc3/antidote.git tools/antidote
|
||||||
|
|
||||||
# tmux plugin manager and plugins
|
# tmux plugin manager and plugins
|
||||||
git submodule add --name tmux/tmux-continuum \
|
git submodule add --name tmux/tmux-continuum \
|
||||||
@@ -22,7 +27,7 @@ git submodule add --name tmux/tmux-continuum \
|
|||||||
git submodule add --name tmux/tmux-mode-indicator \
|
git submodule add --name tmux/tmux-mode-indicator \
|
||||||
-f https://github.com/MunifTanjim/tmux-mode-indicator.git config/tmux/plugins/tmux-mode-indicator
|
-f https://github.com/MunifTanjim/tmux-mode-indicator.git config/tmux/plugins/tmux-mode-indicator
|
||||||
git submodule add --name tmux/tmux-resurrect \
|
git submodule add --name tmux/tmux-resurrect \
|
||||||
-f https://github.com/tmux-plugins/tmux-resurrect config/tmux/plugins/tmux-resurrect
|
-f https://github.com/tmux-plugins/tmux-resurrect.git config/tmux/plugins/tmux-resurrect
|
||||||
git submodule add --name tmux/tmux-sensible \
|
git submodule add --name tmux/tmux-sensible \
|
||||||
-f https://github.com/tmux-plugins/tmux-sensible.git config/tmux/plugins/tmux-sensible
|
-f https://github.com/tmux-plugins/tmux-sensible.git config/tmux/plugins/tmux-sensible
|
||||||
git submodule add --name tmux/tmux-sessionist \
|
git submodule add --name tmux/tmux-sessionist \
|
||||||
@@ -35,15 +40,35 @@ git submodule add --name tmux/tmux-yank \
|
|||||||
-f https://github.com/tmux-plugins/tmux-yank.git config/tmux/plugins/tmux-yank
|
-f https://github.com/tmux-plugins/tmux-yank.git config/tmux/plugins/tmux-yank
|
||||||
git submodule add --name tmux/tmux-current-pane-hostname \
|
git submodule add --name tmux/tmux-current-pane-hostname \
|
||||||
-f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname
|
-f https://github.com/soyuka/tmux-current-pane-hostname.git config/tmux/plugins/tmux-current-pane-hostname
|
||||||
|
git submodule add --name tmux/tmux-dark-notify \
|
||||||
|
-f https://github.com/ivuorinen/tmux-dark-notify.git config/tmux/plugins/tmux-dark-notify
|
||||||
|
git submodule add --name tmux/catppuccin \
|
||||||
|
-f https://github.com/catppuccin/tmux.git config/tmux/plugins/catppuccin
|
||||||
|
|
||||||
# Takes submodules and sets them to ignore all changes
|
# Takes submodules and sets them to ignore all changes
|
||||||
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do
|
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do
|
||||||
git config "submodule.${MODULE}.ignore" all
|
echo "Ignoring submodule changes for submodule.${MODULE}..."
|
||||||
|
git config "submodule.${MODULE}.ignore" "dirty"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Mark certain repositories shallow
|
||||||
|
git config -f .gitmodules submodule.antidote.shallow true
|
||||||
|
|
||||||
# remove old submodules
|
# remove old submodules
|
||||||
[ -d "config/tmux/plugins/tpm" ] && rm -rf config/tmux/plugins/tpm
|
folders=(
|
||||||
[ -d "config/tmux/plugins/tmux" ] && rm -rf config/tmux/plugins/tmux
|
"config/tmux/plugins/tpm"
|
||||||
[ -d "config/tmux/plugins/tmux-menus" ] && rm -rf config/tmux/plugins/tmux-menus
|
"config/tmux/plugins/tmux"
|
||||||
[ -d "tools/dotbot-crontab" ] && rm -rf tools/dotbot-crontab
|
"config/tmux/plugins/tmux-menus"
|
||||||
[ -d "tools/dotbot-snap" ] && rm -rf tools/dotbot-snap
|
"tools/dotbot-crontab"
|
||||||
|
"tools/dotbot-snap"
|
||||||
|
"config/nvim-kickstart"
|
||||||
|
"local/bin/asdf"
|
||||||
|
"local/asdf"
|
||||||
|
"tools/dotbot-asdf"
|
||||||
|
)
|
||||||
|
|
||||||
|
for folder in "${folders[@]}"; do
|
||||||
|
[ -d "$folder" ] \
|
||||||
|
&& rm -rf "$folder" \
|
||||||
|
&& msgr run_done "Removed old submodule $folder"
|
||||||
|
done
|
||||||
|
|||||||
39
base/bashrc
39
base/bashrc
@@ -1,27 +1,15 @@
|
|||||||
# this is my bashrc config. there are many like it, but this one is mine.
|
# this is my bashrc config. there are many like it, but this one is mine.
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
|
|
||||||
# Defaults
|
|
||||||
export DOTFILES="$HOME/.dotfiles"
|
export DOTFILES="$HOME/.dotfiles"
|
||||||
|
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$PATH"
|
||||||
|
export SHARED_SCRIPTS_SOURCED=0
|
||||||
|
|
||||||
# Explicitly set XDG folders
|
source "$DOTFILES/config/shared.sh"
|
||||||
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
|
||||||
export XDG_CONFIG_HOME="$HOME/.config"
|
|
||||||
export XDG_DATA_HOME="$HOME/.local/share"
|
|
||||||
export XDG_STATE_HOME="$HOME/.local/state"
|
|
||||||
|
|
||||||
# custom variables
|
if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
|
||||||
export XDG_BIN_HOME="$HOME/.local/bin"
|
builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash"
|
||||||
export XDG_CACHE_HOME="$HOME/.cache"
|
fi
|
||||||
export XDG_RUNTIME_DIR="$HOME/.local/run"
|
|
||||||
|
|
||||||
# Paths
|
|
||||||
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$HOME/.local/go/bin:$XDG_DATA_HOME/cargo/bin:$PATH"
|
|
||||||
|
|
||||||
source "$DOTFILES/config/exports"
|
|
||||||
source "$DOTFILES/config/functions"
|
|
||||||
source "$DOTFILES/config/alias"
|
|
||||||
x-load-configs
|
|
||||||
|
|
||||||
# shellcheck source=../config/fzf/fzf.bash
|
# shellcheck source=../config/fzf/fzf.bash
|
||||||
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
|
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
|
||||||
@@ -30,12 +18,13 @@ x-load-configs
|
|||||||
# Import ssh keys in keychain
|
# Import ssh keys in keychain
|
||||||
ssh-add -A 2>/dev/null
|
ssh-add -A 2>/dev/null
|
||||||
|
|
||||||
x-have rbenv && {
|
x-have antidot && {
|
||||||
eval "$(rbenv init - bash)"
|
eval "$(antidot init)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# eval "$(starship init bash)"
|
PROMPT_DIRTRIM=3
|
||||||
x-have oh-my-posh && {
|
PROMPT_COMMAND='PS1_CMD1=$(git branch --show-current 2>/dev/null)'
|
||||||
eval "$(oh-my-posh init bash --config $XDG_CONFIG_HOME/oh-my-posh.omp.json)"
|
PS1='\[\e[95m\]\u\[\e[0m\]@\[\e[38;5;22;2m\]\h\[\e[0m\] \[\e[38;5;33m\]\w\[\e[0m\] \[\e[92;2m\]${PS1_CMD1}\n\[\e[39m\]➜\[\e[0m\] '
|
||||||
}
|
|
||||||
source "$DOTFILES/config/alias"
|
# Added by LM Studio CLI (lms)
|
||||||
|
export PATH="$PATH:$HOME/.lmstudio/bin"
|
||||||
|
|||||||
1
base/envrc
Normal file
1
base/envrc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
use node
|
||||||
@@ -20,10 +20,20 @@
|
|||||||
"value": "Ismo Vuorinen"
|
"value": "Ismo Vuorinen"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"masf": [
|
||||||
|
{
|
||||||
|
"key": "user.email",
|
||||||
|
"value": "ismo@masf.fi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "user.name",
|
||||||
|
"value": "Ismo Vuorinen"
|
||||||
|
}
|
||||||
|
],
|
||||||
"work": [
|
"work": [
|
||||||
{
|
{
|
||||||
"key": "user.email",
|
"key": "user.email",
|
||||||
"value": "ismo.vuorinen@vincit.fi"
|
"value": "ismo.vuorinen@svea.com"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "user.name",
|
"key": "user.name",
|
||||||
@@ -31,4 +41,4 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
base/hammerspoon/.luacheckrc
Normal file
15
base/hammerspoon/.luacheckrc
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
--
|
||||||
|
-- These globals can be set and accessed:
|
||||||
|
--
|
||||||
|
globals = {
|
||||||
|
"rawrequire",
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
-- These globals can only be accessed:
|
||||||
|
--
|
||||||
|
read_globals = {
|
||||||
|
"hs",
|
||||||
|
"ls",
|
||||||
|
"spoon",
|
||||||
|
}
|
||||||
1010
base/hammerspoon/generate-hammerspoon-types.py
Executable file
1010
base/hammerspoon/generate-hammerspoon-types.py
Executable file
File diff suppressed because it is too large
Load Diff
17863
base/hammerspoon/hammerspoon.types.lua
Normal file
17863
base/hammerspoon/hammerspoon.types.lua
Normal file
File diff suppressed because it is too large
Load Diff
205
base/hammerspoon/init.lua
Normal file
205
base/hammerspoon/init.lua
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
-- ╭─────────────────────────────────────────────────────────╮
|
||||||
|
-- │ Hammerspoon config file │
|
||||||
|
-- ╰─────────────────────────────────────────────────────────╯
|
||||||
|
-- init.lua — Pure Hammerspoon window controls
|
||||||
|
-- Converted from skhdrc logic; expanded with per‑display grids,
|
||||||
|
-- app rules with groups, wrap‑around focus, cross‑display moves,
|
||||||
|
-- and overlay/notification toggles.
|
||||||
|
-- Author: Ismo Vuorinen (ivuorinen)
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
-- Caps Lock as Meh key (Shift+Control+Alt)
|
||||||
|
--------------------------------------------------
|
||||||
|
-- Prerequisites:
|
||||||
|
-- 1. Go to System Settings → Keyboard → Keyboard Shortcuts → Modifier Keys
|
||||||
|
-- 2. Set Caps Lock to "No Action" (you mentioned you already did this)
|
||||||
|
-- 3. Install Karabiner-Elements: brew install --cask karabiner-elements
|
||||||
|
-- 4. Open Karabiner-Elements, go to "Simple Modifications"
|
||||||
|
-- 5. Add: caps_lock → f18
|
||||||
|
--
|
||||||
|
-- Then you can use F18 as your Meh key in Hammerspoon:
|
||||||
|
local f18 = hs.hotkey.modal.new()
|
||||||
|
|
||||||
|
-- Capture F18 key press/release
|
||||||
|
hs.hotkey.bind({}, 'F18', function()
|
||||||
|
f18:enter()
|
||||||
|
end, function()
|
||||||
|
f18:exit()
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Meh (F18/Caps Lock) key bindings for window management
|
||||||
|
-- These provide quick access to common window operations
|
||||||
|
|
||||||
|
-- Helper function to get focused window
|
||||||
|
local function W()
|
||||||
|
return hs.window.focusedWindow()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Window positioning: thirds (U/I/O)
|
||||||
|
f18:bind({}, 'u', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:moveToUnit({ x = 0, y = 0, w = 1 / 3, h = 1 }, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, 'i', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:moveToUnit({ x = 1 / 3, y = 0, w = 1 / 3, h = 1 }, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, 'o', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:moveToUnit({ x = 2 / 3, y = 0, w = 1 / 3, h = 1 }, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Window positioning: half width, full height (Y)
|
||||||
|
f18:bind({}, 'y', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:moveToUnit({ x = 0, y = 0, w = 0.5, h = 1 }, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Cycle through all windows (H/L)
|
||||||
|
-- We need to maintain state to properly cycle through all windows
|
||||||
|
local windowCycleIndex = 1
|
||||||
|
local windowCycleList = {}
|
||||||
|
local lastCycleTime = 0
|
||||||
|
|
||||||
|
local function getWindowCycleList()
|
||||||
|
local currentTime = hs.timer.secondsSinceEpoch()
|
||||||
|
-- Reset if more than 2 seconds have passed since last cycle
|
||||||
|
if currentTime - lastCycleTime > 2 then
|
||||||
|
windowCycleIndex = 1
|
||||||
|
windowCycleList = hs.window.orderedWindows()
|
||||||
|
end
|
||||||
|
lastCycleTime = currentTime
|
||||||
|
return windowCycleList
|
||||||
|
end
|
||||||
|
|
||||||
|
f18:bind({}, 'h', function()
|
||||||
|
local windows = getWindowCycleList()
|
||||||
|
if #windows <= 1 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Cycle backward
|
||||||
|
windowCycleIndex = windowCycleIndex - 1
|
||||||
|
if windowCycleIndex < 1 then
|
||||||
|
windowCycleIndex = #windows
|
||||||
|
end
|
||||||
|
|
||||||
|
windows[windowCycleIndex]:focus()
|
||||||
|
end)
|
||||||
|
|
||||||
|
f18:bind({}, 'l', function()
|
||||||
|
local windows = getWindowCycleList()
|
||||||
|
if #windows <= 1 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Cycle forward
|
||||||
|
windowCycleIndex = windowCycleIndex + 1
|
||||||
|
if windowCycleIndex > #windows then
|
||||||
|
windowCycleIndex = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
windows[windowCycleIndex]:focus()
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Window sizing: maximize (Up/J) and center (Down)
|
||||||
|
f18:bind({}, 'up', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:maximize(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, 'j', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:maximize(0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, 'down', function()
|
||||||
|
local w = W()
|
||||||
|
if not w then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local f = w:frame()
|
||||||
|
local sf = w:screen():frame()
|
||||||
|
if f.w < sf.w * 0.95 then
|
||||||
|
w:maximize(0)
|
||||||
|
else
|
||||||
|
local ww, hh = math.floor(sf.w * 0.5), math.floor(sf.h * 0.9)
|
||||||
|
local xx = sf.x + math.floor((sf.w - ww) / 2)
|
||||||
|
local yy = sf.y + math.floor((sf.h - hh) / 2)
|
||||||
|
w:setFrame({ x = xx, y = yy, w = ww, h = hh }, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, 'k', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
local sf = w:screen():frame()
|
||||||
|
local ww, hh = math.floor(sf.w * 0.9), math.floor(sf.h * 0.9)
|
||||||
|
local xx = sf.x + math.floor((sf.w - ww) / 2)
|
||||||
|
local yy = sf.y + math.floor((sf.h - hh) / 2)
|
||||||
|
w:setFrame({ x = xx, y = yy, w = ww, h = hh }, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Move to next/previous screen (. and ,)
|
||||||
|
f18:bind({}, '.', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
local s = w:screen()
|
||||||
|
local ns = s:toEast() or s:toWest()
|
||||||
|
if ns then
|
||||||
|
w:moveToScreen(ns, true, true, 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, ',', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
local s = w:screen()
|
||||||
|
local ps = s:toWest() or s:toEast()
|
||||||
|
if ps then
|
||||||
|
w:moveToScreen(ps, true, true, 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Window positioning: halves (Left/Right arrows)
|
||||||
|
f18:bind({}, 'left', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:moveToUnit(hs.layout.left50, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f18:bind({}, 'right', function()
|
||||||
|
local w = W()
|
||||||
|
if w then
|
||||||
|
w:moveToUnit(hs.layout.right50, 0)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Paste from clipboard with Meh + V
|
||||||
|
f18:bind({}, 'v', function()
|
||||||
|
hs.eventtap.keyStrokes(hs.pasteboard.getContents())
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Paste 1Password secret with Meh + P
|
||||||
|
f18:bind({}, 'p', function()
|
||||||
|
local output, status =
|
||||||
|
hs.execute('op read "op://Svea/3hzhctmvovbwlgulv7mgy25rf4/login-input"', true)
|
||||||
|
if status then
|
||||||
|
hs.eventtap.keyStrokes(output:gsub('%s+$', '')) -- trim trailing whitespace
|
||||||
|
else
|
||||||
|
hs.alert.show '1Password CLI error'
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- require 'generate_emmylua'
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/env bash
|
|
||||||
|
|
||||||
export NVM_DIR="$HOME/.nvm"
|
|
||||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
|
||||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
|
||||||
|
|
||||||
6
base/ignore
Normal file
6
base/ignore
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Applications/
|
||||||
|
Library/
|
||||||
|
Movies/
|
||||||
|
Music/
|
||||||
|
Pictures/
|
||||||
|
Google Drive/
|
||||||
1
base/nvmrc
Normal file
1
base/nvmrc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
v22.14.0
|
||||||
@@ -12,5 +12,3 @@
|
|||||||
~-.__| /_ - ~ ^| /- _ `..-' f: f:
|
~-.__| /_ - ~ ^| /- _ `..-' f: f:
|
||||||
| / | / ~-. `-. _||_||_
|
| / | / ~-. `-. _||_||_
|
||||||
|_____| |_____| ~ - . _ _ _ _ _>
|
|_____| |_____| ~ - . _ _ _ _ _>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,4 +4,3 @@
|
|||||||
# paths in source statements (since 0.8.0).
|
# paths in source statements (since 0.8.0).
|
||||||
external-sources=true
|
external-sources=true
|
||||||
includeAllWorkspaceSymbols=true
|
includeAllWorkspaceSymbols=true
|
||||||
|
|
||||||
|
|||||||
19
base/zshenv
19
base/zshenv
@@ -1,19 +0,0 @@
|
|||||||
# shellcheck shell=bash
|
|
||||||
# vim: filetype=zsh
|
|
||||||
|
|
||||||
export PATH="$HOME/.local/bin:$HOME/.dotfiles/local/bin:$HOME/.local/go/bin:$PATH"
|
|
||||||
|
|
||||||
export DOTFILES="$HOME/.dotfiles"
|
|
||||||
|
|
||||||
# Explicitly set XDG folders
|
|
||||||
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
|
||||||
export XDG_CONFIG_HOME="$HOME/.config"
|
|
||||||
export XDG_DATA_HOME="$HOME/.local/share"
|
|
||||||
export XDG_STATE_HOME="$HOME/.local/state"
|
|
||||||
|
|
||||||
# custom variables
|
|
||||||
export XDG_BIN_HOME="$HOME/.local/bin"
|
|
||||||
export XDG_CACHE_HOME="$HOME/.cache"
|
|
||||||
export XDG_RUNTIME_DIR="$HOME/.local/run"
|
|
||||||
|
|
||||||
source "$DOTFILES/config/exports"
|
|
||||||
147
base/zshrc
Executable file → Normal file
147
base/zshrc
Executable file → Normal file
@@ -1,112 +1,65 @@
|
|||||||
# this is my zsh config. there are many like it, but this one is mine.
|
# this is my zsh config. there are many like it, but this one is mine.
|
||||||
|
# https://zsh.sourceforge.io/Intro/intro_3.html
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
# export VERBOSE=1
|
||||||
|
# export DEBUG=1
|
||||||
|
autoload -U promptinit; promptinit
|
||||||
|
|
||||||
export DOTFILES="$HOME/.dotfiles"
|
export DOTFILES="$HOME/.dotfiles"
|
||||||
|
LOCAL_SHARE="$HOME/.local/share"
|
||||||
|
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/nvim/mason/bin:$LOCAL_SHARE/bob/nvim-bin:$LOCAL_SHARE/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
|
||||||
|
export SHARED_SCRIPTS_SOURCED=0
|
||||||
|
|
||||||
# Explicitly set XDG folders
|
source "$DOTFILES/config/shared.sh"
|
||||||
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
|
||||||
export XDG_CONFIG_HOME="$HOME/.config"
|
|
||||||
export XDG_DATA_HOME="$HOME/.local/share"
|
|
||||||
export XDG_STATE_HOME="$HOME/.local/state"
|
|
||||||
|
|
||||||
# custom variables
|
# zsh completions directory
|
||||||
export XDG_BIN_HOME="$HOME/.local/bin"
|
[ -z "$ZSH_COMPLETIONS" ] && export ZSH_COMPLETIONS="$XDG_CONFIG_HOME/zsh/completion"
|
||||||
export XDG_CACHE_HOME="$HOME/.cache"
|
|
||||||
export XDG_RUNTIME_DIR="$HOME/.local/run"
|
|
||||||
|
|
||||||
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$HOME/.local/go/bin:$XDG_DATA_HOME/bob/nvim-bin:$XDG_DATA_HOME/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
|
# Add zsh completions to FPATH, compinit will be called later
|
||||||
|
FPATH="$ZSH_COMPLETIONS:$FPATH"
|
||||||
|
|
||||||
x-load-configs
|
ZSH_COMPDUMP="$XDG_CACHE_HOME/zsh/zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
|
||||||
|
|
||||||
export COMPLETION_WAITING_DOTS=true
|
source "$DOTFILES/config/zsh/antidote.zsh"
|
||||||
|
|
||||||
if type brew &> /dev/null; then
|
# Function to source FZF configuration
|
||||||
eval "$(brew shellenv)"
|
source_fzf_config()
|
||||||
FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}"
|
{
|
||||||
fi
|
local fzf_config="${DOTFILES}/config/fzf/fzf.zsh"
|
||||||
|
if [[ -f "$fzf_config" ]]; then
|
||||||
export ZSH_CUSTOM_COMPLETION_PATH="$XDG_CONFIG_HOME/zsh/completion"
|
# shellcheck source=config/fzf/fzf.zsh
|
||||||
x-dc "$ZSH_CUSTOM_COMPLETION_PATH"
|
source "$fzf_config"
|
||||||
|
fi
|
||||||
# Add completion scripts to zsh path
|
|
||||||
FPATH="$ZSH_CUSTOM_COMPLETION_PATH:$FPATH"
|
|
||||||
|
|
||||||
# Try to load antigen, if present
|
|
||||||
ANTIGEN_ZSH_PATH="$XDG_BIN_HOME/antigen.zsh"
|
|
||||||
# shellcheck source=../../.local/bin/antigen.zsh
|
|
||||||
[[ -f "$ANTIGEN_ZSH_PATH" ]] && source "$ANTIGEN_ZSH_PATH"
|
|
||||||
|
|
||||||
# antigen is present
|
|
||||||
antigen use oh-my-zsh
|
|
||||||
|
|
||||||
export ZSH_TMUX_AUTOSTART=true
|
|
||||||
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
|
|
||||||
export ZSH_TMUX_UNICODE=true
|
|
||||||
export ZSH_TMUX_AUTOQUIT=false
|
|
||||||
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
|
|
||||||
|
|
||||||
export NVM_DIR="$XDG_CONFIG_HOME/nvm"
|
|
||||||
export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME"/npm/npmrc
|
|
||||||
|
|
||||||
# z, the zsh version
|
|
||||||
export ZSHZ_DATA="$XDG_STATE_HOME/z"
|
|
||||||
antigen bundle z
|
|
||||||
|
|
||||||
# these should be always available
|
|
||||||
antigen bundle tmux
|
|
||||||
antigen bundle colored-man-pages
|
|
||||||
antigen bundle command-not-found
|
|
||||||
antigen bundle ssh-agent
|
|
||||||
antigen bundle jreese/zsh-titles
|
|
||||||
antigen bundle zsh-users/zsh-completions
|
|
||||||
|
|
||||||
# these should be available if there's need
|
|
||||||
# x-have brew && antigen bundle brew
|
|
||||||
# x-have php && antigen bundle php
|
|
||||||
x-have python && antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
|
|
||||||
|
|
||||||
# nvm is a strange beast
|
|
||||||
zstyle ':omz:plugins:nvm' autoload yes
|
|
||||||
antigen bundle nvm
|
|
||||||
# antigen bundle "$DOTFILES/config/zsh/plugins/nvm-auto-use"
|
|
||||||
|
|
||||||
# nice to have stuff
|
|
||||||
# antigen bundle gcloud
|
|
||||||
|
|
||||||
# this needs to be the last item
|
|
||||||
antigen bundle zsh-users/zsh-syntax-highlighting
|
|
||||||
antigen apply
|
|
||||||
|
|
||||||
# shellcheck source=../config/fzf/fzf.zsh
|
|
||||||
[ -f "${DOTFILES}/config/fzf/fzf.zsh" ] \
|
|
||||||
&& source "${DOTFILES}/config/fzf/fzf.zsh"
|
|
||||||
|
|
||||||
x-have rbenv && {
|
|
||||||
eval "$(rbenv init - zsh)"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
x-have pyenv && {
|
# Function to set up tmux window name plugin if tmux is active
|
||||||
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
|
setup_tmux_window_name_plugin()
|
||||||
eval "$(pyenv init -)"
|
{
|
||||||
eval "$(pyenv virtualenv-init -)"
|
if [[ -n "$TMUX" ]]; then
|
||||||
|
local tmux_window_name_plugin="$TMUX_PLUGINS/tmux-window-name/scripts/rename_session_windows.py"
|
||||||
|
if [[ -f "$tmux_window_name_plugin" ]]; then
|
||||||
|
tmux_window_name()
|
||||||
|
{
|
||||||
|
($tmux_window_name_plugin &)
|
||||||
|
}
|
||||||
|
add-zsh-hook chpwd tmux_window_name
|
||||||
|
tmux_window_name
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Run only if tmux is active
|
source_fzf_config
|
||||||
[[ -n "$TMUX" ]] && {
|
setup_tmux_window_name_plugin
|
||||||
# Autoupdate tmux window name
|
x-have antidot && eval "$(antidot init)"
|
||||||
TMUX_WINDOW_NAME_PLUGIN="$DOTFILES/config/tmux/plugins/tmux-window-name/scripts/rename_session_windows.py"
|
|
||||||
[ -f "$TMUX_WINDOW_NAME_PLUGIN" ] && {
|
|
||||||
tmux-window-name()
|
|
||||||
{
|
|
||||||
($TMUX_WINDOW_NAME_PLUGIN &)
|
|
||||||
}
|
|
||||||
add-zsh-hook chpwd tmux-window-name
|
|
||||||
tmux-window-name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# eval "$(starship init zsh)"
|
autoload -Uz compinit bashcompinit
|
||||||
x-have oh-my-posh && {
|
compinit -d $ZSH_COMPDUMP
|
||||||
eval "$(oh-my-posh init zsh --config $XDG_CONFIG_HOME/oh-my-posh.omp.json)"
|
bashcompinit
|
||||||
}
|
|
||||||
source "$DOTFILES/config/alias"
|
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
||||||
|
export P10K_CONFIG="$DOTFILES/config/zsh/p10k.zsh"
|
||||||
|
[[ ! -f "$P10K_CONFIG" ]] || source "$P10K_CONFIG"
|
||||||
|
|
||||||
|
# Added by LM Studio CLI (lms)
|
||||||
|
export PATH="$PATH:$HOME/.lmstudio/bin"
|
||||||
|
|||||||
103
biome.json
Normal file
103
biome.json
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://biomejs.dev/schemas/2.3.1/schema.json",
|
||||||
|
"vcs": {
|
||||||
|
"enabled": true,
|
||||||
|
"clientKind": "git",
|
||||||
|
"useIgnoreFile": true,
|
||||||
|
"defaultBranch": "main"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"ignoreUnknown": true,
|
||||||
|
"includes": [
|
||||||
|
"**",
|
||||||
|
"!!**/.mypy_cache",
|
||||||
|
"!!**/Brewfile.lock.json",
|
||||||
|
"!!**/base/plan",
|
||||||
|
"!!**/config/cheat/cheatsheets/community",
|
||||||
|
"!!**/config/cheat/cheatsheets/tldr",
|
||||||
|
"!!**/config/fzf",
|
||||||
|
"!!**/config/nvim",
|
||||||
|
"!!**/config/op/plugins/used_plugins",
|
||||||
|
"!!**/config/tmux/plugins",
|
||||||
|
"!!**/config/zsh",
|
||||||
|
"!!**/config/vim",
|
||||||
|
"!!**/lazy-lock.json",
|
||||||
|
"!!**/local/bin/antigen.zsh",
|
||||||
|
"!!**/local/bin/asdf",
|
||||||
|
"!!**/tools/antidote",
|
||||||
|
"!!**/tools/dotbot",
|
||||||
|
"!!**/node_modules"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"formatWithErrors": false,
|
||||||
|
"indentStyle": "space",
|
||||||
|
"indentWidth": 2,
|
||||||
|
"lineEnding": "lf",
|
||||||
|
"lineWidth": 80
|
||||||
|
},
|
||||||
|
"linter": {
|
||||||
|
"enabled": true,
|
||||||
|
"rules": {
|
||||||
|
"recommended": true,
|
||||||
|
"correctness": {
|
||||||
|
"noUnusedVariables": "warn",
|
||||||
|
"noUnusedImports": "warn"
|
||||||
|
},
|
||||||
|
"style": {
|
||||||
|
"useConst": "warn",
|
||||||
|
"useTemplate": "warn"
|
||||||
|
},
|
||||||
|
"suspicious": {
|
||||||
|
"noExplicitAny": "warn",
|
||||||
|
"noConsole": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"javascript": {
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"quoteStyle": "single",
|
||||||
|
"jsxQuoteStyle": "double",
|
||||||
|
"trailingCommas": "all",
|
||||||
|
"semicolons": "asNeeded",
|
||||||
|
"arrowParentheses": "always",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"bracketSameLine": false,
|
||||||
|
"quoteProperties": "asNeeded",
|
||||||
|
"indentStyle": "space",
|
||||||
|
"indentWidth": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"json": {
|
||||||
|
"parser": {
|
||||||
|
"allowComments": true,
|
||||||
|
"allowTrailingCommas": false
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"indentStyle": "space",
|
||||||
|
"indentWidth": 2,
|
||||||
|
"lineWidth": 80
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"includes": ["*.md", "*.mdx"],
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"lineWidth": 120
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"includes": ["package.json"],
|
||||||
|
"json": {
|
||||||
|
"formatter": {
|
||||||
|
"enabled": true,
|
||||||
|
"indentWidth": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
--container-architecture linux/amd64
|
||||||
-P ubuntu-latest=catthehacker/ubuntu:act-latest
|
-P ubuntu-latest=catthehacker/ubuntu:act-latest
|
||||||
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
||||||
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
||||||
|
|||||||
251
config/aerospace/aerospace.toml
Normal file
251
config/aerospace/aerospace.toml
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
# Start AeroSpace at login
|
||||||
|
start-at-login = false
|
||||||
|
|
||||||
|
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
||||||
|
enable-normalization-flatten-containers = true
|
||||||
|
enable-normalization-opposite-orientation-for-nested-containers = true
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
|
||||||
|
# The 'accordion-padding' specifies the size of accordion padding
|
||||||
|
# You can set 0 to disable the padding feature
|
||||||
|
accordion-padding = 10
|
||||||
|
|
||||||
|
# Possible values: tiles|accordion
|
||||||
|
default-root-container-layout = 'tiles'
|
||||||
|
|
||||||
|
# Possible values: horizontal|vertical|auto
|
||||||
|
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
|
||||||
|
# tall monitor (anything higher than wide) gets vertical orientation
|
||||||
|
default-root-container-orientation = 'auto'
|
||||||
|
|
||||||
|
# Mouse follows focus when focused monitor changes
|
||||||
|
# Drop it from your config, if you don't like this behavior
|
||||||
|
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
|
||||||
|
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
|
||||||
|
# Fallback value (if you omit the key): on-focused-monitor-changed = []
|
||||||
|
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
|
||||||
|
|
||||||
|
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
|
||||||
|
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
|
||||||
|
# Also see: https://nikitabobko.github.io/AeroSpace/goodness#disable-hide-app
|
||||||
|
automatically-unhide-macos-hidden-apps = true
|
||||||
|
|
||||||
|
# [[on-window-detected]]
|
||||||
|
# if.app-id = 'com.apple.systempreferences'
|
||||||
|
# if.app-name-regex-substring = 'settings'
|
||||||
|
# if.window-title-regex-substring = 'substring'
|
||||||
|
# if.workspace = 'workspace-name'
|
||||||
|
# if.during-aerospace-startup = true
|
||||||
|
# check-further-callbacks = true
|
||||||
|
# run = ['layout floating', 'move-node-to-workspace S'] # The callback itself
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-name-regex-substring = 'settings' # All settings
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.systempreferences' # macOS System Preferences
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.1password.1password' # 1Password
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'org.ferdium.ferdium-app' # Ferdium, has WhatsApp etc.
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.jetbrains.PhpStorm' # PhpStorm
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.finder' # Finder
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.Preview' # Preview
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.mail' # Mail
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.DanPristupov.Fork' # Fork
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.flexibits.fantastical2.mac' # Fantastical
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'org.whispersystems.signal-desktop' # Signal
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tidal.desktop' # TIDAL
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 2'] # Float and move to workspace 2
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.TV' # Apple TV app
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.setapp.DesktopClient' # Setapp
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.electron.dockerdesktop' # Docker Desktop
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tinyspeck.slackmacgap' # Slack
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'md.obsidia' # Obsidian
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.todoist.mac.Todoist' # Todoist
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.backup.launcher' # TimeMachine
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.philipyoungg.session-setapp' # Session app (Setapp)
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.microsoft.rdc.macos' # Remote Desktop
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
# Possible values: (qwerty|dvorak)
|
||||||
|
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
|
||||||
|
[key-mapping]
|
||||||
|
preset = 'qwerty'
|
||||||
|
|
||||||
|
# Gaps between windows (inner-*) and between monitor edges (outer-*).
|
||||||
|
# Possible values:
|
||||||
|
# - Constant: gaps.outer.top = 8
|
||||||
|
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
|
||||||
|
# In this example, 24 is a default value when there is no match.
|
||||||
|
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
|
||||||
|
[gaps]
|
||||||
|
inner.horizontal = 5
|
||||||
|
inner.vertical = 5
|
||||||
|
outer.top = [{ monitor.'^built-in retina display$' = 0 }, 0]
|
||||||
|
outer.right = 0
|
||||||
|
outer.bottom = 0
|
||||||
|
outer.left = 0
|
||||||
|
|
||||||
|
# 'main' binding mode declaration
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||||
|
# 'main' binding mode must be always presented
|
||||||
|
# Fallback value (if you omit the key): mode.main.binding = {}
|
||||||
|
[mode.main.binding]
|
||||||
|
|
||||||
|
cmd-h = [] # Disable "hide application"
|
||||||
|
cmd-alt-h = [] # Disable "hide others"
|
||||||
|
|
||||||
|
# All possible keys:
|
||||||
|
# - Letters. a, b, c, ..., z
|
||||||
|
# - Numbers. 0, 1, 2, ..., 9
|
||||||
|
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
|
||||||
|
# - F-keys. f1, f2, ..., f20
|
||||||
|
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,
|
||||||
|
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab
|
||||||
|
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
|
||||||
|
# keypadMinus, keypadMultiply, keypadPlus
|
||||||
|
# - Arrows. left, down, up, right
|
||||||
|
|
||||||
|
# All possible modifiers: cmd, alt, ctrl, shift
|
||||||
|
|
||||||
|
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
|
||||||
|
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3)
|
||||||
|
# alt-enter = '''exec-and-forget osascript -e '
|
||||||
|
# tell application "Terminal"
|
||||||
|
# do script
|
||||||
|
# activate
|
||||||
|
# end tell'
|
||||||
|
# '''
|
||||||
|
|
||||||
|
# alt-cmd-shift-f = 'fullscreen'
|
||||||
|
# alt-shift-f = 'layout floating'
|
||||||
|
# alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
|
||||||
|
alt-h = 'focus left'
|
||||||
|
alt-j = 'focus down'
|
||||||
|
alt-k = 'focus up'
|
||||||
|
alt-l = 'focus right'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
|
||||||
|
alt-shift-1 = 'workspace 1' # Main
|
||||||
|
alt-shift-2 = 'workspace 2' # Media
|
||||||
|
ctrl-shift-1 = 'move-node-to-workspace 1' # Move node to Main
|
||||||
|
ctrl-shift-2 = 'move-node-to-workspace 2' # Move node to Media
|
||||||
|
|
||||||
|
alt-shift-tab = 'workspace-back-and-forth' # Switch between workspaces
|
||||||
|
ctrl-shift-tab = 'move-workspace-to-monitor --wrap-around prev'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||||
|
alt-a = 'mode apps'
|
||||||
|
alt-s = 'mode service'
|
||||||
|
alt-m = 'mode move'
|
||||||
|
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ alt-m │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
[mode.move.binding]
|
||||||
|
esc = ['reload-config', 'mode main']
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
|
||||||
|
1 = ['move-node-to-workspace 1 --focus-follows-window']
|
||||||
|
2 = ['move-node-to-workspace 2 --focus-follows-window']
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
||||||
|
h = 'move left'
|
||||||
|
j = 'move down'
|
||||||
|
k = 'move up'
|
||||||
|
l = 'move right'
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#join-with
|
||||||
|
shift-h = 'join-with left'
|
||||||
|
shift-j = 'join-with down'
|
||||||
|
shift-k = 'join-with up'
|
||||||
|
shift-l = 'join-with right'
|
||||||
|
# https://nikitabobko.github.io/AeroSpace/commands#resize
|
||||||
|
ctrl-h = 'resize smart -70'
|
||||||
|
ctrl-l = 'resize smart +70'
|
||||||
|
shift-left = 'resize smart +70'
|
||||||
|
shift-right = 'resize smart -70'
|
||||||
|
# https://nikitabobko.github.io/AeroSpace/commands#flatten-workspace-tree
|
||||||
|
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||||
|
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ alt-a │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
[mode.apps.binding]
|
||||||
|
esc = ['reload-config', 'mode main']
|
||||||
|
b = ['exec-and-forget open -a /Applications/Brave Browser.app', 'mode main'] # Browser
|
||||||
|
c = ['exec-and-forget open -a /Applications/Ferdium.app', 'mode main'] # Chat
|
||||||
|
g = ['exec-and-forget open -a /Applications/Ghostty.app', 'mode main'] # Ghostty
|
||||||
|
o = ['exec-and-forget open -a /Applications/Obsidian.app', 'mode main'] # Obsidian
|
||||||
|
s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main'] # Slack
|
||||||
|
t = ['exec-and-forget open -a /Applications/TIDAL.app', 'mode main'] # Tidal
|
||||||
|
w = ['exec-and-forget open -a /Applications/WezTerm.app', 'mode main'] # WezTerm
|
||||||
|
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ alt-s │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
[mode.service.binding]
|
||||||
|
esc = ['reload-config', 'mode main'] # reload config
|
||||||
|
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
||||||
|
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
|
||||||
|
backspace = ['close-all-windows-but-current', 'mode main']
|
||||||
@@ -1,345 +1,54 @@
|
|||||||
[colors]
|
|
||||||
draw_bold_text_with_bright_colors = true
|
|
||||||
|
|
||||||
[colors.bright]
|
|
||||||
black = "0x414868"
|
|
||||||
blue = "0x7aa2f7"
|
|
||||||
cyan = "0x7dcfff"
|
|
||||||
green = "0x9ece6a"
|
|
||||||
magenta = "0xbb9af7"
|
|
||||||
red = "0xf7768e"
|
|
||||||
white = "0xc0caf5"
|
|
||||||
yellow = "0xe0af68"
|
|
||||||
|
|
||||||
[colors.normal]
|
|
||||||
black = "0x1d202f"
|
|
||||||
blue = "0x7aa2f7"
|
|
||||||
cyan = "0x7dcfff"
|
|
||||||
green = "0x9ece6a"
|
|
||||||
magenta = "0xbb9af7"
|
|
||||||
red = "0xf7768e"
|
|
||||||
white = "0xa9b1d6"
|
|
||||||
yellow = "0xe0af68"
|
|
||||||
|
|
||||||
[colors.primary]
|
|
||||||
background = "0x24283b"
|
|
||||||
foreground = "0xc0caf5"
|
|
||||||
|
|
||||||
[env]
|
[env]
|
||||||
TERM = "xterm-256color"
|
TERM = "xterm-256color"
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
draw_bold_text_with_bright_colors = true
|
||||||
|
|
||||||
[font]
|
[font]
|
||||||
size = 14.0
|
size = 14.0
|
||||||
|
|
||||||
[font.bold]
|
|
||||||
family = "JetBrainsMonoNL Nerd Font Mono"
|
|
||||||
style = "Bold"
|
|
||||||
|
|
||||||
[font.glyph_offset]
|
[font.glyph_offset]
|
||||||
x = 0
|
x = 0
|
||||||
y = 0
|
y = 0
|
||||||
|
|
||||||
|
[font.normal]
|
||||||
|
family = "JetBrainsMonoNL Nerd Font Mono"
|
||||||
|
style = "ExtraLight"
|
||||||
|
|
||||||
[font.italic]
|
[font.italic]
|
||||||
family = "JetBrainsMonoNL Nerd Font Mono"
|
family = "JetBrainsMonoNL Nerd Font Mono"
|
||||||
style = "Italic"
|
style = "Italic"
|
||||||
|
|
||||||
[font.normal]
|
[font.bold]
|
||||||
family = "JetBrainsMonoNL Nerd Font Mono"
|
family = "JetBrainsMonoNL Nerd Font Mono"
|
||||||
style = "ExtraLight"
|
style = "Bold"
|
||||||
|
|
||||||
[font.offset]
|
[font.offset]
|
||||||
x = 0
|
x = 0
|
||||||
y = 0
|
y = 0
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
action = "Paste"
|
|
||||||
key = "V"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
action = "Copy"
|
|
||||||
key = "C"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
action = "Quit"
|
|
||||||
key = "Q"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
action = "Quit"
|
|
||||||
key = "W"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
action = "SpawnNewInstance"
|
|
||||||
key = "N"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOH"
|
|
||||||
key = "Home"
|
|
||||||
mode = "AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1~"
|
|
||||||
key = "Home"
|
|
||||||
mode = "~AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOF"
|
|
||||||
key = "End"
|
|
||||||
mode = "AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[4~"
|
|
||||||
key = "End"
|
|
||||||
mode = "~AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[5;2~"
|
|
||||||
key = "PageUp"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[5;5~"
|
|
||||||
key = "PageUp"
|
|
||||||
mods = "Control"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[5~"
|
|
||||||
key = "PageUp"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[6;2~"
|
|
||||||
key = "PageDown"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[6;5~"
|
|
||||||
key = "PageDown"
|
|
||||||
mods = "Control"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[6~"
|
|
||||||
key = "PageDown"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;2D"
|
|
||||||
key = "Left"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;5D"
|
|
||||||
key = "Left"
|
|
||||||
mods = "Control"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;3D"
|
|
||||||
key = "Left"
|
|
||||||
mods = "Alt"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[D"
|
|
||||||
key = "Left"
|
|
||||||
mode = "~AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOD"
|
|
||||||
key = "Left"
|
|
||||||
mode = "AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;2C"
|
|
||||||
key = "Right"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;5C"
|
|
||||||
key = "Right"
|
|
||||||
mods = "Control"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;3C"
|
|
||||||
key = "Right"
|
|
||||||
mods = "Alt"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[C"
|
|
||||||
key = "Right"
|
|
||||||
mode = "~AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOC"
|
|
||||||
key = "Right"
|
|
||||||
mode = "AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;2A"
|
|
||||||
key = "Up"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;5A"
|
|
||||||
key = "Up"
|
|
||||||
mods = "Control"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;3A"
|
|
||||||
key = "Up"
|
|
||||||
mods = "Alt"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[A"
|
|
||||||
key = "Up"
|
|
||||||
mode = "~AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOA"
|
|
||||||
key = "Up"
|
|
||||||
mode = "AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;2B"
|
|
||||||
key = "Down"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;5B"
|
|
||||||
key = "Down"
|
|
||||||
mods = "Control"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[1;3B"
|
|
||||||
key = "Down"
|
|
||||||
mods = "Alt"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[B"
|
|
||||||
key = "Down"
|
|
||||||
mode = "~AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOB"
|
|
||||||
key = "Down"
|
|
||||||
mode = "AppCursor"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[Z"
|
|
||||||
key = "Tab"
|
|
||||||
mods = "Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOP"
|
|
||||||
key = "F1"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOQ"
|
|
||||||
key = "F2"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOR"
|
|
||||||
key = "F3"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001BOS"
|
|
||||||
key = "F4"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[15~"
|
|
||||||
key = "F5"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[17~"
|
|
||||||
key = "F6"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[18~"
|
|
||||||
key = "F7"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[19~"
|
|
||||||
key = "F8"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[20~"
|
|
||||||
key = "F9"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[21~"
|
|
||||||
key = "F10"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[23~"
|
|
||||||
key = "F11"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[24~"
|
|
||||||
key = "F12"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
key = "Back"
|
|
||||||
action = "ReceiveChar"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[2~"
|
|
||||||
key = "Insert"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u001B[3~"
|
|
||||||
key = "Delete"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002&"
|
|
||||||
key = "W"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002c"
|
|
||||||
key = "T"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002n"
|
|
||||||
key = "RBracket"
|
|
||||||
mods = "Command|Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002p"
|
|
||||||
key = "LBracket"
|
|
||||||
mods = "Command|Shift"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002o"
|
|
||||||
key = "RBracket"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002;"
|
|
||||||
key = "LBracket"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[keyboard.bindings]]
|
|
||||||
chars = "\u0002/"
|
|
||||||
key = "F"
|
|
||||||
mods = "Command"
|
|
||||||
|
|
||||||
[[mouse.bindings]]
|
|
||||||
action = "PasteSelection"
|
|
||||||
mouse = "Middle"
|
|
||||||
|
|
||||||
[selection]
|
[selection]
|
||||||
semantic_escape_chars = ",│`|:\"' ()[]{}<>"
|
semantic_escape_chars = ",│`|:\"' ()[]{}<>"
|
||||||
|
save_to_clipboard = true
|
||||||
|
|
||||||
[window]
|
[window]
|
||||||
decorations = "none"
|
decorations = "Full"
|
||||||
dynamic_title = true
|
dynamic_title = true
|
||||||
opacity = 0.98
|
opacity = 0.98
|
||||||
|
blur = true
|
||||||
|
|
||||||
[window.dimensions]
|
[window.dimensions]
|
||||||
columns = 200
|
columns = 200
|
||||||
lines = 100
|
lines = 75
|
||||||
|
|
||||||
[window.padding]
|
[window.padding]
|
||||||
x = 5
|
x = 5
|
||||||
y = 5
|
y = 5
|
||||||
|
|
||||||
|
[general]
|
||||||
|
import = [
|
||||||
|
# Default to night if the copied one doesn't exist.
|
||||||
|
"~/.dotfiles/config/alacritty/theme-night.toml",
|
||||||
|
"~/.config/alacritty/theme-active.toml"
|
||||||
|
]
|
||||||
|
|||||||
40
config/alacritty/theme-day.toml
Normal file
40
config/alacritty/theme-day.toml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# TokyoNight Alacritty Colors: Day
|
||||||
|
# Default colors
|
||||||
|
[colors.primary]
|
||||||
|
background = '#e1e2e7'
|
||||||
|
foreground = '#3760bf'
|
||||||
|
|
||||||
|
#[colors.cursor]
|
||||||
|
#cursor = '#3760bf'
|
||||||
|
#text = '#e1e2e7'
|
||||||
|
|
||||||
|
# Normal colors
|
||||||
|
[colors.normal]
|
||||||
|
black = '#e9e9ed'
|
||||||
|
red = '#f52a65'
|
||||||
|
green = '#587539'
|
||||||
|
yellow = '#8c6c3e'
|
||||||
|
blue = '#2e7de9'
|
||||||
|
magenta = '#9854f1'
|
||||||
|
cyan = '#007197'
|
||||||
|
white = '#6172b0'
|
||||||
|
|
||||||
|
# Bright colors
|
||||||
|
[colors.bright]
|
||||||
|
black = '#a1a6c5'
|
||||||
|
red = '#f52a65'
|
||||||
|
green = '#587539'
|
||||||
|
yellow = '#8c6c3e'
|
||||||
|
blue = '#2e7de9'
|
||||||
|
magenta = '#9854f1'
|
||||||
|
cyan = '#007197'
|
||||||
|
white = '#3760bf'
|
||||||
|
|
||||||
|
# Indexed Colors
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#b15c00'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#c64343'
|
||||||
40
config/alacritty/theme-night.toml
Normal file
40
config/alacritty/theme-night.toml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# TokyoNight Alacritty Colors: Storm
|
||||||
|
# Default colors
|
||||||
|
[colors.primary]
|
||||||
|
background = '#24283b'
|
||||||
|
foreground = '#c0caf5'
|
||||||
|
|
||||||
|
#[colors.cursor]
|
||||||
|
#cursor = '#c0caf5'
|
||||||
|
#text = '#24283b'
|
||||||
|
|
||||||
|
# Normal colors
|
||||||
|
[colors.normal]
|
||||||
|
black = '#1d202f'
|
||||||
|
red = '#f7768e'
|
||||||
|
green = '#9ece6a'
|
||||||
|
yellow = '#e0af68'
|
||||||
|
blue = '#7aa2f7'
|
||||||
|
magenta = '#bb9af7'
|
||||||
|
cyan = '#7dcfff'
|
||||||
|
white = '#a9b1d6'
|
||||||
|
|
||||||
|
# Bright colors
|
||||||
|
[colors.bright]
|
||||||
|
black = '#414868'
|
||||||
|
red = '#f7768e'
|
||||||
|
green = '#9ece6a'
|
||||||
|
yellow = '#e0af68'
|
||||||
|
blue = '#7aa2f7'
|
||||||
|
magenta = '#bb9af7'
|
||||||
|
cyan = '#7dcfff'
|
||||||
|
white = '#c0caf5'
|
||||||
|
|
||||||
|
# Indexed Colors
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#ff9e64'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#db4b4b'
|
||||||
139
config/alias
139
config/alias
@@ -1,6 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck source="../scripts/shared.sh"
|
|
||||||
# shellcheck disable=1091,2139
|
|
||||||
|
|
||||||
# Color the grep output
|
# Color the grep output
|
||||||
alias grep="grep --color"
|
alias grep="grep --color"
|
||||||
@@ -9,13 +7,34 @@ x-have eza && {
|
|||||||
alias ls="eza -h -s=type --git --icons --group-directories-first"
|
alias ls="eza -h -s=type --git --icons --group-directories-first"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alias vim='vim -u "$XDG_CONFIG_HOME/vim/vimrc"'
|
||||||
|
|
||||||
# Easier navigation: .., ..., ....
|
# Easier navigation: .., ..., ....
|
||||||
alias ..="cd .."
|
alias ..="cd .."
|
||||||
alias ...="cd ../.."
|
alias ...="cd ../.."
|
||||||
alias ....="cd ../../.."
|
alias ....="cd ../../.."
|
||||||
|
|
||||||
|
# Get git repository root path
|
||||||
|
get_git_root()
|
||||||
|
{
|
||||||
|
# check that we are in a git repository
|
||||||
|
if git rev-parse --is-inside-work-tree &> /dev/null; then
|
||||||
|
git rev-parse --show-toplevel
|
||||||
|
else
|
||||||
|
>&2 msgr err "Not in a git repository"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# cd to git root directory
|
# cd to git root directory
|
||||||
alias cdgr='cd "$(git root)"'
|
alias cdgr='cd "$(get_git_root)"'
|
||||||
|
|
||||||
|
# interesting folders, and shortcuts
|
||||||
|
alias .='cd $HOME'
|
||||||
|
alias .b='cd $XDG_BIN_HOME'
|
||||||
|
alias .c='cd $HOME/Code'
|
||||||
|
alias .d='cd $DOTFILES'
|
||||||
|
alias .l='cd $HOME/.local'
|
||||||
|
alias .o='cd $HOME/Code/ivuorinen/obsidian/'
|
||||||
|
|
||||||
# Shortcuts for listing
|
# Shortcuts for listing
|
||||||
alias ll="ls -la"
|
alias ll="ls -la"
|
||||||
@@ -25,13 +44,10 @@ alias l="ls -a"
|
|||||||
alias cd..="cd .."
|
alias cd..="cd .."
|
||||||
alias sl="ls"
|
alias sl="ls"
|
||||||
|
|
||||||
# List only directories
|
|
||||||
alias lsd="ls -lF | grep '^d'"
|
|
||||||
|
|
||||||
# IP addresses
|
# IP addresses
|
||||||
alias x-ip="dig +short myip.opendns.com @resolver1.opendns.com"
|
alias x-ip="dig +short myip.opendns.com @resolver1.opendns.com"
|
||||||
alias localip="ipconfig getifaddr en1"
|
alias localip="ipconfig getifaddr en1"
|
||||||
alias ips="ifconfig -a | grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\|[a-fA-F0-9:]\+\)' | sed -e 's/inet6* //'"
|
alias ips="ifconfig -a | grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\|[a-fA-F0-9:]\+\)' | sed -e 's/inet6* //' | sort"
|
||||||
|
|
||||||
# Show/hide hidden files in Finder
|
# Show/hide hidden files in Finder
|
||||||
alias show="defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder"
|
alias show="defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder"
|
||||||
@@ -46,10 +62,17 @@ alias flush="dscacheutil -flushcache"
|
|||||||
# Update locatedb
|
# Update locatedb
|
||||||
alias updatedb="sudo /usr/libexec/locate.updatedb"
|
alias updatedb="sudo /usr/libexec/locate.updatedb"
|
||||||
|
|
||||||
# tmux: automatically attach or create session with name 'main'
|
# Date helpers
|
||||||
alias tmux='tmux new-session -A -s main'
|
alias isodate="date +'%Y-%m-%d'"
|
||||||
# tmux: attach or create new session
|
alias x-datetime="date +'%Y-%m-%d %H:%M:%S'"
|
||||||
alias ta='tmux attach || tmux'
|
alias x-timestamp="date +'%s'"
|
||||||
|
|
||||||
|
# nvim aliases
|
||||||
|
alias vi='nvim'
|
||||||
|
alias vim='nvim'
|
||||||
|
|
||||||
|
# xdg-ninja aliases for better experience
|
||||||
|
alias xdg='xdg-ninja --skip-ok --skip-unsupported'
|
||||||
|
|
||||||
# watch with: differences, precise, beep and color
|
# watch with: differences, precise, beep and color
|
||||||
alias watchx='watch -dpbc'
|
alias watchx='watch -dpbc'
|
||||||
@@ -59,8 +82,6 @@ alias zapds='find . -name ".DS_Store" -print -delete'
|
|||||||
alias zappyc="find . -type f -name '*.pyc' -ls -delete"
|
alias zappyc="find . -type f -name '*.pyc' -ls -delete"
|
||||||
# Run all zaps
|
# Run all zaps
|
||||||
alias zapall="zapds && zappyc"
|
alias zapall="zapds && zappyc"
|
||||||
# tail with follow flag on
|
|
||||||
alias t='tail -f'
|
|
||||||
# directory usage, return only the total
|
# directory usage, return only the total
|
||||||
alias dn='du -chd1'
|
alias dn='du -chd1'
|
||||||
# Mirror site with wget
|
# Mirror site with wget
|
||||||
@@ -68,6 +89,7 @@ alias mirror_site='wget -m -k -K -E -e robots=off'
|
|||||||
# Mirror stdout to stderr, useful for seeing data going through a pipe
|
# Mirror stdout to stderr, useful for seeing data going through a pipe
|
||||||
alias peek='tee >(cat 1>&2)'
|
alias peek='tee >(cat 1>&2)'
|
||||||
|
|
||||||
|
# Runs Gitlab code quality scanner
|
||||||
alias code_scanner='docker run
|
alias code_scanner='docker run
|
||||||
--env SOURCE_CODE="$PWD"
|
--env SOURCE_CODE="$PWD"
|
||||||
--volume "${PWD}":/code
|
--volume "${PWD}":/code
|
||||||
@@ -75,20 +97,25 @@ alias code_scanner='docker run
|
|||||||
registry.gitlab.com/gitlab-org/ci-cd/codequality:"${CODEQUALITY_VERSION:-latest}"
|
registry.gitlab.com/gitlab-org/ci-cd/codequality:"${CODEQUALITY_VERSION:-latest}"
|
||||||
/code'
|
/code'
|
||||||
|
|
||||||
|
# Runs trivy container image scanner
|
||||||
alias trivy_scan='docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy'
|
alias trivy_scan='docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy'
|
||||||
|
# Opens dotfiles with $EDITOR
|
||||||
alias zedit='$EDITOR ~/.dotfiles'
|
alias zedit='$EDITOR ~/.dotfiles'
|
||||||
|
# Open irssi with my configurations
|
||||||
|
alias irssi='irssi --config=$XDG_CONFIG_HOME/irssi/config --home=$XDG_CONFIG_HOME/irssi'
|
||||||
|
# Configures wget to use correct wget-hsts file
|
||||||
|
alias wget='wget --hsts-file=$XDG_DATA_HOME/wget-hsts'
|
||||||
|
# Configures svn to use correct config directory
|
||||||
|
alias svn='svn --config-dir $XDG_CONFIG_HOME/subversion'
|
||||||
|
|
||||||
alias irssi="irssi --config=$XDG_CONFIG_HOME/irssi/config --home=$XDG_CONFIG_HOME/irssi"
|
# Laravel artisan shortcut
|
||||||
|
alias art='[ -f artisan ] && php artisan || php vendor/bin/artisan'
|
||||||
|
|
||||||
alias wget="wget --hsts-file=$XDG_DATA_HOME/wget-hsts"
|
# Laravel Sail shortcut
|
||||||
alias svn="svn --config-dir $XDG_CONFIG_HOME/subversion"
|
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
|
||||||
|
|
||||||
if [[ $(uname) == 'Darwin' ]]; then
|
if [[ $(uname) == 'Darwin' ]]; then
|
||||||
|
|
||||||
# Laravel Sail shortcut
|
|
||||||
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
|
|
||||||
|
|
||||||
# Flush Directory Service cache
|
# Flush Directory Service cache
|
||||||
alias flushdns="sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder"
|
alias flushdns="sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder"
|
||||||
|
|
||||||
@@ -99,65 +126,17 @@ if [[ $(uname) == 'Darwin' ]]; then
|
|||||||
# Also, clear Apple's System Logs to improve shell startup speed
|
# Also, clear Apple's System Logs to improve shell startup speed
|
||||||
alias emptytrash="sudo rm -rfv /Volumes/*/.Trashes; sudo rm -rfv ~/.Trash; sudo rm -rfv /private/var/log/asl/*.asl"
|
alias emptytrash="sudo rm -rfv /Volumes/*/.Trashes; sudo rm -rfv ~/.Trash; sudo rm -rfv /private/var/log/asl/*.asl"
|
||||||
|
|
||||||
x-set-php-aliases
|
# Using herd for php now, so this is not needed anymore
|
||||||
|
# x-set-php-aliases
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Alacritty preexec hook to update dynamic title
|
X_ALIAS_FILES=(
|
||||||
preexec()
|
"$HOME/.config/alias-secret"
|
||||||
{
|
"$HOME/.config/alias-$(hostname)"
|
||||||
print -Pn "\e]0;$1%~\a"
|
"$HOME/.config/alias-$(hostname)-secret"
|
||||||
}
|
)
|
||||||
|
for aliasFile in "${X_ALIAS_FILES[@]}"; do
|
||||||
# Update dotfiles
|
# shellcheck source=$HOME/.config/alias-secret
|
||||||
dfu()
|
[ -f "$aliasFile" ] && source "$aliasFile" && msgr ok "Sourced $aliasFile"
|
||||||
{
|
done
|
||||||
(
|
unset X_ALIAS_FILES
|
||||||
cd "$DOTFILES" && git pull --ff-only && ./install -q
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Weather in Tampere, or other city
|
|
||||||
weather()
|
|
||||||
{
|
|
||||||
# https://github.com/chubin/wttr.in#usage
|
|
||||||
local city="${1:-Tampere}"
|
|
||||||
curl "http://wttr.in/${city// /+}?2nFQM&lang=fi"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Docker
|
|
||||||
ssh-docker()
|
|
||||||
{
|
|
||||||
docker exec -it "$@" bash
|
|
||||||
}
|
|
||||||
|
|
||||||
# Rector project to php version 8.2 by default.
|
|
||||||
rector()
|
|
||||||
{
|
|
||||||
local php="${1:-82}"
|
|
||||||
docker run -v "$(pwd)":/project rector/rector:latest process \
|
|
||||||
"/project/$1" \
|
|
||||||
--set "php${php}" \
|
|
||||||
--autoload-file /project/vendor/autoload.php
|
|
||||||
}
|
|
||||||
|
|
||||||
# Commit everything
|
|
||||||
commit()
|
|
||||||
{
|
|
||||||
commitMessage="$*"
|
|
||||||
|
|
||||||
if [ "$commitMessage" = "" ]; then
|
|
||||||
commitMessage="Automated commit"
|
|
||||||
fi
|
|
||||||
|
|
||||||
git add .
|
|
||||||
eval "git commit -a -m '${commitMessage}'"
|
|
||||||
}
|
|
||||||
|
|
||||||
scheduler()
|
|
||||||
{
|
|
||||||
while :; do
|
|
||||||
php artisan schedule:run
|
|
||||||
echo "Sleeping 60 seconds..."
|
|
||||||
sleep 60
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ swap-main:
|
|||||||
# Move focus to the n-th screen in the list; e.g.,
|
# Move focus to the n-th screen in the list; e.g.,
|
||||||
# focus-screen-3 will move mouse focus to the 3rd screen.
|
# focus-screen-3 will move mouse focus to the 3rd screen.
|
||||||
# Note that the main window in the given screen will be focused.
|
# Note that the main window in the given screen will be focused.
|
||||||
#focus-screen-n:
|
# focus-screen-n:
|
||||||
# focus-screen-<screen-number>:
|
# focus-screen-<screen-number>:
|
||||||
# mod: mod1
|
# mod: mod1
|
||||||
# key: y
|
# key: y
|
||||||
@@ -197,12 +197,12 @@ swap-main:
|
|||||||
# key: i
|
# key: i
|
||||||
|
|
||||||
# Select tall layout
|
# Select tall layout
|
||||||
#select-tall-layout:
|
# select-tall-layout:
|
||||||
# mod: mod1
|
# mod: mod1
|
||||||
# key: a
|
# key: a
|
||||||
|
|
||||||
# Select wide layout
|
# Select wide layout
|
||||||
#select-wide-layout:
|
# select-wide-layout:
|
||||||
# mod: mod1
|
# mod: mod1
|
||||||
# key: s
|
# key: s
|
||||||
|
|
||||||
|
|||||||
@@ -6,21 +6,19 @@
|
|||||||
*
|
*
|
||||||
* @param {Object} windows - All windows in the current space.
|
* @param {Object} windows - All windows in the current space.
|
||||||
* @param {Object} screenFrame - The frame of the current screen.
|
* @param {Object} screenFrame - The frame of the current screen.
|
||||||
* @param {Object} state - The state of the current space.
|
|
||||||
* @param {Object} extendedFrames - The frames of the windows in the current space.
|
|
||||||
* @return {Object} - The frames for the windows in the current space.
|
* @return {Object} - The frames for the windows in the current space.
|
||||||
*/
|
*/
|
||||||
function layout() {
|
function layout() {
|
||||||
return {
|
return {
|
||||||
name: 'Almost Maximize',
|
name: 'Almost Maximize',
|
||||||
getFrameAssignments: (windows, screenFrame, state, extendedFrames) => {
|
getFrameAssignments: (windows, screenFrame) => {
|
||||||
const width = screenFrame.width * 0.95
|
const width = screenFrame.width * 0.95
|
||||||
const height = screenFrame.height * 0.95
|
const height = screenFrame.height * 0.95
|
||||||
const x = (screenFrame.width - width) / 2
|
const x = (screenFrame.width - width) / 2
|
||||||
const y = (screenFrame.height - height) / 2
|
const y = (screenFrame.height - height) / 2
|
||||||
const windowFrames = {}
|
const windowFrames = {}
|
||||||
|
|
||||||
windows.forEach(window => {
|
windows.forEach((window) => {
|
||||||
windowFrames[window.id] = {
|
windowFrames[window.id] = {
|
||||||
Y: screenFrame.y + y,
|
Y: screenFrame.y + y,
|
||||||
x: screenFrame.x + x,
|
x: screenFrame.x + x,
|
||||||
@@ -33,3 +31,5 @@ function layout() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.exports = layout()
|
||||||
|
|||||||
15
config/aqua/aqua.yaml
Normal file
15
config/aqua/aqua.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
# yaml-language-server: $schema=https://raw.githubusercontent.com/aquaproj/aqua/main/json-schema/aqua-yaml.json
|
||||||
|
# aqua - Declarative CLI Version Manager
|
||||||
|
# https://aquaproj.github.io/
|
||||||
|
# checksum:
|
||||||
|
# enabled: true
|
||||||
|
# require_checksum: true
|
||||||
|
# supported_envs:
|
||||||
|
# - all
|
||||||
|
registries:
|
||||||
|
- type: standard
|
||||||
|
ref: v4.346.0 # renovate: depName=aquaproj/aqua-registry
|
||||||
|
packages:
|
||||||
|
- name: cli/cli
|
||||||
|
version: 'v2.69.0'
|
||||||
5
config/asdf/asdfrc
Normal file
5
config/asdf/asdfrc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# See the docs for explanations: https://asdf-vm.com/manage/configuration.html
|
||||||
|
|
||||||
|
legacy_version_file=yes
|
||||||
|
use_release_candidates=no
|
||||||
|
concurrency=auto
|
||||||
27
config/asdf/cargo-packages
Normal file
27
config/asdf/cargo-packages
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// A cargo subcommand for checking and applying
|
||||||
|
// updates to installed executables
|
||||||
|
cargo-update
|
||||||
|
// Cargo cache management utility
|
||||||
|
cargo-cache
|
||||||
|
// An incremental parsing system for programming tools
|
||||||
|
tree-sitter-cli
|
||||||
|
// a subprocess caching utility
|
||||||
|
bkt
|
||||||
|
// a structural diff that understands syntax
|
||||||
|
difftastic
|
||||||
|
// A simple, fast and user-friendly alternative to 'find'
|
||||||
|
fd-find
|
||||||
|
// recursively searches directories for a
|
||||||
|
// regex pattern while respecting your gitignore
|
||||||
|
ripgrep
|
||||||
|
// A version manager for neovim
|
||||||
|
bob-nvim
|
||||||
|
// bottom, btm - A cross-platform graphical process/system monitor with
|
||||||
|
// a customizable interface and a multitude of features.
|
||||||
|
bottom
|
||||||
|
// A modern alternative to ls
|
||||||
|
eza
|
||||||
|
// Tmux Sessionizer: A tool for opening git repositories as tmux sessions
|
||||||
|
tmux-sessionizer
|
||||||
|
// zoxide, a smarter cd command
|
||||||
|
zoxide
|
||||||
1
config/asdf/gem-packages
Normal file
1
config/asdf/gem-packages
Normal file
@@ -0,0 +1 @@
|
|||||||
|
bundler
|
||||||
29
config/asdf/golang-packages
Normal file
29
config/asdf/golang-packages
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
// These are golang packages I use,
|
||||||
|
// so they should be available with all versions
|
||||||
|
|
||||||
|
// Git Profile allows you to switch between user profiles in git repos
|
||||||
|
github.com/dotzero/git-profile@latest
|
||||||
|
// An extensible command line tool or library to format yaml files.
|
||||||
|
github.com/google/yamlfmt/cmd/yamlfmt@latest
|
||||||
|
// Parsing HTML at the command line
|
||||||
|
github.com/ericchiang/pup@latest
|
||||||
|
// HTML to Markdown converter
|
||||||
|
github.com/suntong/html2md@latest
|
||||||
|
// cheat allows you to create and view interactive cheatsheets on the cli.
|
||||||
|
github.com/cheat/cheat/cmd/cheat@latest
|
||||||
|
// Render markdown on the CLI, with pizzazz! 💅
|
||||||
|
github.com/charmbracelet/glow@latest
|
||||||
|
// Static checker for GitHub Actions workflow files
|
||||||
|
github.com/rhysd/actionlint/cmd/actionlint@latest
|
||||||
|
// Cleans up your $HOME from those pesky dotfiles
|
||||||
|
github.com/doron-cohen/antidot@latest
|
||||||
|
// FZF is a general-purpose command-line fuzzy finder.
|
||||||
|
github.com/junegunn/fzf@latest
|
||||||
|
// gopls, the Go language server
|
||||||
|
golang.org/x/tools/gopls@latest
|
||||||
|
// A language for writing HTML user interfaces in Go.
|
||||||
|
github.com/a-h/templ/cmd/templ@latest
|
||||||
|
// A tool for glamorous shell scripts 🎀
|
||||||
|
github.com/charmbracelet/gum@latest
|
||||||
|
// A terminal session manager
|
||||||
|
github.com/joshmedeski/sesh/v2@latest
|
||||||
7
config/asdf/npm-packages
Normal file
7
config/asdf/npm-packages
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
blade-formatter
|
||||||
|
corepack
|
||||||
|
editorconfig-checker
|
||||||
|
github-release-notes
|
||||||
|
neovim
|
||||||
|
npm
|
||||||
|
stylelint-lsp
|
||||||
20
config/asdf/plugin-versions
Normal file
20
config/asdf/plugin-versions
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
|
||||||
|
age https://github.com/threkk/asdf-age.git 396bdf6
|
||||||
|
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git b5862c1
|
||||||
|
direnv https://github.com/asdf-community/asdf-direnv.git 6ff3dbe
|
||||||
|
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
|
||||||
|
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
|
||||||
|
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
|
||||||
|
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
|
||||||
|
golang https://github.com/asdf-community/asdf-golang.git e2527a3
|
||||||
|
hadolint https://github.com/devlincashman/asdf-hadolint.git c8eb88b
|
||||||
|
kubectl https://github.com/asdf-community/asdf-kubectl.git 2fb3b57
|
||||||
|
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
|
||||||
|
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
|
||||||
|
rust https://github.com/code-lever/asdf-rust.git 95acf4f
|
||||||
|
shellcheck https://github.com/luizm/asdf-shellcheck.git 66200ff
|
||||||
|
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
|
||||||
|
terragrunt https://github.com/ohmer/asdf-terragrunt.git 29f2935
|
||||||
|
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
|
||||||
|
yamllint https://github.com/ericcornelissen/asdf-yamllint.git e4cfb17
|
||||||
|
yq https://github.com/sudermanjr/asdf-yq.git 772992f
|
||||||
4
config/asdf/python-packages
Normal file
4
config/asdf/python-packages
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
ansible
|
||||||
|
pipenv
|
||||||
|
neovim
|
||||||
|
libtmux
|
||||||
71
config/cheat/cheatsheets/personal/printf
Normal file
71
config/cheat/cheatsheets/personal/printf
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
tags: [printf, bash, zsh]
|
||||||
|
---
|
||||||
|
|
||||||
|
# printf
|
||||||
|
|
||||||
|
The printf command accepts the following syntax:
|
||||||
|
|
||||||
|
`printf [-v var] [format specifiers] [arguments]`
|
||||||
|
|
||||||
|
- [-v var]
|
||||||
|
The optional -v flag assigns the output to the [var]
|
||||||
|
variable instead of printing it in standard output.
|
||||||
|
|
||||||
|
- [format specifiers]
|
||||||
|
Format specifiers are strings that determine the methods of
|
||||||
|
formatting specifiers. The following section includes a
|
||||||
|
list of accepted specifiers.
|
||||||
|
|
||||||
|
- [arguments]
|
||||||
|
Arguments can be any value or variable, and the [format specifiers]
|
||||||
|
point to the [arguments]. If there are more arguments than format
|
||||||
|
specifiers, the format string is reused until it interprets
|
||||||
|
the last argument.
|
||||||
|
|
||||||
|
If there are fewer format specifiers than arguments, number formats
|
||||||
|
are set to zero (0), while string formats are set to null (empty).
|
||||||
|
|
||||||
|
## printf Specifiers
|
||||||
|
|
||||||
|
Format Description
|
||||||
|
------ -----------
|
||||||
|
%c Treat the arguments as a single character.
|
||||||
|
%d Treat the input as a decimal (integer) number (base 10).
|
||||||
|
%e Treats the input as an exponential floating-point number.
|
||||||
|
%f Treat the input as a floating-point number.
|
||||||
|
%i Treat the input as an integer number (base 10).
|
||||||
|
%o Treats the input as an octal number (base 8).
|
||||||
|
%s Treat the input as a string of characters.
|
||||||
|
%u Treat the input as an unsigned decimal (integer) number.
|
||||||
|
%x Treats the input as a hexadecimal number (base 16).
|
||||||
|
%% Print a percent sign.
|
||||||
|
%Wd Print the W integer X digits wide.
|
||||||
|
%(format)T Outputs a date-time string resulting from using format as a
|
||||||
|
format string for strftime. The corresponding argument can
|
||||||
|
be the number of seconds since Epoch (January 1, 1970, 00:00),
|
||||||
|
-1 (the current time), or -2 (shell startup time).
|
||||||
|
Not specifying an argument uses the current time as the default value.
|
||||||
|
\% Print a percent sign.
|
||||||
|
\n Prints a newline character.
|
||||||
|
\t Print a tab character.
|
||||||
|
|
||||||
|
Some format specifiers accept format modifiers that modify their actions.
|
||||||
|
Enter the modifiers between the % character and the character that
|
||||||
|
specifies the format.
|
||||||
|
|
||||||
|
Available format modifiers are:
|
||||||
|
|
||||||
|
<N>. Enter a number that specifies a minimum field width.
|
||||||
|
If the output text is shorter, it's padded with spaces.
|
||||||
|
If the text is longer, the field expands.
|
||||||
|
. (dot). When used with a field width modifier, the field doesn't
|
||||||
|
expand for longer text. Instead, the text is truncated.
|
||||||
|
-. Left-aligns the printed text. The default alignment is right.
|
||||||
|
0. Pads the numbers with zeros instead of spaces.
|
||||||
|
<space>. Pads a positive number with a space, and a negative
|
||||||
|
number with a minus (-).
|
||||||
|
+. Prints all numbers signed (+ for positive, - for negative).
|
||||||
|
'. For decimal conversions, applies the thousands grouping
|
||||||
|
separator to the integer portion of the output according
|
||||||
|
to the current LC_NUMERIC file.
|
||||||
@@ -3,11 +3,11 @@
|
|||||||
# editor: $EDITOR
|
# editor: $EDITOR
|
||||||
|
|
||||||
# Should 'cheat' always colorize output?
|
# Should 'cheat' always colorize output?
|
||||||
colorize: true
|
colorize: false
|
||||||
# Which 'chroma' colorscheme should be applied to the output?
|
# Which 'chroma' colorscheme should be applied to the output?
|
||||||
# Options are available here:
|
# Options are available here:
|
||||||
# https://github.com/alecthomas/chroma/tree/master/styles
|
# https://github.com/alecthomas/chroma/tree/master/styles
|
||||||
style: 'catppuccin'
|
# style: 'tokyonight-day'
|
||||||
# Which 'chroma' "formatter" should be applied?
|
# Which 'chroma' "formatter" should be applied?
|
||||||
# One of: "terminal", "terminal256", "terminal16m"
|
# One of: "terminal", "terminal256", "terminal16m"
|
||||||
formatter: terminal256
|
formatter: terminal256
|
||||||
@@ -61,12 +61,6 @@ cheatpaths:
|
|||||||
path: ~/.config/cheat/cheatsheets/community
|
path: ~/.config/cheat/cheatsheets/community
|
||||||
tags: [community]
|
tags: [community]
|
||||||
readonly: true
|
readonly: true
|
||||||
# If you have personalized cheatsheets, list them last. They will take
|
|
||||||
# precedence over the more global cheatsheets.
|
|
||||||
- name: personal
|
|
||||||
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
|
||||||
tags: [personal]
|
|
||||||
readonly: false
|
|
||||||
- name: pure-bash-bible
|
- name: pure-bash-bible
|
||||||
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
|
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
|
||||||
tags: [pure-bash-bible]
|
tags: [pure-bash-bible]
|
||||||
@@ -75,6 +69,12 @@ cheatpaths:
|
|||||||
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
|
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
|
||||||
tags: [tldr]
|
tags: [tldr]
|
||||||
readonly: true
|
readonly: true
|
||||||
|
# If you have personalized cheatsheets, list them last. They will take
|
||||||
|
# precedence over the more global cheatsheets.
|
||||||
|
- name: personal
|
||||||
|
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
||||||
|
tags: [personal]
|
||||||
|
readonly: false
|
||||||
# While it requires no configuration here, it's also worth noting that
|
# While it requires no configuration here, it's also worth noting that
|
||||||
# cheat will automatically append directories named '.cheat' within the
|
# cheat will automatically append directories named '.cheat' within the
|
||||||
# current working directory to the 'cheatpath'. This can be very useful if
|
# current working directory to the 'cheatpath'. This can be very useful if
|
||||||
|
|||||||
@@ -56,11 +56,11 @@ TERM xterm*
|
|||||||
RESET 0 # reset to "normal" color
|
RESET 0 # reset to "normal" color
|
||||||
DIR 01;34 # directory
|
DIR 01;34 # directory
|
||||||
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
|
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
|
||||||
# numerical value, the color is as for the file pointed to.)
|
# numerical value, the color is as for the file pointed to.)
|
||||||
MULTIHARDLINK 00 # regular file with more than one link
|
MULTIHARDLINK 00 # regular file with more than one link
|
||||||
FIFO 40;33 # pipe
|
FIFO 40;33 # pipe
|
||||||
SOCK 01;35 # socket
|
SOCK 01;35 # socket
|
||||||
DOOR 01;35 # door
|
DOOR 01;35 # door
|
||||||
BLK 40;33;01 # block device driver
|
BLK 40;33;01 # block device driver
|
||||||
CHR 40;33;01 # character device driver
|
CHR 40;33;01 # character device driver
|
||||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
||||||
|
|||||||
12
config/direnv/direnv.toml
Normal file
12
config/direnv/direnv.toml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[global]
|
||||||
|
disable_stdin = false
|
||||||
|
load_dotenv = true
|
||||||
|
hide_env_diff = false
|
||||||
|
|
||||||
|
[whitelist]
|
||||||
|
prefix = [
|
||||||
|
"~/Code/"
|
||||||
|
]
|
||||||
|
exact = [
|
||||||
|
"~/.dotfiles/.envrc"
|
||||||
|
]
|
||||||
6
config/direnv/lib/use_asdf.sh
Normal file
6
config/direnv/lib/use_asdf.sh
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
### Do not edit. This was autogenerated by 'asdf direnv setup' ###
|
||||||
|
# shellcheck shell=bash
|
||||||
|
use_asdf()
|
||||||
|
{
|
||||||
|
source_env "$(asdf direnv envrc "$@")"
|
||||||
|
}
|
||||||
440
config/exports
440
config/exports
@@ -2,48 +2,95 @@
|
|||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# vim: filetype=zsh
|
# vim: filetype=zsh
|
||||||
|
|
||||||
|
# Set XDG directories if not already set
|
||||||
|
# https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
|
[ -z "$XDG_CONFIG_HOME" ] && export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
[ -z "$XDG_DATA_HOME" ] && export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
[ -z "$XDG_CACHE_HOME" ] && export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
|
[ -z "$XDG_STATE_HOME" ] && export XDG_STATE_HOME="$HOME/.local/state"
|
||||||
|
[ -z "$XDG_BIN_HOME" ] && export XDG_BIN_HOME="$HOME/.local/bin"
|
||||||
|
[ -z "$XDG_RUNTIME_DIR" ] && export XDG_RUNTIME_DIR="$HOME/.local/run"
|
||||||
|
|
||||||
|
# if DOTFILES is not set, set it to the default location
|
||||||
|
[ -z "$DOTFILES" ] && export DOTFILES="$HOME/.dotfiles"
|
||||||
|
|
||||||
|
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$XDG_DATA_HOME/bob/nvim-bin:$XDG_DATA_HOME/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
|
||||||
|
|
||||||
|
if ! command -v msg &> /dev/null; then
|
||||||
|
# Function to print messages if VERBOSE is enabled
|
||||||
|
# $1 - message (string)
|
||||||
|
msg()
|
||||||
|
{
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr msg "-> $1"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
# Cache commands using bkt if installed
|
# Cache commands using bkt if installed
|
||||||
if command -v bkt >&/dev/null; then
|
if command -v bkt &> /dev/null; then
|
||||||
bkt()
|
bkt()
|
||||||
{
|
{
|
||||||
command bkt --cache-dir="$XDG_CACHE_HOME/bkt" "$@"
|
command bkt --cache-dir="$XDG_CACHE_HOME/bkt" "$@"
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
# If bkt isn't installed skip its arguments and just execute directly.
|
# If bkt isn't installed, skip its arguments and just execute directly.
|
||||||
# Optionally write a msg to stderr suggesting users install bkt.
|
# Optionally write a msg to stderr suggesting users install bkt.
|
||||||
bkt()
|
bkt()
|
||||||
{
|
{
|
||||||
while [[ "$1" == --* ]]; do shift; done
|
while [[ $1 == --* ]]; do shift; done
|
||||||
"$@"
|
"$@"
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# shorthand for checking if the system has the bin in path,
|
# Shorthand for checking if the system has the bin in path,
|
||||||
# this version does not use caching
|
# this version does not use caching.
|
||||||
# usage: have_command php && php -v
|
# Usage: have_command php && php -v
|
||||||
have_command()
|
have_command()
|
||||||
{
|
{
|
||||||
command -v "$1" >&/dev/null
|
[ -z "$1" ] && {
|
||||||
|
echo "Usage: have_command <command>"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
command -v "$1" &> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# shorthand for checking if the system has the bin in path,
|
# Shorthand for checking if the system has the bin in path,
|
||||||
# this version uses caching
|
# this version uses caching.
|
||||||
# usage: have php && php -v
|
# Usage: have php && php -v
|
||||||
have()
|
have()
|
||||||
{
|
{
|
||||||
bkt -- which "$1" >&/dev/null
|
bkt -- which "$1" &> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to run dark-notify and change alacritty theme
|
||||||
|
# It uses flock to prevent running multiple instances.
|
||||||
|
# Install flock with `brew install flock` on macOS.
|
||||||
|
darknotify_alacritty()
|
||||||
|
{
|
||||||
|
x-have flock && [[ -f /tmp/dark-notify-alacritty.lock ]] && return
|
||||||
|
x-have dark-notify && {
|
||||||
|
# subprocess is used to prevent the command from showing it was backgrounded
|
||||||
|
(
|
||||||
|
flock /tmp/dark-notify-alacritty.lock dark-notify \
|
||||||
|
-c "$HOME/.dotfiles/local/bin/x-change-alacritty-theme" &
|
||||||
|
) &> /dev/null
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
# darknotify_alacritty
|
||||||
|
|
||||||
|
# Function to list installed Homebrew packages using bkt caching
|
||||||
brew_installed()
|
brew_installed()
|
||||||
{
|
{
|
||||||
bkt -- brew list
|
bkt -- brew list
|
||||||
}
|
}
|
||||||
|
|
||||||
# shorthand for checking if brew package is installed
|
# Shorthand for checking if a Homebrew package is installed
|
||||||
# usage: have_brew php && php -v
|
# Usage: have_brew php && php -v
|
||||||
have_brew()
|
have_brew()
|
||||||
{
|
{
|
||||||
! x-have brew && return 125
|
! have brew && return 125
|
||||||
|
|
||||||
if bkt -- brew list "$1" &> /dev/null; then
|
if bkt -- brew list "$1" &> /dev/null; then
|
||||||
return 0
|
return 0
|
||||||
@@ -52,5 +99,366 @@ have_brew()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
source "$DOTFILES/config/exports-shell"
|
# Alacritty preexec hook to update dynamic title
|
||||||
source "$DOTFILES/config/exports-apps"
|
preexec()
|
||||||
|
{
|
||||||
|
print -n -P "\e]0;$1%~\a"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update dotfiles
|
||||||
|
dfu()
|
||||||
|
{
|
||||||
|
(
|
||||||
|
cd "$DOTFILES" && git rebase --ff --autostash && ./install
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Weather in Tampere, or other city
|
||||||
|
weather()
|
||||||
|
{
|
||||||
|
# https://github.com/chubin/wttr.in#usage
|
||||||
|
local city="${1:-Tampere}"
|
||||||
|
curl "http://wttr.in/${city// /+}?2nFQM&lang=fi"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
ssh_docker()
|
||||||
|
{
|
||||||
|
docker exec -it "$@" bash
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rector project to php version 8.2 by default.
|
||||||
|
rector()
|
||||||
|
{
|
||||||
|
local php="${1:-82}"
|
||||||
|
docker run -v "$(pwd)":/project rector/rector:latest process \
|
||||||
|
"/project/" \
|
||||||
|
--set "php${php}" \
|
||||||
|
--autoload-file /project/vendor/autoload.php
|
||||||
|
}
|
||||||
|
|
||||||
|
# Commit everything
|
||||||
|
commit()
|
||||||
|
{
|
||||||
|
local commitMessage="$*"
|
||||||
|
|
||||||
|
if [ -z "$commitMessage" ]; then
|
||||||
|
commitMessage="Automated commit"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -a -m "$commitMessage"
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduler()
|
||||||
|
{
|
||||||
|
while :; do
|
||||||
|
php artisan schedule:run
|
||||||
|
echo "Sleeping 60 seconds..."
|
||||||
|
sleep 60
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run command silently
|
||||||
|
# Usage: silent uptime
|
||||||
|
silent()
|
||||||
|
{
|
||||||
|
"$@" >&/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if a file contains non-ascii characters
|
||||||
|
nonascii()
|
||||||
|
{
|
||||||
|
LC_ALL=C grep -n '[^[:print:][:space:]]' "${@}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove non-ascii characters from string
|
||||||
|
# Usage: strip_nonascii "string"
|
||||||
|
strip_nonascii()
|
||||||
|
{
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
echo "$1" | LC_ALL=C sed 's/[^[:print:][:space:]]//g'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Slugify a string
|
||||||
|
# Usage: slugify "string"
|
||||||
|
slugify()
|
||||||
|
{
|
||||||
|
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr '[:upper:]' '[:lower:]'
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://stackoverflow.com/a/85932
|
||||||
|
fn_exists()
|
||||||
|
{
|
||||||
|
declare -f -F "$1" > /dev/null
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# Creates a random string
|
||||||
|
rnd()
|
||||||
|
{
|
||||||
|
echo $RANDOM | md5sum | head -c 20
|
||||||
|
}
|
||||||
|
|
||||||
|
# return sha256sum for file
|
||||||
|
# $1 - filename (string)
|
||||||
|
get_sha256sum()
|
||||||
|
{
|
||||||
|
sha256sum "$1" | head -c 64
|
||||||
|
}
|
||||||
|
|
||||||
|
# Replaceable file
|
||||||
|
#
|
||||||
|
# $1 - filename (string)
|
||||||
|
# $2 - filename (string)
|
||||||
|
#
|
||||||
|
# Returns 1 when replaceable, 0 when not replaceable.
|
||||||
|
replaceable()
|
||||||
|
{
|
||||||
|
FILE1="$1"
|
||||||
|
FILE2="$2"
|
||||||
|
|
||||||
|
[[ ! -r $FILE1 ]] && {
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr err "File 1 ($FILE1) does not exist"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
[[ ! -r $FILE2 ]] && {
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr err "File 2 ($FILE2) does not exist, replaceable"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE1_HASH=$(get_sha256sum "$FILE1")
|
||||||
|
FILE2_HASH=$(get_sha256sum "$FILE2")
|
||||||
|
|
||||||
|
[[ $FILE1_HASH == "" ]] && {
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr err "Could not get hash for file 1 ($FILE1)"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
[[ $FILE2_HASH == "" ]] && {
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr err "Could not get hash for file 2 ($FILE2), replaceable"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $FILE1_HASH == "$FILE2_HASH" ]] && {
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr ok "Files match, not replaceable: $FILE1"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ $VERBOSE -eq 1 ]] && msgr warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
export COMPLETION_WAITING_DOTS=true
|
||||||
|
|
||||||
|
# Bash completion file location
|
||||||
|
export BASH_COMPLETION_USER_FILE="${XDG_CONFIG_HOME}/bash-completion/bash_completion"
|
||||||
|
|
||||||
|
# History env variables
|
||||||
|
export HIST_STAMPS="yyyy-mm-dd"
|
||||||
|
export HISTFILE="${XDG_STATE_HOME}/zsh/history"
|
||||||
|
# Larger bash history (allow 32³ entries; default is 500)
|
||||||
|
export HISTSIZE=32768
|
||||||
|
export HISTFILESIZE=$HISTSIZE
|
||||||
|
# don't put duplicate lines or lines starting with space in the history.
|
||||||
|
# See bash(1) for more options
|
||||||
|
export HISTCONTROL=ignoreboth
|
||||||
|
# Make some commands not show up in history
|
||||||
|
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"
|
||||||
|
# And include the parameter for ZSH
|
||||||
|
export HISTORY_IGNORE="(ls|cd|cd -|pwd|exit|date|* --help)"
|
||||||
|
|
||||||
|
# Less history location
|
||||||
|
export LESSHISTFILE="$XDG_STATE_HOME"/less/history
|
||||||
|
|
||||||
|
# Highlight section titles in manual pages
|
||||||
|
# export LESS_TERMCAP_md="$ORANGE"
|
||||||
|
|
||||||
|
# zsh autoloaded terminfo
|
||||||
|
# export TERMINFO="${XDG_DATA_HOME}/terminfo"
|
||||||
|
# export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
|
||||||
|
|
||||||
|
# Don't clear the screen after quitting a manual page
|
||||||
|
export MANPAGER="less -X"
|
||||||
|
|
||||||
|
# Always enable colored `grep` output
|
||||||
|
export GREP_OPTIONS="--color=auto"
|
||||||
|
|
||||||
|
# check the window size after each command and, if necessary,
|
||||||
|
# update the values of LINES and COLUMNS.
|
||||||
|
hash shopt 2> /dev/null && shopt -s checkwinsize
|
||||||
|
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
export SHORT_HOST=$(hostname -s)
|
||||||
|
|
||||||
|
# Antidote configuration
|
||||||
|
# https://getantidote.github.io/
|
||||||
|
msg "Setting up Antidote configuration"
|
||||||
|
export ANTIDOTE_DIR="$DOTFILES/tools/antidote"
|
||||||
|
export ANTIDOTE_HOME="$XDG_CACHE_HOME/antidote"
|
||||||
|
export ANTIDOTE_PLUGINS="$XDG_CONFIG_HOME/zsh/antidote_plugins"
|
||||||
|
|
||||||
|
# Ansible configuration
|
||||||
|
# https://docs.ansible.com/ansible/latest/reference_appendices/config.html
|
||||||
|
msg "Setting up Ansible configuration"
|
||||||
|
export ANSIBLE_HOME="$XDG_CONFIG_HOME/ansible"
|
||||||
|
export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible.cfg"
|
||||||
|
export ANSIBLE_GALAXY_CACHE_DIR="$XDG_CACHE_HOME/ansible/galaxy_cache"
|
||||||
|
x-dc "$ANSIBLE_HOME"
|
||||||
|
x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
|
||||||
|
|
||||||
|
# aws
|
||||||
|
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
|
||||||
|
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
|
||||||
|
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
|
||||||
|
msg "Setting up AWS configuration"
|
||||||
|
export AWS_CONFIG_FILE="${XDG_STATE_HOME}/aws/config"
|
||||||
|
export AWS_SHARED_CREDENTIALS_FILE="${XDG_STATE_HOME}/aws/credentials"
|
||||||
|
export AWS_DATA_PATH="${XDG_DATA_HOME}/aws"
|
||||||
|
export AWS_DEFAULT_REGION="eu-west-1"
|
||||||
|
export AWS_DEFAULT_OUTPUT="table"
|
||||||
|
export AWS_CONFIGURE_KEYS=true
|
||||||
|
export AWS_CONFIGURE_REGION=true
|
||||||
|
export AWS_CONFIGURE_OUTPUT=true
|
||||||
|
export AWS_CONFIGURE_PROFILE=true
|
||||||
|
export AWS_CONFIGURE_PROMPT=true
|
||||||
|
export AWS_CONFIGURE_PROMPT_DEFAULT="default"
|
||||||
|
|
||||||
|
# bob manages nvim versions
|
||||||
|
msg "Setting up bob configuration"
|
||||||
|
x-path-prepend "$XDG_DATA_HOME/bob/nvim-bin"
|
||||||
|
|
||||||
|
# bkt (shell command caching tool) configuration
|
||||||
|
msg "Setting up bkt configuration"
|
||||||
|
export BKT_TTL=1m
|
||||||
|
|
||||||
|
# brew, https://docs.brew.sh/Manpage
|
||||||
|
msg "Setting up Homebrew configuration"
|
||||||
|
export HOMEBREW_NO_ANALYTICS=true
|
||||||
|
export HOMEBREW_NO_ENV_HINTS=true
|
||||||
|
export HOMEBREW_BUNDLE_MAS_SKIP=true
|
||||||
|
export HOMEBREW_BUNDLE_FILE="$XDG_CONFIG_HOME/homebrew/Brewfile"
|
||||||
|
x-have brew && {
|
||||||
|
eval "$(brew shellenv)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# composer, https://getcomposer.org/
|
||||||
|
msg "Setting up Composer configuration"
|
||||||
|
export COMPOSER_HOME="$XDG_STATE_HOME/composer"
|
||||||
|
export COMPOSER_BIN="$COMPOSER_HOME/vendor/bin"
|
||||||
|
export PATH="$COMPOSER_BIN:$PATH"
|
||||||
|
|
||||||
|
# direnv, https://direnv.net/
|
||||||
|
# https://direnv.net/docs/hook.html
|
||||||
|
# Set the hook to show the direnv message in a different color
|
||||||
|
# export DIRENV_LOG_FORMAT=$'\033[2mdirenv: %s\033[0m'
|
||||||
|
export DIRENV_LOG_FORMAT=
|
||||||
|
|
||||||
|
# docker, https://docs.docker.com/engine/reference/commandline/cli/
|
||||||
|
msg "Setting up Docker configuration"
|
||||||
|
export DOCKER_CONFIG="${XDG_CONFIG_HOME}/docker"
|
||||||
|
x-dc "$DOCKER_CONFIG"
|
||||||
|
# Docker: Disable snyk ad
|
||||||
|
export DOCKER_SCAN_SUGGEST=false
|
||||||
|
|
||||||
|
# fzf
|
||||||
|
export FZF_BASE="${XDG_CONFIG_HOME}/fzf"
|
||||||
|
export FZF_DEFAULT_OPTS='--height 40% --tmux bottom,40% --layout reverse --border top'
|
||||||
|
|
||||||
|
# GnuPG
|
||||||
|
# https://gnupg.org/documentation/manuals/gnupg/Invoking-GPG.html
|
||||||
|
msg "Setting up GnuPG configuration"
|
||||||
|
export GNUPGHOME="${XDG_DATA_HOME}/gnupg"
|
||||||
|
|
||||||
|
# Go
|
||||||
|
# https://golang.org/doc/code.html
|
||||||
|
msg "Setting up Go configuration"
|
||||||
|
export GOPATH="$XDG_DATA_HOME/go"
|
||||||
|
export GOBIN="$XDG_BIN_HOME"
|
||||||
|
|
||||||
|
# Lando
|
||||||
|
export PATH="$HOME/.lando/bin${PATH+:$PATH}" #landopath
|
||||||
|
|
||||||
|
# NPM: Add npm packages to path
|
||||||
|
msg "Setting up NPM configuration"
|
||||||
|
x-have node && {
|
||||||
|
NVM_NODE_BIN_DIR="$(dirname "$(which node)")"
|
||||||
|
export PATH="$NVM_NODE_BIN_DIR:$PATH"
|
||||||
|
}
|
||||||
|
|
||||||
|
# oh-my-posh (omp) configuration
|
||||||
|
msg "Setting up oh-my-posh configuration"
|
||||||
|
export OHMYPOSH_CFG="$DOTFILES/config/omp/own.toml"
|
||||||
|
|
||||||
|
# op (1Password cli) is present
|
||||||
|
msg "Setting up 1Password CLI configuration"
|
||||||
|
export OP_CACHE="$XDG_STATE_HOME/1password"
|
||||||
|
|
||||||
|
# Python
|
||||||
|
#
|
||||||
|
# pyenv, python environments
|
||||||
|
msg "Setting up Python configuration"
|
||||||
|
export WORKON_HOME="$XDG_DATA_HOME/virtualenvs"
|
||||||
|
export PYENV_ROOT="$XDG_STATE_HOME/pyenv"
|
||||||
|
## for MichaelAquilina/zsh-autoswitch-virtualenv
|
||||||
|
export AUTOSWITCH_VIRTUAL_ENV_DIR="$WORKON_HOME"
|
||||||
|
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
|
||||||
|
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
|
||||||
|
x-have pyenv && eval "$(pyenv init -)"
|
||||||
|
|
||||||
|
# Rust / cargo
|
||||||
|
msg "Setting up Rust/Cargo configuration"
|
||||||
|
export RUST_WITHOUT=rust-docs
|
||||||
|
|
||||||
|
# screen
|
||||||
|
# https://www.gnu.org/software/screen/manual/screen.html
|
||||||
|
msg "Setting up screen configuration"
|
||||||
|
export SCREENRC="$XDG_CONFIG_HOME/misc/screenrc"
|
||||||
|
|
||||||
|
# sonarlint
|
||||||
|
# https://www.sonarlint.org/
|
||||||
|
msg "Setting up Sonarlint configuration"
|
||||||
|
export SONARLINT_USER_HOME="$XDG_DATA_HOME/sonarlint"
|
||||||
|
|
||||||
|
# terraform
|
||||||
|
# https://www.terraform.io/docs/cli/config/config-file.html
|
||||||
|
# https://www.terraform.io/docs/cli/config/environment-variables.html
|
||||||
|
msg "Setting up Terraform configuration"
|
||||||
|
export TF_DATA_DIR="$XDG_STATE_HOME/terraform"
|
||||||
|
export TF_CLI_CONFIG_FILE="$XDG_CONFIG_HOME/terraform/terraformrc"
|
||||||
|
export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
|
||||||
|
|
||||||
|
# tmux
|
||||||
|
# https://tmux.github.io/
|
||||||
|
msg "Setting up tmux configuration"
|
||||||
|
export TMUX_TMPDIR="$XDG_STATE_HOME/tmux"
|
||||||
|
export TMUX_CONF_DIR="$XDG_CONFIG_HOME/tmux"
|
||||||
|
export TMUX_PLUGINS="$TMUX_CONF_DIR/plugins"
|
||||||
|
export TMUX_CONF="$TMUX_CONF_DIR/tmux.conf"
|
||||||
|
## These settings are for zsh-tmux
|
||||||
|
export ZSH_TMUX_AUTOSTART=true
|
||||||
|
export ZSH_TMUX_CONFIG="$TMUX_CONF"
|
||||||
|
export ZSH_TMUX_UNICODE=true
|
||||||
|
export ZSH_TMUX_AUTOQUIT=false
|
||||||
|
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
|
||||||
|
|
||||||
|
# tms, https://github.com/jrmoulton/tmux-sessionizer
|
||||||
|
export TMS_CONFIG_FILE="${XDG_CONFIG_HOME}/tms/config.toml"
|
||||||
|
|
||||||
|
# wakatime, https://github.com/wakatime/wakatime-cli
|
||||||
|
msg "Setting up Wakatime configuration"
|
||||||
|
export WAKATIME_HOME="$XDG_STATE_HOME/wakatime"
|
||||||
|
x-dc "$WAKATIME_HOME"
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
msg "Setting up miscellaneous configuration"
|
||||||
|
export ZSHZ_DATA="$XDG_STATE_HOME/z"
|
||||||
|
export CHEAT_USE_FZF=true
|
||||||
|
export SQLITE_HISTORY="${XDG_CACHE_HOME}/sqlite_history"
|
||||||
|
|
||||||
|
[ -f "$XDG_CONFIG_HOME/exports-secret" ] && source "$XDG_CONFIG_HOME/exports-secret"
|
||||||
|
[ -f "$XDG_CONFIG_HOME/exports-local" ] && source "$XDG_CONFIG_HOME/exports-local"
|
||||||
|
# shellcheck source=./exports-lakka
|
||||||
|
[ -f "$XDG_CONFIG_HOME/exports-$(hostname)" ] && source "$XDG_CONFIG_HOME/exports-$(hostname)"
|
||||||
|
# shellcheck source=./exports-lakka-secret
|
||||||
|
[ -f "$XDG_CONFIG_HOME/exports-$(hostname)-secret" ] && source "$XDG_CONFIG_HOME/exports-$(hostname)-secret"
|
||||||
|
|||||||
@@ -1,121 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# shellcheck shell=bash
|
|
||||||
# shellcheck enable=external-sources
|
|
||||||
# shellcheck disable=1091,2139
|
|
||||||
# vim: filetype=bash
|
|
||||||
|
|
||||||
# Antigen configuration
|
|
||||||
# https://github.com/zsh-users/antigen/wiki/Configuration
|
|
||||||
export ADOTDIR="$XDG_DATA_HOME/antigen"
|
|
||||||
export ANTIGEN_CACHE="$XDG_CACHE_HOME/antigen"
|
|
||||||
export ANTIGEN_SYSTEM_RECEIPT_F=".local/share/antigen/antigen_system_lastupdate"
|
|
||||||
export ANTIGEN_PLUGIN_RECEIPT_F=".local/share/antigen/antigen_plugin_lastupdate"
|
|
||||||
|
|
||||||
# Ansible configuration
|
|
||||||
# https://docs.ansible.com/ansible/latest/reference_appendices/config.html
|
|
||||||
export ANSIBLE_HOME="$XDG_CONFIG_HOME/ansible"
|
|
||||||
export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible.cfg"
|
|
||||||
export ANSIBLE_GALAXY_CACHE_DIR="$XDG_CACHE_HOME/ansible/galaxy_cache"
|
|
||||||
x-dc "$ANSIBLE_HOME"
|
|
||||||
x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
|
|
||||||
|
|
||||||
export ANDROID_HOME="$XDG_DATA_HOME/android"
|
|
||||||
|
|
||||||
# bob manages nvim versions
|
|
||||||
export PATH="$XDG_DATA_HOME/bob/nvim-bin:$PATH"
|
|
||||||
|
|
||||||
# bkt (shell command caching tool) configuration
|
|
||||||
export BKT_TTL=1m
|
|
||||||
|
|
||||||
# brew, https://docs.brew.sh/Manpage
|
|
||||||
export HOMEBREW_NO_ENV_HINTS=true
|
|
||||||
|
|
||||||
# composer, https://getcomposer.org/
|
|
||||||
export COMPOSER_HOME="$XDG_STATE_HOME/composer"
|
|
||||||
export COMPOSER_BIN="$COMPOSER_HOME/vendor/bin"
|
|
||||||
export PATH="$COMPOSER_BIN:$PATH"
|
|
||||||
|
|
||||||
# docker, https://docs.docker.com/engine/reference/commandline/cli/
|
|
||||||
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
|
|
||||||
x-dc "$DOCKER_CONFIG"
|
|
||||||
# Docker: Disable snyk ad
|
|
||||||
export DOCKER_SCAN_SUGGEST=false
|
|
||||||
|
|
||||||
# ffmpeg
|
|
||||||
export FFMPEG_DATADIR="$XDG_CONFIG_HOME/ffmpeg"
|
|
||||||
x-have ffmpeg && x-dc "$FFMPEG_DATADIR"
|
|
||||||
|
|
||||||
# GnuPG
|
|
||||||
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
|
|
||||||
|
|
||||||
# Go
|
|
||||||
export GOPATH="$XDG_DATA_HOME/go"
|
|
||||||
export GOBIN="$XDG_BIN_HOME"
|
|
||||||
|
|
||||||
# nb, https://xwmx.github.io/nb/
|
|
||||||
export NBRC_PATH="$XDG_CONFIG_HOME/nbrc"
|
|
||||||
export NB_DIR="$XDG_STATE_HOME/nb"
|
|
||||||
|
|
||||||
# NPM: Add npm packages to path
|
|
||||||
x-have node && {
|
|
||||||
NVM_NODE_BIN_DIR="$(dirname "$(which node)")"
|
|
||||||
export PATH="$NVM_NODE_BIN_DIR:$PATH"
|
|
||||||
}
|
|
||||||
|
|
||||||
# op (1Password cli) is present
|
|
||||||
export OP_CACHE="$XDG_STATE_HOME/1password"
|
|
||||||
|
|
||||||
# Python
|
|
||||||
#
|
|
||||||
# pyenv, python environments
|
|
||||||
export WORKON_HOME="$XDG_DATA_HOME/virtualenvs"
|
|
||||||
export PYENV_ROOT="$XDG_STATE_HOME/pyenv"
|
|
||||||
x-have pyenv && {
|
|
||||||
export PATH="$PYENV_ROOT/shims:$PATH"
|
|
||||||
eval "$(pyenv init -)"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ruby
|
|
||||||
#
|
|
||||||
# including: bundler, rbenv
|
|
||||||
export GEM_HOME="${XDG_DATA_HOME}"/gem
|
|
||||||
export GEM_SPEC_CACHE="${XDG_CACHE_HOME}"/gem
|
|
||||||
export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle
|
|
||||||
export BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle
|
|
||||||
export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle
|
|
||||||
export RBENV_ROOT="$XDG_STATE_HOME/rbenv"
|
|
||||||
x-dc "$RBENV_ROOT"
|
|
||||||
x-have gem && export PATH="${GEM_HOME}/bin:$PATH"
|
|
||||||
|
|
||||||
# Rust / cargo
|
|
||||||
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
|
|
||||||
export CARGO_HOME="$XDG_DATA_HOME/cargo"
|
|
||||||
export PATH="$CARGO_HOME/bin:$PATH"
|
|
||||||
|
|
||||||
# screen
|
|
||||||
export SCREENRC="$XDG_CONFIG_HOME/misc/screenrc"
|
|
||||||
|
|
||||||
# sonarlint
|
|
||||||
export SONARLINT_USER_HOME="$XDG_DATA_HOME/sonarlint"
|
|
||||||
|
|
||||||
# terraform
|
|
||||||
# https://www.terraform.io/docs/cli/config/config-file.html
|
|
||||||
# https://www.terraform.io/docs/cli/config/environment-variables.html
|
|
||||||
export TF_DATA_DIR="$XDG_STATE_HOME/terraform"
|
|
||||||
export TF_CLI_CONFIG_FILE="$XDG_CONFIG_HOME/terraform/terraformrc"
|
|
||||||
export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
|
|
||||||
|
|
||||||
# tldr / tealdeer
|
|
||||||
export TEALDEER_CONFIG_DIR="$XDG_CONFIG_HOME/tealdeer/"
|
|
||||||
|
|
||||||
# tmux
|
|
||||||
export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
|
|
||||||
|
|
||||||
# wakatime, https://github.com/wakatime/wakatime-cli
|
|
||||||
export WAKATIME_HOME="$XDG_STATE_HOME/wakatime"
|
|
||||||
x-dc "$WAKATIME_HOME"
|
|
||||||
|
|
||||||
# Misc
|
|
||||||
export BAT_THEME="ansi"
|
|
||||||
export CHEAT_USE_FZF=true
|
|
||||||
export SQLITE_HISTORY="$XDG_CACHE_HOME"/sqlite_history
|
|
||||||
@@ -1,19 +1,25 @@
|
|||||||
# lakka exports
|
# lakka exports
|
||||||
|
|
||||||
## LUA
|
## LUA
|
||||||
x-have luarocks && $(luarocks path --bin)
|
if command -v luarocks &> /dev/null; then
|
||||||
|
eval "$(luarocks path --bin)"
|
||||||
|
fi
|
||||||
|
|
||||||
export PATH="$HOME/.local/go/bin:$PATH"
|
export PATH="$HOME/.local/go/bin:$PATH"
|
||||||
|
|
||||||
alias logrotate='/usr/sbin/logrotate -s $HOME/logs/state'
|
alias logrotate='/usr/sbin/logrotate -s "$HOME/logs/state"'
|
||||||
alias nano='nano -wS -$'
|
alias nano='nano -wS -$'
|
||||||
alias gpg=gpg2
|
alias gpg=gpg2
|
||||||
|
|
||||||
ACME_PATH="$HOME/.acme.sh"
|
ACME_PATH="$HOME/.acme.sh"
|
||||||
# shellcheck source=$HOME/.acme.sh/acme.sh.env
|
# shellcheck source=$HOME/.acme.sh/acme.sh.env
|
||||||
[[ -s "$ACME_PATH/acme.sh.env" ]] && . "$ACME_PATH/acme.sh.env"
|
if [[ -s "$ACME_PATH/acme.sh.env" ]]; then
|
||||||
|
source "$ACME_PATH/acme.sh.env"
|
||||||
|
fi
|
||||||
|
|
||||||
export RVM_PATH="$HOME/.rvm"
|
export RVM_PATH="$HOME/.rvm"
|
||||||
export PATH="$RVM_PATH/bin:$PATH"
|
export PATH="$RVM_PATH/bin:$PATH"
|
||||||
# shellcheck source=$HOME/.rvm/scripts/rvm
|
# shellcheck source=$HOME/.rvm/scripts/rvm
|
||||||
[[ -s "$RVM_PATH/scripts/rvm" ]] && source "$RVM_PATH/scripts/rvm" # Load RVM into a shell session *as a function*
|
if [[ -s "$RVM_PATH/scripts/rvm" ]]; then
|
||||||
|
source "$RVM_PATH/scripts/rvm" # Load RVM into a shell session *as a function*
|
||||||
|
fi
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# This file is secret and wont be added to the git repo.
|
# This file is secret and wont be added to the git repo.
|
||||||
|
|
||||||
export GITLAB_API_TOKEN=""
|
export GITLAB_API_TOKEN=""
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# shellcheck shell=bash
|
|
||||||
# shellcheck disable=1091,2046
|
|
||||||
# vim: filetype=bash
|
|
||||||
|
|
||||||
# Bash completion file location
|
|
||||||
export BASH_COMPLETION_USER_FILE="${XDG_CONFIG_HOME}/bash-completion/bash_completion"
|
|
||||||
|
|
||||||
# History env variables
|
|
||||||
export HIST_STAMPS="yyyy-mm-dd"
|
|
||||||
# Larger bash history (allow 32³ entries; default is 500)
|
|
||||||
export HISTSIZE=32768
|
|
||||||
export HISTFILESIZE=$HISTSIZE
|
|
||||||
# don't put duplicate lines or lines starting with space in the history.
|
|
||||||
# See bash(1) for more options
|
|
||||||
export HISTCONTROL=ignoreboth
|
|
||||||
# Make some commands not show up in history
|
|
||||||
export HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"
|
|
||||||
# And include the parameter for ZSH
|
|
||||||
export HISTORY_IGNORE="(ls|cd|cd -|pwd|exit|date|* --help)"
|
|
||||||
|
|
||||||
# Less history location
|
|
||||||
export LESSHISTFILE="$XDG_STATE_HOME"/less/history
|
|
||||||
|
|
||||||
# Highlight section titles in manual pages
|
|
||||||
# export LESS_TERMCAP_md="$ORANGE"
|
|
||||||
|
|
||||||
# zsh autoloaded terminfo
|
|
||||||
export TERMINFO="${XDG_DATA_HOME}/terminfo"
|
|
||||||
export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
|
|
||||||
|
|
||||||
# Don't clear the screen after quitting a manual page
|
|
||||||
export MANPAGER="less -X"
|
|
||||||
|
|
||||||
# Always enable colored `grep` output
|
|
||||||
export GREP_OPTIONS="--color=auto"
|
|
||||||
|
|
||||||
# check the window size after each command and, if necessary,
|
|
||||||
# update the values of LINES and COLUMNS.
|
|
||||||
hash shopt 2> /dev/null && shopt -s checkwinsize
|
|
||||||
96
config/fish/alias.fish
Normal file
96
config/fish/alias.fish
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# Set aliases for fish shell
|
||||||
|
|
||||||
|
alias vim='vim -u "$XDG_CONFIG_HOME/vim/vimrc"'
|
||||||
|
|
||||||
|
# eza aliases if eza is installed
|
||||||
|
if type -q eza >/dev/null
|
||||||
|
function eza_git -d "Use eza and its git options if in a git repo"
|
||||||
|
if git rev-parse --is-inside-work-tree &>/dev/null
|
||||||
|
eza --group-directories-first --icons=always \
|
||||||
|
--smart-group --git $argv
|
||||||
|
else
|
||||||
|
eza --group-directories-first \
|
||||||
|
--icons=always \
|
||||||
|
--smart-group $argv
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function lsa --wraps='eza_git -al' --description 'eza -al'
|
||||||
|
eza_git -al $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
function ls --wraps='eza_git' --description eza
|
||||||
|
eza_git $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
function ll --wraps='eza_git -l' --description 'eza -l'
|
||||||
|
eza_git -l $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
function l --wraps='eza_git' --description eza
|
||||||
|
eza_git $argv
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Edit fish alias file
|
||||||
|
function .a \
|
||||||
|
--wraps='nvim ~/.dotfiles/config/fish/alias.fish' \
|
||||||
|
--description 'edit alias.fish'
|
||||||
|
nvim ~/.dotfiles/config/fish/alias.fish $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
# Go to the directory where my projects are stored
|
||||||
|
function .c --wraps='cd ~/Code' --description 'cd ~/Code'
|
||||||
|
cd ~/Code $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
# Go to the directory where the dotfiles are stored
|
||||||
|
function .d --wraps='cd ~/.dotfiles' --description 'cd ~/.dotfiles'
|
||||||
|
cd ~/.dotfiles $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
# Go to the directory where my work codes are stored
|
||||||
|
function .s --wraps='cd ~/Code/s' --description 'cd ~/Code/s'
|
||||||
|
cd ~/Code/s $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
# Go to the directory where my personal codes are stored
|
||||||
|
function .p --wraps='cd ~/Code/ivuorinen' --description 'cd ~/Code/ivuorinen'
|
||||||
|
cd ~/Code/ivuorinen $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
# shortcut to commit with a message
|
||||||
|
function commit \
|
||||||
|
--wraps='git commit -a -m "chore: automated commit"' \
|
||||||
|
--description 'commit shortcut'
|
||||||
|
set -l commitMessage $argv
|
||||||
|
git add .
|
||||||
|
|
||||||
|
if test -z "$commitMessage"
|
||||||
|
if type -q aicommits
|
||||||
|
aicommits --type conventional
|
||||||
|
else
|
||||||
|
git commit -a -m "chore: automated commit"
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
git commit -a -m "$commitMessage"
|
||||||
|
end
|
||||||
|
|
||||||
|
function configure_tide \
|
||||||
|
--description 'Configure tide with the lean style and my preferences'
|
||||||
|
tide configure \
|
||||||
|
--auto \
|
||||||
|
--style=Lean \
|
||||||
|
--prompt_colors='True color' \
|
||||||
|
--show_time=No \
|
||||||
|
--lean_prompt_height='Two lines' \
|
||||||
|
--prompt_connection=Disconnected \
|
||||||
|
--prompt_spacing=Sparse \
|
||||||
|
--icons='Many icons' \
|
||||||
|
--transient=Yes
|
||||||
|
end
|
||||||
|
|
||||||
|
# Random abbreviations
|
||||||
|
abbr --add stats onefetch --nerd-fonts --true-color never
|
||||||
124
config/fish/completions/aqua.fish
Normal file
124
config/fish/completions/aqua.fish
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
# aqua fish shell completion
|
||||||
|
|
||||||
|
function __fish_aqua_no_subcommand --description 'Test if there has been any subcommand yet'
|
||||||
|
for i in (commandline -opc)
|
||||||
|
if contains -- $i init install i generate g update-aqua upa update-checksum upc update up completion bash zsh fish help h help h which info remove rm vacuum cp policy allow deny init init-policy exec list generate-registry gr version root-dir help h
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l log-level -r -d 'log level'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l config -s c -r -d 'configuration file path'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l disable-cosign -d 'Disable Cosign verification'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l disable-slsa -d 'Disable SLSA verification'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l disable-github-artifact-attestation -d 'Disable GitHub Artifact Attestations verification'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l trace -r -d 'trace output file path'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l cpu-profile -r -d 'cpu profile output file path'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l help -s h -d 'show help'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l version -s v -d 'print the version'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l help -s h -d 'show help'
|
||||||
|
complete -c aqua -n __fish_aqua_no_subcommand -f -l version -s v -d 'print the version'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from init' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a init -d 'Create a configuration file if it doesn\'t exist'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from init' -f -l use-import-dir -s u -d 'Use import_dir'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from init' -f -l import-dir -s i -r -d import_dir
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from init' -f -l create-dir -s d -d 'Create a directory named aqua and create aqua.yaml in it'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from install i' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'install i' -d 'Install tools'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from install i' -f -l only-link -s l -d 'create links but skip downloading packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from install i' -f -l test -d 'This flag was deprecated and had no meaning from aqua v2.0.0. This flag will be removed in aqua v3.0.0. https://github.com/aquaproj/aqua/issues/1691'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from install i' -f -l all -s a -d 'install all aqua configuration packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from install i' -f -l tags -s t -r -d 'filter installed packages with tags'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from install i' -f -l exclude-tags -r -d 'exclude installed packages with tags'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'generate g' -d 'Search packages in registries and output the configuration interactively'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l f -r -d 'the file path of packages list. When the value is "-", the list is passed from the standard input'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l i -d 'Insert packages to configuration file'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l pin -d 'Pin version'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l g -d 'Insert packages in a global configuration file'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l detail -s d -d 'Output additional fields such as description and link'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l o -r -d 'inserted file'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l select-version -s s -d 'Select the installed version interactively. Default to display 30 versions, use --limit/-l to change it.'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate g' -f -l limit -s l -r -d 'The maximum number of versions. Non-positive number refers to no limit.'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update-aqua upa' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'update-aqua upa' -d 'Update aqua'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update-checksum upc' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'update-checksum upc' -d 'Create or Update aqua-checksums.json'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update-checksum upc' -f -l all -s a -d 'Create or Update all aqua-checksums.json including global configuration'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update-checksum upc' -f -l deep -d 'This flag was deprecated and had no meaning from aqua v2.0.0. This flag will be removed in aqua v3.0.0. https://github.com/aquaproj/aqua/issues/1769'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update-checksum upc' -f -l prune -d 'Remove unused checksums'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'update up' -d 'Update registries and packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l i -d 'Select packages with fuzzy finder'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l select-version -s s -d 'Select the version with fuzzy finder. Default to display 30 versions, use --limit/-l to change it.'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l only-registry -s r -d 'Update only registries'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l only-package -s p -d 'Update only packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l limit -s l -r -d 'The maximum number of versions. Non-positive number refers to no limit.'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l tags -s t -r -d 'filter installed packages with tags'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from update up' -f -l exclude-tags -r -d 'exclude installed packages with tags'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from completion' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a completion -d 'Output shell completion script for bash, zsh, or fish'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from completion' -f -l help -s h -d 'show help'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from bash' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from completion' -a bash -d 'Output shell completion script for bash'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from zsh' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from completion' -a zsh -d 'Output shell completion script for zsh'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from fish' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from completion' -a fish -d 'Output shell completion script for fish'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from fish' -f -l help -s h -d 'show help'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from help h' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from fish' -a 'help h' -d 'Shows a list of commands or help for one command'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from help h' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from completion' -a 'help h' -d 'Shows a list of commands or help for one command'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from which' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a which -d 'Output the absolute file path of the given command'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from which' -f -l version -s v -d 'Output the given package version'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from info' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a info -d 'Show information'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from remove rm' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'remove rm' -d 'Uninstall packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from remove rm' -f -l all -s a -d 'uninstall all packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from remove rm' -f -l mode -s m -r -d 'Removed target modes. l: link, p: package'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from remove rm' -f -l i -d 'Select packages with a Fuzzy Finder'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from vacuum' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a vacuum -d 'Remove unused installed packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from vacuum' -f -l init -d 'Create timestamp files.'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from vacuum' -f -l days -s d -r -d 'Expiration days'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from cp' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a cp -d 'Copy executable files in a directory'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from cp' -f -l o -r -d 'destination directory'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from cp' -f -l all -s a -d 'install all aqua configuration packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from cp' -f -l tags -s t -r -d 'filter installed packages with tags'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from cp' -f -l exclude-tags -r -d 'exclude installed packages with tags'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from policy' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a policy -d 'Manage Policy'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from allow' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from policy' -a allow -d 'Allow a policy file'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from deny' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from policy' -a deny -d 'Deny a policy file'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from init' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n '__fish_seen_subcommand_from policy' -a init -d 'Create a policy file if it doesn\'t exist'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from init-policy' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a init-policy -d '[Deprecated] Create a policy file if it doesn\'t exist'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from exec' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a exec -d 'Execute tool'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from list' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a list -d 'List packages in Registries'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from list' -f -l installed -s i -d 'List installed packages'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from list' -f -l all -s a -d 'List global configuration packages too'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'generate-registry gr' -d 'Generate a registry\'s package configuration'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l out-testdata -r -d 'A file path where the testdata is outputted'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l cmd -r -d 'A list of commands joined with commas \',\''
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l generate-config -s c -r -d 'A configuration file path'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l limit -s l -r -d 'the maximum number of versions'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l deep -d 'This flag was deprecated and had no meaning from aqua v2.15.0. This flag will be removed in aqua v3.0.0. https://github.com/aquaproj/aqua/issues/2351'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from generate-registry gr' -f -l init -d 'Generate a configuration file'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from version' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a version -d 'Show version'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from root-dir' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a root-dir -d 'Output the aqua root directory (AQUA_ROOT_DIR)'
|
||||||
|
complete -c aqua -n '__fish_seen_subcommand_from help h' -f -l help -s h -d 'show help'
|
||||||
|
complete -r -c aqua -n __fish_aqua_no_subcommand -a 'help h' -d 'Shows a list of commands or help for one command'
|
||||||
71
config/fish/completions/bob.fish
Normal file
71
config/fish/completions/bob.fish
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# Print an optspec for argparse to handle cmd's options that are independent of any subcommand.
|
||||||
|
function __fish_bob_global_optspecs
|
||||||
|
string join \n h/help V/version
|
||||||
|
end
|
||||||
|
|
||||||
|
function __fish_bob_needs_command
|
||||||
|
# Figure out if the current invocation already has a command.
|
||||||
|
set -l cmd (commandline -opc)
|
||||||
|
set -e cmd[1]
|
||||||
|
argparse -s (__fish_bob_global_optspecs) -- $cmd 2>/dev/null
|
||||||
|
or return
|
||||||
|
if set -q argv[1]
|
||||||
|
# Also print the command, so this can be used to figure out what it is.
|
||||||
|
echo $argv[1]
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
function __fish_bob_using_subcommand
|
||||||
|
set -l cmd (__fish_bob_needs_command)
|
||||||
|
test -z "$cmd"
|
||||||
|
and return 1
|
||||||
|
contains -- $cmd[1] $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
complete -c bob -n __fish_bob_needs_command -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -s V -l version -d 'Print version'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a use -d 'Switch to the specified version, by default will auto-invoke install command if the version is not installed already'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a install -d 'Install the specified version, can also be used to update out-of-date nightly version'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a sync -d 'If Config::version_sync_file_location is set, the version in that file will be parsed and installed'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a uninstall -d 'Uninstall the specified version'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a rm -d 'Uninstall the specified version'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a rollback -d 'Rollback to an existing nightly rollback'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a erase -d 'Erase any change bob ever made, including neovim installation, neovim version downloads and registry changes'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a list -d 'List all installed and used versions'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a ls -d 'List all installed and used versions'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a list-remote
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a ls-remote
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a complete -d 'Generate shell completion'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a update -d 'Update existing version |nightly|stable|--all|'
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a run
|
||||||
|
complete -c bob -n __fish_bob_needs_command -f -a help -d 'Print this message or the help of the given subcommand(s)'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand use" -s n -l no-install -d 'Whether not to auto-invoke install command'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand use" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand install" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand sync" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand uninstall" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand rm" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand rollback" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand erase" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand list" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand ls" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand list-remote" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand ls-remote" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand complete" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand update" -s a -l all -d 'Apply the update to all versions'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand update" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand run" -s h -l help -d 'Print help'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a use -d 'Switch to the specified version, by default will auto-invoke install command if the version is not installed already'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a install -d 'Install the specified version, can also be used to update out-of-date nightly version'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a sync -d 'If Config::version_sync_file_location is set, the version in that file will be parsed and installed'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a uninstall -d 'Uninstall the specified version'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a rollback -d 'Rollback to an existing nightly rollback'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a erase -d 'Erase any change bob ever made, including neovim installation, neovim version downloads and registry changes'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a list -d 'List all installed and used versions'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a list-remote
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a complete -d 'Generate shell completion'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a update -d 'Update existing version |nightly|stable|--all|'
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a run
|
||||||
|
complete -c bob -n "__fish_bob_using_subcommand help; and not __fish_seen_subcommand_from use install sync uninstall rollback erase list list-remote complete update run help" -f -a help -d 'Print this message or the help of the given subcommand(s)'
|
||||||
234
config/fish/completions/docker.fish
Normal file
234
config/fish/completions/docker.fish
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# fish completion for docker -*- shell-script -*-
|
||||||
|
|
||||||
|
function __docker_debug
|
||||||
|
set -l file "$BASH_COMP_DEBUG_FILE"
|
||||||
|
if test -n "$file"
|
||||||
|
echo "$argv" >>$file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __docker_perform_completion
|
||||||
|
__docker_debug "Starting __docker_perform_completion"
|
||||||
|
|
||||||
|
# Extract all args except the last one
|
||||||
|
set -l args (commandline -opc)
|
||||||
|
# Extract the last arg and escape it in case it is a space
|
||||||
|
set -l lastArg (string escape -- (commandline -ct))
|
||||||
|
|
||||||
|
__docker_debug "args: $args"
|
||||||
|
__docker_debug "last arg: $lastArg"
|
||||||
|
|
||||||
|
# Disable ActiveHelp which is not supported for fish shell
|
||||||
|
set -l requestComp "DOCKER_ACTIVE_HELP=0 $args[1] __complete $args[2..-1] $lastArg"
|
||||||
|
|
||||||
|
__docker_debug "Calling $requestComp"
|
||||||
|
set -l results (eval $requestComp 2> /dev/null)
|
||||||
|
|
||||||
|
# Some programs may output extra empty lines after the directive.
|
||||||
|
# Let's ignore them or else it will break completion.
|
||||||
|
# Ref: https://github.com/spf13/cobra/issues/1279
|
||||||
|
for line in $results[-1..1]
|
||||||
|
if test (string trim -- $line) = ""
|
||||||
|
# Found an empty line, remove it
|
||||||
|
set results $results[1..-2]
|
||||||
|
else
|
||||||
|
# Found non-empty line, we have our proper output
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l comps $results[1..-2]
|
||||||
|
set -l directiveLine $results[-1]
|
||||||
|
|
||||||
|
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
|
||||||
|
# completions must be prefixed with the flag
|
||||||
|
set -l flagPrefix (string match -r -- '-.*=' "$lastArg")
|
||||||
|
|
||||||
|
__docker_debug "Comps: $comps"
|
||||||
|
__docker_debug "DirectiveLine: $directiveLine"
|
||||||
|
__docker_debug "flagPrefix: $flagPrefix"
|
||||||
|
|
||||||
|
for comp in $comps
|
||||||
|
printf "%s%s\n" "$flagPrefix" "$comp"
|
||||||
|
end
|
||||||
|
|
||||||
|
printf "%s\n" "$directiveLine"
|
||||||
|
end
|
||||||
|
|
||||||
|
# this function limits calls to __docker_perform_completion, by caching the result behind $__docker_perform_completion_once_result
|
||||||
|
function __docker_perform_completion_once
|
||||||
|
__docker_debug "Starting __docker_perform_completion_once"
|
||||||
|
|
||||||
|
if test -n "$__docker_perform_completion_once_result"
|
||||||
|
__docker_debug "Seems like a valid result already exists, skipping __docker_perform_completion"
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
set --global __docker_perform_completion_once_result (__docker_perform_completion)
|
||||||
|
if test -z "$__docker_perform_completion_once_result"
|
||||||
|
__docker_debug "No completions, probably due to a failure"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
__docker_debug "Performed completions and set __docker_perform_completion_once_result"
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
# this function is used to clear the $__docker_perform_completion_once_result variable after completions are run
|
||||||
|
function __docker_clear_perform_completion_once_result
|
||||||
|
__docker_debug ""
|
||||||
|
__docker_debug "========= clearing previously set __docker_perform_completion_once_result variable =========="
|
||||||
|
set --erase __docker_perform_completion_once_result
|
||||||
|
__docker_debug "Successfully erased the variable __docker_perform_completion_once_result"
|
||||||
|
end
|
||||||
|
|
||||||
|
function __docker_requires_order_preservation
|
||||||
|
__docker_debug ""
|
||||||
|
__docker_debug "========= checking if order preservation is required =========="
|
||||||
|
|
||||||
|
__docker_perform_completion_once
|
||||||
|
if test -z "$__docker_perform_completion_once_result"
|
||||||
|
__docker_debug "Error determining if order preservation is required"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l directive (string sub --start 2 $__docker_perform_completion_once_result[-1])
|
||||||
|
__docker_debug "Directive is: $directive"
|
||||||
|
|
||||||
|
set -l shellCompDirectiveKeepOrder 32
|
||||||
|
set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
|
||||||
|
__docker_debug "Keeporder is: $keeporder"
|
||||||
|
|
||||||
|
if test $keeporder -ne 0
|
||||||
|
__docker_debug "This does require order preservation"
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
__docker_debug "This doesn't require order preservation"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# This function does two things:
|
||||||
|
# - Obtain the completions and store them in the global __docker_comp_results
|
||||||
|
# - Return false if file completion should be performed
|
||||||
|
function __docker_prepare_completions
|
||||||
|
__docker_debug ""
|
||||||
|
__docker_debug "========= starting completion logic =========="
|
||||||
|
|
||||||
|
# Start fresh
|
||||||
|
set --erase __docker_comp_results
|
||||||
|
|
||||||
|
__docker_perform_completion_once
|
||||||
|
__docker_debug "Completion results: $__docker_perform_completion_once_result"
|
||||||
|
|
||||||
|
if test -z "$__docker_perform_completion_once_result"
|
||||||
|
__docker_debug "No completion, probably due to a failure"
|
||||||
|
# Might as well do file completion, in case it helps
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l directive (string sub --start 2 $__docker_perform_completion_once_result[-1])
|
||||||
|
set --global __docker_comp_results $__docker_perform_completion_once_result[1..-2]
|
||||||
|
|
||||||
|
__docker_debug "Completions are: $__docker_comp_results"
|
||||||
|
__docker_debug "Directive is: $directive"
|
||||||
|
|
||||||
|
set -l shellCompDirectiveError 1
|
||||||
|
set -l shellCompDirectiveNoSpace 2
|
||||||
|
set -l shellCompDirectiveNoFileComp 4
|
||||||
|
set -l shellCompDirectiveFilterFileExt 8
|
||||||
|
set -l shellCompDirectiveFilterDirs 16
|
||||||
|
|
||||||
|
if test -z "$directive"
|
||||||
|
set directive 0
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
|
||||||
|
if test $compErr -eq 1
|
||||||
|
__docker_debug "Received error directive: aborting."
|
||||||
|
# Might as well do file completion, in case it helps
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
|
||||||
|
set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
|
||||||
|
if test $filefilter -eq 1; or test $dirfilter -eq 1
|
||||||
|
__docker_debug "File extension filtering or directory filtering not supported"
|
||||||
|
# Do full file completion instead
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
|
||||||
|
set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
|
||||||
|
|
||||||
|
__docker_debug "nospace: $nospace, nofiles: $nofiles"
|
||||||
|
|
||||||
|
# If we want to prevent a space, or if file completion is NOT disabled,
|
||||||
|
# we need to count the number of valid completions.
|
||||||
|
# To do so, we will filter on prefix as the completions we have received
|
||||||
|
# may not already be filtered so as to allow fish to match on different
|
||||||
|
# criteria than the prefix.
|
||||||
|
if test $nospace -ne 0; or test $nofiles -eq 0
|
||||||
|
set -l prefix (commandline -t | string escape --style=regex)
|
||||||
|
__docker_debug "prefix: $prefix"
|
||||||
|
|
||||||
|
set -l completions (string match -r -- "^$prefix.*" $__docker_comp_results)
|
||||||
|
set --global __docker_comp_results $completions
|
||||||
|
__docker_debug "Filtered completions are: $__docker_comp_results"
|
||||||
|
|
||||||
|
# Important not to quote the variable for count to work
|
||||||
|
set -l numComps (count $__docker_comp_results)
|
||||||
|
__docker_debug "numComps: $numComps"
|
||||||
|
|
||||||
|
if test $numComps -eq 1; and test $nospace -ne 0
|
||||||
|
# We must first split on \t to get rid of the descriptions to be
|
||||||
|
# able to check what the actual completion will be.
|
||||||
|
# We don't need descriptions anyway since there is only a single
|
||||||
|
# real completion which the shell will expand immediately.
|
||||||
|
set -l split (string split --max 1 \t $__docker_comp_results[1])
|
||||||
|
|
||||||
|
# Fish won't add a space if the completion ends with any
|
||||||
|
# of the following characters: @=/:.,
|
||||||
|
set -l lastChar (string sub -s -1 -- $split)
|
||||||
|
if not string match -r -q "[@=/:.,]" -- "$lastChar"
|
||||||
|
# In other cases, to support the "nospace" directive we trick the shell
|
||||||
|
# by outputting an extra, longer completion.
|
||||||
|
__docker_debug "Adding second completion to perform nospace directive"
|
||||||
|
set --global __docker_comp_results $split[1] $split[1].
|
||||||
|
__docker_debug "Completions are now: $__docker_comp_results"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if test $numComps -eq 0; and test $nofiles -eq 0
|
||||||
|
# To be consistent with bash and zsh, we only trigger file
|
||||||
|
# completion when there are no other completions
|
||||||
|
__docker_debug "Requesting file completion"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
|
||||||
|
# so we can properly delete any completions provided by another script.
|
||||||
|
# Only do this if the program can be found, or else fish may print some errors; besides,
|
||||||
|
# the existing completions will only be loaded if the program can be found.
|
||||||
|
if type -q docker
|
||||||
|
# The space after the program name is essential to trigger completion for the program
|
||||||
|
# and not completion of the program name itself.
|
||||||
|
# Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
|
||||||
|
complete --do-complete "docker " >/dev/null 2>&1
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove any pre-existing completions for the program since we will be handling all of them.
|
||||||
|
complete -c docker -e
|
||||||
|
|
||||||
|
# this will get called after the two calls below and clear the $__docker_perform_completion_once_result global
|
||||||
|
complete -c docker -n __docker_clear_perform_completion_once_result
|
||||||
|
# The call to __docker_prepare_completions will setup __docker_comp_results
|
||||||
|
# which provides the program's completion choices.
|
||||||
|
# If this doesn't require order preservation, we don't use the -k flag
|
||||||
|
complete -c docker -n 'not __docker_requires_order_preservation && __docker_prepare_completions' -f -a '$__docker_comp_results'
|
||||||
|
# otherwise we use the -k flag
|
||||||
|
complete -k -c docker -n '__docker_requires_order_preservation && __docker_prepare_completions' -f -a '$__docker_comp_results'
|
||||||
7
config/fish/completions/fisher.fish
Normal file
7
config/fish/completions/fisher.fish
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
complete --command fisher --exclusive --long help --description "Print help"
|
||||||
|
complete --command fisher --exclusive --long version --description "Print version"
|
||||||
|
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins"
|
||||||
|
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins"
|
||||||
|
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins"
|
||||||
|
complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex"
|
||||||
|
complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)"
|
||||||
175
config/fish/completions/git-profile.fish
Normal file
175
config/fish/completions/git-profile.fish
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
# fish completion for git-profile -*- shell-script -*-
|
||||||
|
|
||||||
|
function __git_profile_debug
|
||||||
|
set -l file "$BASH_COMP_DEBUG_FILE"
|
||||||
|
if test -n "$file"
|
||||||
|
echo "$argv" >>$file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function __git_profile_perform_completion
|
||||||
|
__git_profile_debug "Starting __git_profile_perform_completion"
|
||||||
|
|
||||||
|
# Extract all args except the last one
|
||||||
|
set -l args (commandline -opc)
|
||||||
|
# Extract the last arg and escape it in case it is a space
|
||||||
|
set -l lastArg (string escape -- (commandline -ct))
|
||||||
|
|
||||||
|
__git_profile_debug "args: $args"
|
||||||
|
__git_profile_debug "last arg: $lastArg"
|
||||||
|
|
||||||
|
set -l requestComp "$args[1] __complete $args[2..-1] $lastArg"
|
||||||
|
|
||||||
|
__git_profile_debug "Calling $requestComp"
|
||||||
|
set -l results (eval $requestComp 2> /dev/null)
|
||||||
|
|
||||||
|
# Some programs may output extra empty lines after the directive.
|
||||||
|
# Let's ignore them or else it will break completion.
|
||||||
|
# Ref: https://github.com/spf13/cobra/issues/1279
|
||||||
|
for line in $results[-1..1]
|
||||||
|
if test (string trim -- $line) = ""
|
||||||
|
# Found an empty line, remove it
|
||||||
|
set results $results[1..-2]
|
||||||
|
else
|
||||||
|
# Found non-empty line, we have our proper output
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l comps $results[1..-2]
|
||||||
|
set -l directiveLine $results[-1]
|
||||||
|
|
||||||
|
# For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)
|
||||||
|
# completions must be prefixed with the flag
|
||||||
|
set -l flagPrefix (string match -r -- '-.*=' "$lastArg")
|
||||||
|
|
||||||
|
__git_profile_debug "Comps: $comps"
|
||||||
|
__git_profile_debug "DirectiveLine: $directiveLine"
|
||||||
|
__git_profile_debug "flagPrefix: $flagPrefix"
|
||||||
|
|
||||||
|
for comp in $comps
|
||||||
|
printf "%s%s\n" "$flagPrefix" "$comp"
|
||||||
|
end
|
||||||
|
|
||||||
|
printf "%s\n" "$directiveLine"
|
||||||
|
end
|
||||||
|
|
||||||
|
# This function does two things:
|
||||||
|
# - Obtain the completions and store them in the global __git_profile_comp_results
|
||||||
|
# - Return false if file completion should be performed
|
||||||
|
function __git_profile_prepare_completions
|
||||||
|
__git_profile_debug ""
|
||||||
|
__git_profile_debug "========= starting completion logic =========="
|
||||||
|
|
||||||
|
# Start fresh
|
||||||
|
set --erase __git_profile_comp_results
|
||||||
|
|
||||||
|
set -l results (__git_profile_perform_completion)
|
||||||
|
__git_profile_debug "Completion results: $results"
|
||||||
|
|
||||||
|
if test -z "$results"
|
||||||
|
__git_profile_debug "No completion, probably due to a failure"
|
||||||
|
# Might as well do file completion, in case it helps
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l directive (string sub --start 2 $results[-1])
|
||||||
|
set --global __git_profile_comp_results $results[1..-2]
|
||||||
|
|
||||||
|
__git_profile_debug "Completions are: $__git_profile_comp_results"
|
||||||
|
__git_profile_debug "Directive is: $directive"
|
||||||
|
|
||||||
|
set -l shellCompDirectiveError 1
|
||||||
|
set -l shellCompDirectiveNoSpace 2
|
||||||
|
set -l shellCompDirectiveNoFileComp 4
|
||||||
|
set -l shellCompDirectiveFilterFileExt 8
|
||||||
|
set -l shellCompDirectiveFilterDirs 16
|
||||||
|
|
||||||
|
if test -z "$directive"
|
||||||
|
set directive 0
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) % 2)
|
||||||
|
if test $compErr -eq 1
|
||||||
|
__git_profile_debug "Received error directive: aborting."
|
||||||
|
# Might as well do file completion, in case it helps
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) % 2)
|
||||||
|
set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) % 2)
|
||||||
|
if test $filefilter -eq 1; or test $dirfilter -eq 1
|
||||||
|
__git_profile_debug "File extension filtering or directory filtering not supported"
|
||||||
|
# Do full file completion instead
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) % 2)
|
||||||
|
set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) % 2)
|
||||||
|
|
||||||
|
__git_profile_debug "nospace: $nospace, nofiles: $nofiles"
|
||||||
|
|
||||||
|
# If we want to prevent a space, or if file completion is NOT disabled,
|
||||||
|
# we need to count the number of valid completions.
|
||||||
|
# To do so, we will filter on prefix as the completions we have received
|
||||||
|
# may not already be filtered so as to allow fish to match on different
|
||||||
|
# criteria than the prefix.
|
||||||
|
if test $nospace -ne 0; or test $nofiles -eq 0
|
||||||
|
set -l prefix (commandline -t | string escape --style=regex)
|
||||||
|
__git_profile_debug "prefix: $prefix"
|
||||||
|
|
||||||
|
set -l completions (string match -r -- "^$prefix.*" $__git_profile_comp_results)
|
||||||
|
set --global __git_profile_comp_results $completions
|
||||||
|
__git_profile_debug "Filtered completions are: $__git_profile_comp_results"
|
||||||
|
|
||||||
|
# Important not to quote the variable for count to work
|
||||||
|
set -l numComps (count $__git_profile_comp_results)
|
||||||
|
__git_profile_debug "numComps: $numComps"
|
||||||
|
|
||||||
|
if test $numComps -eq 1; and test $nospace -ne 0
|
||||||
|
# We must first split on \t to get rid of the descriptions to be
|
||||||
|
# able to check what the actual completion will be.
|
||||||
|
# We don't need descriptions anyway since there is only a single
|
||||||
|
# real completion which the shell will expand immediately.
|
||||||
|
set -l split (string split --max 1 \t $__git_profile_comp_results[1])
|
||||||
|
|
||||||
|
# Fish won't add a space if the completion ends with any
|
||||||
|
# of the following characters: @=/:.,
|
||||||
|
set -l lastChar (string sub -s -1 -- $split)
|
||||||
|
if not string match -r -q "[@=/:.,]" -- "$lastChar"
|
||||||
|
# In other cases, to support the "nospace" directive we trick the shell
|
||||||
|
# by outputting an extra, longer completion.
|
||||||
|
__git_profile_debug "Adding second completion to perform nospace directive"
|
||||||
|
set --global __git_profile_comp_results $split[1] $split[1].
|
||||||
|
__git_profile_debug "Completions are now: $__git_profile_comp_results"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if test $numComps -eq 0; and test $nofiles -eq 0
|
||||||
|
# To be consistent with bash and zsh, we only trigger file
|
||||||
|
# completion when there are no other completions
|
||||||
|
__git_profile_debug "Requesting file completion"
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves
|
||||||
|
# so we can properly delete any completions provided by another script.
|
||||||
|
# Only do this if the program can be found, or else fish may print some errors; besides,
|
||||||
|
# the existing completions will only be loaded if the program can be found.
|
||||||
|
if type -q git-profile
|
||||||
|
# The space after the program name is essential to trigger completion for the program
|
||||||
|
# and not completion of the program name itself.
|
||||||
|
# Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.
|
||||||
|
complete --do-complete "git-profile " >/dev/null 2>&1
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove any pre-existing completions for the program since we will be handling all of them.
|
||||||
|
complete -c git-profile -e
|
||||||
|
|
||||||
|
# The call to __git_profile_prepare_completions will setup __git_profile_comp_results
|
||||||
|
# which provides the program's completion choices.
|
||||||
|
complete -c git-profile -n __git_profile_prepare_completions -f -a '$__git_profile_comp_results'
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user