Compare commits
1317 commits
dac15275f4
...
2027b59cf0
Author | SHA1 | Date | |
---|---|---|---|
2027b59cf0 | |||
4828c58033 | |||
b6d629924c | |||
5d87a0be1d | |||
efcbae3c3e | |||
5174bf5a11 | |||
cb92c22070 | |||
9fd94c6c8c | |||
b3c3899692 | |||
7f9ee72c57 | |||
c6b7e65ce6 | |||
67ce104ced | |||
9d6629fc8e | |||
d790ce3c4a | |||
73ffa28143 | |||
dbce5d07dc | |||
8b9ec33ab7 | |||
0aa27334e9 | |||
6a65ed6edd | |||
541ec47d59 | |||
b5bc36941e | |||
bf5f88a8e7 | |||
184dcdc287 | |||
4c18772a67 | |||
33019b0cef | |||
7e44488b62 | |||
e50564e443 | |||
8295978c2b | |||
31f54dc857 | |||
82d87ee86f | |||
013e49743e | |||
a4a1a8220b | |||
bc8e2f33ff | |||
e6f1f05c80 | |||
e073807f40 | |||
5328c00cf5 | |||
20df2b6323 | |||
e9282f5d9a | |||
a27ffc5ccc | |||
926454f57d | |||
58a9da25ed | |||
4e4edec989 | |||
f185eb86be | |||
4b82bf1d53 | |||
016c02a449 | |||
b2a6de7ebc | |||
4046ef4e48 | |||
5baa4af474 | |||
9882edcd49 | |||
e9d20f005d | |||
243b82148b | |||
79a7db5bb9 | |||
22feb12d33 | |||
33828c6afa | |||
eaf567e594 | |||
f542303cbd | |||
bdeffb8b7f | |||
12a2e960af | |||
6c9755e919 | |||
31c70a3235 | |||
a57a9f10e9 | |||
e924f75bd9 | |||
4cc10c7c86 | |||
e0ecf9a1d0 | |||
3761c502f0 | |||
661f71d1a8 | |||
6fadc26aee | |||
e89325eef3 | |||
6f44df0db6 | |||
50b5b13526 | |||
91a6589923 | |||
758ffcfd08 | |||
77cc2660d7 | |||
41c0c05623 | |||
dedc01c1b9 | |||
bdf18b0908 | |||
6678a6c3a3 | |||
028fe1da43 | |||
87b86ee8e0 | |||
e042dbf274 | |||
2f74592bff | |||
aca76119c9 | |||
3fac118c88 | |||
81f956e683 | |||
aa55531f63 | |||
b4b85837f6 | |||
01feed67db | |||
f7fd1bccdb | |||
93bffdf994 | |||
160036a7c3 | |||
a0a78b926e | |||
9b1601baca | |||
16a09aacfe | |||
8bfabd9bd8 | |||
8ae9eddeb4 | |||
6170657076 | |||
9059c6327f | |||
f697324821 | |||
6711038e53 | |||
f4a9b01114 | |||
3655087f63 | |||
0f215d106c | |||
4bade97832 | |||
f73a509ae3 | |||
0610df9908 | |||
becfcc4968 | |||
b5e1c7c2d1 | |||
e709911b6a | |||
876cb45c37 | |||
40030e646c | |||
ff510d3b02 | |||
9760f03c00 | |||
4bbafb42ff | |||
81f884a376 | |||
62b3656bd9 | |||
826190284c | |||
903814b4b2 | |||
2d005a7ecc | |||
46bfe47494 | |||
5aa759126b | |||
56c1cdd3c1 | |||
9e076ed63a | |||
647293c28c | |||
5dc717534c | |||
a148d7b230 | |||
dab59d2f70 | |||
a919e656c8 | |||
879cfda68e | |||
b7a0e83e5a | |||
442bee9014 | |||
b548817e9f | |||
c2cb934522 | |||
1c47bedc93 | |||
388d23663c | |||
5813fc3d54 | |||
300a7fd450 | |||
4c680ddd88 | |||
5746b48fd2 | |||
4a57c108a2 | |||
734f5a5d5a | |||
7b0fc6c2d0 | |||
80f862dcb9 | |||
46530854fe | |||
c5ae7d9063 | |||
3e13fb2b67 | |||
e53d504a94 | |||
fd1103f45b | |||
b433d22bfe | |||
0882106bc5 | |||
33816bdea5 | |||
617f59dbd5 | |||
b5c1a1399b | |||
ee3f962386 | |||
13b51fbbb6 | |||
4bbfa49d6f | |||
a6c9da019f | |||
34f995747d | |||
5a17f8b9ec | |||
269ce725ea | |||
382bfad14c | |||
557eeb705d | |||
ff57f88c5b | |||
064c285fcf | |||
944de98b4a | |||
ee97d8a590 | |||
c1ff9d997b | |||
19b5407a9a | |||
f738678bd5 | |||
6e62a73c1f | |||
b4bab18019 | |||
292fc39d06 | |||
10387603f3 | |||
9662b7aba6 | |||
1217ee010b | |||
85ff12a696 | |||
21d6a1c3f6 | |||
29e38f7284 | |||
634634ea27 | |||
5561023ea8 | |||
cebd82df87 | |||
610ec4c697 | |||
3a1d38a693 | |||
ab262abe66 | |||
8b6dbcf1c8 | |||
0db7729c53 | |||
0e72be4d93 | |||
81ddde9555 | |||
5126176e6b | |||
67c89f349e | |||
544fcbfdf4 | |||
6d5a7a3ee0 | |||
e54c621cda | |||
49da6bd829 | |||
d764006143 | |||
80d983447c | |||
e3e9848d0e | |||
22a4aad249 | |||
ff12fbbe55 | |||
845f4024df | |||
f9b7a93570 | |||
d09821e863 | |||
db73442b8b | |||
08aa9907c7 | |||
66c7fe059e | |||
30110372aa | |||
66fede355d | |||
8397e9b693 | |||
e6531057d5 | |||
bf5ee22cbb | |||
1ef87cba6c | |||
2998b2d336 | |||
8c533276a1 | |||
8ba0dded9b | |||
be0452583c | |||
59cac76657 | |||
25d531a401 | |||
c5b2c6e24a | |||
726ab946b0 | |||
468cc65e27 | |||
8eed2f76b5 | |||
f390929f7a | |||
c5d835612a | |||
917491744b | |||
7e33569675 | |||
54487584a4 | |||
c6fedc99f0 | |||
fa8e7df59d | |||
e6b6534c8d | |||
1ce80c1347 | |||
b570b8a075 | |||
9e591464ce | |||
d2112451a7 | |||
0982ebf334 | |||
68a73c417e | |||
71cfebbf64 | |||
024fad6baf | |||
ef0c42e610 | |||
406e8e2bbc | |||
d90a73ab5a | |||
cfb08c8ebd | |||
4c63f9ac60 | |||
5d47465266 | |||
f4c7e18482 | |||
6de4b65ab8 | |||
2b038e4b0d | |||
d9372d30bb | |||
e838e78ad8 | |||
83cd0a7540 | |||
b3ebda5b51 | |||
c6876f5f9a | |||
9c2f5dee4c | |||
fc50b07d4e | |||
eefc9c4a60 | |||
7882ab1922 | |||
cbee7ac985 | |||
5024f14d82 | |||
bcd1f2553e | |||
a650d003b1 | |||
61577153be | |||
769fcf82ef | |||
168742d109 | |||
8b3cf79112 | |||
4004dc5df6 | |||
0ced314c90 | |||
902c397e8b | |||
4c256d4b37 | |||
d07aa82cda | |||
88da85e368 | |||
6c6ce53837 | |||
92ab50ddfc | |||
6489b1094e | |||
c99903e78e | |||
ad3d734adc | |||
455a008f06 | |||
4442252c65 | |||
312d755740 | |||
8174254bc0 | |||
0e71bad9d2 | |||
dda94cb793 | |||
e8667d3c98 | |||
7fccc55151 | |||
8929c69dd8 | |||
a67ad971ea | |||
070b0a706f | |||
a2565ab5a8 | |||
1e693490d2 | |||
f633456d02 | |||
1ae405e85d | |||
49f03b0e06 | |||
6a5f536b13 | |||
23d21a6c8b | |||
69ff724b5a | |||
b33b409336 | |||
7455165138 | |||
72e68f8af9 | |||
d0691c78b1 | |||
140991b8ae | |||
3a556610f7 | |||
8a3fb3ad45 | |||
747b4b8990 | |||
b36e9f5393 | |||
2a6e453156 | |||
b7c627490b | |||
bd7c5020f9 | |||
38097407cd | |||
2cd94ee65f | |||
71b2b12a3f | |||
d630e712a3 | |||
3adda7b513 | |||
8ceed71fb1 | |||
a3d930033c | |||
39b2a945bb | |||
03918c79cd | |||
1cf475d7ee | |||
b3fcfdb3e8 | |||
f6197e8eca | |||
96873e1bd7 | |||
243f8caaab | |||
af6c34baaa | |||
bf072046bf | |||
794e1b9d5c | |||
f3dc5ebd34 | |||
5d998c8138 | |||
c9f95761bb | |||
098f21d4ba | |||
fae3572178 | |||
1b53619a47 | |||
85203e7811 | |||
8cf22d17f8 | |||
958178ca85 | |||
42c79e8d65 | |||
e6b348bda0 | |||
a489d13bf0 | |||
0e8d8d3160 | |||
97438e63cb | |||
81b0abe8d1 | |||
67ddd73085 | |||
300da07721 | |||
4f655af6da | |||
e0a026afb3 | |||
db136a7313 | |||
e156b28843 | |||
3a8a2e2d76 | |||
ac829ff2a0 | |||
d4dedd038f | |||
dbd364d9c6 | |||
465841dc25 | |||
c5b4cd5ff4 | |||
52d76d6be5 | |||
7c5f21daba | |||
2f9bc0ae5f | |||
82d7b1fbca | |||
5a4174e2d0 | |||
e2eb38516b | |||
4e59e69155 | |||
6e7520280e | |||
7a1dc197e1 | |||
cda6ed5835 | |||
3ea12285b7 | |||
55a9462ad0 | |||
4b0cafdc04 | |||
208688e092 | |||
9513b9c009 | |||
a3d4442aeb | |||
b28bef4c89 | |||
1bb97d06a6 | |||
bc9ef5a1cd | |||
4b8c40073e | |||
8982e0c439 | |||
8804b5a2bf | |||
972043dcae | |||
fa7b53d41f | |||
dab116c936 | |||
05120e4507 | |||
fdc9eb668d | |||
b2cd7e23dc | |||
ac671aabf0 | |||
431cfeacb4 | |||
fc93090a36 | |||
b362cc511b | |||
17c1d739c2 | |||
4e6d402070 | |||
902fe31a7f | |||
7051045942 | |||
4af284427f | |||
3b20556fb7 | |||
1bb484443b | |||
f795a49720 | |||
4c1f264e2a | |||
eb1321303c | |||
cacf752385 | |||
219d5c7633 | |||
2a9517822d | |||
665f07bee6 | |||
bfe4055932 | |||
ba0eebbc37 | |||
b8223b88da | |||
bb86b21d9e | |||
b24cdcc60c | |||
98a01af1a6 | |||
61cdce3ac6 | |||
ebbb6e5cdd | |||
47afcdc50e | |||
a51c46a1f9 | |||
97267f948c | |||
bb0330912e | |||
6d0c8ac6d7 | |||
da6807e50f | |||
9cb79c97ba | |||
8354fcefb6 | |||
1a60a2aed4 | |||
df1a1e45cf | |||
da129188d1 | |||
7ec5fb36fa | |||
654e0917ca | |||
74f5f1e3cb | |||
19461430f7 | |||
2b7479510f | |||
5c246e1fc7 | |||
011062fdc9 | |||
3a5f747004 | |||
6c566c35c5 | |||
9eeda25af6 | |||
a7a890f267 | |||
b5768525ae | |||
59e18a6a5a | |||
6ee8661357 | |||
7aa0bf9c2d | |||
9472088711 | |||
ebf0dab03c | |||
8f16f4c284 | |||
409ae40b9e | |||
884e29d6f2 | |||
da72520c7b | |||
d08f08d572 | |||
d2f47aa2f9 | |||
75a7cf6d07 | |||
9b569a2266 | |||
9cb6ad7008 | |||
5dcfd727ab | |||
c98e079f20 | |||
99afafc73e | |||
a5e0572f18 | |||
ce45ae465c | |||
afc83ce7dc | |||
c6c659c6f7 | |||
302aeb40b9 | |||
0039ef7d86 | |||
b7159f7057 | |||
4c2cd632af | |||
f7f82b701b | |||
839c346777 | |||
3d5d910520 | |||
9b93993912 | |||
72919da633 | |||
34c0487ab1 | |||
aabf896b6f | |||
d0c9b85b0b | |||
93d1f827e3 | |||
778e410a70 | |||
c3710ccfb4 | |||
1d5f1b7b78 | |||
03ab3c278d | |||
8805bf2dc3 | |||
13ca0e4a06 | |||
789ff576b2 | |||
c48528802a | |||
fdd1df7d24 | |||
9f02493b0a | |||
6a91c7b2ce | |||
2481671803 | |||
b68630e567 | |||
aa461f98a4 | |||
0b416fb537 | |||
94a7a38a8f | |||
c2b1c91163 | |||
e3e6552b93 | |||
8c1a1dbdc8 | |||
c99a2279e1 | |||
d342f8f73f | |||
a4f4bf0377 | |||
ebc50056d5 | |||
4b7d694731 | |||
e6a329830a | |||
09cfb33688 | |||
7c43f75e27 | |||
9e1acf890a | |||
ba84bd1e73 | |||
f00a280aaf | |||
87b1d5961a | |||
a2ecbae4ca | |||
c2ea91bca0 | |||
|
1962505d8e | ||
8983127f3e | |||
5e3bbc487b | |||
cb28cd8baf | |||
c80485c36e | |||
be49f971ea | |||
c0f5daeb72 | |||
a1c9ca5be9 | |||
93c3611b55 | |||
aa43e958df | |||
ab98cbf2fe | |||
545dc976dd | |||
865dad1de3 | |||
1ce44580f7 | |||
187988ed4c | |||
f1d41f74ae | |||
|
e85469a11b | ||
|
3614b66354 | ||
|
bddcb64be8 | ||
|
d69a00df7e | ||
|
4aeb226b70 | ||
|
29e1114978 | ||
|
d6e5b68741 | ||
|
bab68a1209 | ||
|
5628321f31 | ||
|
b35110ba5a | ||
41fe472531 | |||
5eff5ecf25 | |||
682bd9b3bc | |||
0a8d079bb7 | |||
|
88a12c6df0 | ||
|
5527f6ad05 | ||
|
8a9985e3a0 | ||
1212f1de35 | |||
29aeaa6e17 | |||
16a8c30360 | |||
7bbbd7cbfe | |||
|
357392b9dc | ||
|
b316f72cc4 | ||
|
59973a3a83 | ||
|
406c230210 | ||
|
8049d07e09 | ||
c81dce80a0 | |||
2b107c2bba | |||
b1c6322937 | |||
b5d1364db7 | |||
00668c6d52 | |||
9f348fb7c5 | |||
f4a9b4fa92 | |||
55ccf7a111 | |||
001216f915 | |||
|
59fbdada8f | ||
8f30a5bf4d | |||
02038543c7 | |||
d22d15e38a | |||
|
d45ad5bbab | ||
ac6de141be | |||
18b365205d | |||
46fae1061e | |||
319835e5c4 | |||
1075a60db1 | |||
2d102a105d | |||
54f42de283 | |||
0b8141f909 | |||
3b3a0216d6 | |||
1c3421e572 | |||
e6b93e432d | |||
0303678c40 | |||
f869d15f7b | |||
69917f148a | |||
0d3211e575 | |||
8033e8bbb6 | |||
b0609b2618 | |||
e95ad97aba | |||
fc9cf0dd9c | |||
b61e35da16 | |||
f616bcb60e | |||
2219344e10 | |||
34d347addc | |||
f0cb81093d | |||
a5f5141dd1 | |||
fdff3a9ce7 | |||
2690e96fda | |||
38ebc33ec1 | |||
5551416ca5 | |||
7d18622a3b | |||
67e7fb2690 | |||
dbd67777a2 | |||
9b8581051e | |||
d1dff202c9 | |||
4255c7eba0 | |||
7e48c8f75a | |||
86ba9538de | |||
895cf7706b | |||
2a9a3e5a2a | |||
f8ceedfd01 | |||
40c7875779 | |||
049ce6e360 | |||
9f41ba8e19 | |||
130b7a36dc | |||
e4d5dcc557 | |||
8a52dcfcd8 | |||
2b8d17fc24 | |||
ad1e2c0df1 | |||
54c018b40a | |||
1095e16475 | |||
0042462189 | |||
4b81cf8a8d | |||
bcae859e25 | |||
1be4803c5d | |||
a0e363ff26 | |||
ed91d7841a | |||
abad686976 | |||
f1a4543dc6 | |||
384f2752ab | |||
9b617b6f8b | |||
59435389fe | |||
cd841e1685 | |||
ba39ac850e | |||
348a90f3ad | |||
428789cb90 | |||
0330d0e9a1 | |||
dd6311f2f1 | |||
99e9761783 | |||
2ad579435f | |||
1a57701746 | |||
119f40ef6c | |||
391c1d0e5a | |||
1542a1a73a | |||
1e3e8ca84d | |||
a0549dcb8c | |||
928509ed9a | |||
7e3aa27aee | |||
3f8b9e8c83 | |||
38aadc3eaa | |||
a1bb9b97f4 | |||
2630f0a26f | |||
17d116f411 | |||
820b5d1377 | |||
79e3859ec6 | |||
b231f89993 | |||
44a63ba8a4 | |||
c284adf736 | |||
1840232194 | |||
4df4bc914f | |||
44d1ccc82d | |||
7fe8f0b9e2 | |||
fc76d8c099 | |||
7f357be296 | |||
31a250b50a | |||
830dd01a30 | |||
d483cbe2ed | |||
92ea8e57e4 | |||
0e126d2153 | |||
da3831dd0b | |||
6751e7b356 | |||
a097eb15be | |||
f717e2abd0 | |||
3a5ddd0108 | |||
c5a6896eab | |||
5341406b2e | |||
78a01f8a44 | |||
a9581ae2b0 | |||
5fcd8553f0 | |||
fd56fcbdda | |||
4adc5b02ee | |||
3bb8c381ce | |||
060450b9f5 | |||
29df7d4b94 | |||
3a6725ae09 | |||
3be4018222 | |||
a761e7ccb6 | |||
b8b2713df4 | |||
76e2278349 | |||
85044c2b68 | |||
b6839e69b9 | |||
646604d44d | |||
d31a750c98 | |||
471e12b5ac | |||
9e8435ba99 | |||
3841481c79 | |||
02d7ce5a94 | |||
be298427f6 | |||
c707c17f4b | |||
21284ab10d | |||
4d94052d70 | |||
131e4608e7 | |||
221aa4b42e | |||
bce2d6d6b1 | |||
fa8e0e7331 | |||
1df85d3a12 | |||
15f6079e28 | |||
dd7886205f | |||
64cfd072e7 | |||
0f738beb9b | |||
b985e8a28a | |||
989ab0c42a | |||
dab6db98f8 | |||
5629e07bf3 | |||
d70a628146 | |||
6351093de0 | |||
e35ccc8ae2 | |||
f84f9b72f5 | |||
8643dd3b6b | |||
9ef1115fa2 | |||
d2821f9ba8 | |||
c422a3aff3 | |||
dc8475f7bb | |||
33037ba06d | |||
e87ef5f56d | |||
ea64281432 | |||
eff6329368 | |||
682218f113 | |||
1b70982c43 | |||
73f9940a09 | |||
22a0fd71c1 | |||
3024bf9400 | |||
270ac5b3ec | |||
08f33e7c48 | |||
6d30b1876f | |||
7c1b22e57f | |||
581dbdb22c | |||
3a918ea5fe | |||
ae3b1f5db4 | |||
a15a21b1a4 | |||
e41f585e27 | |||
9744ea55ef | |||
caba64f1e6 | |||
4a995cecc8 | |||
558fecd30b | |||
bb6771e968 | |||
efae4c58c0 | |||
5acb1dfb07 | |||
6ccbf70b57 | |||
523dc563b3 | |||
565b902df1 | |||
910c15fd42 | |||
8f700627f7 | |||
5a7fc0f8a6 | |||
56d45cedaf | |||
e2d17d2766 | |||
741186b424 | |||
e42ec34bc6 | |||
7b324f56fe | |||
e8882ff92b | |||
330c757cdd | |||
eb3639f0ba | |||
8b90cc8cd3 | |||
1d0c066aeb | |||
b7afca77a3 | |||
2d993d6fbd | |||
a845ca8f9d | |||
287aae134c | |||
1a95a4c055 | |||
f0294e40d8 | |||
6a9ff37778 | |||
282427bb82 | |||
174a848429 | |||
5eea1571d3 | |||
c76a78459a | |||
f6679102d8 | |||
4a72542f7f | |||
34f9a46a50 | |||
9fb514c193 | |||
b4c8ddcea0 | |||
7723c8e6b5 | |||
5d0424b9b3 | |||
e31fd50b08 | |||
278a7f2478 | |||
841a891ecf | |||
ff676407f0 | |||
17d4810805 | |||
6ea4b86431 | |||
51d25038bb | |||
60a90807a8 | |||
cbc3596409 | |||
86f9acea7f | |||
8c50455480 | |||
97e082b1fa | |||
1cc2a0fec8 | |||
f5d42129dd | |||
88a169292d | |||
9142dc2751 | |||
78b2170951 | |||
699cbbcc16 | |||
088bc31bbf | |||
3d306be448 | |||
de7cb3ba78 | |||
fdfa17ceb5 | |||
e19ac5b59e | |||
9a3e378a64 | |||
a4dca20f8c | |||
e0fef53231 | |||
e849d8d7cc | |||
8a99809c0a | |||
99cdc64df9 | |||
122a7cd504 | |||
5e9c546248 | |||
bcbe011a79 | |||
84a40b0c76 | |||
961f60478e | |||
029a7ebd07 | |||
47b871b76b | |||
12e3660fc6 | |||
9c450abd00 | |||
4e5aebdcef | |||
4d9947dfa1 | |||
0dd0d7c9ba | |||
8af3cdd256 | |||
170fe31f6b | |||
479ac72b83 | |||
8604de5ffe | |||
d4ba7a72d9 | |||
99a7044e8d | |||
cb9b02eb55 | |||
911f38b247 | |||
eff5448a2d | |||
d5d3f8a975 | |||
37529aa38a | |||
d468473419 | |||
997da6c771 | |||
7ef82afb4b | |||
c0988a1f5a | |||
58f9847e78 | |||
b3f20969a7 | |||
fcd2c47305 | |||
75d4a64c10 | |||
312634e010 | |||
00d8d65c49 | |||
3d61a23f12 | |||
173b6b4e06 | |||
02c5e0e8e4 | |||
b15253822b | |||
3f69a286c8 | |||
3ba1f71742 | |||
2cb90acb6f | |||
93e6086b3b | |||
090db6aa30 | |||
3732cb5e53 | |||
c34c2e7b9e | |||
cf224afe1e | |||
facd2b69a2 | |||
907e13f579 | |||
10d7142b69 | |||
2f2124d055 | |||
30580d3be9 | |||
2b0b1bd876 | |||
9d9acac6f8 | |||
7cf9f0f226 | |||
16cde14ddd | |||
d78c0ae77d | |||
f5bf1b9b0e | |||
5789851be9 | |||
2be99922f4 | |||
cafb76d835 | |||
1e9227ca57 | |||
71f871c895 | |||
4b3709b242 | |||
9f7c3e6466 | |||
82364ebc05 | |||
a468d2cdf2 | |||
bbb68080a4 | |||
db8d59839a | |||
a718b84618 | |||
ea8debd6d9 | |||
e86d81eb32 | |||
4cd116d28d | |||
8d73a1978b | |||
cb44a92506 | |||
899f83d60d | |||
fd56cd7631 | |||
4b51c7ca55 | |||
2f04b029ea | |||
a05c1b4188 | |||
43ecd19408 | |||
b33ee4cfe7 | |||
be4d72552e | |||
d45df6ebbc | |||
6d92b744e1 | |||
98178a74f2 | |||
84c9d3354a | |||
5035123437 | |||
f001a93cf2 | |||
ecb8a5644d | |||
598ac83188 | |||
e60da2386e | |||
7bac1e6387 | |||
6c5e01ce23 | |||
1114ecdc85 | |||
43bfd1a5a2 | |||
1f9f777b70 | |||
756cebca40 | |||
9ce9264cf1 | |||
ccd6548da0 | |||
3f95366a5f | |||
1b9eb3a6e1 | |||
aa2bf466b8 | |||
ad496b54ec | |||
413cf6a1ec | |||
c52737d9b3 | |||
fca406be0d | |||
3301139cd3 | |||
1b1ae24ba1 | |||
a061ba3a40 | |||
6a3183b4c4 | |||
c8f638115a | |||
34d4ef77aa | |||
6fca99aeda | |||
64edce5c9a | |||
b09a17ae31 | |||
df4c45f5b8 | |||
de2a505613 | |||
62d55eda60 | |||
7f8605354e | |||
9f39433bba | |||
1821340f03 | |||
003c6f13c0 | |||
709cb2418f | |||
3cccb61089 | |||
1f0d882745 | |||
c265be48ff | |||
028282b30c | |||
ef7a36920f | |||
d7290836f3 | |||
ed5db34d5b | |||
a0d236b56f | |||
8dd183766d | |||
9103822ae8 | |||
f6fc1d4bdf | |||
357743c472 | |||
71cc2c21c5 | |||
5e92dccee0 | |||
db8e895e3d | |||
1b7cf19018 | |||
0502c29cdb | |||
029bd1e41f | |||
32e6a78a37 | |||
57574537c8 | |||
c024a40316 | |||
80c6f3c9c3 | |||
022adf7d50 | |||
d98bf69a3b | |||
59cf0f1c1f | |||
2fe24572ae | |||
5e284e44de | |||
24d017e941 | |||
eee771f57d | |||
b46f5575f3 | |||
dbc2aaed26 | |||
8de5e4c0e5 | |||
60c1448c79 | |||
488ef48eb4 | |||
7536ad03d4 | |||
9dcd1e618c | |||
ee7f90f5f9 | |||
f9656d3a6d | |||
b32f1b4362 | |||
239324e0ab | |||
b7d63ab2ad | |||
81a91fefb6 | |||
65ef798156 | |||
928436c167 | |||
8b147866bf | |||
2db8a37ee2 | |||
bf2f8630cd | |||
edda8b9440 | |||
6d6ffef7cf | |||
117f7fc56b | |||
4f5835e881 | |||
966748c1e5 | |||
2ca80f9f20 | |||
052041ac72 | |||
0c07155261 | |||
5a218b3925 | |||
8c6393a776 | |||
5d769f55d7 | |||
122ed754f8 | |||
f1c9efb51f | |||
650cc69eb1 | |||
2ecca45463 | |||
c2c6e38f86 | |||
7be4ba1e3e | |||
a0c2c2e74d | |||
90db3844b2 | |||
1af529fd85 | |||
e03a96f683 | |||
762e8020d7 | |||
767c4b6b74 | |||
99f69a558d | |||
f9ab29e003 | |||
9dd9e7185e | |||
c7055c751a | |||
9f08bbea78 | |||
6bf2c1cafc | |||
49442587e0 | |||
a4320027db | |||
371ef1c8f1 | |||
d89d01b495 | |||
cc813a34b6 | |||
082e1cfe0d | |||
e1f8924f41 | |||
6c5121dd54 | |||
4e20c13275 | |||
a7b1a12458 | |||
787d709c45 | |||
7b8f3bff95 | |||
e4b5afb423 | |||
c8b026881e | |||
53bba8f92e | |||
b763a09919 | |||
3678b80560 | |||
ab2bb2f705 | |||
38836acf01 | |||
3eabe2fddd | |||
12d64dce7c | |||
898d9c4b66 | |||
c40d93b8de | |||
343787d252 | |||
42b23d06d0 | |||
379d4101d3 | |||
eb5fd2705f | |||
55c7bd0b28 | |||
4422e2ca67 | |||
cad5015d08 | |||
4bb85c1664 | |||
b1b29546fd | |||
873e117f21 | |||
d9519ca1da | |||
fcd1b70ef0 | |||
143017a55d | |||
6298896219 | |||
03dbe6225a | |||
e84f18d303 | |||
59f0c1f7d8 | |||
f57467139d | |||
184c4340ab | |||
51df4a5453 | |||
fd934cbff3 | |||
d178b3bb8b | |||
03eb9ab6e7 | |||
05572ab69c | |||
d98a57fbd2 | |||
960b57890d | |||
4e5f0ed5fa | |||
3f13162ebf | |||
1e715f1f46 | |||
d7365dc276 | |||
be1edb411a | |||
4c929adeb0 | |||
e4111019fd | |||
819bdd2eae | |||
fd9e2b82fa | |||
cc31ba15cc | |||
c12b4bfc9c | |||
7351e1be78 | |||
f203732a94 | |||
1b53634d0b | |||
757c3a750a | |||
9e41240cdd | |||
ddbee7f692 | |||
ab9bd17296 | |||
21f1c9f0bc | |||
4d890fb9f7 | |||
b24b42488b | |||
f5f4c5c267 | |||
b6f0f453e3 | |||
5dee29be70 | |||
e43d577871 | |||
f3ddc2bdde | |||
b4caabcbb0 | |||
33ab66fbb5 | |||
ee7ae5bcb0 | |||
2a0e5325c0 | |||
6de7f58df3 | |||
2f31ac0d6a | |||
ee9935d9c6 | |||
8369d36a2e | |||
4a2b5ffc39 | |||
bb865f6244 | |||
cfb5dcbb54 | |||
94019c6d51 | |||
d9f90d4880 | |||
6e7bf9edd0 | |||
8e63339424 | |||
6dd0fa0301 | |||
4b3792be11 | |||
9def02fa36 | |||
a62da4a224 | |||
15e507ebb0 | |||
0abcfeac78 | |||
9afc9425e8 | |||
85b851ec42 | |||
30dee6d345 | |||
71e80785bc | |||
7609b5e50c | |||
167d60b0fa | |||
5a72b4b6d4 | |||
08a0c4e4b8 | |||
7a4f314d2c | |||
46a0455a26 | |||
1206448e3f | |||
0e159b31f6 | |||
8e0f439765 | |||
97efc3ae74 | |||
bda3299f1e | |||
668faaf4fd | |||
811419bfe8 | |||
57bc1e1145 | |||
658792a0ae | |||
70c6d8e732 | |||
e41511512d | |||
f7b779aa6f | |||
a7bb3c51e7 | |||
74366235d1 | |||
0ddfa65e50 | |||
09fa949979 | |||
036f52248f | |||
b1b77bd8fb | |||
e75b6c4ec7 | |||
c6d6be56d6 | |||
027c4766a6 | |||
48dbfa66c9 | |||
51063de92f | |||
4692f764e8 | |||
5cb1a08052 | |||
9b65ff59fe | |||
6c58c58a51 | |||
6aaa73dfdf | |||
ee20b4a7b6 | |||
4e6ecd3231 | |||
0f58c30fca | |||
4c62b31767 | |||
c8f5a9819c | |||
1bc0815dd4 | |||
249262483c | |||
a274d7356b | |||
ccfc188075 | |||
f4ff17f56c | |||
2b4111cb15 | |||
22dc766c4c | |||
bb70186f7c | |||
15fb305fba | |||
cfdd465bb1 | |||
c3b9e0a3a6 | |||
53b6dadc8f | |||
25a323f008 | |||
62b2c012a5 | |||
94ad011760 | |||
a06e2f4f97 | |||
e5a3676adb | |||
709fd4c78b | |||
e43e6971d9 | |||
f0f752b6c5 | |||
8f81558f9d | |||
93a096540b | |||
9e136127d1 | |||
af3f2ea946 | |||
2835d2b89d | |||
c566e445fd | |||
a23712d138 | |||
b977804a48 | |||
a9adedba1e | |||
04a7f6e75c | |||
a1ce705fae | |||
aeba9fb488 | |||
ed822d11e6 | |||
67b488904c | |||
a2f69c646a | |||
787982c35b | |||
166bad79b4 | |||
9083499cc8 | |||
338e28e8c6 | |||
0510059d85 | |||
5b77a78e76 | |||
b0f199a2b0 | |||
dee1c7161d | |||
98892460d4 | |||
ec6971b9c4 | |||
da233b3b27 | |||
6792993ba6 | |||
759b22199e | |||
a73fa759eb | |||
734a8f02e2 | |||
e1b93121eb | |||
acea8f12d8 | |||
394c15ee95 | |||
14cf4dda79 | |||
0241f6f746 | |||
527e6da88c | |||
8eba8dea7a | |||
9642c4da60 | |||
f07883e216 | |||
5149b6840e | |||
24448cfbb1 | |||
5983c567de | |||
aa84653a5c | |||
218ae90ff8 | |||
f7f6f8fa49 | |||
ea378239e0 | |||
e10d1cf8b3 | |||
193cf19413 | |||
43bb3227d5 | |||
495ad3a2c8 | |||
b47c93a490 | |||
5dda9fd831 | |||
1c4b4796b3 | |||
dfbdc85a28 | |||
55b9e2e7ee | |||
92800877d2 | |||
b6e7bf0af2 | |||
7378d4fd86 | |||
e1d2e34d2d | |||
57725a904a | |||
9f30db8fad | |||
2b0b1518c7 | |||
028cf3f270 | |||
3cc5a3b2b4 | |||
9a270e5694 | |||
69df73b4eb | |||
87c1f1ccd6 | |||
6382a95f11 | |||
f77de7253d | |||
fd4bec64f2 | |||
3d43f4d7e0 | |||
02ffd643fb | |||
d57da904e2 | |||
0d0c0e876d | |||
94db3ba86c | |||
ef657d109e | |||
a49127da0d | |||
d3de793962 | |||
45577ddd37 | |||
2a36a1e32f | |||
2049c855fe | |||
fcd29e1cec | |||
e8c8c11c7f | |||
f9fed41576 | |||
83bb38e472 | |||
60279079cc | |||
35b981044c | |||
6b163f79ca | |||
8b52197e81 | |||
5c018f8a0e | |||
7842b98a7d | |||
ac5ca6404c | |||
105c7c021d | |||
5a29344d47 | |||
72b9a4a30f | |||
8b4e6a53c8 | |||
74a876b40e | |||
598bf30126 | |||
7f79e67bbe | |||
1b1c9230b3 | |||
ec9213bf4f | |||
2b1e159301 | |||
854ddf4ccd | |||
332e8aae69 | |||
907ac33c1e | |||
704c8619a6 | |||
e88e1d4c18 | |||
a26e7cdfb3 | |||
3e8759ab47 | |||
30b29dc5ae | |||
6451e5f022 | |||
c958a214f5 | |||
bd40eda2a0 | |||
d53d815e80 | |||
79adde2782 | |||
467336b42a | |||
6bb1f530d8 | |||
c0e5e2a92d | |||
ecb3dbb04c | |||
d9ef8fbc5b | |||
fb06f8f264 | |||
3c68936ebc | |||
1e7cb8ac7e | |||
87c1beec12 | |||
08e2aebea2 | |||
e973f9dceb | |||
ea69ecbcf7 | |||
29a14d1b0a | |||
8039b9c896 | |||
b6c7d1448e | |||
94830053b6 | |||
fcff6be590 | |||
c6ee85492b | |||
f4343b4757 | |||
4f81463438 | |||
2e23c6c1b1 | |||
bf9a0f1a26 | |||
4df83367e4 | |||
08f4628cd2 | |||
4b482ba167 | |||
00a1414918 | |||
9b1a58d56a | |||
62a13b7b45 | |||
bf69da8ab1 | |||
7fdf22b3bd | |||
8922ddc658 | |||
582c328985 | |||
68d5cc2801 | |||
087db7fffc | |||
e519140370 | |||
f7259339db | |||
afa01d3e3b | |||
63e1060ab0 | |||
565e938118 | |||
82c150587b | |||
5b356b9ff5 | |||
df12c3ef01 | |||
c32f65a3e9 | |||
731b2d6095 | |||
a92a2c023c | |||
607fad8d2d | |||
f5eaece644 | |||
c6a8d99bf9 | |||
8543481f81 | |||
04fc693e77 | |||
b0e9ce34f2 | |||
bb2f9580df | |||
0a81f69da6 | |||
3df77990b2 | |||
8dce460010 | |||
9e022ab03c | |||
7a6b6e3286 |
298 changed files with 6983 additions and 5278 deletions
9
.editorconfig
Normal file
9
.editorconfig
Normal file
|
@ -0,0 +1,9 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
node_modules/
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
|||
[submodule "dotdrop"]
|
||||
path = dotdrop
|
||||
url = https://github.com/deadc0de6/dotdrop.git
|
50
.husky/pre-commit
Executable file
50
.husky/pre-commit
Executable file
|
@ -0,0 +1,50 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Source husky
|
||||
# shellcheck disable=SC1091
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
echo "FunctionalHacker's dotfile pre-commit hook start"
|
||||
printf "Using shell: %s \n" "$(readlink /proc/$$/exe)"
|
||||
|
||||
# All staged files
|
||||
staged_files=$(git diff --name-only --cached --diff-filter=d)
|
||||
|
||||
# Run taplo on staged TOML files
|
||||
staged_toml=$(echo "$staged_files" | grep '.toml$' || true)
|
||||
num_staged_toml=$(echo "$staged_toml" | grep -vce '^$' || true)
|
||||
if [ "$num_staged_toml" -gt 0 ]; then
|
||||
printf '\nFormatting %s staged TOML files with taplo\n' "$num_staged_toml"
|
||||
taplo format "$staged_toml"
|
||||
printf "Re-staging\n"
|
||||
git add $staged_toml
|
||||
fi
|
||||
|
||||
# Run lua-format on staged Lua files
|
||||
staged_lua=$(echo "$staged_files" | grep '.lua$' || true)
|
||||
num_staged_lua=$(echo "$staged_lua" | grep -vce '^$' || true)
|
||||
if [ "$num_staged_lua" -gt 0 ]; then
|
||||
printf '\nFormatting %s staged Lua files with stylua\n' "$num_staged_lua"
|
||||
|
||||
for file in $staged_lua; do
|
||||
stylua "$file"
|
||||
done
|
||||
|
||||
printf "Re-staging\n\n"
|
||||
git add $staged_lua
|
||||
fi
|
||||
|
||||
# Run shfmt on staged shell scripts
|
||||
staged_sh=$(echo "$staged_files" | grep -E '(.sh$|pre-commit)' || true)
|
||||
num_staged_sh=$(echo "$staged_sh" | grep -vce '^$' || true)
|
||||
if [ "$num_staged_sh" -gt 0 ]; then
|
||||
printf '\nFormatting %s staged shell scripts with shfmt\n' "$num_staged_sh"
|
||||
shfmt -w $staged_sh
|
||||
printf "Re-staging\n\n"
|
||||
git add $staged_sh
|
||||
fi
|
||||
|
||||
# Run prettier on all other staged files
|
||||
# that are supported
|
||||
printf "\nRunning prettier on all supported files\n"
|
||||
npx pretty-quick --staged
|
1
.ignore
Normal file
1
.ignore
Normal file
|
@ -0,0 +1 @@
|
|||
dotdrop/
|
3
.prettierignore
Normal file
3
.prettierignore
Normal file
|
@ -0,0 +1,3 @@
|
|||
package-lock.json
|
||||
lazy-lock.json
|
||||
dotdrop/
|
4
.prettierrc.toml
Normal file
4
.prettierrc.toml
Normal file
|
@ -0,0 +1,4 @@
|
|||
"$schema" = "https://json.schemastore.org/prettierrc.json"
|
||||
trailingComma = "es5"
|
||||
singleQuote = true
|
||||
tabWidth = 2
|
21
LICENSE
21
LICENSE
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 Marko Korhonen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
14
LICENSE.adoc
Normal file
14
LICENSE.adoc
Normal file
|
@ -0,0 +1,14 @@
|
|||
== The MIT License (MIT)
|
||||
|
||||
Copyright (c) {localyear} Marko Korhonen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”),
|
||||
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
README.adoc
Normal file
23
README.adoc
Normal file
|
@ -0,0 +1,23 @@
|
|||
= FunctionalHacker's dotfiles
|
||||
|
||||
image:https://i.imgur.com/lz1Q4Zz.png?raw=true%22[screenshot of my
|
||||
setup]
|
||||
|
||||
My personal dotfiles for my workstations, mostly for easy access for
|
||||
myself but feel free to steal them for yourself!
|
||||
|
||||
I’m using https://github.com/deadc0de6/dotdrop[dotdrop] to manage and
|
||||
ease deployment of my dotfiles.
|
||||
|
||||
== Mirrors
|
||||
|
||||
This repository lives at https://git.korhonen.cc/FunctionalHacker/dotfiles[my git server],
|
||||
but it is also mirrored to:
|
||||
|
||||
* https://gitlab.com/FunctionalHacker/dotfiles[GitLab]
|
||||
* https://github.com/FunctionalHacker/dotfiles[GitHub]
|
||||
* https://bitbucket.org/FunctionalHacker/dotfiles[Bitbucket]
|
||||
* https://codeberg.org/FunctionalHacker/dotfiles[codeberg]
|
||||
|
||||
If you have any ideas for improvements, questions or anything of this
|
||||
sort, you can open an issue or a pull request at any of the mirrors.
|
16
README.md
16
README.md
|
@ -1,16 +0,0 @@
|
|||
# ReekyMarko's dotfiles
|
||||

|
||||
|
||||
My personal dotfiles for my workstations, mostly for easy access for myself
|
||||
but feel free to steal them for yourself!
|
||||
|
||||
I'm using [dotdrop](https://github.com/deadc0de6/dotdrop) to manage and ease deployment of my dotfiles.
|
||||
|
||||
## Mirrors
|
||||
This repository lives at [ReekyNET Git](https://git.reekynet.com/ReekyMarko/dotfiles), but it is also mirrored to:
|
||||
- [GitLab](https://gitlab.com/ReekyMarko/dotfiles)
|
||||
- [GitHub](https://github.com/ReekyMarko/dotfiles)
|
||||
- [Bitbucket](https://bitbucket.org/ReekyMarko/dotfiles)
|
||||
- [codeberg](https://codeberg.org/ReekyMarko/dotfiles)
|
||||
|
||||
If you have any ideas for improvements, questions or anything of this sort, you can open an issue or a pull request in either ReekyNET Git (registrations open for anyone), or any of the mirrors.
|
248
config-home.yaml
248
config-home.yaml
|
@ -1,248 +0,0 @@
|
|||
actions:
|
||||
vim-plug: nvim +PlugInstall +qall
|
||||
zplug: zplug install
|
||||
waybar: systemctl --user restart waybar
|
||||
mako: systemctl --user restart mako
|
||||
config:
|
||||
backup: true
|
||||
banner: true
|
||||
create: true
|
||||
dotpath: home
|
||||
ignoreempty: false
|
||||
keepdot: true
|
||||
link_dotfile_default: nolink
|
||||
link_on_import: nolink
|
||||
longkey: false
|
||||
showdiff: false
|
||||
workdir: ~/.config/dotdrop
|
||||
dotfiles:
|
||||
d_systemd:
|
||||
dst: ~/.config/systemd/user
|
||||
src: .config/systemd/user
|
||||
d_mpv:
|
||||
dst: ~/.config/mpv
|
||||
src: .config/mpv
|
||||
d_nvim_config:
|
||||
actions:
|
||||
- vim-plug
|
||||
dst: ~/.config/nvim/conf.d
|
||||
src: .config/nvim/conf.d
|
||||
d_scripts:
|
||||
dst: ~/Scripts
|
||||
src: Scripts
|
||||
d_sway:
|
||||
dst: ~/.config/sway
|
||||
src: .config/sway
|
||||
d_ticons:
|
||||
dst: ~/.local/share/TelegramDesktop/tdata/ticons
|
||||
src: .local/share/TelegramDesktop/tdata/ticons
|
||||
d_waybar:
|
||||
actions:
|
||||
- waybar
|
||||
dst: ~/.config/waybar
|
||||
src: .config/waybar
|
||||
f_abcde.conf:
|
||||
dst: ~/.abcde.conf
|
||||
src: .abcde.conf
|
||||
f_alacritty.yml:
|
||||
dst: ~/.config/alacritty/alacritty.yml
|
||||
src: .config/alacritty/alacritty.yml
|
||||
f_authorized_keys:
|
||||
dst: ~/.ssh/authorized_keys
|
||||
src: .ssh/authorized_keys
|
||||
f_beets_config:
|
||||
dst: ~/.config/beets/config.yaml
|
||||
src: .config/beets/config.yaml
|
||||
f_beets_whitelist:
|
||||
dst: ~/.config/beets/whitelist
|
||||
src: .config/beets/whitelist
|
||||
f_bspwmrc:
|
||||
dst: ~/.config/bspwm/bspwmrc
|
||||
src: .config/bspwm/bspwmrc
|
||||
f_coc-settings.json:
|
||||
dst: ~/.config/nvim/coc-settings.json
|
||||
src: .config/nvim/coc-settings.json
|
||||
f_gitconfig:
|
||||
dst: ~/.gitconfig
|
||||
src: .gitconfig
|
||||
f_init.vim:
|
||||
dst: ~/.config/nvim/init.vim
|
||||
src: .config/nvim/init.vim
|
||||
f_libra_config:
|
||||
dst: ~/.config/libra/config.toml
|
||||
src: .config/libra/config.toml
|
||||
f_mailcap:
|
||||
dst: ~/.mailcap
|
||||
src: .mailcap
|
||||
f_makepkg.conf:
|
||||
dst: ~/.config/pacman/makepkg.conf
|
||||
src: .config/pacman/makepkg.conf
|
||||
f_mako_config:
|
||||
dst: ~/.config/mako/config
|
||||
src: .config/mako/config
|
||||
actions:
|
||||
- mako
|
||||
f_mimeo_associations.txt:
|
||||
dst: ~/.config/mimeo/associations.txt
|
||||
src: .config/mimeo/associations.txt
|
||||
f_mpd.conf:
|
||||
dst: ~/.config/mpd/mpd.conf
|
||||
src: .config/mpd/mpd.conf
|
||||
f_mpdris2.conf:
|
||||
dst: ~/.config/mpDris2/mpDris2.conf
|
||||
src: .config/mpDris2/mpDris2.conf
|
||||
f_mpdscribble.conf:
|
||||
dst: ~/.mpdscribble/mpdscribble.conf
|
||||
src: .mpdscribble/mpdscribble.conf
|
||||
f_ncmpcpp_bindings:
|
||||
dst: ~/.config/ncmpcpp/bindings
|
||||
src: .config/ncmpcpp/bindings
|
||||
f_ranger.conf:
|
||||
dst: ~/.config/ranger/rc.conf
|
||||
src: .config/ranger/rc.conf
|
||||
f_ranger_commands.py:
|
||||
dst: ~/.config/ranger/commands.py
|
||||
src: .config/ranger/commands.py
|
||||
f_redshift.conf:
|
||||
dst: ~/.config/redshift/redshift.conf
|
||||
src: .config/redshift/redshift.conf
|
||||
f_rofi-pass.conf:
|
||||
dst: ~/.config/rofi-pass/config
|
||||
src: .config/rofi-pass/config
|
||||
f_rtv.cfg:
|
||||
dst: ~/.config/rtv/rtv.cfg
|
||||
src: .config/rtv/rtv.cfg
|
||||
f_ssh.conf:
|
||||
dst: ~/.ssh/config
|
||||
src: .ssh/config
|
||||
f_steam-native.desktop:
|
||||
dst: ~/.local/share/applications/steam-native.desktop
|
||||
src: .local/share/applications/steam-native.desktop
|
||||
f_tdesktop_lang.strings:
|
||||
dst: ~/.config/telegram-desktop/lang.strings
|
||||
src: .config/telegram-desktop/lang.strings
|
||||
f_tmux.conf:
|
||||
dst: ~/.tmux.conf
|
||||
src: .tmux.conf
|
||||
f_yay_config.json:
|
||||
dst: ~/.config/yay/config.json
|
||||
src: .config/yay/config.json
|
||||
f_youtube-dl_config:
|
||||
dst: ~/.config/youtube-dl/config
|
||||
src: .config/youtube-dl/config
|
||||
f_youtube-viewer.conf:
|
||||
dst: ~/.config/youtube-viewer/youtube-viewer.conf
|
||||
src: .config/youtube-viewer/youtube-viewer.conf
|
||||
f_zathurarc:
|
||||
dst: ~/.config/zathura/zathurarc
|
||||
src: .config/zathura/zathurarc
|
||||
f_zprofile:
|
||||
dst: ~/.zprofile
|
||||
src: .zprofile
|
||||
f_zshrc:
|
||||
dst: ~/.zshrc
|
||||
src: .zshrc
|
||||
d_rofi:
|
||||
src: .config/rofi
|
||||
dst: ~/.config/rofi
|
||||
d_zsh:
|
||||
src: .config/zsh
|
||||
dst: ~/.config/zsh
|
||||
f_fonts.conf:
|
||||
src: .config/fontconfig/fonts.conf
|
||||
dst: ~/.config/fontconfig/fonts.conf
|
||||
f_ignore:
|
||||
src: .ignore
|
||||
dst: ~/.ignore
|
||||
f_nvimpager_init.vim:
|
||||
src: .config/nvimpager/init.vim
|
||||
dst: ~/.config/nvimpager/init.vim
|
||||
f_ncmpcpp.conf:
|
||||
src: .config/ncmpcpp/config
|
||||
dst: ~/.config/ncmpcpp/config
|
||||
d_efistub:
|
||||
src: .EFISTUB
|
||||
dst: ~/.EFISTUB
|
||||
f_hushlogin:
|
||||
src: .hushlogin
|
||||
dst: ~/.hushlogin
|
||||
profiles:
|
||||
Base:
|
||||
dotfiles:
|
||||
- d_systemd
|
||||
Media:
|
||||
dotfiles:
|
||||
- f_beets_config
|
||||
- f_beets_whitelist
|
||||
- f_abcde.conf
|
||||
- d_mpv
|
||||
- f_youtube-dl_config
|
||||
- f_mpd.conf
|
||||
- f_ncmpcpp_bindings
|
||||
- f_ncmpcpp.conf
|
||||
- f_libra_config
|
||||
- f_mpdscribble.conf
|
||||
- f_mpdris2.conf
|
||||
- f_youtube-viewer.conf
|
||||
Sway:
|
||||
dotfiles:
|
||||
- d_sway
|
||||
- d_waybar
|
||||
- d_rofi
|
||||
- f_mako_config
|
||||
- f_redshift.conf
|
||||
- f_rofi-pass.conf
|
||||
- f_zathurarc
|
||||
- f_mimeo_associations.txt
|
||||
- f_tdesktop_lang.strings
|
||||
- f_fonts.conf
|
||||
Pacman:
|
||||
dotfiles:
|
||||
- f_yay_config.json
|
||||
- f_makepkg.conf
|
||||
Mirkwood:
|
||||
dotfiles:
|
||||
- d_efistub
|
||||
include:
|
||||
- Base
|
||||
- Terminal
|
||||
- Media
|
||||
- Sway
|
||||
- Pacman
|
||||
ReekyRaspberry:
|
||||
include:
|
||||
- Terminal
|
||||
Rivendell:
|
||||
include:
|
||||
- Terminal
|
||||
- Media
|
||||
- Pacman
|
||||
Terminal:
|
||||
dotfiles:
|
||||
- f_nvimpager_init.vim
|
||||
- f_hushlogin
|
||||
- f_ignore
|
||||
- f_ranger_commands.py
|
||||
- f_rtv.cfg
|
||||
- f_mailcap
|
||||
- d_zsh
|
||||
- f_zshrc
|
||||
- f_tmux.conf
|
||||
- f_gitconfig
|
||||
- f_ranger.conf
|
||||
- f_ssh.conf
|
||||
- f_authorized_keys
|
||||
- d_scripts
|
||||
- d_nvim_config
|
||||
- f_init.vim
|
||||
- f_coc-settings.json
|
||||
- f_gitconfig
|
||||
- f_alacritty.yml
|
||||
AnittaPC:
|
||||
include:
|
||||
- Terminal
|
||||
- Pacman
|
||||
TakamakiPC:
|
||||
include:
|
||||
- Terminal
|
||||
- Pacman
|
278
config-root.toml
Normal file
278
config-root.toml
Normal file
|
@ -0,0 +1,278 @@
|
|||
[actions]
|
||||
mkinitcpio = "mkinitcpio -P"
|
||||
|
||||
[config]
|
||||
backup = true
|
||||
banner = true
|
||||
create = true
|
||||
dotpath = "root"
|
||||
ignoreempty = false
|
||||
keepdot = true
|
||||
link_dotfile_default = "nolink"
|
||||
link_on_import = "nolink"
|
||||
longkey = false
|
||||
showdiff = false
|
||||
workdir = "~/.config/sdotdrop"
|
||||
|
||||
[dotfiles."f_60-uinput-permissions.rules"]
|
||||
dst = "/etc/udev/rules.d/60-uinput-permissions.rules"
|
||||
src = "etc/udev/rules.d/60-uinput-permissions.rules"
|
||||
|
||||
[dotfiles."f_yubikey_udev.rules"]
|
||||
dst = "/etc/udev/rules.d/20-yubikey.rules"
|
||||
src = "etc/udev/rules.d/20-yubikey.rules"
|
||||
|
||||
[dotfiles.d_bin]
|
||||
dst = "/usr/local/bin"
|
||||
src = "usr/local/bin"
|
||||
|
||||
[dotfiles.d_network]
|
||||
src = "etc/systemd/network"
|
||||
dst = "/etc/systemd/network"
|
||||
|
||||
[dotfiles."f_networkd.conf"]
|
||||
src = "etc/systemd/networkd.conf"
|
||||
dst = "/etc/systemd/networkd.conf"
|
||||
|
||||
[dotfiles."f_99-sysctl.conf"]
|
||||
dst = "/etc/sysctl.d/99-sysctl.conf"
|
||||
src = "etc/sysctl.d/99-sysctl.conf"
|
||||
|
||||
[dotfiles."f_adb.service"]
|
||||
dst = "/etc/systemd/system/adb.service"
|
||||
src = "etc/systemd/system/adb.service"
|
||||
|
||||
[dotfiles."f_clamd.conf"]
|
||||
dst = "/etc/clamav/clamd.conf"
|
||||
src = "etc/clamav/clamd.conf"
|
||||
|
||||
[dotfiles.f_cryptissue]
|
||||
dst = "/etc/cryptissue"
|
||||
src = "etc/cryptissue"
|
||||
|
||||
[dotfiles."f_detected.sh"]
|
||||
dst = "/etc/clamav/detected.sh"
|
||||
src = "etc/clamav/detected.sh"
|
||||
|
||||
[dotfiles."f_freetype2.sh"]
|
||||
dst = "/etc/profile.d/freetype2.sh"
|
||||
src = "etc/profile.d/freetype2.sh"
|
||||
|
||||
[dotfiles."f_fonts.conf"]
|
||||
dst = "/etc/fonts/local.conf"
|
||||
src = "etc/fonts/local.conf"
|
||||
|
||||
[dotfiles."f_locale.conf"]
|
||||
dst = "/etc/locale.conf"
|
||||
src = "etc/locale.conf"
|
||||
|
||||
[dotfiles."f_locale.gen"]
|
||||
dst = "/etc/locale.gen"
|
||||
src = "etc/locale.gen"
|
||||
|
||||
[dotfiles."f_logind.conf"]
|
||||
dst = "/etc/systemd/logind.conf"
|
||||
src = "etc/systemd/logind.conf"
|
||||
|
||||
[dotfiles."f_bluetooth.conf"]
|
||||
dst = "/etc/bluetooth/main.conf"
|
||||
src = "etc/bluetooth/main.conf"
|
||||
|
||||
[dotfiles."f_pacman.conf"]
|
||||
dst = "/etc/pacman.conf"
|
||||
src = "etc/pacman.conf"
|
||||
|
||||
[dotfiles.f_pacman_zsh_hook]
|
||||
dst = "/etc/pacman.d/hooks/zsh.hook"
|
||||
src = "etc/pacman.d/hooks/zsh.hook"
|
||||
|
||||
[dotfiles."f_plymouthd.conf"]
|
||||
src = "etc/plymouth/plymouthd.conf"
|
||||
dst = "/etc/plymouth/plymouthd.conf"
|
||||
|
||||
[dotfiles.f_sshd_config]
|
||||
dst = "/etc/ssh/sshd_config"
|
||||
src = "etc/ssh/sshd_config"
|
||||
|
||||
[dotfiles."f_welcomemessage.conf"]
|
||||
dst = "/etc/welcomemessage.conf"
|
||||
src = "etc/welcomemessage.conf"
|
||||
|
||||
[dotfiles."f_99-conbee-usb-serial.rules"]
|
||||
src = "etc/udev/rules.d/99-conbee-usb-serial.rules"
|
||||
dst = "/etc/udev/rules.d/99-conbee-usb-serial.rules"
|
||||
|
||||
[dotfiles."f_99-lowbat.rules"]
|
||||
src = "etc/udev/rules.d/99-lowbat.rules"
|
||||
dst = "/etc/udev/rules.d/99-lowbat.rules"
|
||||
|
||||
[dotfiles."f_sleep.conf"]
|
||||
src = "etc/systemd/sleep.conf"
|
||||
dst = "/etc/systemd/sleep.conf"
|
||||
|
||||
[dotfiles.f_fstab]
|
||||
src = "etc/fstab"
|
||||
dst = "/etc/fstab"
|
||||
|
||||
[dotfiles.f_ignore]
|
||||
src = ".ignore"
|
||||
dst = "/.ignore"
|
||||
|
||||
[dotfiles."f_mkinitcpio.conf"]
|
||||
src = "etc/mkinitcpio.conf"
|
||||
dst = "/etc/mkinitcpio.conf"
|
||||
actions = ["mkinitcpio"]
|
||||
|
||||
[dotfiles."f_vconsole.conf"]
|
||||
src = "etc/vconsole.conf"
|
||||
dst = "/etc/vconsole.conf"
|
||||
|
||||
[dotfiles."f_20-quiet-printk.conf"]
|
||||
src = "etc/sysctl.d/20-quiet-printk.conf"
|
||||
dst = "/etc/sysctl.d/20-quiet-printk.conf"
|
||||
|
||||
[dotfiles."f_system.conf"]
|
||||
src = "etc/systemd/system.conf"
|
||||
dst = "/etc/systemd/system.conf"
|
||||
|
||||
[dotfiles.f_cpupower]
|
||||
src = "etc/default/cpupower"
|
||||
dst = "/etc/default/cpupower"
|
||||
|
||||
[dotfiles."f_pacserve.service.conf"]
|
||||
src = "etc/pacserve/pacserve.service.conf"
|
||||
dst = "/etc/pacserve/pacserve.service.conf"
|
||||
|
||||
[dotfiles."f_mkinitcpio_linux.preset"]
|
||||
src = "etc/mkinitcpio.d/linux.preset"
|
||||
dst = "/etc/mkinitcpio.d/linux.preset"
|
||||
|
||||
[dotfiles.f_cmdline]
|
||||
src = "etc/kernel/cmdline"
|
||||
dst = "/etc/kernel/cmdline"
|
||||
actions = ["mkinitcpio"]
|
||||
|
||||
[dotfiles."f_timesyncd.conf"]
|
||||
src = "etc/systemd/timesyncd.conf"
|
||||
dst = "/etc/systemd/timesyncd.conf"
|
||||
|
||||
[dotfiles.f_sudoers_pacman]
|
||||
src = "etc/sudoers.d/pacman"
|
||||
dst = "/etc/sudoers.d/pacman"
|
||||
|
||||
[dotfiles."f_doas.conf"]
|
||||
src = "etc/doas.conf"
|
||||
dst = "/etc/doas.conf"
|
||||
|
||||
[dotfiles."f_flexo.toml"]
|
||||
src = "etc/flexo/flexo.toml"
|
||||
dst = "/etc/flexo/flexo.toml"
|
||||
|
||||
[profiles.Locale]
|
||||
dotfiles = ["f_locale.conf", "f_locale.gen"]
|
||||
|
||||
[profiles.Pacman]
|
||||
dotfiles = [
|
||||
"f_pacman.conf",
|
||||
"f_pacman_zsh_hook",
|
||||
"f_pacserve.service.conf",
|
||||
"f_sudoers_pacman",
|
||||
]
|
||||
|
||||
[profiles.Mirkwood]
|
||||
dotfiles = [
|
||||
"d_bin",
|
||||
"f_20-quiet-printk.conf",
|
||||
"f_60-uinput-permissions.rules",
|
||||
"f_99-lowbat.rules",
|
||||
"f_adb.service",
|
||||
"f_bluetooth.conf",
|
||||
"f_cmdline",
|
||||
"f_cpupower",
|
||||
"f_cryptissue",
|
||||
"f_doas.conf",
|
||||
"f_fonts.conf",
|
||||
"f_freetype2.sh",
|
||||
"f_ignore",
|
||||
"f_logind.conf",
|
||||
"f_mkinitcpio.conf",
|
||||
"f_mkinitcpio_linux.preset",
|
||||
"f_plymouthd.conf",
|
||||
"f_sshd_config",
|
||||
"f_system.conf",
|
||||
"f_timesyncd.conf",
|
||||
"f_welcomemessage.conf",
|
||||
"f_flexo.toml",
|
||||
]
|
||||
include = ["Locale", "Pacman"]
|
||||
|
||||
[profiles.VentoyArch]
|
||||
dotfiles = [
|
||||
"d_bin",
|
||||
"f_cmdline",
|
||||
"f_doas.conf",
|
||||
"f_fonts.conf",
|
||||
"f_freetype2.sh",
|
||||
"f_ignore",
|
||||
"f_logind.conf",
|
||||
"f_mkinitcpio.conf",
|
||||
"f_mkinitcpio_linux.preset",
|
||||
"f_plymouthd.conf",
|
||||
"f_system.conf",
|
||||
"f_timesyncd.conf",
|
||||
]
|
||||
include = ["Locale", "Pacman"]
|
||||
|
||||
[profiles.Shire]
|
||||
dotfiles = [
|
||||
"d_bin",
|
||||
"f_20-quiet-printk.conf",
|
||||
"f_60-uinput-permissions.rules",
|
||||
"f_99-lowbat.rules",
|
||||
"f_adb.service",
|
||||
"f_bluetooth.conf",
|
||||
"f_cmdline",
|
||||
"f_cpupower",
|
||||
"f_doas.conf",
|
||||
"f_fonts.conf",
|
||||
"f_freetype2.sh",
|
||||
"f_ignore",
|
||||
"f_logind.conf",
|
||||
"f_mkinitcpio.conf",
|
||||
"f_mkinitcpio_linux.preset",
|
||||
"f_plymouthd.conf",
|
||||
"f_sshd_config",
|
||||
"f_system.conf",
|
||||
]
|
||||
include = ["Locale", "Pacman"]
|
||||
|
||||
[profiles.Moria]
|
||||
include = ["Locale", "Pacman"]
|
||||
dotfiles = [
|
||||
"f_99-sysctl.conf",
|
||||
"f_cmdline",
|
||||
"f_cpupower",
|
||||
"f_doas.conf",
|
||||
"f_adb.service",
|
||||
"f_mkinitcpio.conf",
|
||||
"f_mkinitcpio_linux.preset",
|
||||
"f_plymouthd.conf",
|
||||
"f_sshd_config",
|
||||
"f_flexo.toml",
|
||||
]
|
||||
|
||||
[profiles.Tirion]
|
||||
dotfiles = ["f_doas.conf", "f_ignore", "f_sshd_config"]
|
||||
|
||||
[profiles.Gondor]
|
||||
include = ["Locale", "Pacman"]
|
||||
dotfiles = ["f_doas.conf", "f_sshd_config"]
|
||||
|
||||
[profiles.localhost]
|
||||
include = ["Locale"]
|
||||
|
||||
[profiles.Edoras]
|
||||
include = ["Pacman"]
|
||||
|
||||
[profiles.mko-laptop]
|
||||
dotfiles = ["f_cpupower", "f_doas.conf", "f_timesyncd.conf"]
|
170
config-root.yaml
170
config-root.yaml
|
@ -1,170 +0,0 @@
|
|||
config:
|
||||
backup: true
|
||||
banner: true
|
||||
create: true
|
||||
dotpath: root
|
||||
ignoreempty: false
|
||||
keepdot: true
|
||||
link_dotfile_default: nolink
|
||||
link_on_import: nolink
|
||||
longkey: false
|
||||
showdiff: false
|
||||
workdir: ~/.config/sdotdrop
|
||||
dotfiles:
|
||||
f_60-uinput-permissions.rules:
|
||||
dst: /etc/udev/rules.d/60-uinput-permissions.rules
|
||||
src: etc/udev/rules.d/60-uinput-permissions.rules
|
||||
d_bin:
|
||||
dst: /usr/local/bin
|
||||
src: usr/local/bin
|
||||
f_99-sysctl.conf:
|
||||
dst: /etc/sysctl.d/99-sysctl.conf
|
||||
src: etc/sysctl.d/99-sysctl.conf
|
||||
f_adb.service:
|
||||
dst: /etc/systemd/system/adb.service
|
||||
src: etc/systemd/system/adb.service
|
||||
f_clamd.conf:
|
||||
dst: /etc/clamav/clamd.conf
|
||||
src: etc/clamav/clamd.conf
|
||||
f_cryptissue:
|
||||
dst: /etc/cryptissue
|
||||
src: etc/cryptissue
|
||||
f_detected.sh:
|
||||
dst: /etc/clamav/detected.sh
|
||||
src: etc/clamav/detected.sh
|
||||
f_environment:
|
||||
dst: /etc/environment
|
||||
src: etc/environment
|
||||
f_freetype2.sh:
|
||||
dst: /etc/profile.d/freetype2.sh
|
||||
src: etc/profile.d/freetype2.sh
|
||||
f_iwd@.service:
|
||||
dst: /etc/systemd/system/iwd@.service
|
||||
src: etc/systemd/system/iwd@.service
|
||||
f_loader.conf:
|
||||
dst: /boot/loader/loader.conf
|
||||
src: boot/loader/loader.conf
|
||||
f_fonts.conf:
|
||||
dst: /etc/fonts/local.conf
|
||||
src: etc/fonts/local.conf
|
||||
f_locale.conf:
|
||||
dst: /etc/locale.conf
|
||||
src: etc/locale.conf
|
||||
f_locale.gen:
|
||||
dst: /etc/locale.gen
|
||||
src: etc/locale.gen
|
||||
f_logind.conf:
|
||||
dst: /etc/systemd/logind.conf
|
||||
src: etc/systemd/logind.conf
|
||||
f_bluetooth.conf:
|
||||
dst: /etc/bluetooth/main.conf
|
||||
src: etc/bluetooth/main.conf
|
||||
f_pacman.conf:
|
||||
dst: /etc/pacman.conf
|
||||
src: etc/pacman.conf
|
||||
f_pacserve.service.conf:
|
||||
dst: /etc/pacserve/pacserve.service.conf
|
||||
src: etc/pacserve/pacserve.service.conf
|
||||
f_sshd_config:
|
||||
dst: /etc/ssh/sshd_config
|
||||
src: etc/ssh/sshd_config
|
||||
f_timesyncd.conf:
|
||||
dst: /etc/systemd/timesyncd.conf
|
||||
src: etc/systemd/timesyncd.conf
|
||||
f_welcomemessage.conf:
|
||||
dst: /etc/welcomemessage.conf
|
||||
src: etc/welcomemessage.conf
|
||||
f_getty.conf:
|
||||
src: etc/systemd/system/getty@tty1.service.d/override.conf
|
||||
dst: /etc/systemd/system/getty@tty1.service.d/override.conf
|
||||
f_99-conbee-usb-serial.rules:
|
||||
src: etc/udev/rules.d/99-conbee-usb-serial.rules
|
||||
dst: /etc/udev/rules.d/99-conbee-usb-serial.rules
|
||||
f_99-lowbat.rules:
|
||||
src: etc/udev/rules.d/99-lowbat.rules
|
||||
dst: /etc/udev/rules.d/99-lowbat.rules
|
||||
f_sleep.conf:
|
||||
src: etc/systemd/sleep.conf
|
||||
dst: /etc/systemd/sleep.conf
|
||||
f_fstab:
|
||||
src: etc/fstab
|
||||
dst: /etc/fstab
|
||||
f_ignore:
|
||||
src: .ignore
|
||||
dst: /.ignore
|
||||
f_pacman-dl.service:
|
||||
src: etc/systemd/system/pacman-dl.service
|
||||
dst: /etc/systemd/system/pacman-dl.service
|
||||
f_pacman-dl.timer:
|
||||
src: etc/systemd/system/pacman-dl.timer
|
||||
dst: /etc/systemd/system/pacman-dl.timer
|
||||
f_zsh.hook:
|
||||
src: etc/pacman.d/hooks/zsh.hook
|
||||
dst: /etc/pacman.d/hooks/zsh.hook
|
||||
f_nightly-reboot.service:
|
||||
src: etc/systemd/system/nightly-reboot.service
|
||||
dst: /etc/systemd/system/nightly-reboot.service
|
||||
f_nightly-reboot.timer:
|
||||
src: etc/systemd/system/nightly-reboot.timer
|
||||
dst: /etc/systemd/system/nightly-reboot.timer
|
||||
f_mkinitcpio.conf:
|
||||
src: etc/mkinitcpio.conf
|
||||
dst: /etc/mkinitcpio.conf
|
||||
f_vconsole.conf:
|
||||
src: etc/vconsole.conf
|
||||
dst: /etc/vconsole.conf
|
||||
f_20-quiet-printk.conf:
|
||||
src: etc/sysctl.d/20-quiet-printk.conf
|
||||
dst: /etc/sysctl.d/20-quiet-printk.conf
|
||||
profiles:
|
||||
Locale:
|
||||
dotfiles:
|
||||
- f_locale.conf
|
||||
- f_locale.gen
|
||||
Pacman:
|
||||
dotfiles:
|
||||
- f_pacman.conf
|
||||
- f_pacserve.service.conf
|
||||
- f_pacman-dl.service
|
||||
- f_pacman-dl.timer
|
||||
Mirkwood:
|
||||
dotfiles:
|
||||
- f_getty.conf
|
||||
- f_environment
|
||||
- f_cryptissue
|
||||
- f_welcomemessage.conf
|
||||
- d_bin
|
||||
- f_adb.service
|
||||
- f_bluetooth.conf
|
||||
- f_iwd@.service
|
||||
- f_loader.conf
|
||||
- f_sshd_config
|
||||
- f_logind.conf
|
||||
- f_60-uinput-permissions.rules
|
||||
- f_freetype2.sh
|
||||
- f_fonts.conf
|
||||
- f_timesyncd.conf
|
||||
- f_99-sysctl.conf
|
||||
- f_99-lowbat.rules
|
||||
- f_ignore
|
||||
- f_zsh.hook
|
||||
- f_mkinitcpio.conf
|
||||
- f_vconsole.conf
|
||||
- f_20-quiet-printk.conf
|
||||
include:
|
||||
- Locale
|
||||
- Pacman
|
||||
Rivendell:
|
||||
include:
|
||||
- Locale
|
||||
- Pacman
|
||||
dotfiles:
|
||||
- f_getty.conf
|
||||
- f_vconsole.conf
|
||||
- f_mkinitcpio.conf
|
||||
- f_bluetooth.conf
|
||||
- f_60-uinput-permissions.rules
|
||||
- f_timesyncd.conf
|
||||
- f_sshd_config
|
||||
- f_nightly-reboot.service
|
||||
- f_nightly-reboot.timer
|
283
config.toml
Normal file
283
config.toml
Normal file
|
@ -0,0 +1,283 @@
|
|||
#:schema ../../dotdrop-config-schema.json
|
||||
|
||||
[actions]
|
||||
dconf-load = "dconf load / < ~/.config/dconf.ini"
|
||||
kanagawa-compile = "vim +KanagawaCompile +qa"
|
||||
|
||||
[config]
|
||||
backup = true
|
||||
banner = true
|
||||
create = true
|
||||
dotpath = "home"
|
||||
ignoreempty = false
|
||||
keepdot = true
|
||||
link_dotfile_default = "nolink"
|
||||
link_on_import = "nolink"
|
||||
longkey = false
|
||||
showdiff = false
|
||||
workdir = "~/.config/dotdrop"
|
||||
|
||||
[dotfiles.d_systemd]
|
||||
dst = "~/.config/systemd/user"
|
||||
src = ".config/systemd/user"
|
||||
|
||||
[dotfiles.d_mpv]
|
||||
dst = "~/.config/mpv"
|
||||
src = ".config/mpv"
|
||||
|
||||
[dotfiles.d_nvim]
|
||||
dst = "~/.config/nvim"
|
||||
src = ".config/nvim"
|
||||
actions = ["kanagawa-compile"]
|
||||
instignore = ["*-lock.json"]
|
||||
|
||||
[dotfiles."f_abcde.conf"]
|
||||
dst = "~/.abcde.conf"
|
||||
src = ".abcde.conf"
|
||||
|
||||
[dotfiles.d_ssh]
|
||||
dst = "~/.ssh"
|
||||
src = ".ssh"
|
||||
|
||||
[dotfiles.f_beets_config]
|
||||
dst = "~/.config/beets/config.yaml"
|
||||
src = ".config/beets/config.yaml"
|
||||
|
||||
[dotfiles.f_beets_whitelist]
|
||||
dst = "~/.config/beets/whitelist"
|
||||
src = ".config/beets/whitelist"
|
||||
|
||||
[dotfiles.f_gitconfig]
|
||||
dst = "~/.config/git/config"
|
||||
src = ".config/git/config"
|
||||
|
||||
[dotfiles.f_librewolf_overrides]
|
||||
dst = "~/.librewolf/librewolf.overrides.cfg"
|
||||
src = ".librewolf/librewolf.overrides.cfg"
|
||||
|
||||
[dotfiles."f_makepkg.conf"]
|
||||
dst = "~/.config/pacman/makepkg.conf"
|
||||
src = ".config/pacman/makepkg.conf"
|
||||
|
||||
[dotfiles."f_mpd.conf"]
|
||||
dst = "~/.config/mpd/mpd.conf"
|
||||
src = ".config/mpd/mpd.conf"
|
||||
|
||||
[dotfiles."f_mpdris2.conf"]
|
||||
dst = "~/.config/mpDris2/mpDris2.conf"
|
||||
src = ".config/mpDris2/mpDris2.conf"
|
||||
|
||||
[dotfiles.f_ncmpcpp_bindings]
|
||||
dst = "~/.config/ncmpcpp/bindings"
|
||||
src = ".config/ncmpcpp/bindings"
|
||||
|
||||
[dotfiles."f_ranger.conf"]
|
||||
dst = "~/.config/ranger/rc.conf"
|
||||
src = ".config/ranger/rc.conf"
|
||||
|
||||
[dotfiles."f_ranger_commands.py"]
|
||||
dst = "~/.config/ranger/commands.py"
|
||||
src = ".config/ranger/commands.py"
|
||||
|
||||
[dotfiles."f_ssh.conf"]
|
||||
dst = "~/.ssh/config"
|
||||
src = ".ssh/config"
|
||||
|
||||
[dotfiles.f_zprofile]
|
||||
dst = "~/.zprofile"
|
||||
src = ".zprofile"
|
||||
|
||||
[dotfiles.f_zshrc]
|
||||
dst = "~/.zshrc"
|
||||
src = ".zshrc"
|
||||
|
||||
[dotfiles.d_zsh]
|
||||
src = ".config/zsh"
|
||||
dst = "~/.config/zsh"
|
||||
|
||||
[dotfiles."f_fonts.conf"]
|
||||
src = ".config/fontconfig/fonts.conf"
|
||||
dst = "~/.config/fontconfig/fonts.conf"
|
||||
|
||||
[dotfiles.f_ignore]
|
||||
src = ".ignore"
|
||||
dst = "~/.ignore"
|
||||
|
||||
[dotfiles."f_ncmpcpp.conf"]
|
||||
src = ".config/ncmpcpp/config"
|
||||
dst = "~/.config/ncmpcpp/config"
|
||||
|
||||
[dotfiles.f_hushlogin]
|
||||
src = ".hushlogin"
|
||||
dst = "~/.hushlogin"
|
||||
|
||||
[dotfiles."f_paru.conf"]
|
||||
src = ".config/paru/paru.conf"
|
||||
dst = "~/.config/paru/paru.conf"
|
||||
|
||||
[dotfiles."f_foot.ini"]
|
||||
src = ".config/foot/foot.ini"
|
||||
dst = "~/.config/foot/foot.ini"
|
||||
|
||||
[dotfiles."f_gpg-agent.conf"]
|
||||
src = ".gnupg/gpg-agent.conf"
|
||||
dst = "~/.gnupg/gpg-agent.conf"
|
||||
chmod = "600"
|
||||
|
||||
[dotfiles."f_gpg.conf"]
|
||||
src = ".gnupg/gpg.conf"
|
||||
dst = "~/.gnupg/gpg.conf"
|
||||
|
||||
[dotfiles."f_gpg_scdaemon.conf"]
|
||||
src = ".gnupg/scdaemon.conf"
|
||||
dst = "~/.gnupg/scdaemon.conf"
|
||||
|
||||
[dotfiles."f_electron-flags.conf"]
|
||||
src = ".config/electron-flags.conf"
|
||||
dst = "~/.config/electron-flags.conf"
|
||||
|
||||
[dotfiles."f_electron12-flags.conf"]
|
||||
src = ".config/electron12-flags.conf"
|
||||
dst = "~/.config/electron12-flags.conf"
|
||||
|
||||
[dotfiles.f_pam_environment]
|
||||
src = ".pam_environment"
|
||||
dst = "~/.pam_environment"
|
||||
|
||||
[dotfiles."f_dconf.ini"]
|
||||
src = ".config/dconf.ini"
|
||||
dst = "~/.config/dconf.ini"
|
||||
actions = ["dconf-load"]
|
||||
|
||||
[dotfiles."f_docker-config.json"]
|
||||
src = ".docker/config.json"
|
||||
dst = "~/.docker/config.json"
|
||||
chmod = "600"
|
||||
|
||||
[dotfiles.f_npmrc]
|
||||
src = ".npmrc"
|
||||
dst = "~/.npmrc"
|
||||
chmod = "600"
|
||||
|
||||
[dotfiles.f_zellij]
|
||||
src = ".config/zellij/config.kdl"
|
||||
dst = "~/.config/zellij/config.kdl"
|
||||
|
||||
[profiles.pacman]
|
||||
dotfiles = ["f_makepkg.conf", "f_paru.conf"]
|
||||
|
||||
[profiles.terminal]
|
||||
dotfiles = [
|
||||
"d_nvim",
|
||||
"d_ssh",
|
||||
"d_zsh",
|
||||
"f_gitconfig",
|
||||
"f_hushlogin",
|
||||
"f_ignore",
|
||||
"f_ranger.conf",
|
||||
"f_ranger_commands.py",
|
||||
"f_zellij",
|
||||
"f_zshrc",
|
||||
"f_npmrc",
|
||||
]
|
||||
|
||||
[profiles.media]
|
||||
dotfiles = [
|
||||
"d_mpv",
|
||||
"f_abcde.conf",
|
||||
"f_beets_config",
|
||||
"f_beets_whitelist",
|
||||
"f_mpd.conf",
|
||||
"f_mpdris2.conf",
|
||||
"f_ncmpcpp.conf",
|
||||
"f_ncmpcpp_bindings",
|
||||
]
|
||||
|
||||
[profiles.gpg]
|
||||
dotfiles = [
|
||||
"f_gpg-agent.conf",
|
||||
"f_gpg.conf",
|
||||
"f_gpg_scdaemon.conf",
|
||||
"f_pam_environment",
|
||||
]
|
||||
|
||||
[profiles.Mirkwood]
|
||||
include = ["pacman", "terminal", "media", "gpg"]
|
||||
dotfiles = [
|
||||
"f_librewolf_overrides",
|
||||
"f_dconf.ini",
|
||||
"f_docker-config.json",
|
||||
"f_fonts.conf",
|
||||
"f_foot.ini",
|
||||
]
|
||||
|
||||
[profiles.Mirkwood.variables]
|
||||
wayland = true
|
||||
|
||||
[profiles.VentoyArch]
|
||||
include = ["pacman", "terminal", "media", "gpg"]
|
||||
dotfiles = [
|
||||
"f_dconf.ini",
|
||||
"f_fonts.conf",
|
||||
]
|
||||
|
||||
[profiles.VentoyArch.variables]
|
||||
wayland = true
|
||||
|
||||
[profiles.Shire]
|
||||
include = ["pacman", "terminal", "media", "gpg"]
|
||||
dotfiles = [
|
||||
"f_dconf.ini",
|
||||
"f_fonts.conf",
|
||||
]
|
||||
|
||||
[profiles.Shire.variables]
|
||||
wayland = true
|
||||
|
||||
[profiles.Moria]
|
||||
include = ["pacman", "terminal", "media", "gpg"]
|
||||
dotfiles = [
|
||||
"f_librewolf_overrides",
|
||||
"f_dconf.ini",
|
||||
"f_zprofile",
|
||||
"f_fonts.conf",
|
||||
"d_systemd",
|
||||
]
|
||||
|
||||
[profiles.Moria.variables]
|
||||
wayland = true
|
||||
|
||||
[profiles.Tirion]
|
||||
include = ["terminal", "gpg"]
|
||||
|
||||
[profiles.Gondor]
|
||||
include = ["pacman", "terminal"]
|
||||
|
||||
[profiles.mko-laptop]
|
||||
include = ["terminal", "media", "gpg"]
|
||||
dotfiles = ["f_librewolf_overrides", "f_dconf.ini", "d_systemd"]
|
||||
|
||||
[profiles.mko-laptop.variables]
|
||||
wayland = true
|
||||
scale_factor = 1.25
|
||||
|
||||
[profiles.Isengard]
|
||||
include = ["terminal"]
|
||||
|
||||
[profiles.Isengard.variables]
|
||||
distro_id = "termux"
|
||||
|
||||
[profiles.Edoras]
|
||||
include = ["terminal"]
|
||||
|
||||
[profiles.TakamakiPC]
|
||||
include = ["terminal"]
|
||||
|
||||
[profiles.TakamakiPC.variables]
|
||||
wayland = false
|
||||
|
||||
[profiles.localhost]
|
||||
include = ["terminal"]
|
||||
|
||||
[profiles.ViiruJaTeippi]
|
||||
include = ["terminal"]
|
52
deploy.sh
52
deploy.sh
|
@ -1,52 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# to run this, execute
|
||||
# bash <(curl -sL git.reekynet.com/ReekyMarko/dotfiles/raw/branch/master/deploy.sh)
|
||||
|
||||
# Run this to install my dotfiles on a fresh Arch Linux installation.
|
||||
# This should work on any Arch Linux install with an internet connection
|
||||
# and sudo rights
|
||||
|
||||
# When asked a hostname, make sure it's already in the dotrop config,
|
||||
# otherwise dotdrop won't install anything
|
||||
|
||||
export DOTREPO="$HOME/Git/dotfiles"
|
||||
export HOSTNAME="$(hostnamectl | head -n 1 | sed 's/ //g' | cut -d':' -f2-)"
|
||||
export DISTRO="$(lsb_release -ds | sed 's/"//g')"
|
||||
|
||||
if [ "$DISTRO" -ne "Arch Linux" ]; then
|
||||
print "Not running on Arch Linux"
|
||||
print "Other distros not supported, exiting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "Hostname [$HOSTNAME]: " -i $HOSTNAME NEWHOSTNAME
|
||||
if [ "$HOSTNAME -ne $NEWHOSTNAME" ]; then
|
||||
sudo hostnamectl set-hostname $NEWHOSTNAME
|
||||
fi
|
||||
HOSTNAME=$NEWHOSTNAME
|
||||
|
||||
# install yay
|
||||
if ! [ -x "$(command -v yay)" ]; then
|
||||
read -p "Install yay? [Y/n] " -i "y" IYAY
|
||||
if [ "$(tr '[:upper:]' ':lower:' $IYAY)" -eq "y" ]; then
|
||||
print "Installing yay"
|
||||
fi
|
||||
sudo pacman -Syu --needed --noconfirm git wget base-devel
|
||||
cd
|
||||
wget https://aur.archlinux.org/cgit/aur.git/snapshot/yay.tar.gz
|
||||
tar xfv yay.tar.gz
|
||||
cd yay
|
||||
makepkg -si --noconfirm
|
||||
cd ..
|
||||
rm -r yay*
|
||||
fi
|
||||
|
||||
mkdir ~/Git
|
||||
git clone https://git.reekynet.com/ReekyMarko/dotfiles.git $DOTREPO
|
||||
cd ~/Git/dotfiles
|
||||
git submodule init
|
||||
git submodule update
|
||||
$DOTREPO/dotdrop.sh --cfg=$DOTREPO/config-home.yaml install
|
||||
chsh -s /bin/zsh
|
||||
zsh -c "source ~/.zshrc; sdotdrop install"
|
2
docker/.gitignore
vendored
Normal file
2
docker/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*/.env
|
||||
*/DISABLED
|
75
docker/authentik/docker-compose.yaml
Normal file
75
docker/authentik/docker-compose.yaml
Normal file
|
@ -0,0 +1,75 @@
|
|||
volumes:
|
||||
redis: {}
|
||||
media: {}
|
||||
custom_templates: {}
|
||||
geoip: {}
|
||||
backups: {}
|
||||
services:
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: authentik-redis
|
||||
networks:
|
||||
- authentik
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- redis:/data
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- redis-cli ping | grep PONG
|
||||
start_period: 20s
|
||||
interval: 30s
|
||||
retries: 5
|
||||
timeout: 3s
|
||||
server:
|
||||
image: ghcr.io/goauthentik/server
|
||||
container_name: authentik
|
||||
restart: unless-stopped
|
||||
command: server
|
||||
volumes:
|
||||
- media:/media
|
||||
- custom_templates:/templates
|
||||
- geoip:/geoip
|
||||
env_file:
|
||||
- .env
|
||||
networks:
|
||||
- authentik
|
||||
- postgres
|
||||
- proxy
|
||||
worker:
|
||||
image: ghcr.io/goauthentik/server
|
||||
container_name: authentik-worker
|
||||
restart: unless-stopped
|
||||
command: worker
|
||||
user: root
|
||||
volumes:
|
||||
- backups:/backups
|
||||
- custom_templates:/templates
|
||||
- geoip:/geoip
|
||||
- media:/media
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
env_file:
|
||||
- .env
|
||||
networks:
|
||||
- authentik
|
||||
- postgres
|
||||
geoipupdate:
|
||||
image: maxmindinc/geoipupdate
|
||||
container_name: authentik-geoipupdate
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- authentik
|
||||
volumes:
|
||||
- geoip:/usr/share/GeoIP
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
GEOIPUPDATE_EDITION_IDS: GeoLite2-City
|
||||
GEOIPUPDATE_FREQUENCY: '8'
|
||||
networks:
|
||||
authentik:
|
||||
external: true
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
33
docker/backup/docker-compose.yaml
Normal file
33
docker/backup/docker-compose.yaml
Normal file
|
@ -0,0 +1,33 @@
|
|||
volumes:
|
||||
caddy_data:
|
||||
external: true
|
||||
caddy_config:
|
||||
external: true
|
||||
caddy_wkd:
|
||||
external: true
|
||||
homeautomation_hass:
|
||||
external: true
|
||||
services:
|
||||
backup:
|
||||
image: offen/docker-volume-backup:v2
|
||||
container_name: volume-backup
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- AWS_ENDPOINT
|
||||
- AWS_S3_BUCKET_NAME
|
||||
- AWS_ACCESS_KEY_ID
|
||||
- AWS_SECRET_ACCESS_KEY
|
||||
- GPG_PASSPHRASE
|
||||
- EMAIL_SMTP_HOST
|
||||
- EMAIL_SMTP_PASSWORD
|
||||
- EMAIL_SMTP_USERNAME
|
||||
- EMAIL_SMTP_PORT
|
||||
- BACKUP_COMPRESSION=zst
|
||||
- BACKUP_RETENTION_DAYS=7
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- caddy_data:/backup/caddy_data:ro
|
||||
- caddy_config:/backup/caddy_config:ro
|
||||
- caddy_wkd:/backup/caddy_wkd:ro
|
||||
- homeautomation_hass:/backup/homeautomation_hass:ro
|
67
docker/caddy/Caddyfile
Normal file
67
docker/caddy/Caddyfile
Normal file
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
auto_https off
|
||||
}
|
||||
|
||||
http://index.korhonen.lan {
|
||||
root * /var/www/index.korhonen.cc
|
||||
file_server browse
|
||||
}
|
||||
|
||||
http://home.korhonen.lan {
|
||||
reverse_proxy home-assistant:8123
|
||||
}
|
||||
|
||||
http://sso.korhonen.lan, http://sso.korhonen.cc {
|
||||
reverse_proxy authentik:9000
|
||||
}
|
||||
|
||||
http://git.korhonen.lan {
|
||||
rewrite /user/login /user/oauth2/authentik
|
||||
reverse_proxy forgejo:3000
|
||||
}
|
||||
|
||||
http://search.korhonen.lan {
|
||||
reverse_proxy searx:8080
|
||||
}
|
||||
|
||||
http://jellyfin.korhonen.lan {
|
||||
reverse_proxy jellyfin:8096
|
||||
}
|
||||
|
||||
http://cloud.korhonen.lan {
|
||||
# Redirect login page to Authentik
|
||||
redir /login /apps/sociallogin/custom_oidc/korhonen-sso 301
|
||||
|
||||
# .htaccess / data / config / ... shouldn't be accessible from outside
|
||||
@forbidden {
|
||||
path /.htaccess
|
||||
path /data/*
|
||||
path /config/*
|
||||
path /db_structure
|
||||
path /.xml
|
||||
path /README
|
||||
path /3rdparty/*
|
||||
path /lib/*
|
||||
path /templates/*
|
||||
path /occ
|
||||
path /console.php
|
||||
}
|
||||
handle @forbidden {
|
||||
respond 404
|
||||
}
|
||||
|
||||
redir /.well-known/carddav /remote.php/dav 301
|
||||
redir /.well-known/caldav /remote.php/dav 301
|
||||
|
||||
root * /var/www/nextcloud
|
||||
php_fastcgi nextcloud:9000 {
|
||||
root /var/www/html
|
||||
# Tells nextcloud to remove /index.php from URLs in links
|
||||
env front_controller_active true
|
||||
}
|
||||
file_server
|
||||
}
|
||||
|
||||
http://collabora.korhonen.lan {
|
||||
reverse_proxy collabora:9980
|
||||
}
|
195
docker/caddy/Caddyfile.old
Normal file
195
docker/caddy/Caddyfile.old
Normal file
|
@ -0,0 +1,195 @@
|
|||
# My old public configuration.
|
||||
# Currently don't have a public IP so running everything in LAN
|
||||
# in the current configuration
|
||||
|
||||
{
|
||||
order umami first
|
||||
}
|
||||
|
||||
(common_site_settings) {
|
||||
encode zstd gzip
|
||||
|
||||
tls {
|
||||
dns cloudflare {$CLOUDFLARE_API_TOKEN}
|
||||
resolvers 1.1.1.1
|
||||
}
|
||||
|
||||
header {
|
||||
Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
|
||||
}
|
||||
}
|
||||
|
||||
korhonen.cc, *.korhonen.cc {
|
||||
import common_site_settings
|
||||
|
||||
@static {
|
||||
file
|
||||
path *.ico *.css *.js *.gif *.webp *.avif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.pdf *.webmanifest
|
||||
}
|
||||
|
||||
@homepage-www-redir host www.korhonen.cc
|
||||
handle @homepage-www-redir {
|
||||
redir https://korhonen.cc
|
||||
}
|
||||
|
||||
@homepage host korhonen.cc
|
||||
handle @homepage {
|
||||
# Redirect finnish WIP
|
||||
# @redirFinnish {
|
||||
# header Accept-Language *fi-FI*
|
||||
# not path *.js *.css *.png *.jpg *.jpeg *.svg
|
||||
# not path /en* /fi*
|
||||
# }
|
||||
# redir @redirFinnish /fi{uri}
|
||||
#
|
||||
# uri strip_prefix /en
|
||||
|
||||
header @static Cache-Control max-age=5184000
|
||||
root * /var/www/korhonen.cc
|
||||
file_server
|
||||
}
|
||||
|
||||
@wkd host openpgpkey.korhonen.cc
|
||||
handle @wkd {
|
||||
root * /var/www/wkd
|
||||
file_server browse
|
||||
header Access-Control-Allow-Origin "*"
|
||||
}
|
||||
|
||||
@index host index.korhonen.cc
|
||||
handle @index {
|
||||
umami {
|
||||
event_endpoint "https://umami.korhonen.cc/api/send"
|
||||
website_uuid "9fe4f5c0-8e63-4479-a58d-d399cdbc0a3a"
|
||||
client_ip_header X-Real-IP
|
||||
device_detection
|
||||
allowed_extensions "" .tar.zst .json .html
|
||||
}
|
||||
root * /var/www/index.korhonen.cc
|
||||
file_server browse
|
||||
}
|
||||
|
||||
@home-assistant host home.korhonen.cc
|
||||
handle @home-assistant {
|
||||
reverse_proxy home-assistant:8123
|
||||
}
|
||||
|
||||
@authentik host sso.korhonen.cc
|
||||
handle @authentik {
|
||||
reverse_proxy authentik:9000
|
||||
}
|
||||
|
||||
@forgejo host git.korhonen.cc
|
||||
handle @forgejo {
|
||||
rewrite /user/login /user/oauth2/authentik
|
||||
reverse_proxy forgejo:3000
|
||||
}
|
||||
|
||||
@woodpecker host ci.korhonen.cc
|
||||
handle @woodpecker {
|
||||
reverse_proxy woodpecker:8000
|
||||
}
|
||||
|
||||
@searx host search.korhonen.cc
|
||||
handle @searx {
|
||||
reverse_proxy searx:8080
|
||||
}
|
||||
|
||||
@freshrss host rss.korhonen.cc
|
||||
handle @freshrss {
|
||||
reverse_proxy freshrss
|
||||
}
|
||||
|
||||
@jellyfin host jellyfin.korhonen.cc
|
||||
handle @jellyfin {
|
||||
reverse_proxy jellyfin:8096
|
||||
}
|
||||
|
||||
@pihole host pihole.korhonen.cc
|
||||
handle @pihole {
|
||||
reverse_proxy pihole
|
||||
}
|
||||
|
||||
@umami host umami.korhonen.cc
|
||||
handle @umami {
|
||||
reverse_proxy umami:3000
|
||||
}
|
||||
|
||||
@nextcloud host cloud.korhonen.cc
|
||||
handle @nextcloud {
|
||||
# Redirect login page to Authentik
|
||||
redir /login /apps/sociallogin/custom_oidc/korhonen-sso 301
|
||||
|
||||
# .htaccess / data / config / ... shouldn't be accessible from outside
|
||||
@forbidden {
|
||||
path /.htaccess
|
||||
path /data/*
|
||||
path /config/*
|
||||
path /db_structure
|
||||
path /.xml
|
||||
path /README
|
||||
path /3rdparty/*
|
||||
path /lib/*
|
||||
path /templates/*
|
||||
path /occ
|
||||
path /console.php
|
||||
}
|
||||
handle @forbidden {
|
||||
respond 404
|
||||
}
|
||||
|
||||
redir /.well-known/carddav /remote.php/dav 301
|
||||
redir /.well-known/caldav /remote.php/dav 301
|
||||
|
||||
root * /var/www/nextcloud
|
||||
php_fastcgi nextcloud:9000 {
|
||||
root /var/www/html
|
||||
# Tells nextcloud to remove /index.php from URLs in links
|
||||
env front_controller_active true
|
||||
}
|
||||
file_server
|
||||
}
|
||||
|
||||
@tvheadend host tvheadend.korhonen.cc
|
||||
handle @tvheadend {
|
||||
reverse_proxy tvheadend:9981
|
||||
}
|
||||
|
||||
@collabora host collabora.korhonen.cc
|
||||
handle @collabora {
|
||||
reverse_proxy collabora:9980
|
||||
}
|
||||
|
||||
@drop host drop.korhonen.cc
|
||||
handle @drop {
|
||||
reverse_proxy drop:3000
|
||||
}
|
||||
|
||||
@ipvX host ipv6.korhonen.cc ipv4.korhonen.cc
|
||||
handle @ipvX {
|
||||
respond {remote_host}
|
||||
}
|
||||
|
||||
@ott host ott.korhonen.cc
|
||||
handle @ott {
|
||||
reverse_proxy opentogethertube:8080
|
||||
}
|
||||
|
||||
handle {
|
||||
respond "404 Not Found" 404
|
||||
}
|
||||
|
||||
handle_errors {
|
||||
@homepage_404 {
|
||||
expression {http.error.status_code} == 404
|
||||
host korhonen.cc
|
||||
}
|
||||
handle @homepage_404 {
|
||||
root * /var/www/korhonen.cc
|
||||
rewrite * /404.html
|
||||
file_server
|
||||
}
|
||||
|
||||
respond "{err.status_code} {err.status_text}"
|
||||
}
|
||||
}
|
35
docker/caddy/docker-compose.yaml
Normal file
35
docker/caddy/docker-compose.yaml
Normal file
|
@ -0,0 +1,35 @@
|
|||
volumes:
|
||||
data: {}
|
||||
config: {}
|
||||
wkd: {}
|
||||
korhonen_cc: {}
|
||||
nextcloud_config:
|
||||
external: true
|
||||
services:
|
||||
caddy:
|
||||
image: git.korhonen.cc/functionalhacker/caddy
|
||||
container_name: caddy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443/tcp
|
||||
- 443:443/udp
|
||||
networks:
|
||||
- proxy
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||
- data:/data
|
||||
- config:/config
|
||||
- wkd:/var/www/wkd
|
||||
- korhonen_cc:/var/www/korhonen.cc
|
||||
- nextcloud_config:/var/www/nextcloud
|
||||
- /var/www/index.korhonen.cc:/var/www/index.korhonen.cc
|
||||
environment:
|
||||
- CLOUDFLARE_EMAIL
|
||||
- CLOUDFLARE_API_TOKEN
|
||||
- ACME_AGREE=true
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
13
docker/ddns/docker-compose.yaml
Normal file
13
docker/ddns/docker-compose.yaml
Normal file
|
@ -0,0 +1,13 @@
|
|||
services:
|
||||
cloudflare-ddns:
|
||||
image: timothyjmiller/cloudflare-ddns
|
||||
container_name: cloudflare-ddns
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
network_mode: host
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
volumes:
|
||||
- /mnt/Storage/docker/ddns/config.json:/config.json
|
||||
restart: unless-stopped
|
13
docker/drop/docker-compose.yaml
Normal file
13
docker/drop/docker-compose.yaml
Normal file
|
@ -0,0 +1,13 @@
|
|||
services:
|
||||
drop:
|
||||
image: lscr.io/linuxserver/pairdrop
|
||||
container_name: drop
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- proxy
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
- IPV6_LOCALIZE=4
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
48
docker/firefish/docker-compose.yaml
Normal file
48
docker/firefish/docker-compose.yaml
Normal file
|
@ -0,0 +1,48 @@
|
|||
volumes:
|
||||
files: {}
|
||||
config: {}
|
||||
redis: {}
|
||||
db: {}
|
||||
services:
|
||||
firefish:
|
||||
image: registry.firefish.dev/firefish/firefish
|
||||
container_name: firefish
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- redis
|
||||
ports:
|
||||
- 3084:3000
|
||||
networks:
|
||||
- firefish
|
||||
- proxy
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
volumes:
|
||||
- files:/firefish/files
|
||||
- config:/firefish/.config:ro
|
||||
redis:
|
||||
image: redis
|
||||
container_name: redis-firefish
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- firefish
|
||||
volumes:
|
||||
- redis:/data
|
||||
db:
|
||||
image: groonga/pgroonga:3.1.8-alpine-16-slim
|
||||
container_name: firefish-db
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- firefish
|
||||
volumes:
|
||||
- db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: pg_isready --user="firefish" --dbname="firefish"
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
firefish:
|
||||
internal: true
|
||||
proxy:
|
||||
external: true
|
38
docker/forgejo/docker-compose.yaml
Normal file
38
docker/forgejo/docker-compose.yaml
Normal file
|
@ -0,0 +1,38 @@
|
|||
volumes:
|
||||
data: {}
|
||||
runner: {}
|
||||
services:
|
||||
forgejo:
|
||||
image: git.korhonen.cc/functionalhacker/forgejo-asciidoc
|
||||
container_name: forgejo
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- postgres
|
||||
- proxy
|
||||
ports:
|
||||
- '2882:22'
|
||||
volumes:
|
||||
- data:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
runner:
|
||||
image: code.forgejo.org/forgejo/runner:3.5.1
|
||||
container_name: forgejo-runner
|
||||
user: root:root
|
||||
volumes:
|
||||
- runner:/data
|
||||
- ./runner.yaml:/data/config.yaml
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- SOCKFILE=/var/run/docker.sock
|
||||
restart: unless-stopped
|
||||
command: forgejo-runner daemon -c /data/config.yaml
|
||||
networks:
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
34
docker/forgejo/runner.yaml
Normal file
34
docker/forgejo/runner.yaml
Normal file
|
@ -0,0 +1,34 @@
|
|||
log:
|
||||
level: info
|
||||
|
||||
runner:
|
||||
file: .runner
|
||||
capacity: 2
|
||||
env_file: .env
|
||||
timeout: 3h
|
||||
insecure: false
|
||||
fetch_timeout: 5s
|
||||
fetch_interval: 2s
|
||||
labels:
|
||||
- 'docker:docker://git.korhonen.lan/functionalhacker/ubuntu-act:22.04'
|
||||
|
||||
cache:
|
||||
enabled: true
|
||||
dir: ''
|
||||
host: ''
|
||||
port: 0
|
||||
external_server: ''
|
||||
|
||||
container:
|
||||
network: ''
|
||||
enable_ipv6: false
|
||||
privileged: false
|
||||
options:
|
||||
workdir_parent:
|
||||
valid_volumes:
|
||||
- 'caddy_korhonen_cc'
|
||||
docker_host: ''
|
||||
force_pull: false
|
||||
|
||||
host:
|
||||
workdir_parent:
|
|
@ -1,31 +0,0 @@
|
|||
version: '2'
|
||||
|
||||
services:
|
||||
freepbx:
|
||||
container_name: freepbx
|
||||
image: tiredofit/freepbx
|
||||
ports:
|
||||
- 8012:80
|
||||
- 5060:5060
|
||||
- 5160:5160
|
||||
- 18000-18100:18000-18100/udp
|
||||
#### Flash Operator Panel
|
||||
- 4445:4445
|
||||
volumes:
|
||||
- /docker/freepbx/certs:/certs
|
||||
- /docker/freepbx/data:/data
|
||||
- /docker/freepbx/logs:/var/log
|
||||
- /docker/freepbx/www:/var/www/html
|
||||
- /docker/freepbx/db:/var/lib/mysql
|
||||
|
||||
environment:
|
||||
- RTP_START=18000
|
||||
- RTP_FINISH=18100
|
||||
- DB_EMBEDDED=TRUE
|
||||
|
||||
restart: always
|
||||
|
||||
### These final lines are for Fail2ban. If you don't want, comment and also add ENABLE_FAIL2BAN=FALSE to your environment
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
privileged: true
|
1
docker/freshrss/.gitignore
vendored
Normal file
1
docker/freshrss/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.env
|
25
docker/freshrss/docker-compose.yaml
Normal file
25
docker/freshrss/docker-compose.yaml
Normal file
|
@ -0,0 +1,25 @@
|
|||
volumes:
|
||||
config: {}
|
||||
services:
|
||||
freshrss:
|
||||
image: linuxserver/freshrss
|
||||
container_name: freshrss
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- freshrss
|
||||
- postgres
|
||||
- proxy
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=985
|
||||
- TZ=Europe/Helsinki
|
||||
volumes:
|
||||
- config:/config
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
networks:
|
||||
freshrss:
|
||||
external: false
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
|
@ -1,41 +0,0 @@
|
|||
version: '2'
|
||||
|
||||
networks:
|
||||
gitea:
|
||||
external: false
|
||||
|
||||
services:
|
||||
gitea:
|
||||
container_name: gitea
|
||||
image: gitea/gitea:latest
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- DB_TYPE=mysql
|
||||
- DB_HOST=db:3306
|
||||
- DB_NAME=gitea
|
||||
- DB_USER=gitea
|
||||
- DB_PASSWD=gitea
|
||||
restart: always
|
||||
networks:
|
||||
- gitea
|
||||
volumes:
|
||||
- /docker/gitea/gitea:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- '3000:3000'
|
||||
- '222:22'
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
mariadb:
|
||||
container_name: mariadb-gitea
|
||||
image: mariadb
|
||||
restart: always
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
ports:
|
||||
- '3308:3306'
|
||||
volumes:
|
||||
- /docker/gitea/mariadb:/var/lib/mysql
|
23
docker/headscale/docker-compose.yaml
Normal file
23
docker/headscale/docker-compose.yaml
Normal file
|
@ -0,0 +1,23 @@
|
|||
volumes:
|
||||
config: {}
|
||||
data: {}
|
||||
services:
|
||||
headscale:
|
||||
image: headscale/headscale:0
|
||||
container_name: headscale
|
||||
volumes:
|
||||
- config:/etc/headscale
|
||||
- data:/var/lib/headscale
|
||||
ports:
|
||||
- 3478:3478/udp
|
||||
command: headscale serve
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- postgres
|
||||
headscale-ui:
|
||||
image: ghcr.io/gurucomputing/headscale-ui
|
||||
container_name: headscale-ui
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
postgres:
|
||||
external: true
|
82
docker/homeautomation/docker-compose.yaml
Normal file
82
docker/homeautomation/docker-compose.yaml
Normal file
|
@ -0,0 +1,82 @@
|
|||
volumes:
|
||||
hass: {}
|
||||
mosquitto: {}
|
||||
piper_english: {}
|
||||
whisper_english: {}
|
||||
openwakeword_english: {}
|
||||
services:
|
||||
home-assistant:
|
||||
container_name: home-assistant
|
||||
image: homeassistant/home-assistant
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
volumes:
|
||||
- hass:/config
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
networks:
|
||||
- homeautomation
|
||||
- postgres
|
||||
- proxy
|
||||
ports:
|
||||
- 8123:8123
|
||||
- 8300:8300
|
||||
extra_hosts:
|
||||
- host.docker.internal:host-gateway
|
||||
# mosquitto:
|
||||
# container_name: mosquitto
|
||||
# image: eclipse-mosquitto
|
||||
# restart: unless-stopped
|
||||
# environment:
|
||||
# - TZ=Europe/Helsinki
|
||||
# networks:
|
||||
# - homeautomation
|
||||
# ports:
|
||||
# - 1883:1883
|
||||
# - 8866:8866
|
||||
# volumes:
|
||||
# - mosquitto:/mosquitto
|
||||
# - /etc/localtime:/etc/localtime:ro
|
||||
piper_english:
|
||||
container_name: piper_english
|
||||
image: rhasspy/wyoming-piper
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
ports:
|
||||
- 10200:10200
|
||||
networks:
|
||||
- homeautomation
|
||||
command:
|
||||
- --voice
|
||||
- en_US-hfc_male-medium
|
||||
volumes:
|
||||
- piper_english:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
whisper_english:
|
||||
container_name: whisper_english
|
||||
image: rhasspy/wyoming-whisper
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
ports:
|
||||
- 10300:10300
|
||||
networks:
|
||||
- homeautomation
|
||||
depends_on:
|
||||
- home-assistant
|
||||
command:
|
||||
- --model
|
||||
- tiny-int8
|
||||
- --language
|
||||
- en
|
||||
volumes:
|
||||
- whisper_english:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
networks:
|
||||
homeautomation:
|
||||
external: false
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
|
@ -1,72 +0,0 @@
|
|||
version: '3'
|
||||
services:
|
||||
home-assistant:
|
||||
environment:
|
||||
TZ: 'Europe/Helsinki'
|
||||
container_name: home-assistant
|
||||
restart: always
|
||||
image: homeassistant/home-assistant
|
||||
volumes:
|
||||
- /docker/homeautomation/home-assistant:/config
|
||||
network_mode: host
|
||||
depends_on:
|
||||
- deconz
|
||||
- mosquitto
|
||||
|
||||
deconz:
|
||||
container_name: deconz
|
||||
image: marthoc/deconz
|
||||
restart: always
|
||||
environment:
|
||||
DECONZ_WEB_PORT: 8083
|
||||
DECONZ_WS_PORT: 8084
|
||||
DECONZ_VNC_PORT: 5901
|
||||
DECONZ_VNC_MODE: 1
|
||||
DECONZ_VNC_PASSWORD: '${DECONZ_VNC_PASSWORD}'
|
||||
DEBUG_OTAU: 1
|
||||
network_mode: host
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /docker/homeautomation/deconz:/root/.local/share/dresden-elektronik/deCONZ
|
||||
devices:
|
||||
- /dev/ttyACM0
|
||||
|
||||
node-red:
|
||||
container_name: node-red
|
||||
image: nodered/node-red
|
||||
restart: always
|
||||
environment:
|
||||
TZ: 'Europe/Helsinki'
|
||||
ports:
|
||||
- '1880:1880'
|
||||
volumes:
|
||||
- /docker/homeautomation/node-red:/data
|
||||
depends_on:
|
||||
- home-assistant
|
||||
|
||||
portainer:
|
||||
container_name: portainer
|
||||
image: portainer/portainer
|
||||
restart: always
|
||||
ports:
|
||||
- '9000:9000'
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /docker/homeautomation/portainer:/data
|
||||
|
||||
mosquitto:
|
||||
container_name: mosquitto
|
||||
image: eclipse-mosquitto
|
||||
restart: always
|
||||
network_mode: host
|
||||
volumes:
|
||||
- /docker/homeautomation/mosquitto:/mosquitto
|
||||
|
||||
mariadb:
|
||||
container_name: mariadb-hass
|
||||
image: mariadb
|
||||
restart: always
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
volumes:
|
||||
- /docker/homeautomation/mariadb:/var/lib/mysql
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
cat <<ENV > .env
|
||||
MYSQL_ROOT_PASSWORD=$(pass reekynet/docker-home-automation | rg 'MYSQL_ROOT_PASSWORD' | cut -d' ' -f2-)
|
||||
HA_MYSQL_PASSWORD="$(pass reekynet/docker-home-automation | rg 'HA_MYSQL_PASSWORD' | cut -d' ' -f2-)
|
||||
DECONZ_VNC_PASSWORD=$(pass reekynet/docker-home-automation | rg 'DECONZ_VNC_PASSWORD' | cut -d' ' -f2-)
|
||||
ENV
|
||||
|
||||
docker-compose up -d
|
|
@ -1,12 +1,33 @@
|
|||
version: '3'
|
||||
volumes:
|
||||
config: {}
|
||||
cache: {}
|
||||
media:
|
||||
external: true
|
||||
nextcloud_data:
|
||||
external: true
|
||||
services:
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin
|
||||
container_name: jellyfin
|
||||
user: 1001:985
|
||||
network_mode: 'host'
|
||||
restart: always
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
ports:
|
||||
- 8096:8096
|
||||
networks:
|
||||
- proxy
|
||||
- authentik
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /docker/jellyfin/config:/config
|
||||
- /docker/jellyfin/cache:/cache
|
||||
- /mnt/Storage/Media:/media
|
||||
- config:/config
|
||||
- cache:/cache
|
||||
- media:/media
|
||||
- nextcloud_data:/nextcloud_data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
devices:
|
||||
- /dev/dri/renderD128:/dev/dri/renderD128
|
||||
- /dev/dri/card1:/dev/dri/card0
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
authentik:
|
||||
external: true
|
||||
|
|
13
docker/mumble/docker-compose.yaml
Normal file
13
docker/mumble/docker-compose.yaml
Normal file
|
@ -0,0 +1,13 @@
|
|||
volumes:
|
||||
config: {}
|
||||
services:
|
||||
mumble:
|
||||
container_name: mumble
|
||||
image: phlak/mumble
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
network_mode: host
|
||||
volumes:
|
||||
- config:/etc/mumble
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
restart: unless-stopped
|
24
docker/netbootxyz/docker-compose.yaml
Normal file
24
docker/netbootxyz/docker-compose.yaml
Normal file
|
@ -0,0 +1,24 @@
|
|||
volumes:
|
||||
config: {}
|
||||
assets: {}
|
||||
services:
|
||||
netbootxyz:
|
||||
image: lscr.io/linuxserver/netbootxyz
|
||||
container_name: netbootxyz
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
- MENU_VERSION=1.9.9
|
||||
- PORT_RANGE=30000:30010
|
||||
- SUBFOLDER=/
|
||||
- NGINX_PORT=80
|
||||
- WEB_APP_PORT=3000
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 69:69/udp
|
||||
- 8081:80
|
||||
volumes:
|
||||
- config:/config
|
||||
- assets:/assets
|
1
docker/nextcloud/.gitignore
vendored
Normal file
1
docker/nextcloud/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.env
|
84
docker/nextcloud/docker-compose.yaml
Normal file
84
docker/nextcloud/docker-compose.yaml
Normal file
|
@ -0,0 +1,84 @@
|
|||
volumes:
|
||||
nextcloud_config:
|
||||
external: true
|
||||
nextcloud_data:
|
||||
external: true
|
||||
services:
|
||||
nextcloud:
|
||||
image: nextcloud:fpm-alpine
|
||||
container_name: nextcloud
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- nextcloud
|
||||
- postgres
|
||||
- proxy
|
||||
volumes:
|
||||
- nextcloud_config:/var/www/html
|
||||
- nextcloud_data:/var/www/html/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- REDIS_HOST=redis
|
||||
- REDIS_HOST_PASSWORD=123
|
||||
- TRUSTED_PROXIES=caddy
|
||||
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.korhonen.cc
|
||||
- OVERWRITEHOST=cloud.korhonen.cc
|
||||
- OVERWRITEPROTOCOL=https
|
||||
depends_on:
|
||||
- redis
|
||||
labels:
|
||||
ofelia.enabled: true
|
||||
ofelia.job-exec.nextcloud.schedule: 0 */5 * * * *
|
||||
ofelia.job-exec.nextcloud.command: php /var/www/html/cron.php
|
||||
ofelia.job-exec.nextcloud.user: www-data
|
||||
ofelia.smtp-host: ${SMTP_HOST}
|
||||
ofelia.smtp-port: ${SMTP_PORT}
|
||||
ofelia.smtp-user: ${SMTP_USER}
|
||||
ofelia.smtp-password: ${SMTP_PASSWORD}
|
||||
ofelia.email-to: ${EMAIL_TO}
|
||||
ofelia.email-from: ${EMAIL_FROM}
|
||||
ofelia.mail-only-on-error: true
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: redis-nextcloud
|
||||
networks:
|
||||
- nextcloud
|
||||
restart: unless-stopped
|
||||
command: redis-server --requirepass 123
|
||||
coturn:
|
||||
image: instrumentisto/coturn
|
||||
container_name: coturn
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
ports:
|
||||
- 3478:3478/tcp
|
||||
- 3478:3478/udp
|
||||
- 49160-49200:49160-49200/udp
|
||||
networks:
|
||||
- nextcloud
|
||||
command:
|
||||
- -n
|
||||
- --log-file=stdout
|
||||
- --min-port=49160
|
||||
- --max-port=49200
|
||||
- --realm=cloud.korhonen.cc
|
||||
- --use-auth-secret
|
||||
- --static-auth-secret=${STATIC_AUTH_SECRET}
|
||||
collabora:
|
||||
image: collabora/code
|
||||
container_name: collabora
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
environment:
|
||||
- username=${COLLABORA_USERNAME}
|
||||
- password=${COLLABORA_PASSWORD}
|
||||
- domain=cloud.korhonen.cc
|
||||
- extra_params=--o:ssl.enable=false --o:ssl.termination=true
|
||||
networks:
|
||||
- proxy
|
||||
networks:
|
||||
nextcloud:
|
||||
external: false
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
9
docker/ofelia/docker-compose.yaml
Normal file
9
docker/ofelia/docker-compose.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
services:
|
||||
ofelia:
|
||||
image: mcuadros/ofelia
|
||||
container_name: ofelia
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
command: daemon --docker
|
42
docker/opentogethertube/docker-compose.yaml
Normal file
42
docker/opentogethertube/docker-compose.yaml
Normal file
|
@ -0,0 +1,42 @@
|
|||
services:
|
||||
opentogethertube:
|
||||
image: dyc3/opentogethertube
|
||||
container_name: opentogethertube
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PORT=8080
|
||||
- REDIS_HOST=redis
|
||||
- REDIS_PORT=6379
|
||||
- FFPROBE_PATH=/usr/bin/ffprobe
|
||||
- DB_MODE=postgres
|
||||
- POSTGRES_USER=opentogethertube
|
||||
- POSTGRES_DB=opentogethertube
|
||||
- POSTGRES_HOST=postgres
|
||||
- POSTGRES_PASSWORD
|
||||
- DOCKER=1
|
||||
- OTT_HOSTNAME=ott.korhonen.cc
|
||||
- YOUTUBE_API_KEY
|
||||
- OPENTOGETHERTUBE_API_KEY
|
||||
- SESSION_SECRET
|
||||
ports:
|
||||
- 8080:8080
|
||||
- 3002:3002
|
||||
networks:
|
||||
- default
|
||||
- postgres
|
||||
- proxy
|
||||
depends_on:
|
||||
- redis
|
||||
volumes:
|
||||
- ./production.toml:/app/env/production.toml
|
||||
redis:
|
||||
container_name: redis-opentogethertube
|
||||
image: redis:alpine
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: redis-cli ping
|
||||
networks:
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
5
docker/opentogethertube/production.toml
Normal file
5
docker/opentogethertube/production.toml
Normal file
|
@ -0,0 +1,5 @@
|
|||
log = { level = "info" }
|
||||
|
||||
[room]
|
||||
enable_create_temporary = false
|
||||
enable_create_permanent = false
|
29
docker/pihole/docker-compose.yaml
Normal file
29
docker/pihole/docker-compose.yaml
Normal file
|
@ -0,0 +1,29 @@
|
|||
volumes:
|
||||
config: {}
|
||||
dnsmasq: {}
|
||||
services:
|
||||
pihole:
|
||||
container_name: pihole
|
||||
image: pihole/pihole
|
||||
ports:
|
||||
- 53:53/tcp
|
||||
- 53:53/udp
|
||||
- 67:67/udp
|
||||
- 8069:80/tcp
|
||||
networks:
|
||||
- proxy
|
||||
volumes:
|
||||
- config:/etc/pihole/
|
||||
- dnsmasq:/etc/dnsmasq.d/
|
||||
dns:
|
||||
- 127.0.0.1
|
||||
- 1.1.1.1
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: Europe/Helsinki
|
||||
WEBPASSWORD: ${WEBPASSWORD}
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
19
docker/postgres/docker-compose.yaml
Normal file
19
docker/postgres/docker-compose.yaml
Normal file
|
@ -0,0 +1,19 @@
|
|||
volumes:
|
||||
data: {}
|
||||
services:
|
||||
postgres:
|
||||
container_name: postgres
|
||||
image: postgres:16
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
ports:
|
||||
- 127.0.0.1:5432:5432
|
||||
networks:
|
||||
- postgres
|
||||
volumes:
|
||||
- data:/var/lib/postgresql/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
postgres:
|
||||
external: true
|
46
docker/searx/docker-compose.yaml
Normal file
46
docker/searx/docker-compose.yaml
Normal file
|
@ -0,0 +1,46 @@
|
|||
volumes:
|
||||
config: {}
|
||||
services:
|
||||
searx:
|
||||
container_name: searx
|
||||
image: searxng/searxng
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- searx
|
||||
- proxy
|
||||
volumes:
|
||||
- config:/etc/searxng
|
||||
environment:
|
||||
- SEARXNG_BASE_URL=https://search.korhonen.cc/
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- CHOWN
|
||||
- SETGID
|
||||
- SETUID
|
||||
- DAC_OVERRIDE
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: 1m
|
||||
max-file: '1'
|
||||
redis:
|
||||
container_name: redis-searx
|
||||
image: redis:alpine
|
||||
command: redis-server --save "" --appendonly "no"
|
||||
networks:
|
||||
- searx
|
||||
tmpfs:
|
||||
- /var/lib/redis
|
||||
cap_drop:
|
||||
- ALL
|
||||
cap_add:
|
||||
- SETGID
|
||||
- SETUID
|
||||
- DAC_OVERRIDE
|
||||
networks:
|
||||
searx:
|
||||
ipam:
|
||||
driver: default
|
||||
proxy:
|
||||
external: true
|
30
docker/stats/docker-compose.yaml
Normal file
30
docker/stats/docker-compose.yaml
Normal file
|
@ -0,0 +1,30 @@
|
|||
services:
|
||||
grafana:
|
||||
image: grafana/grafana
|
||||
container_name: grafana
|
||||
volumes:
|
||||
- grafana:/var/lib/grafana
|
||||
networks:
|
||||
- stats
|
||||
- proxy
|
||||
user: 1000:984
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
- GF_AUTH_GENERIC_OAUTH_CLIENT_ID
|
||||
- GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET
|
||||
- GF_AUTH_GENERIC_OAUTH_ENABLED=true
|
||||
- GF_AUTH_GENERIC_OAUTH_NAME=authentik
|
||||
- GF_AUTH_GENERIC_OAUTH_SCOPES=openid profile email
|
||||
- GF_AUTH_GENERIC_OAUTH_AUTH_URL=https://sso.korhonen.cc/application/o/authorize/
|
||||
- GF_AUTH_GENERIC_OAUTH_TOKEN_URL=https://sso.korhonen.cc/application/o/token/
|
||||
- GF_AUTH_GENERIC_OAUTH_API_URL=https://sso.korhonen.cc/application/o/userinfo/
|
||||
- GF_AUTH_SIGNOUT_REDIRECT_URL=https://sso.korhonen.cc/application/o/grafana/end-session/
|
||||
- GF_AUTH_OAUTH_AUTO_LOGIN=true
|
||||
- GF_SERVER_ROOT_URL=https://grafana.korhonen.cc
|
||||
- GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH=contains(groups[*], 'Administrators') && 'Admin' || 'Viewer'
|
||||
networks:
|
||||
stats:
|
||||
external: false
|
||||
proxy:
|
||||
external: true
|
12
docker/tftp/docker-compose.yaml
Normal file
12
docker/tftp/docker-compose.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
services:
|
||||
tftp:
|
||||
container_name: tftp
|
||||
image: pghalliday/tftp
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 69:69/udp
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /docker/tftp:/var/tftpboot
|
27
docker/tvheadend/docker-compose.yaml
Normal file
27
docker/tvheadend/docker-compose.yaml
Normal file
|
@ -0,0 +1,27 @@
|
|||
volumes:
|
||||
config: {}
|
||||
picons: {}
|
||||
services:
|
||||
tvheadend:
|
||||
image: linuxserver/tvheadend
|
||||
container_name: tvheadend
|
||||
environment:
|
||||
- TZ=Europe/Helsinki
|
||||
- PUID=1000
|
||||
- PGID=985
|
||||
volumes:
|
||||
- config:/config
|
||||
- picons:/picons
|
||||
- /mnt/Storage/Media/PVR:/recordings
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- 9981:9981
|
||||
- 9982:9982
|
||||
devices:
|
||||
- /dev/dvb:/dev/dvb
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- proxy
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
21
docker/umami/docker-compose.yaml
Normal file
21
docker/umami/docker-compose.yaml
Normal file
|
@ -0,0 +1,21 @@
|
|||
services:
|
||||
umami:
|
||||
image: ghcr.io/umami-software/umami:postgresql-latest
|
||||
container_name: umami
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- postgres
|
||||
- proxy
|
||||
env_file: .env
|
||||
environment:
|
||||
DATABASE_URL: postgresql://umami:${POSTGRES_PASS}@postgres:5432/umami
|
||||
HASH_SALT: ${HASH_SALT}
|
||||
logging:
|
||||
options:
|
||||
max-size: 10m
|
||||
max-file: '10'
|
||||
networks:
|
||||
postgres:
|
||||
external: true
|
||||
proxy:
|
||||
external: true
|
18
docker/watchtower/docker-compose.yaml
Normal file
18
docker/watchtower/docker-compose.yaml
Normal file
|
@ -0,0 +1,18 @@
|
|||
services:
|
||||
watchtower:
|
||||
image: containrrr/watchtower
|
||||
container_name: watchtower
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- WATCHTOWER_CLEANUP=true
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@korhonen.cc
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@korhonen.cc
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.migadu.com
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER}
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=${WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD}
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_DELAY=30
|
||||
- WATCHTOWER_NOTIFICATIONS=email
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /etc/localtime:/etc/localtime:ro
|
1
dotdrop
1
dotdrop
|
@ -1 +0,0 @@
|
|||
Subproject commit 2d64e2ee59281e358253fadb04432a040f9392ee
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/bash
|
||||
# vim:ft=sh
|
||||
|
||||
sudo efibootmgr \
|
||||
--disk /dev/sda \
|
||||
--part 1 \
|
||||
--create \
|
||||
--quiet \
|
||||
--remove-dups \
|
||||
--label "Arch Linux" \
|
||||
--loader /vmlinuz-linux \
|
||||
--unicode 'cryptdevice=UUID=19fa8fab-c5fe-454a-9a17-b7185ce975ea:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root resume=/dev/mapper/cryptroot resume_offset=7345408 rw quiet loglevel=3 vga=current vt.global_cursor_default=0 processor.max_cstate=5 rcu_nocbs=0-11 initrd=/amd-ucode.img initrd=/initramfs-linux.img amdgpu.noretry=0'
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/bash
|
||||
# vim:ft=sh
|
||||
|
||||
sudo efibootmgr \
|
||||
--disk /dev/sda \
|
||||
--part 1 \
|
||||
--create \
|
||||
--quiet \
|
||||
--remove-dups \
|
||||
--label "Arch Linux CK" \
|
||||
--loader /vmlinuz-linux-ck-zen \
|
||||
--unicode 'cryptdevice=UUID=19fa8fab-c5fe-454a-9a17-b7185ce975ea:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root resume=/dev/mapper/cryptroot resume_offset=7345408 rw quiet loglevel=3 vga=current vt.global_cursor_default=0 processor.max_cstate=5 rcu_nocbs=0-11 initrd=/amd-ucode.img initrd=/initramfs-linux.img amdgpu.noretry=0'
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/bash
|
||||
# vim:ft=sh
|
||||
|
||||
sudo efibootmgr \
|
||||
--disk /dev/sda \
|
||||
--part 1 \
|
||||
--create \
|
||||
--quiet \
|
||||
--remove-dups \
|
||||
--label "Arch Linux LTS" \
|
||||
--loader /vmlinuz-linux-lts \
|
||||
--unicode 'cryptdevice=UUID=19fa8fab-c5fe-454a-9a17-b7185ce975ea:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root resume=/dev/mapper/cryptroot resume_offset=7345408 rw quiet loglevel=3 vga=current vt.global_cursor_default=0 processor.max_cstate=5 rcu_nocbs=0-11 initrd=/amd-ucode.img initrd=/initramfs-linux.img amdgpu.noretry=0'
|
|
@ -1,14 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# remove old entries
|
||||
for bootentry in $(efibootmgr | head -n 3 | tail -n 1 | cut -d' ' -f2- | sed 's/,/\n/g'); do
|
||||
sudo efibootmgr -qBb $bootentry
|
||||
done
|
||||
|
||||
# add all entries back
|
||||
for bootscript in *.efi; do
|
||||
./$bootscript
|
||||
done
|
||||
|
||||
# set bootorder
|
||||
sudo efibootmgr --bootorder 0000,0001,0002
|
|
@ -1,4 +1,5 @@
|
|||
window:
|
||||
opacity: 1.0
|
||||
dimensions:
|
||||
columns: 0
|
||||
lines: 0
|
||||
|
@ -6,14 +7,12 @@ window:
|
|||
x: 30
|
||||
y: 20
|
||||
dynamic_padding: false
|
||||
dynamic_title: true
|
||||
decorations: full
|
||||
|
||||
scrolling:
|
||||
history: 10000
|
||||
multiplier: 3
|
||||
auto_scroll: false
|
||||
|
||||
tabspaces: 8
|
||||
|
||||
font:
|
||||
normal:
|
||||
|
@ -61,13 +60,11 @@ colors:
|
|||
cyan: '0x56b6c2'
|
||||
white: '0x5c6370'
|
||||
|
||||
visual_bell:
|
||||
bell:
|
||||
animation: EaseOutExpo
|
||||
duration: 0
|
||||
color: '#ffffff'
|
||||
|
||||
background_opacity: 1.0
|
||||
|
||||
mouse_bindings:
|
||||
- { mouse: Middle, action: PasteSelection }
|
||||
|
||||
|
@ -75,15 +72,11 @@ mouse:
|
|||
double_click: { threshold: 300 }
|
||||
triple_click: { threshold: 300 }
|
||||
hide_when_typing: false
|
||||
url:
|
||||
modifiers: None
|
||||
|
||||
selection:
|
||||
semantic_escape_chars: ',│`|:"'' ()[]{}<>'
|
||||
save_to_clipboard: false
|
||||
|
||||
dynamic_title: true
|
||||
|
||||
cursor:
|
||||
style: Block
|
||||
unfocused_hollow: true
|
||||
|
|
0
home/.config/asd
Normal file
0
home/.config/asd
Normal file
|
@ -1,34 +1,31 @@
|
|||
directory: ~/Music
|
||||
library: ~/Music/beets.db
|
||||
plugins:
|
||||
- acousticbrainz
|
||||
- check
|
||||
- edit
|
||||
- fetchart
|
||||
- follow
|
||||
- fuzzy
|
||||
- info
|
||||
- lastgenre
|
||||
- lyrics
|
||||
- mbcollection
|
||||
- mpdupdate
|
||||
- play
|
||||
- replaygain
|
||||
- thumbnails
|
||||
- web
|
||||
plugins:
|
||||
- edit
|
||||
- fetchart
|
||||
- fuzzy
|
||||
- info
|
||||
- lastgenre
|
||||
- lyrics
|
||||
# - mbcollection
|
||||
- mpdupdate
|
||||
- play
|
||||
- replaygain
|
||||
- thumbnails
|
||||
- web
|
||||
import:
|
||||
copy: no
|
||||
move: yes
|
||||
link: no
|
||||
write: yes
|
||||
copy: yes
|
||||
lastgenre:
|
||||
whitelist: ~/.config/beets/whitelist
|
||||
lyrics:
|
||||
fallback: ''
|
||||
play:
|
||||
command: mpv
|
||||
command: mpv --no-vid --no-resume-playback
|
||||
mpd:
|
||||
host: localhost
|
||||
port: 6600
|
||||
host: localhost
|
||||
port: 6600
|
||||
password: "{{@@ env['PASS_MPD_ADMIN'] @@}}"
|
||||
follow:
|
||||
email: reekymarko@reekynet.com
|
||||
password: "{{@@ env['PASS_MUSPY'] @@}}"
|
||||
|
@ -37,9 +34,6 @@ follow:
|
|||
replaygain:
|
||||
backend: gstreamer
|
||||
auto: yes
|
||||
musicbrainz:
|
||||
user: ReekyMarko
|
||||
pass: "{{@@ env['PASS_MUSICBRAINZ'] @@}}"
|
||||
mbcollection:
|
||||
auto: "yes"
|
||||
collection: "a4955b5c-db7f-4e27-9887-f77f820bad34"
|
||||
#mbcollection:
|
||||
# auto: 'yes'
|
||||
# collection: 'a4955b5c-db7f-4e27-9887-f77f820bad34'
|
||||
|
|
88
home/.config/dconf.ini
Normal file
88
home/.config/dconf.ini
Normal file
|
@ -0,0 +1,88 @@
|
|||
[io/github/celluloid-player/celluloid]
|
||||
dark-theme-enable=false
|
||||
mpv-config-enable=true
|
||||
mpv-config-file='file:///home/{{@@ env['USER'] @@}}/.config/mpv/mpv.conf'
|
||||
mpv-input-config-enable=true
|
||||
mpv-input-config-file='file:///home/{{@@ env['USER'] @@}}/.config/mpv/input.conf'
|
||||
settings-migrated=true
|
||||
|
||||
[org/gnome/Connections]
|
||||
first-run=false
|
||||
|
||||
[org/gnome/shell/weather]
|
||||
automatic-location=false
|
||||
locations=[<(uint32 2, <('Lappeenranta', 'EFLP', false, [(1.0654507804726074, 0.49128594181309354)], @a(dd) [])>)>]
|
||||
|
||||
[org/gnome/Weather]
|
||||
locations=[<(uint32 2, <('Lappeenranta', 'EFLP', false, [(1.0654507804726074, 0.49128594181309354)], @a(dd) [])>)>]
|
||||
|
||||
[org/gnome/shell/world-clocks]
|
||||
locations=[<(uint32 2, <('Bangkok', 'VTBD', true, [(0.24289166005364171, 1.7558012275062955)], [(0.23998277214922031, 1.754346792280731)])>)>, <(uint32 2, <('Lappeenranta', 'EFLP', true, [(1.0654507804726074, 0.49128594181309354)], [(1.065814402368968, 0.49189195503597105)])>)>]
|
||||
|
||||
[org/gnome/clocks]
|
||||
world-clocks=[{'location': <(uint32 2, <('Bangkok', 'VTBD', true, [(0.24289166005364171, 1.7558012275062955)], [(0.23998277214922031, 1.754346792280731)])>)>}, {'location': <(uint32 2, <('Lappeenranta', 'EFLP', true, [(1.0654507804726074, 0.49128594181309354)], [(1.065814402368968, 0.49189195503597105)])>)>}]
|
||||
|
||||
[org/gnome/desktop/a11y/mouse]
|
||||
dwell-click-enabled=false
|
||||
dwell-threshold=10
|
||||
dwell-time=1.2
|
||||
secondary-click-enabled=true
|
||||
secondary-click-time=1.2
|
||||
|
||||
[org/gnome/desktop/calendar]
|
||||
show-weekdate=true
|
||||
|
||||
[org/gnome/desktop/input-sources]
|
||||
show-all-sources=true
|
||||
sources=[('xkb', 'eu'), ('xkb', 'fi')]
|
||||
xkb-options=['lv3:ralt_switch']
|
||||
|
||||
[org/gnome/desktop/peripherals/touchpad]
|
||||
tap-to-click=true
|
||||
two-finger-scrolling-enabled=true
|
||||
|
||||
[org/gnome/desktop/privacy]
|
||||
disable-microphone=false
|
||||
old-files-age=uint32 14
|
||||
recent-files-max-age=-1
|
||||
remove-old-temp-files=true
|
||||
remove-old-trash-files=true
|
||||
|
||||
[org/gnome/desktop/wm/keybindings]
|
||||
close=['<Super>w']
|
||||
move-to-workspace-down=['<Shift><Super>j']
|
||||
move-to-workspace-left=['<Shift><Super>h']
|
||||
move-to-workspace-right=['<Shift><Super>l']
|
||||
move-to-workspace-up=['<Shift><Super>k']
|
||||
switch-to-workspace-down=['<Super>j']
|
||||
switch-to-workspace-left=['<Super>h']
|
||||
switch-to-workspace-right=['<Super>l']
|
||||
switch-to-workspace-up=['<Super>k']
|
||||
toggle-fullscreen=@as []
|
||||
toggle-maximized=['<Super>f']
|
||||
|
||||
[org/gnome/settings-daemon/plugins/media-keys]
|
||||
custom-keybindings=['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
|
||||
screensaver=['<Super>BackSpace']
|
||||
www=['<Super>b']
|
||||
volume-step=1
|
||||
|
||||
[org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0]
|
||||
binding='<Super>Return'
|
||||
command='kgx'
|
||||
name='Open terminal'
|
||||
|
||||
[org/gnome/file-roller/dialogs/new]
|
||||
default-extension='.tar.zst'
|
||||
|
||||
[org/gnome/software]
|
||||
check-timestamp=int64 1667730233
|
||||
download-updates=true
|
||||
download-updates-notify=true
|
||||
first-run=false
|
||||
|
||||
[org/gnome/system/location]
|
||||
enabled=true
|
||||
|
||||
[org/gnome/tweaks]
|
||||
show-extensions-notice=false
|
2
home/.config/electron-flags.conf
Normal file
2
home/.config/electron-flags.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
--enable-features=UseOzonePlatform
|
||||
--ozone-platform=wayland
|
2
home/.config/electron12-flags.conf
Normal file
2
home/.config/electron12-flags.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
--enable-features=UseOzonePlatform
|
||||
--ozone-platform=wayland
|
3
home/.config/environment.d/firefox.conf
Normal file
3
home/.config/environment.d/firefox.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
MOZ_ENABLE_WAYLAND=1
|
||||
MOZ_USE_XINPUT2=1
|
||||
MOZ_WEBRENDER=1
|
|
@ -1,3 +0,0 @@
|
|||
_JAVA_AWT_WM_NONREPARENTING=1
|
||||
_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
|
||||
JAVA_FONTS=/usr/share/fonts/TTF
|
|
@ -7,11 +7,6 @@ QT_QPA_PLATFORMTHEME=qt5ct
|
|||
QT_QPA_PLATFORM=wayland-egl
|
||||
QT_WAYLAND_DISABLE_WINDOWDECORATION=1
|
||||
|
||||
# Firefox
|
||||
MOZ_ENABLE_WAYLAND=1
|
||||
MOZ_USE_XINPUT2=1
|
||||
MOZ_WEBRENDER=1
|
||||
|
||||
# Fix redshift on wlroots
|
||||
WLR_DRM_NO_ATOMIC=1
|
||||
|
|
@ -1,26 +1,22 @@
|
|||
<?xml version='1.0'?>
|
||||
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||
<fontconfig>
|
||||
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<prefer>
|
||||
<family>Overpass</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<prefer>
|
||||
<family>Overpass</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<prefer>
|
||||
<family>Hack Nerd Font Mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<prefer>
|
||||
<family>Adwaita Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<prefer>
|
||||
<family>Adwaita Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<prefer>
|
||||
<family>Adwaita mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
</fontconfig>
|
||||
|
|
45
home/.config/foot/foot-light.ini
Normal file
45
home/.config/foot/foot-light.ini
Normal file
|
@ -0,0 +1,45 @@
|
|||
pad=10x0
|
||||
dpi-aware=yes
|
||||
|
||||
[scrollback]
|
||||
lines=1000
|
||||
|
||||
[cursor]
|
||||
blink=yes
|
||||
|
||||
[mouse]
|
||||
hide-when-typing=yes
|
||||
|
||||
[colors]
|
||||
foreground = 545464
|
||||
background = f2ecbc
|
||||
|
||||
selection-foreground = 43436c
|
||||
selection-background = c9cbd1
|
||||
|
||||
regular0 = 1F1F28
|
||||
regular1 = c84053
|
||||
regular2 = 6f894e
|
||||
regular3 = 77713f
|
||||
regular4 = 4d699b
|
||||
regular5 = b35b79
|
||||
regular6 = 597b75
|
||||
regular7 = 545464
|
||||
|
||||
bright0 = 8a8980
|
||||
bright1 = d7474b
|
||||
bright2 = 6e915f
|
||||
bright3 = 836f4a
|
||||
bright4 = 6693bf
|
||||
bright5 = 624c83
|
||||
bright6 = 5e857a
|
||||
bright7 = 43436c
|
||||
|
||||
|
||||
16 = cc6d00
|
||||
17 = e82424
|
||||
|
||||
[csd]
|
||||
color = fff2ecbc
|
||||
button-color = ff545464
|
||||
hide-when-maximized = yes
|
44
home/.config/foot/foot.ini
Normal file
44
home/.config/foot/foot.ini
Normal file
|
@ -0,0 +1,44 @@
|
|||
pad=10x0
|
||||
dpi-aware=yes
|
||||
|
||||
[scrollback]
|
||||
lines=1000
|
||||
|
||||
[cursor]
|
||||
blink=yes
|
||||
|
||||
[mouse]
|
||||
hide-when-typing=yes
|
||||
|
||||
[colors]
|
||||
foreground = dcd7ba
|
||||
background = 1f1f28
|
||||
|
||||
selection-foreground = c8c093
|
||||
selection-background = 2d4f67
|
||||
|
||||
regular0 = 090618
|
||||
regular1 = c34043
|
||||
regular2 = 76946a
|
||||
regular3 = c0a36e
|
||||
regular4 = 7e9cd8
|
||||
regular5 = 957fb8
|
||||
regular6 = 6a9589
|
||||
regular7 = c8c093
|
||||
|
||||
bright0 = 727169
|
||||
bright1 = e82424
|
||||
bright2 = 98bb6c
|
||||
bright3 = e6c384
|
||||
bright4 = 7fb4ca
|
||||
bright5 = 938aa9
|
||||
bright6 = 7aa89f
|
||||
bright7 = dcd7ba
|
||||
|
||||
16 = ffa066
|
||||
17 = ff5d62
|
||||
|
||||
[csd]
|
||||
color = ff1f1f28
|
||||
button-color = ffdcd7ba
|
||||
hide-when-maximized = yes
|
64
home/.config/git/config
Normal file
64
home/.config/git/config
Normal file
|
@ -0,0 +1,64 @@
|
|||
[user]
|
||||
{%@@ if profile == "mko-laptop" @@%}
|
||||
email = marko.korhonen@rossum.fi
|
||||
{%@@ else @@%}
|
||||
email = marko@korhonen.cc
|
||||
{%@@ endif @@%}
|
||||
name = Marko Korhonen
|
||||
signingkey = F2B9F713E7ED627336DD85E444FA3F28CD931BB0
|
||||
|
||||
[commit]
|
||||
signoff = true
|
||||
gpgsign = true
|
||||
|
||||
[tag]
|
||||
gpgSign = true
|
||||
signoff = true
|
||||
|
||||
[format]
|
||||
signoff = true
|
||||
|
||||
[merge]
|
||||
prompt = false
|
||||
conflictstyle = diff3
|
||||
tool = nvim
|
||||
|
||||
[mergetool]
|
||||
keepBackup = false
|
||||
prompt = false
|
||||
|
||||
[mergetool "nvim"]
|
||||
cmd = nvim +DiffviewOpen
|
||||
|
||||
[pull]
|
||||
rebase = merges
|
||||
|
||||
[alias]
|
||||
mergetest = !git switch test && git pull && git merge --no-ff -m \"Merge $1 features to test\" $1
|
||||
upstream = !git push -u origin HEAD
|
||||
sync = !git pull && git push
|
||||
recommit = !git commit -eF $(git rev-parse --git-dir)/COMMIT_EDITMSG
|
||||
pull-merge = pull --no-rebase --no-ff --no-edit
|
||||
log-merge = log -i --grep=merge --pretty=oneline
|
||||
log-fp = log --first-parent --pretty=oneline
|
||||
ll = log --pretty=oneline
|
||||
dno = !git --no-pager diff --name-only
|
||||
|
||||
[color]
|
||||
pager = no
|
||||
|
||||
[init]
|
||||
defaultBranch = main
|
||||
|
||||
[credential]
|
||||
helper = cache --timeout=600
|
||||
helper = !pass-git-helper $@
|
||||
|
||||
[rerere]
|
||||
enabled = true
|
||||
|
||||
[submodule]
|
||||
recurse = true
|
||||
|
||||
[push]
|
||||
recurseSubmodules = check
|
|
@ -1,3 +1,4 @@
|
|||
VteTerminal, vte-terminal {
|
||||
padding: 40px;
|
||||
VteTerminal,
|
||||
vte-terminal {
|
||||
padding: 40px;
|
||||
}
|
||||
|
|
19
home/.config/imapnotify/admin@korhonen.cc.js
Normal file
19
home/.config/imapnotify/admin@korhonen.cc.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
var child_process = require('child_process');
|
||||
|
||||
function getStdout(cmd) {
|
||||
var stdout = child_process.execSync(cmd);
|
||||
return stdout.toString().trim();
|
||||
}
|
||||
|
||||
exports.host = 'imap.migadu.com';
|
||||
exports.port = 993;
|
||||
exports.tls = true;
|
||||
exports.tlsOptions = {
|
||||
rejectUnauthorized: true,
|
||||
};
|
||||
exports.username = 'admin@korhonen.cc';
|
||||
exports.password = "{{@@ env['PASS_EMAIL_ADMIN'] @@}}";
|
||||
exports.onNewMail = 'mbsync admin@korhonen.cc';
|
||||
exports.onNewMailPost =
|
||||
'~/git/dotfiles/scripts/mail/notify-new-mail.sh admin@korhonen.cc';
|
||||
exports.boxes = ['INBOX'];
|
19
home/.config/imapnotify/functionalhacker@korhonen.cc.js
Normal file
19
home/.config/imapnotify/functionalhacker@korhonen.cc.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
var child_process = require('child_process');
|
||||
|
||||
function getStdout(cmd) {
|
||||
var stdout = child_process.execSync(cmd);
|
||||
return stdout.toString().trim();
|
||||
}
|
||||
|
||||
exports.host = 'imap.migadu.com';
|
||||
exports.port = 993;
|
||||
exports.tls = true;
|
||||
exports.tlsOptions = {
|
||||
rejectUnauthorized: true,
|
||||
};
|
||||
exports.username = 'functionalhacker@korhonen.cc';
|
||||
exports.password = "{{@@ env['PASS_EMAIL_HACKER'] @@}}";
|
||||
exports.onNewMail = 'mbsync functionalhacker@korhonen.cc';
|
||||
exports.onNewMailPost =
|
||||
'~/git/dotfiles/scripts/mail/notify-new-mail.sh functionalhacker@korhonen.cc';
|
||||
exports.boxes = ['INBOX'];
|
19
home/.config/imapnotify/marko@korhonen.cc.js
Normal file
19
home/.config/imapnotify/marko@korhonen.cc.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
var child_process = require('child_process');
|
||||
|
||||
function getStdout(cmd) {
|
||||
var stdout = child_process.execSync(cmd);
|
||||
return stdout.toString().trim();
|
||||
}
|
||||
|
||||
exports.host = 'imap.migadu.com';
|
||||
exports.port = 993;
|
||||
exports.tls = true;
|
||||
exports.tlsOptions = {
|
||||
rejectUnauthorized: true,
|
||||
};
|
||||
exports.username = 'marko@korhonen.cc';
|
||||
exports.password = "{{@@ env['PASS_EMAIL_MARKO'] @@}}";
|
||||
exports.onNewMail = 'mbsync marko@korhonen.cc';
|
||||
exports.onNewMailPost =
|
||||
'~/git/dotfiles/scripts/mail/notify-new-mail.sh marko@korhonen.cc';
|
||||
exports.boxes = ['INBOX'];
|
|
@ -1,6 +1,12 @@
|
|||
background-color=#282828
|
||||
text-color=#EBDBB2
|
||||
border-color=#D65D0E
|
||||
background-color=#1E1D2F
|
||||
text-color=#D9E0EE
|
||||
border-color=#96CDFB
|
||||
progress-color=over #302D41
|
||||
|
||||
icons=1
|
||||
default-timeout=5000
|
||||
max-visible=6
|
||||
layer=overlay
|
||||
|
||||
[urgency=high]
|
||||
border-color=#F8BD96
|
||||
|
|
|
@ -1,38 +1,41 @@
|
|||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://invidio.us/.*
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://(m.)?(www.)?youtube.com/watch\?.*v=
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://(www.)?youtube.com/playlist\?.*list=
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://(www.)?youtu.be/
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://(www.)?(m.)?twitch.tv/
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:mp4|mkv|webm|avi|3gp|gif|gifv)
|
||||
|
||||
mpvq %U
|
||||
^https?://www.facebook.com/.*/videos/
|
||||
mpvqueue %U
|
||||
^https?://www.facebook.com/watch/?v=.*
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://www.facebook.com/.*/videos/.*
|
||||
|
||||
mpvqueue %U
|
||||
^https://fb.watch/.*
|
||||
|
||||
mpvqueue %U
|
||||
^https?://gfycat.com/.*
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://vimeo.com/.*
|
||||
|
||||
mpvq %U
|
||||
mpvqueue %U
|
||||
^https?://v.redd.it/.*
|
||||
|
||||
imgurviewer %U
|
||||
^https?://(www.)?imgur.com/a/
|
||||
|
||||
imgurviewer %U
|
||||
^https?://(www.)?imgur.com/gallery/
|
||||
mpvqueue %U
|
||||
^https?://areena.yle.fi.*
|
||||
|
||||
imageviewer %U
|
||||
^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:jpg|jpeg|png|svg)
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
music_directory "~/Music"
|
||||
playlist_directory "~/Music/Playlists"
|
||||
db_file "~/.mpd/database"
|
||||
log_file "~/.mpd/log"
|
||||
pid_file "~/.mpd/pid"
|
||||
state_file "~/.mpd/state"
|
||||
sticker_file "~/.mpd/sticker.sql"
|
||||
music_directory "~/Music"
|
||||
playlist_directory "~/Music/Playlists"
|
||||
db_file "~/.mpd/database"
|
||||
log_file "~/.mpd/log"
|
||||
state_file "~/.mpd/state"
|
||||
sticker_file "~/.mpd/sticker.sql"
|
||||
|
||||
replaygain "track"
|
||||
replaygain "track"
|
||||
|
||||
default_permissions "read"
|
||||
password "{{@@ env['PASS_MPD'] @@}}@read,add,control"
|
||||
password "{{@@ env['PASS_MPD_ADMIN'] @@}}@read,add,control,admin"
|
||||
default_permissions "read,add,control"
|
||||
password "{{@@ env['PASS_MPD'] @@}}@read,add,control"
|
||||
password "{{@@ env['PASS_MPD_ADMIN'] @@}}@read,add,control,admin"
|
||||
|
||||
audio_output {
|
||||
type "fifo"
|
||||
name "Visualizer"
|
||||
path "/tmp/mpd.fifo"
|
||||
format "44100:16:2"
|
||||
type "fifo"
|
||||
name "Visualizer"
|
||||
path "/tmp/mpd.fifo"
|
||||
format "44100:16:2"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "pulse"
|
||||
name "MPD PulseAudio"
|
||||
type "pipewire"
|
||||
name "MPD PipeWire"
|
||||
}
|
||||
|
|
|
@ -19,3 +19,8 @@ m cycle ao-mute
|
|||
VOLUME_DOWN add ao-volume -2
|
||||
VOLUME_UP add ao-volume +2
|
||||
MUTE cycle ao-mute
|
||||
|
||||
= add audio-delay 0.100
|
||||
- add audio-delay -0.100
|
||||
|
||||
s playlist-shuffle
|
||||
|
|
|
@ -7,10 +7,8 @@ vo=gpu
|
|||
hwdec=vaapi
|
||||
hwdec-codecs=all
|
||||
|
||||
{%@@ if profile == "Mirkwood" @@%}
|
||||
{%@@ if wayland @@%}
|
||||
gpu-context=wayland
|
||||
{%@@ elif profile == "Rivendell" @@%}
|
||||
ao=alsa
|
||||
{%@@ endif @@%}
|
||||
|
||||
#############
|
||||
|
@ -18,18 +16,21 @@ ao=alsa
|
|||
#############
|
||||
pulse-buffer=50 # using a large buffer causes seeking issues
|
||||
audio-pitch-correction=yes # automatically insert scaletempo when playing with higher speed
|
||||
replaygain=track
|
||||
|
||||
#############
|
||||
# Plugins/misc #
|
||||
# misc #
|
||||
#############
|
||||
# Mpris plugin
|
||||
script=/usr/lib/mpv/mpris.so
|
||||
|
||||
# Start ipc server
|
||||
input-ipc-server=/tmp/mpvsocket
|
||||
|
||||
# set youtube-dl max res to 1080
|
||||
# set youtube-dl max res
|
||||
{%@@ if profile == "Moria" @@%}
|
||||
ytdl-format=bestvideo[height<=2160]+bestaudio/best[height<=2160]
|
||||
{%@@ else @@%}
|
||||
ytdl-format=bestvideo[height<=1080]+bestaudio/best[height<=1080]
|
||||
{%@@ endif @@%}
|
||||
|
||||
# continue watching
|
||||
save-position-on-quit
|
||||
|
@ -62,7 +63,7 @@ sub-shadow-color="#33000000"
|
|||
sub-spacing=0.5
|
||||
|
||||
# OSD customizations
|
||||
osd-font="Overpass"
|
||||
osd-font="Lucida Console"
|
||||
osd-font-size=30
|
||||
osd-color="#ffffffff" # ARGB format
|
||||
osd-border-color="#ff151515" # ARGB format
|
||||
|
@ -73,7 +74,7 @@ osd-bar-w=60 # width of " " "
|
|||
osd-shadow-color="#11000000"
|
||||
osd-fractions
|
||||
|
||||
# Protocol specific configuration
|
||||
# Protocol specific configuration
|
||||
[protocol.https]
|
||||
cache=yes
|
||||
user-agent='Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0'
|
||||
|
@ -105,8 +106,4 @@ ytdl-format="bestvideo[height<=2160]+bestaudio/best[height<=2160]"
|
|||
[best]
|
||||
ytdl-format="bestvideo+bestaudio"
|
||||
|
||||
# Vulkan hwdec profile
|
||||
[vulkan]
|
||||
gpu-api=vulkan
|
||||
gpu-context=waylandvk
|
||||
hwdec=vaapi-copy
|
||||
script-opts-append=ytdl_hook-ytdl_path=yt-dlp
|
||||
|
|
505
home/.config/mpv/scripts/iptv.lua
Normal file
505
home/.config/mpv/scripts/iptv.lua
Normal file
|
@ -0,0 +1,505 @@
|
|||
--redefine keybindings here if needed; multiple bindings are possible
|
||||
keybinds = {
|
||||
activate = {'\\', 'MOUSE_BTN2'},
|
||||
plsup = {'UP', 'MOUSE_BTN3'},
|
||||
plsdown = {'DOWN', 'MOUSE_BTN4'},
|
||||
plsenter = {'ENTER', 'MOUSE_BTN0'}
|
||||
}
|
||||
--hide playlist after specified number of seconds
|
||||
osd_time=10
|
||||
--show only specified number of playlist entries
|
||||
window=7
|
||||
--fade video when showing playlist
|
||||
fade=false
|
||||
--if fade=true; -100 — black, 0 — normal
|
||||
plsbrightness=-70
|
||||
--favorites get promotion to the top of the pls
|
||||
favorites = {}
|
||||
-- END OF CONFIGURABLE VARIABLES
|
||||
|
||||
-- put your settings in (SCRIPTS DIR)/_iptvconf.lua
|
||||
pcall(require, "_iptvconf")
|
||||
|
||||
local timer
|
||||
--local plscount
|
||||
local pattern=""
|
||||
local is_active
|
||||
local is_playlist_loaded
|
||||
|
||||
-- UTF-8 lower/upper conversion
|
||||
local utf8_lc_uc = {
|
||||
["a"] = "A",
|
||||
["b"] = "B",
|
||||
["c"] = "C",
|
||||
["d"] = "D",
|
||||
["e"] = "E",
|
||||
["f"] = "F",
|
||||
["g"] = "G",
|
||||
["h"] = "H",
|
||||
["i"] = "I",
|
||||
["j"] = "J",
|
||||
["k"] = "K",
|
||||
["l"] = "L",
|
||||
["m"] = "M",
|
||||
["n"] = "N",
|
||||
["o"] = "O",
|
||||
["p"] = "P",
|
||||
["q"] = "Q",
|
||||
["r"] = "R",
|
||||
["s"] = "S",
|
||||
["t"] = "T",
|
||||
["u"] = "U",
|
||||
["v"] = "V",
|
||||
["w"] = "W",
|
||||
["x"] = "X",
|
||||
["y"] = "Y",
|
||||
["z"] = "Z",
|
||||
["а"] = "А",
|
||||
["б"] = "Б",
|
||||
["в"] = "В",
|
||||
["г"] = "Г",
|
||||
["д"] = "Д",
|
||||
["е"] = "Е",
|
||||
["ж"] = "Ж",
|
||||
["з"] = "З",
|
||||
["и"] = "И",
|
||||
["й"] = "Й",
|
||||
["к"] = "К",
|
||||
["л"] = "Л",
|
||||
["м"] = "М",
|
||||
["н"] = "Н",
|
||||
["о"] = "О",
|
||||
["п"] = "П",
|
||||
["р"] = "Р",
|
||||
["с"] = "С",
|
||||
["т"] = "Т",
|
||||
["у"] = "У",
|
||||
["ф"] = "Ф",
|
||||
["х"] = "Х",
|
||||
["ц"] = "Ц",
|
||||
["ч"] = "Ч",
|
||||
["ш"] = "Ш",
|
||||
["щ"] = "Щ",
|
||||
["ъ"] = "Ъ",
|
||||
["ы"] = "Ы",
|
||||
["ь"] = "Ь",
|
||||
["э"] = "Э",
|
||||
["ю"] = "Ю",
|
||||
["я"] = "Я",
|
||||
["ё"] = "Ё"
|
||||
}
|
||||
|
||||
local utf8_uc_lc = {
|
||||
["A"] = "a",
|
||||
["B"] = "b",
|
||||
["C"] = "c",
|
||||
["D"] = "d",
|
||||
["E"] = "e",
|
||||
["F"] = "f",
|
||||
["G"] = "g",
|
||||
["H"] = "h",
|
||||
["I"] = "i",
|
||||
["J"] = "j",
|
||||
["K"] = "k",
|
||||
["L"] = "l",
|
||||
["M"] = "m",
|
||||
["N"] = "n",
|
||||
["O"] = "o",
|
||||
["P"] = "p",
|
||||
["Q"] = "q",
|
||||
["R"] = "r",
|
||||
["S"] = "s",
|
||||
["T"] = "t",
|
||||
["U"] = "u",
|
||||
["V"] = "v",
|
||||
["W"] = "w",
|
||||
["X"] = "x",
|
||||
["Y"] = "y",
|
||||
["Z"] = "z",
|
||||
["А"] = "а",
|
||||
["Б"] = "б",
|
||||
["В"] = "в",
|
||||
["Г"] = "г",
|
||||
["Д"] = "д",
|
||||
["Е"] = "е",
|
||||
["Ж"] = "ж",
|
||||
["З"] = "з",
|
||||
["И"] = "и",
|
||||
["Й"] = "й",
|
||||
["К"] = "к",
|
||||
["Л"] = "л",
|
||||
["М"] = "м",
|
||||
["Н"] = "н",
|
||||
["О"] = "о",
|
||||
["П"] = "п",
|
||||
["Р"] = "р",
|
||||
["С"] = "с",
|
||||
["Т"] = "т",
|
||||
["У"] = "у",
|
||||
["Ф"] = "ф",
|
||||
["Х"] = "х",
|
||||
["Ц"] = "ц",
|
||||
["Ч"] = "ч",
|
||||
["Ш"] = "ш",
|
||||
["Щ"] = "щ",
|
||||
["Ъ"] = "ъ",
|
||||
["Ы"] = "ы",
|
||||
["Ь"] = "ь",
|
||||
["Э"] = "э",
|
||||
["Ю"] = "ю",
|
||||
["Я"] = "я",
|
||||
["Ё"] = "ё"
|
||||
}
|
||||
|
||||
--utf8 char pattern
|
||||
local utf8_char="[\1-\127\192-\223][\128-\191]*"
|
||||
|
||||
local cyr_chars={'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'}
|
||||
|
||||
-- символы, которые возможно вводить для поиска
|
||||
local chars={}
|
||||
for i=string.byte('a'),string.byte('z') do
|
||||
table.insert(chars,i)
|
||||
end
|
||||
for i=string.byte('A'),string.byte('Z') do
|
||||
table.insert(chars,i)
|
||||
end
|
||||
for i=string.byte('0'),string.byte('9') do
|
||||
table.insert(chars,i)
|
||||
end
|
||||
for _,v in ipairs({',','^','$','(',')','%','.','[',']','*','+','-','?','`',"'",";"}) do
|
||||
table.insert(chars,string.byte(v))
|
||||
end
|
||||
|
||||
local keybinder = {
|
||||
remove = function(action)
|
||||
for i,_ in ipairs(keybinds[action]) do
|
||||
mp.remove_key_binding(action..tostring(i))
|
||||
end
|
||||
end,
|
||||
add = function(action, func, repeatable)
|
||||
for i,key in ipairs(keybinds[action]) do
|
||||
assert(type(func)=="function", "not a function")
|
||||
if repeatable then
|
||||
mp.add_forced_key_binding(key, action..tostring(i), func, "repeatable")
|
||||
else
|
||||
mp.add_forced_key_binding(key, action..tostring(i), func)
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local fader = {
|
||||
saved_brtns,
|
||||
on = function(self)
|
||||
if fade and not self.saved_brtns then
|
||||
self.saved_brtns = mp.get_property("brightness")
|
||||
mp.set_property("brightness", plsbrightness)
|
||||
end
|
||||
end,
|
||||
off = function(self)
|
||||
if fade and self.saved_brtns then
|
||||
mp.set_property("brightness", self.saved_brtns)
|
||||
self.saved_brtns=nil
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local playlister = {
|
||||
-- pls — список элементов плейлиста
|
||||
pls,
|
||||
-- plsfiltered — список индексов выбранных фильтром элементов плейлиста
|
||||
plsfiltered,
|
||||
plspos,
|
||||
wndstart,
|
||||
wndend,
|
||||
cursor,
|
||||
|
||||
init = function(self)
|
||||
if not self.pls then
|
||||
self.pls = mp.get_property_native("playlist")
|
||||
end
|
||||
mp.commandv("stop")
|
||||
--need to mark first entry non-current (mpv bug?)
|
||||
if self.pls[1] then
|
||||
self.pls[1].current = false
|
||||
end
|
||||
if favorites and #favorites>0 then
|
||||
self:sortfavs()
|
||||
end
|
||||
pattern = ""
|
||||
self.plsfiltered = tablekeys(self.pls)
|
||||
end,
|
||||
|
||||
show = function(self)
|
||||
local i
|
||||
local newpos
|
||||
local msg
|
||||
--media-title
|
||||
--playlist t[2].title
|
||||
|
||||
if not self.plsfiltered then
|
||||
return
|
||||
end
|
||||
if not self.plspos then
|
||||
self.plspos=mp.get_property_native("playlist-pos-1")
|
||||
--plscount=mp.get_property_native("playlist-count")
|
||||
end
|
||||
if not self.wndstart or not self.cursor then
|
||||
self.wndstart=1
|
||||
self.cursor=0
|
||||
end
|
||||
|
||||
msg=""
|
||||
i = self.wndstart
|
||||
local prefix
|
||||
while self.plsfiltered[i] and i<=self.wndstart+window-1 do
|
||||
if self.pls[self.plsfiltered[i]].current then
|
||||
prefix="*"
|
||||
elseif i==self.wndstart+self.cursor then
|
||||
prefix=">"
|
||||
else
|
||||
prefix=" "
|
||||
end
|
||||
msg = msg..prefix..(self.pls[self.plsfiltered[i]].title or "").."\n"
|
||||
i=i+1
|
||||
end
|
||||
if self.wndstart>1 then
|
||||
msg = "...\n"..msg
|
||||
else
|
||||
msg = " \n"..msg
|
||||
end
|
||||
if self.wndstart+window-1<#self.plsfiltered then
|
||||
msg = msg.."..."
|
||||
end
|
||||
msg="/"..pattern.."\n"..msg
|
||||
mp.osd_message(msg, osd_time)
|
||||
end,
|
||||
|
||||
sortfavs = function(self)
|
||||
--favorites bubbles to the top
|
||||
local favs={}
|
||||
local nonfavs={}
|
||||
for _,v in ipairs(self.pls) do
|
||||
if in_array(favorites,v.title) then
|
||||
favs[#favs+1] = v
|
||||
else
|
||||
nonfavs[#nonfavs+1] = v
|
||||
end
|
||||
end
|
||||
for i=1,#nonfavs do
|
||||
favs[#favs+1] = nonfavs[i]
|
||||
end
|
||||
self.pls = favs
|
||||
end,
|
||||
|
||||
filter = function(self)
|
||||
self.plsfiltered={}
|
||||
for i,v in ipairs(self.pls) do
|
||||
if string.match(mylower(v.title),'.*'..prepat(pattern)..'.*') then
|
||||
table.insert(self.plsfiltered,i)
|
||||
end
|
||||
end
|
||||
self.wndstart=1
|
||||
self.cursor=0
|
||||
end,
|
||||
|
||||
down = function(self)
|
||||
if self.cursor >= #self.plsfiltered-1 then return end
|
||||
if self.cursor<window-1 then
|
||||
self.cursor=self.cursor+1
|
||||
else
|
||||
if self.wndstart<#self.plsfiltered-window+1 then
|
||||
self.wndstart=self.wndstart+1
|
||||
end
|
||||
end
|
||||
self.show(self)
|
||||
end,
|
||||
up = function(self)
|
||||
if self.cursor>0 then
|
||||
self.cursor=self.cursor-1
|
||||
self.show(self)
|
||||
else
|
||||
if self.wndstart>1 then
|
||||
self.wndstart=self.wndstart-1
|
||||
self.show(self)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
play = function(self)
|
||||
mp.commandv("loadfile",self.pls[self.plsfiltered[self.wndstart+self.cursor]].filename)
|
||||
if self.plspos then
|
||||
self.pls[self.plspos].current=false
|
||||
end
|
||||
self.plspos=self.plsfiltered[self.wndstart+self.cursor]
|
||||
self.pls[self.plspos].current=true
|
||||
end
|
||||
}
|
||||
|
||||
function add_bindings()
|
||||
keybinder.add("plsup", up, true)
|
||||
keybinder.add("plsdown", down, true)
|
||||
for i,v in ipairs(chars) do
|
||||
c=string.char(v)
|
||||
mp.add_forced_key_binding(c, 'search'..v, typing(c),"repeatable")
|
||||
end
|
||||
mp.add_forced_key_binding('SPACE', 'search32', typing(' '),"repeatable")
|
||||
|
||||
--[[ mp.add_key_binding('а', 'search1000', typing('а'),"repeatable")
|
||||
mp.add_key_binding('с', 'search1001', typing('с'),"repeatable")]]
|
||||
|
||||
mp.add_forced_key_binding('BS', 'searchbs', backspace,"repeatable")
|
||||
keybinder.add("plsenter", play)
|
||||
for i,v in ipairs(cyr_chars) do
|
||||
mp.add_forced_key_binding(v, 'search'..i+1000, typing(v),"repeatable")
|
||||
end
|
||||
end
|
||||
|
||||
function remove_bindings()
|
||||
keybinder.remove('plsup')
|
||||
keybinder.remove('plsdown')
|
||||
keybinder.remove('plsenter')
|
||||
for i,v in ipairs(chars) do
|
||||
c=string.char(v)
|
||||
mp.remove_key_binding('search'..v)
|
||||
end
|
||||
mp.remove_key_binding('search32')
|
||||
mp.remove_key_binding('searchbs')
|
||||
for i,v in ipairs(cyr_chars) do
|
||||
mp.remove_key_binding('search'..i+1000)
|
||||
end
|
||||
end
|
||||
|
||||
function activate()
|
||||
if is_active then
|
||||
shutdown()
|
||||
return
|
||||
else
|
||||
is_active=true
|
||||
fader:on()
|
||||
playlister:show()
|
||||
add_bindings()
|
||||
if not timer then
|
||||
timer=mp.add_periodic_timer(osd_time, shutdown)
|
||||
timer.oneshot=true
|
||||
else
|
||||
resumetimer()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function tablekeys(t)
|
||||
local result={}
|
||||
for i,v in ipairs(t) do
|
||||
table.insert(result,i)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function in_array(array, value)
|
||||
for _,v in ipairs(array) do
|
||||
if v==value then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function mylower(s)
|
||||
local res,n = string.gsub(s,utf8_char,function (c)
|
||||
return utf8_uc_lc[c]
|
||||
end)
|
||||
return res
|
||||
end
|
||||
|
||||
function myupper(s)
|
||||
local res,n = string.gsub(s,utf8_char,function (c)
|
||||
return utf8_lc_uc[c]
|
||||
end)
|
||||
return res
|
||||
end
|
||||
|
||||
function prepat(s)
|
||||
--prepare nocase and magic chars
|
||||
s = string.gsub(s, "[%^%$%(%)%%%.%[%]%*%+%-%?]",function (c)
|
||||
return '%'..c
|
||||
end)
|
||||
--[[ s = string.gsub(s, utf8_char, function (c)
|
||||
return string.format("[%s%s]", utf8_uc_lc[c] or c, utf8_lc_uc[c] or c)
|
||||
end)]]
|
||||
return s
|
||||
end
|
||||
|
||||
function resumetimer()
|
||||
timer:kill()
|
||||
timer:resume()
|
||||
end
|
||||
|
||||
function typing(char)
|
||||
return function()
|
||||
local c=string.lower(char)
|
||||
pattern = pattern..c
|
||||
playlister:filter()
|
||||
playlister:show()
|
||||
resumetimer()
|
||||
end
|
||||
end
|
||||
|
||||
function backspace()
|
||||
if string.len(pattern)>0 then
|
||||
-- pattern = string.sub(pattern,1,-2)
|
||||
-- for unicode
|
||||
pattern = string.match(pattern,"(.*)"..utf8_char.."$")
|
||||
playlister:filter()
|
||||
playlister:show()
|
||||
resumetimer()
|
||||
end
|
||||
end
|
||||
|
||||
function play()
|
||||
-- mp.commandv("playlist-move", wndstart+cursor, 1)
|
||||
-- mp.commandv("playlist-clear")
|
||||
-- mp.commandv("playlist-next")
|
||||
fader:off()
|
||||
playlister:play()
|
||||
playlister:show()
|
||||
resumetimer()
|
||||
end
|
||||
|
||||
function shutdown()
|
||||
fader:off()
|
||||
remove_bindings()
|
||||
is_active=false
|
||||
mp.osd_message("", 1)
|
||||
end
|
||||
|
||||
function down()
|
||||
fader:on()
|
||||
playlister:down()
|
||||
resumetimer()
|
||||
end
|
||||
|
||||
function up()
|
||||
fader:on()
|
||||
playlister:up()
|
||||
resumetimer()
|
||||
end
|
||||
|
||||
function on_start_file()
|
||||
if is_playlist_loaded then
|
||||
playlister:init()
|
||||
mp.unregister_event(on_start_file)
|
||||
activate()
|
||||
else
|
||||
is_playlist_loaded = true
|
||||
end
|
||||
end
|
||||
|
||||
if mp.get_opt("iptv") then
|
||||
mp.set_property_bool("idle", true)
|
||||
mp.set_property_bool("force-window", true)
|
||||
mp.register_event("start-file", on_start_file)
|
||||
keybinder.add("activate", activate)
|
||||
end
|
||||
|
76
home/.config/mpv/scripts/yledl_hook.lua
Normal file
76
home/.config/mpv/scripts/yledl_hook.lua
Normal file
|
@ -0,0 +1,76 @@
|
|||
-- Copied from https://github.com/pekkarr/mpv-yledl
|
||||
-- Copyright 2021 Pekka Ristola
|
||||
|
||||
-- This program is free software: you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
-- the Free Software Foundation, either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
local msg = require 'mp.msg'
|
||||
local utils = require 'mp.utils'
|
||||
|
||||
local function add_series(data)
|
||||
local playlist = { "#EXTM3U" }
|
||||
for _, episode in pairs(data) do
|
||||
table.insert(playlist, episode["webpage"])
|
||||
end
|
||||
mp.set_property("stream-open-filename", "memory://" .. table.concat(playlist, "\n"))
|
||||
end
|
||||
|
||||
local function add_single_video(data)
|
||||
local flavors = data["flavors"]
|
||||
table.sort(flavors, function(a, b) return a["bitrate"] > b["bitrate"] end)
|
||||
local best = flavors[1]
|
||||
mp.set_property("stream-open-filename", best["url"])
|
||||
mp.set_property("file-local-options/force-media-title", data["title"])
|
||||
for _, sub in ipairs(data["subtitles"]) do
|
||||
local lang = sub["language"]
|
||||
msg.verbose("Adding subtitles for " .. lang)
|
||||
mp.commandv("sub-add", sub["url"], "auto", sub["category"], lang)
|
||||
end
|
||||
end
|
||||
|
||||
mp.add_hook("on_load", 9, function()
|
||||
msg.verbose('yle-dl hook')
|
||||
local url = mp.get_property("stream-open-filename", "")
|
||||
if (url:find("https?://%a+%.yle%.fi/") == 1) or (url:find("https?://yle%.fi/") == 1) then
|
||||
local start_time = os.clock()
|
||||
local command = { "yle-dl", "--showmetadata", url }
|
||||
msg.debug("Running: " .. table.concat(command, ' '))
|
||||
local ret = mp.command_native({name = "subprocess",
|
||||
args = command,
|
||||
capture_stdout = true,
|
||||
capture_stderr = false})
|
||||
if ret.killed_by_us then
|
||||
return
|
||||
end
|
||||
if (ret.status < 0) or (ret.stdout == nil) or (ret.stdout == "") then
|
||||
msg.error("yle-dl failed to parse url")
|
||||
return
|
||||
end
|
||||
|
||||
local json, err = utils.parse_json(ret.stdout)
|
||||
if (json == nil) then
|
||||
msg.error("failed to parse JSON: " .. err)
|
||||
return
|
||||
end
|
||||
msg.verbose("yle-dl succeeded")
|
||||
msg.debug("running yle-dl took " .. os.clock() - start_time .. " seconds")
|
||||
|
||||
if #json == 1 then
|
||||
add_single_video(json[1])
|
||||
else
|
||||
add_series(json)
|
||||
end
|
||||
else
|
||||
msg.verbose('not an areena url')
|
||||
end
|
||||
end)
|
26
home/.config/msmtp/config
Normal file
26
home/.config/msmtp/config
Normal file
|
@ -0,0 +1,26 @@
|
|||
defaults
|
||||
auth on
|
||||
tls on
|
||||
tls_starttls off
|
||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||
logfile ~/.log/msmtp.log
|
||||
host smtp.migadu.com
|
||||
port 465
|
||||
|
||||
# functionalhacker@korhonen.cc
|
||||
account functionalhacker@korhonen.cc
|
||||
from functionalhacker@korhonen.cc
|
||||
user functionalhacker@korhonen.cc
|
||||
password "{{@@ env['PASS_EMAIL_HACKER'] @@}}"
|
||||
|
||||
# marko@korhonen.cc
|
||||
account marko@korhonen.cc
|
||||
from marko@korhonen.cc
|
||||
user marko@korhonen.cc
|
||||
password "{{@@ env['PASS_EMAIL_MARKO'] @@}}"
|
||||
|
||||
# admin@korhonen.cc
|
||||
account admin@korhonen.cc
|
||||
from admin@korhonen.cc
|
||||
user admin@korhonen.cc
|
||||
password "{{@@ env['PASS_EMAIL_ADMIN'] @@}}"
|
|
@ -1,99 +0,0 @@
|
|||
SPACE repeatable playlist-next
|
||||
alt+SPACE repeatable playlist-prev
|
||||
|
||||
UP ignore
|
||||
DOWN ignore
|
||||
LEFT repeatable playlist-prev
|
||||
RIGHT repeatable playlist-next
|
||||
|
||||
# simple reminder of default bindings
|
||||
#1 add contrast -1
|
||||
#2 add contrast 1
|
||||
#3 add brightness -1
|
||||
#4 add brightness 1
|
||||
#5 add gamma -1
|
||||
#6 add gamma 1
|
||||
#7 add saturation -1
|
||||
#8 add saturation 1
|
||||
|
||||
# mouse-centric bindings
|
||||
MBTN_RIGHT script-binding image_viewer/drag-to-pan
|
||||
MBTN_LEFT script-binding image_viewer/pan-follows-cursor
|
||||
WHEEL_UP script-message cursor-centric-zoom 0.1
|
||||
WHEEL_DOWN script-message cursor-centric-zoom -0.1
|
||||
|
||||
# panning with the keyboard:
|
||||
# pan-image takes the following arguments
|
||||
# pan-image AXIS AMOUNT ZOOM_INVARIANT IMAGE_CONSTRAINED
|
||||
# ^ ^ ^
|
||||
# x or y | |
|
||||
# | |
|
||||
# if yes, will pan by the same if yes, stops panning if the image
|
||||
# amount regardless of zoom would go outside of the window
|
||||
|
||||
ctrl+down repeatable script-message pan-image y -0.1 yes yes
|
||||
ctrl+up repeatable script-message pan-image y +0.1 yes yes
|
||||
ctrl+right repeatable script-message pan-image x -0.1 yes yes
|
||||
ctrl+left repeatable script-message pan-image x +0.1 yes yes
|
||||
|
||||
# now with more precision
|
||||
alt+down repeatable script-message pan-image y -0.01 yes yes
|
||||
alt+up repeatable script-message pan-image y +0.01 yes yes
|
||||
alt+right repeatable script-message pan-image x -0.01 yes yes
|
||||
alt+left repeatable script-message pan-image x +0.01 yes yes
|
||||
|
||||
# replace at will with h,j,k,l if you prefer vim-style bindings
|
||||
|
||||
# on a trackpad you may want to use these
|
||||
#WHEEL_UP repeatable script-message pan-image y -0.02 yes yes
|
||||
#WHEEL_DOWN repeatable script-message pan-image y +0.02 yes yes
|
||||
#WHEEL_LEFT repeatable script-message pan-image x -0.02 yes yes
|
||||
#WHEEL_RIGHT repeatable script-message pan-image x +0.02 yes yes
|
||||
|
||||
# align the border of the image to the border of the window
|
||||
# align-border takes the following arguments:
|
||||
# align-border ALIGN_X ALIGN_Y
|
||||
# any value for ALIGN_* is accepted, -1 and 1 map to the border of the window
|
||||
ctrl+shift+right script-message align-border -1 ""
|
||||
ctrl+shift+left script-message align-border 1 ""
|
||||
ctrl+shift+down script-message align-border "" -1
|
||||
ctrl+shift+up script-message align-border "" 1
|
||||
|
||||
# reset the image
|
||||
ctrl+0 no-osd set video-pan-x 0; no-osd set video-pan-y 0; no-osd set video-zoom 0
|
||||
|
||||
+ add video-zoom 0.5
|
||||
- add video-zoom -0.5; script-message reset-pan-if-visible
|
||||
= no-osd set video-zoom 0; script-message reset-pan-if-visible
|
||||
|
||||
# sxiv compatibility
|
||||
w no-osd set video-unscaled yes; keypress =
|
||||
e no-osd set video-unscaled no; keypress =
|
||||
|
||||
h no-osd vf toggle hflip; show-text "Horizontal flip"
|
||||
v no-osd vf toggle vflip; show-text "Vertical flip"
|
||||
|
||||
r script-message rotate-video 90; show-text "Clockwise rotation"
|
||||
R script-message rotate-video -90; show-text "Counter-clockwise rotation"
|
||||
alt+r no-osd set video-rotate 0; show-text "Reset rotation"
|
||||
|
||||
d script-message ruler
|
||||
|
||||
# Toggling between pixel-exact reproduction and interpolation
|
||||
a cycle-values scale nearest ewa_lanczossharp
|
||||
|
||||
# Toggle color management on or off
|
||||
c cycle icc-profile-auto
|
||||
|
||||
# Screenshot of the window output
|
||||
S screenshot window
|
||||
|
||||
# Toggle aspect ratio information on and off
|
||||
A cycle-values video-aspect "-1" "no"
|
||||
|
||||
p script-message force-print-filename
|
||||
|
||||
# ADVANCED: you can define bindings that belong to a "section" (named "image-viewer" here) like so:
|
||||
#alt+SPACE {image-viewer} repeatable playlist-prev
|
||||
#SPACE {image-viewer} repeatable playlist-next
|
||||
# to load them conditionally with a command. See scripts-opts/image_viewer.conf for how you can do this
|
|
@ -1,46 +0,0 @@
|
|||
## IMAGE
|
||||
# classic opengl-hq parameter, change at will
|
||||
scale=spline36
|
||||
cscale=spline36
|
||||
dscale=mitchell
|
||||
dither-depth=auto
|
||||
correct-downscaling
|
||||
sigmoid-upscaling
|
||||
# debanding seems rarely useful with images
|
||||
#deband
|
||||
|
||||
## MISC
|
||||
mute=yes
|
||||
# the osc is mostly useful for videos
|
||||
osc=no
|
||||
# don't try to autoload subtitles or audio files
|
||||
sub-auto=no
|
||||
audio-file-auto=no
|
||||
# get rid of the useless V: 00:00:00 / 00:00:00 line
|
||||
term-status-msg=
|
||||
|
||||
# replace mpv with mvi in the window title
|
||||
title="${?media-title:${media-title}}${!media-title:No file} - mvi"
|
||||
|
||||
# don't slideshow by default
|
||||
image-display-duration=inf
|
||||
# loop files in case of webms or gifs
|
||||
loop-file=inf
|
||||
# and loop the whole playlist
|
||||
loop-playlist=inf
|
||||
|
||||
# you need this if you plan to use drag-to-pan or pan-follows-cursor with MOUSE_LEFT
|
||||
window-dragging=no
|
||||
|
||||
#according to haasn, aspect ratio info for PNG and JPG is "universally bust"
|
||||
[extension.png]
|
||||
video-aspect=no
|
||||
|
||||
[extension.jpg]
|
||||
video-aspect=no
|
||||
|
||||
[extension.jpeg]
|
||||
profile=extension.jpg
|
||||
|
||||
[silent]
|
||||
msg-level=all=no
|
|
@ -1,78 +0,0 @@
|
|||
## MISC
|
||||
# size of the margins with pan-follows-cursor
|
||||
pan_follows_cursor_margin=50
|
||||
# whether pan-follows-cursor should pan when the entire image is visible
|
||||
pan_follows_cursor_move_if_full_view=no
|
||||
|
||||
## STATUS LINE
|
||||
# whether to show a status line
|
||||
status_line_enabled=yes
|
||||
# its position, possible values: (bottom|top)_(left|right)
|
||||
status_line_position=bottom_left
|
||||
# its font size
|
||||
status_line_size=36
|
||||
# the text to be expanded
|
||||
# see property expansion: https://mpv.io/manual/master/#property-expansion
|
||||
# \N can be used for line breaks
|
||||
# you can also use ass tags, see here: http://docs.aegisub.org/3.2/ASS_Tags/
|
||||
status_line=${filename} [${playlist-pos-1}/${playlist-count}]
|
||||
|
||||
## MINIMAP
|
||||
# whether to show a minimap
|
||||
minimap_enabled=yes
|
||||
# the position of the center of the minimap, in percentage of the window (x, y)
|
||||
minimap_center=92,92
|
||||
# the scale of the minimap (i.e. the view rectangle is scale / 100 times the size of the window)
|
||||
minimap_scale=12
|
||||
# the cutoff size of the minimap (i.e. the image rectangle is clipped if it falls outside of the this zone)
|
||||
minimap_max_size=16,16
|
||||
# opacity of the "image" (from 00=opaque to FF=transparent)
|
||||
minimap_image_opacity=88
|
||||
# color of the "image" (#BBGGRR where each component rages from 00 to FF)
|
||||
minimap_image_color=BBBBBB
|
||||
# opacity of the "view"
|
||||
minimap_view_opacity=BB
|
||||
minimap_view_color=222222
|
||||
# whether the view should be drawn above the image
|
||||
minimap_view_above_image=yes
|
||||
# whether to show the minimap if the current image is fully visible
|
||||
minimap_hide_when_full_image_in_view=yes
|
||||
|
||||
## RULER
|
||||
# whether to show the length of the lines between the two points
|
||||
ruler_show_distance=yes
|
||||
# whether to show the coordinates of the two points
|
||||
ruler_show_coordinates=yes
|
||||
# the coordinate space of the text shown. Can be "image", "window", "both"
|
||||
ruler_coordinates_space=image
|
||||
# can be "degrees", "radians", "both", or "no"
|
||||
ruler_show_angles=degrees
|
||||
ruler_line_width=2
|
||||
ruler_dots_radius=3
|
||||
ruler_font_size=36
|
||||
# ranges from 00 (black) to FF (white)
|
||||
ruler_line_color=33
|
||||
# bindings used to set points. The binding to trigger ruler mode can also be used. Comma-separated list
|
||||
ruler_confirm_bindings=MBTN_LEFT,ENTER
|
||||
# bindings used to set points. The binding to trigger ruler mode can also be used. Comma-separated list
|
||||
ruler_exit_bindings=ESC
|
||||
# if yes, the first point will be immediately set at the cursor position when calling 'ruler'
|
||||
ruler_set_first_point_on_begin=no
|
||||
# if yes, the ruler overlay will be immediately cleared when setting the second point
|
||||
ruler_clear_on_second_point_set=no
|
||||
|
||||
## HOOKS
|
||||
# commands to execute when a file detected as an image (1 frame, no audio) is loaded or unloaded
|
||||
# an image was loaded, and the previous file was not an image (or there was no previous file)
|
||||
command_on_first_image_loaded=
|
||||
# an image was loaded (regardless of what the previous file was)
|
||||
command_on_image_loaded=
|
||||
# a non-image was loaded, and the previous file was an image
|
||||
command_on_non_image_loaded=
|
||||
# the purpose of these "hooks" is to let you change bindings, profiles, reset properties...
|
||||
# see https://mpv.io/manual/master/#list-of-input-commands for general command information
|
||||
# note that there is no such thing as "unloading a profile", to emulate this you must create an opposite profile and load that
|
||||
# example possible values:
|
||||
#command_on_first_image_loaded=apply-profile image; enable-section image-viewer; script-message enable-status-line
|
||||
#command_on_image_loaded=no-osd set video-pan-x 0; script-message align-border "" -1
|
||||
#command_on_non_image_loaded=disable-section image-viewer; no-osd set video-pan-x 0; no-osd set video-pan-y 0; no-osd set video-zoom 0; script-message disable-status-line
|
|
@ -1,953 +0,0 @@
|
|||
local opts = {
|
||||
pan_follows_cursor_margin = 50,
|
||||
pan_follows_cursor_move_if_full_view = false,
|
||||
|
||||
status_line_enabled = false,
|
||||
status_line_position = "bottom_left",
|
||||
status_line_size = 36,
|
||||
status_line = "${filename} [${playlist-pos-1}/${playlist-count}]",
|
||||
|
||||
minimap_enabled = true,
|
||||
minimap_center = "92,92",
|
||||
minimap_scale = 12,
|
||||
minimap_max_size = "16,16",
|
||||
minimap_image_opacity = "88",
|
||||
minimap_image_color = "BBBBBB",
|
||||
minimap_view_opacity = "BB",
|
||||
minimap_view_color = "222222",
|
||||
minimap_view_above_image = true,
|
||||
minimap_hide_when_full_image_in_view = true,
|
||||
|
||||
ruler_show_distance=true,
|
||||
ruler_show_coordinates=true,
|
||||
ruler_coordinates_space="both",
|
||||
ruler_show_angles="degrees",
|
||||
ruler_line_width=2,
|
||||
ruler_dots_radius=3,
|
||||
ruler_font_size=36,
|
||||
ruler_line_color="33",
|
||||
ruler_confirm_bindings="MBTN_LEFT,ENTER",
|
||||
ruler_exit_bindings="ESC",
|
||||
ruler_set_first_point_on_begin=false,
|
||||
ruler_clear_on_second_point_set=false,
|
||||
|
||||
command_on_first_image_loaded="",
|
||||
command_on_image_loaded="",
|
||||
command_on_non_image_loaded="",
|
||||
}
|
||||
(require 'mp.options').read_options(opts)
|
||||
function split(input)
|
||||
local ret = {}
|
||||
for str in string.gmatch(input, "([^,]+)") do
|
||||
ret[#ret + 1] = str
|
||||
end
|
||||
return ret
|
||||
end
|
||||
function str_to_num(array)
|
||||
local ret = {}
|
||||
for _, v in ipairs(array) do
|
||||
ret[#ret + 1] = tonumber(v)
|
||||
end
|
||||
return ret
|
||||
end
|
||||
opts.minimap_center=str_to_num(split(opts.minimap_center))
|
||||
opts.minimap_max_size=str_to_num(split(opts.minimap_max_size))
|
||||
opts.ruler_confirm_bindings=split(opts.ruler_confirm_bindings)
|
||||
opts.ruler_exit_bindings=split(opts.ruler_exit_bindings)
|
||||
|
||||
function clamp(value, low, high)
|
||||
if value <= low then
|
||||
return low
|
||||
elseif value >= high then
|
||||
return high
|
||||
else
|
||||
return value
|
||||
end
|
||||
end
|
||||
|
||||
local msg = require 'mp.msg'
|
||||
local assdraw = require 'mp.assdraw'
|
||||
|
||||
local ass = { -- shared ass state
|
||||
status_line = "",
|
||||
minimap = "",
|
||||
ruler = "",
|
||||
}
|
||||
|
||||
local cleanup = nil -- function set up by drag-to-pan/pan-follows cursor and must be called to clean lingering state
|
||||
local mouse_move_callbacks = {} -- functions that are called when mouse_move is triggered
|
||||
function add_mouse_move_callback(key, func)
|
||||
if #mouse_move_callbacks == 0 then
|
||||
mp.add_forced_key_binding("mouse_move", "image-viewer-internal", function()
|
||||
for _, func in pairs(mouse_move_callbacks) do
|
||||
func()
|
||||
end
|
||||
end)
|
||||
end
|
||||
mouse_move_callbacks[key] = func
|
||||
end
|
||||
function remove_mouse_move_callback(key)
|
||||
mouse_move_callbacks[key] = nil
|
||||
for _,_ in pairs(mouse_move_callbacks) do
|
||||
return
|
||||
end
|
||||
mp.remove_key_binding("image-viewer-internal")
|
||||
end
|
||||
|
||||
video_dimensions_stale = true
|
||||
function get_video_dimensions()
|
||||
-- this function is very much ripped from video/out/aspect.c in mpv's source
|
||||
if not video_dimensions_stale then return _video_dimensions end
|
||||
local video_params = mp.get_property_native("video-out-params")
|
||||
if not video_params then
|
||||
_video_dimensions = nil
|
||||
return nil
|
||||
end
|
||||
if not _timestamp then _timestamp = 0 end
|
||||
_timestamp = _timestamp + 1
|
||||
_video_dimensions = {
|
||||
timestamp = _timestamp,
|
||||
top_left = {x = 0, y = 0},
|
||||
bottom_right = {x = 0, y = 0},
|
||||
size = {w = 0, h = 0},
|
||||
ratios = {w = 0, h = 0}, -- by how much the original video got scaled
|
||||
}
|
||||
local keep_aspect = mp.get_property_bool("keepaspect")
|
||||
local w = video_params["w"]
|
||||
local h = video_params["h"]
|
||||
local dw = video_params["dw"]
|
||||
local dh = video_params["dh"]
|
||||
if mp.get_property_number("video-rotate") % 180 == 90 then
|
||||
w, h = h,w
|
||||
dw, dh = dh, dw
|
||||
end
|
||||
local window_w, window_h = mp.get_osd_size()
|
||||
|
||||
if keep_aspect then
|
||||
local unscaled = mp.get_property_native("video-unscaled")
|
||||
local panscan = mp.get_property_number("panscan")
|
||||
|
||||
local fwidth = window_w
|
||||
local fheight = math.floor(window_w / dw * dh)
|
||||
if fheight > window_h or fheight < h then
|
||||
local tmpw = math.floor(window_h / dh * dw)
|
||||
if tmpw <= window_w then
|
||||
fheight = window_h
|
||||
fwidth = tmpw
|
||||
end
|
||||
end
|
||||
local vo_panscan_area = window_h - fheight
|
||||
local f_w = fwidth / fheight
|
||||
local f_h = 1
|
||||
if vo_panscan_area == 0 then
|
||||
vo_panscan_area = window_h - fwidth
|
||||
f_w = 1
|
||||
f_h = fheight / fwidth
|
||||
end
|
||||
if unscaled or unscaled == "downscale-big" then
|
||||
vo_panscan_area = 0
|
||||
if unscaled or (dw <= window_w and dh <= window_h) then
|
||||
fwidth = dw
|
||||
fheight = dh
|
||||
end
|
||||
end
|
||||
|
||||
local scaled_width = fwidth + math.floor(vo_panscan_area * panscan * f_w)
|
||||
local scaled_height = fheight + math.floor(vo_panscan_area * panscan * f_h)
|
||||
|
||||
local split_scaling = function (dst_size, scaled_src_size, zoom, align, pan)
|
||||
scaled_src_size = math.floor(scaled_src_size * 2 ^ zoom)
|
||||
align = (align + 1) / 2
|
||||
local dst_start = math.floor((dst_size - scaled_src_size) * align + pan * scaled_src_size)
|
||||
if dst_start < 0 then
|
||||
--account for C int cast truncating as opposed to flooring
|
||||
dst_start = dst_start + 1
|
||||
end
|
||||
local dst_end = dst_start + scaled_src_size;
|
||||
if dst_start >= dst_end then
|
||||
dst_start = 0
|
||||
dst_end = 1
|
||||
end
|
||||
return dst_start, dst_end
|
||||
end
|
||||
local zoom = mp.get_property_number("video-zoom")
|
||||
|
||||
local align_x = mp.get_property_number("video-align-x")
|
||||
local pan_x = mp.get_property_number("video-pan-x")
|
||||
_video_dimensions.top_left.x, _video_dimensions.bottom_right.x = split_scaling(window_w, scaled_width, zoom, align_x, pan_x)
|
||||
|
||||
local align_y = mp.get_property_number("video-align-y")
|
||||
local pan_y = mp.get_property_number("video-pan-y")
|
||||
_video_dimensions.top_left.y, _video_dimensions.bottom_right.y = split_scaling(window_h, scaled_height, zoom, align_y, pan_y)
|
||||
else
|
||||
_video_dimensions.top_left.x = 0
|
||||
_video_dimensions.bottom_right.x = window_w
|
||||
_video_dimensions.top_left.y = 0
|
||||
_video_dimensions.bottom_right.y = window_h
|
||||
end
|
||||
_video_dimensions.size.w = _video_dimensions.bottom_right.x - _video_dimensions.top_left.x
|
||||
_video_dimensions.size.h = _video_dimensions.bottom_right.y - _video_dimensions.top_left.y
|
||||
_video_dimensions.ratios.w = _video_dimensions.size.w / w
|
||||
_video_dimensions.ratios.h = _video_dimensions.size.h / h
|
||||
video_dimensions_stale = false
|
||||
return _video_dimensions
|
||||
end
|
||||
|
||||
for _, p in ipairs({
|
||||
"keepaspect",
|
||||
"video-out-params",
|
||||
"video-unscaled",
|
||||
"panscan",
|
||||
"video-zoom",
|
||||
"video-align-x",
|
||||
"video-pan-x",
|
||||
"video-align-y",
|
||||
"video-pan-y",
|
||||
"osd-width",
|
||||
"osd-height",
|
||||
}) do
|
||||
mp.observe_property(p, "native", function() video_dimensions_stale = true end)
|
||||
end
|
||||
|
||||
function drag_to_pan_handler(table)
|
||||
if cleanup then
|
||||
cleanup()
|
||||
cleanup = nil
|
||||
end
|
||||
if table["event"] == "down" then
|
||||
local video_dimensions = get_video_dimensions()
|
||||
if not video_dimensions then return end
|
||||
local mouse_pos_origin, video_pan_origin = {}, {}
|
||||
local moved = false
|
||||
mouse_pos_origin.x, mouse_pos_origin.y = mp.get_mouse_pos()
|
||||
video_pan_origin.x = mp.get_property("video-pan-x")
|
||||
video_pan_origin.y = mp.get_property("video-pan-y")
|
||||
local idle = function()
|
||||
if moved then
|
||||
local mX, mY = mp.get_mouse_pos()
|
||||
local pX = video_pan_origin.x + (mX - mouse_pos_origin.x) / video_dimensions.size.w
|
||||
local pY = video_pan_origin.y + (mY - mouse_pos_origin.y) / video_dimensions.size.h
|
||||
mp.command("no-osd set video-pan-x " .. clamp(pX, -3, 3) .. "; no-osd set video-pan-y " .. clamp(pY, -3, 3))
|
||||
moved = false
|
||||
end
|
||||
end
|
||||
mp.register_idle(idle)
|
||||
add_mouse_move_callback("drag-to-pan", function() moved = true end)
|
||||
cleanup = function()
|
||||
remove_mouse_move_callback("drag-to-pan")
|
||||
mp.unregister_idle(idle)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function pan_follows_cursor_handler(table)
|
||||
if cleanup then
|
||||
cleanup()
|
||||
cleanup = nil
|
||||
end
|
||||
if table["event"] == "down" then
|
||||
local video_dimensions = get_video_dimensions()
|
||||
if not video_dimensions then return end
|
||||
local window_w, window_h = mp.get_osd_size()
|
||||
local moved = true
|
||||
local idle = function()
|
||||
if moved then
|
||||
local mX, mY = mp.get_mouse_pos()
|
||||
local x = math.min(1, math.max(- 2 * mX / window_w + 1, -1))
|
||||
local y = math.min(1, math.max(- 2 * mY / window_h + 1, -1))
|
||||
local command = ""
|
||||
local margin, move_full = opts.pan_follows_cursor_margin, opts.pan_follows_cursor_move_if_full_view
|
||||
if (not move_full and window_w < video_dimensions.size.w) then
|
||||
command = command .. "no-osd set video-pan-x " .. clamp(x * (video_dimensions.size.w - window_w + 2 * margin) / (2 * video_dimensions.size.w), -3, 3) .. ";"
|
||||
elseif mp.get_property_number("video-pan-x") ~= 0 then
|
||||
command = command .. "no-osd set video-pan-x " .. "0;"
|
||||
end
|
||||
if (not move_full and window_h < video_dimensions.size.h) then
|
||||
command = command .. "no-osd set video-pan-y " .. clamp(y * (video_dimensions.size.h - window_h + 2 * margin) / (2 * video_dimensions.size.h), -3, 3) .. ";"
|
||||
elseif mp.get_property_number("video-pan-y") ~= 0 then
|
||||
command = command .. "no-osd set video-pan-y " .. "0;"
|
||||
end
|
||||
if command ~= "" then
|
||||
mp.command(command)
|
||||
end
|
||||
moved = false
|
||||
end
|
||||
end
|
||||
mp.register_idle(idle)
|
||||
add_mouse_move_callback("pan-follows-cursor", function() moved = true end)
|
||||
cleanup = function()
|
||||
remove_mouse_move_callback("pan-follows-cursor")
|
||||
mp.unregister_idle(idle)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function cursor_centric_zoom_handler(amt)
|
||||
local zoom_inc = tonumber(amt)
|
||||
if not zoom_inc or zoom_inc == 0 then return end
|
||||
local video_dimensions = get_video_dimensions()
|
||||
if not video_dimensions then return end
|
||||
local mouse_pos_origin, video_pan_origin = {}, {}
|
||||
mouse_pos_origin.x, mouse_pos_origin.y = mp.get_mouse_pos()
|
||||
video_pan_origin.x = mp.get_property("video-pan-x")
|
||||
video_pan_origin.y = mp.get_property("video-pan-y")
|
||||
local zoom_origin = mp.get_property("video-zoom")
|
||||
-- how far the cursor is form the middle of the video (in percentage)
|
||||
local rx = (video_dimensions.top_left.x + video_dimensions.size.w / 2 - mouse_pos_origin.x) / (video_dimensions.size.w / 2)
|
||||
local ry = (video_dimensions.top_left.y + video_dimensions.size.h / 2 - mouse_pos_origin.y) / (video_dimensions.size.h / 2)
|
||||
|
||||
-- the size in pixels of the (in|de)crement
|
||||
local diffHeight = (2 ^ zoom_inc - 1) * video_dimensions.size.h
|
||||
local diffWidth = (2 ^ zoom_inc - 1) * video_dimensions.size.w
|
||||
local newPanX = (video_pan_origin.x * video_dimensions.size.w + rx * diffWidth / 2) / (video_dimensions.size.w + diffWidth)
|
||||
local newPanY = (video_pan_origin.y * video_dimensions.size.h + ry * diffHeight / 2) / (video_dimensions.size.h + diffHeight)
|
||||
mp.command("no-osd set video-zoom " .. zoom_origin + zoom_inc .. "; no-osd set video-pan-x " .. clamp(newPanX, -3, 3) .. "; no-osd set video-pan-y " .. clamp(newPanY, -3, 3))
|
||||
end
|
||||
|
||||
function align_border(x, y)
|
||||
local video_dimensions = get_video_dimensions()
|
||||
if not video_dimensions then return end
|
||||
local window_w, window_h = mp.get_osd_size()
|
||||
local x, y = tonumber(x), tonumber(y)
|
||||
local command = ""
|
||||
if x then
|
||||
command = command .. "no-osd set video-pan-x " .. clamp(x * (video_dimensions.size.w - window_w) / (2 * video_dimensions.size.w), -3, 3) .. ";"
|
||||
end
|
||||
if y then
|
||||
command = command .. "no-osd set video-pan-y " .. clamp(y * (video_dimensions.size.h - window_h) / (2 * video_dimensions.size.h), -3, 3) .. ";"
|
||||
end
|
||||
if command ~= "" then
|
||||
mp.command(command)
|
||||
end
|
||||
end
|
||||
|
||||
function pan_image(axis, amount, zoom_invariant, image_constrained)
|
||||
amount = tonumber(amount)
|
||||
if not amount or amount == 0 or axis ~= "x" and axis ~= "y" then return end
|
||||
if zoom_invariant == "yes" then
|
||||
amount = amount / 2 ^ mp.get_property_number("video-zoom")
|
||||
end
|
||||
local prop = "video-pan-" .. axis
|
||||
local old_pan = mp.get_property_number(prop)
|
||||
if image_constrained == "yes" then
|
||||
local video_dimensions = get_video_dimensions()
|
||||
if not video_dimensions then return end
|
||||
local measure = axis == "x" and "w" or "h"
|
||||
local window = {}
|
||||
window.w, window.h = mp.get_osd_size()
|
||||
local pixels_moved = amount * video_dimensions.size[measure]
|
||||
-- should somehow refactor this
|
||||
if pixels_moved > 0 then
|
||||
if window[measure] > video_dimensions.size[measure] then
|
||||
if video_dimensions.bottom_right[axis] >= window[measure] then return end
|
||||
if video_dimensions.bottom_right[axis] + pixels_moved > window[measure] then
|
||||
amount = (window[measure] - video_dimensions.bottom_right[axis]) / video_dimensions.size[measure]
|
||||
end
|
||||
else
|
||||
if video_dimensions.top_left[axis] >= 0 then return end
|
||||
if video_dimensions.top_left[axis] + pixels_moved > 0 then
|
||||
amount = (0 - video_dimensions.top_left[axis]) / video_dimensions.size[measure]
|
||||
end
|
||||
end
|
||||
else
|
||||
if window[measure] > video_dimensions.size[measure] then
|
||||
if video_dimensions.top_left[axis] <= 0 then return end
|
||||
if video_dimensions.top_left[axis] + pixels_moved < 0 then
|
||||
amount = (0 - video_dimensions.top_left[axis]) / video_dimensions.size[measure]
|
||||
end
|
||||
else
|
||||
if video_dimensions.bottom_right[axis] <= window[measure] then return end
|
||||
if video_dimensions.bottom_right[axis] + pixels_moved < window[measure] then
|
||||
amount = (window[measure] - video_dimensions.bottom_right[axis]) / video_dimensions.size[measure]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
mp.set_property_number(prop, old_pan + amount)
|
||||
end
|
||||
|
||||
function rotate_video(amt)
|
||||
local rot = mp.get_property_number("video-rotate")
|
||||
rot = (rot + amt) % 360
|
||||
mp.set_property_number("video-rotate", rot)
|
||||
end
|
||||
|
||||
function reset_pan_if_visible()
|
||||
local video_dimensions = get_video_dimensions()
|
||||
if not video_dimensions then return end
|
||||
local window_w, window_h = mp.get_osd_size()
|
||||
local command = ""
|
||||
if (window_w >= video_dimensions.size.w) then
|
||||
command = command .. "no-osd set video-pan-x 0" .. ";"
|
||||
end
|
||||
if (window_h >= video_dimensions.size.h) then
|
||||
command = command .. "no-osd set video-pan-y 0" .. ";"
|
||||
end
|
||||
if command ~= "" then
|
||||
mp.command(command)
|
||||
end
|
||||
end
|
||||
|
||||
function force_print_filename()
|
||||
mp.set_property("msg-level", "cplayer=info")
|
||||
mp.commandv("print-text", mp.get_property("path"))
|
||||
mp.set_property("msg-level", "all=no")
|
||||
end
|
||||
|
||||
function draw_ass()
|
||||
local ww, wh = mp.get_osd_size()
|
||||
local merge = function(a, b)
|
||||
return b ~= "" and (a .. "\n" .. b) or a
|
||||
end
|
||||
mp.set_osd_ass(ww, wh, merge(merge(ass.status_line, ass.minimap), ass.ruler))
|
||||
end
|
||||
|
||||
local status_line_enabled = false
|
||||
local status_line_stale = true
|
||||
|
||||
function mark_status_line_stale()
|
||||
status_line_stale = true
|
||||
end
|
||||
|
||||
function refresh_status_line()
|
||||
if not status_line_stale then return end
|
||||
status_line_stale = false
|
||||
local path = mp.get_property("path")
|
||||
if path == nil or path == "" then
|
||||
ass.status_line = ""
|
||||
draw_ass()
|
||||
return
|
||||
end
|
||||
local expanded = mp.command_native({ "expand-text", opts.status_line })
|
||||
if not expanded then
|
||||
msg.warn("Error expanding status line")
|
||||
ass.status_line = ""
|
||||
draw_ass()
|
||||
return
|
||||
end
|
||||
local w,h = mp.get_osd_size()
|
||||
local an, x, y
|
||||
local margin = 10
|
||||
if opts.status_line_position == "top_left" then
|
||||
x = margin
|
||||
y = margin
|
||||
an = 7
|
||||
elseif opts.status_line_position == "top_right" then
|
||||
x = w-margin
|
||||
y = margin
|
||||
an = 9
|
||||
elseif opts.status_line_position == "bottom_right" then
|
||||
x = w-margin
|
||||
y = h-margin
|
||||
an = 3
|
||||
else
|
||||
x = margin
|
||||
y = h-margin
|
||||
an = 1
|
||||
end
|
||||
local a = assdraw:ass_new()
|
||||
a:new_event()
|
||||
a:an(an)
|
||||
a:pos(x,y)
|
||||
a:append("{\\fs".. opts.status_line_size.. "}{\\bord1.0}")
|
||||
a:append(expanded)
|
||||
ass.status_line = a.text
|
||||
draw_ass()
|
||||
end
|
||||
|
||||
function enable_status_line()
|
||||
if status_line_enabled then return end
|
||||
status_line_enabled = true
|
||||
local start = 0
|
||||
while true do
|
||||
local s, e, cap = string.find(opts.status_line, "%${[?!]?([%l%d-/]*)", start)
|
||||
if not s then break end
|
||||
mp.observe_property(cap, nil, mark_status_line_stale)
|
||||
start = e
|
||||
end
|
||||
mp.observe_property("path", nil, mark_status_line_stale)
|
||||
mp.observe_property("osd-width", nil, mark_status_line_stale)
|
||||
mp.observe_property("osd-height", nil, mark_status_line_stale)
|
||||
mp.register_idle(refresh_status_line)
|
||||
mark_status_line_stale()
|
||||
end
|
||||
|
||||
function disable_status_line()
|
||||
if not status_line_enabled then return end
|
||||
status_line_enabled = false
|
||||
mp.unobserve_property(mark_status_line_stale)
|
||||
mp.unregister_idle(refresh_status_line)
|
||||
ass.status_line = ""
|
||||
draw_ass()
|
||||
end
|
||||
|
||||
if opts.status_line_enabled then
|
||||
enable_status_line()
|
||||
end
|
||||
|
||||
if opts.command_on_image_loaded ~= "" or opts.command_on_non_image_loaded ~= "" then
|
||||
local was_image = false
|
||||
local frame_count = nil
|
||||
local audio_tracks = nil
|
||||
local out_params_ready = nil
|
||||
local path = nil
|
||||
|
||||
function state_changed()
|
||||
function set_image(is_image)
|
||||
if is_image and not was_image and opts.command_on_first_image_loaded ~= "" then
|
||||
mp.command(opts.command_on_first_image_loaded)
|
||||
end
|
||||
if is_image and opts.command_on_image_loaded ~= "" then
|
||||
mp.command(opts.command_on_image_loaded)
|
||||
end
|
||||
if not is_image and was_image and opts.command_on_non_image_loaded ~= "" then
|
||||
mp.command(opts.command_on_non_image_loaded)
|
||||
end
|
||||
was_image = is_image
|
||||
end
|
||||
-- only do things when state is consistent
|
||||
if path ~= nil and audio_tracks ~= nil then
|
||||
if frame_count == nil and audio_tracks > 0 then
|
||||
set_image(false)
|
||||
elseif out_params_ready and frame_count ~= nil then
|
||||
-- png have 0 frames, jpg 1 ¯\_(ツ)_/¯
|
||||
set_image((frame_count == 0 or frame_count == 1) and audio_tracks == 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mp.observe_property("video-out-params/par", "number", function(_, val)
|
||||
out_params_ready = (val ~= nil and val > 0)
|
||||
state_changed()
|
||||
end)
|
||||
mp.observe_property("estimated-frame-count", "number", function(_, val)
|
||||
frame_count = val
|
||||
state_changed()
|
||||
end)
|
||||
mp.observe_property("path", "string", function(_, val)
|
||||
if not val or val == "" then
|
||||
path = nil
|
||||
else
|
||||
path = val
|
||||
end
|
||||
state_changed()
|
||||
end)
|
||||
mp.register_event("tracks-changed", function()
|
||||
audio_tracks = 0
|
||||
local tracks = 0
|
||||
for _, track in ipairs(mp.get_property_native("track-list")) do
|
||||
tracks = tracks + 1
|
||||
if track.type == "audio" then
|
||||
audio_tracks = audio_tracks + 1
|
||||
end
|
||||
end
|
||||
if tracks == 0 then
|
||||
audio_tracks = nil
|
||||
end
|
||||
state_changed()
|
||||
end)
|
||||
end
|
||||
|
||||
function refresh_minimap()
|
||||
local dim = get_video_dimensions()
|
||||
if not dim then
|
||||
ass.minimap = ""
|
||||
draw_ass()
|
||||
return
|
||||
end
|
||||
if _minimap_old_timestamp and dim.timestamp == _minimap_old_timestamp then return end
|
||||
_minimap_old_timestamp = dim.timestamp
|
||||
local ww, wh = mp.get_osd_size()
|
||||
if opts.minimap_hide_when_full_image_in_view then
|
||||
if dim.top_left.x >= 0 and
|
||||
dim.top_left.y >= 0 and
|
||||
dim.bottom_right.x <= ww and
|
||||
dim.bottom_right.y <= wh
|
||||
then
|
||||
ass.minimap = ""
|
||||
draw_ass()
|
||||
return
|
||||
end
|
||||
end
|
||||
local center = {
|
||||
x=opts.minimap_center[1]/100*ww,
|
||||
y=opts.minimap_center[2]/100*wh
|
||||
}
|
||||
local cutoff = {
|
||||
x=opts.minimap_max_size[1]/100*ww/2,
|
||||
y=opts.minimap_max_size[2]/100*wh/2
|
||||
}
|
||||
local a = assdraw.ass_new()
|
||||
local draw = function(x, y, w, h, opacity, color)
|
||||
a:new_event()
|
||||
a:pos(center.x, center.y)
|
||||
a:append("{\\bord0}")
|
||||
a:append("{\\shad0}")
|
||||
a:append("{\\c&" .. color .. "&}")
|
||||
a:append("{\\2a&HFF}")
|
||||
a:append("{\\3a&HFF}")
|
||||
a:append("{\\4a&HFF}")
|
||||
a:append("{\\1a&H" .. opacity .. "}")
|
||||
w=w/2
|
||||
h=h/2
|
||||
a:draw_start()
|
||||
local rounded = {true,true,true,true} -- tl, tr, br, bl
|
||||
local x0,y0,x1,y1 = x-w, y-h, x+w, y+h
|
||||
if x0 < -cutoff.x then
|
||||
x0 = -cutoff.x
|
||||
rounded[4] = false
|
||||
rounded[1] = false
|
||||
end
|
||||
if y0 < -cutoff.y then
|
||||
y0 = -cutoff.y
|
||||
rounded[1] = false
|
||||
rounded[2] = false
|
||||
end
|
||||
if x1 > cutoff.x then
|
||||
x1 = cutoff.x
|
||||
rounded[2] = false
|
||||
rounded[3] = false
|
||||
end
|
||||
if y1 > cutoff.y then
|
||||
y1 = cutoff.y
|
||||
rounded[3] = false
|
||||
rounded[4] = false
|
||||
end
|
||||
|
||||
local r = 3
|
||||
local c = 0.551915024494 * r
|
||||
if rounded[0] then
|
||||
a:move_to(x0 + r, y0)
|
||||
else
|
||||
a:move_to(x0,y0)
|
||||
end
|
||||
if rounded[1] then
|
||||
a:line_to(x1 - r, y0)
|
||||
a:bezier_curve(x1 - r + c, y0, x1, y0 + r - c, x1, y0 + r)
|
||||
else
|
||||
a:line_to(x1, y0)
|
||||
end
|
||||
if rounded[2] then
|
||||
a:line_to(x1, y1 - r)
|
||||
a:bezier_curve(x1, y1 - r + c, x1 - r + c, y1, x1 - r, y1)
|
||||
else
|
||||
a:line_to(x1, y1)
|
||||
end
|
||||
if rounded[3] then
|
||||
a:line_to(x0 + r, y1)
|
||||
a:bezier_curve(x0 + r - c, y1, x0, y1 - r + c, x0, y1 - r)
|
||||
else
|
||||
a:line_to(x0, y1)
|
||||
end
|
||||
if rounded[4] then
|
||||
a:line_to(x0, y0 + r)
|
||||
a:bezier_curve(x0, y0 + r - c, x0 + r - c, y0, x0 + r, y0)
|
||||
else
|
||||
a:line_to(x0, y0)
|
||||
end
|
||||
a:draw_stop()
|
||||
end
|
||||
local image = function()
|
||||
draw((dim.top_left.x + dim.size.w/2 - ww/2) / opts.minimap_scale,
|
||||
(dim.top_left.y + dim.size.h/2 - wh/2) / opts.minimap_scale,
|
||||
dim.size.w / opts.minimap_scale,
|
||||
dim.size.h / opts.minimap_scale,
|
||||
opts.minimap_image_opacity,
|
||||
opts.minimap_image_color)
|
||||
end
|
||||
local view = function()
|
||||
draw(0,
|
||||
0,
|
||||
ww / opts.minimap_scale,
|
||||
wh / opts.minimap_scale,
|
||||
opts.minimap_view_opacity,
|
||||
opts.minimap_view_color)
|
||||
end
|
||||
if opts.minimap_view_above_image then
|
||||
image()
|
||||
view()
|
||||
else
|
||||
view()
|
||||
image()
|
||||
end
|
||||
ass.minimap = a.text
|
||||
draw_ass()
|
||||
end
|
||||
|
||||
local minimap_enabled = false
|
||||
|
||||
function enable_minimap()
|
||||
if minimap_enabled then return end
|
||||
minimap_enabled = true
|
||||
mp.register_idle(refresh_minimap)
|
||||
end
|
||||
|
||||
function disable_minimap()
|
||||
if not minimap_enabled then return end
|
||||
minimap_enabled = false
|
||||
ass.minimap = a.text
|
||||
draw_ass()
|
||||
mp.unregister_idle(refresh_minimap)
|
||||
end
|
||||
|
||||
if opts.minimap_enabled then
|
||||
enable_minimap()
|
||||
end
|
||||
|
||||
local ruler_state = 0 -- {0,1,2,3} = {inactive,setting first point,setting second point,done}
|
||||
local ruler_first_point = nil -- in video space coordinates
|
||||
local ruler_second_point = nil -- in video space coordinates
|
||||
|
||||
function cursor_video_space()
|
||||
local dim = get_video_dimensions()
|
||||
if not dim then return nil end
|
||||
local mx, my = mp.get_mouse_pos()
|
||||
local ret = {}
|
||||
ret.x = (mx - dim.top_left.x) / dim.ratios.w
|
||||
ret.y = (my - dim.top_left.y) / dim.ratios.h
|
||||
return ret
|
||||
end
|
||||
function video_space_to_screen(point)
|
||||
local dim = get_video_dimensions()
|
||||
if not dim then return nil end
|
||||
local ret = {}
|
||||
ret.x = point.x * dim.ratios.w + dim.top_left.x
|
||||
ret.y = point.y * dim.ratios.h + dim.top_left.y
|
||||
return ret
|
||||
end
|
||||
|
||||
function refresh_ruler()
|
||||
local dim = get_video_dimensions()
|
||||
if not dim then
|
||||
ass.ruler = ""
|
||||
draw_ass()
|
||||
return
|
||||
end
|
||||
|
||||
local line_start = {}
|
||||
local line_end = {}
|
||||
if ruler_second_point then
|
||||
line_start.image = ruler_first_point
|
||||
line_start.screen = video_space_to_screen(ruler_first_point)
|
||||
line_end.image = ruler_second_point
|
||||
line_end.screen = video_space_to_screen(ruler_second_point)
|
||||
elseif ruler_first_point then
|
||||
line_start.image = ruler_first_point
|
||||
line_start.screen = video_space_to_screen(ruler_first_point)
|
||||
line_end.image = cursor_video_space()
|
||||
line_end.screen = {}
|
||||
line_end.screen.x, line_end.screen.y = mp.get_mouse_pos()
|
||||
else
|
||||
local mx, my = mp.get_mouse_pos()
|
||||
line_start.image = cursor_video_space()
|
||||
line_start.screen = {}
|
||||
line_start.screen.x, line_start.screen.y = mp.get_mouse_pos()
|
||||
line_end = line_start
|
||||
end
|
||||
local distinct = (math.abs(line_start.screen.x - line_end.screen.x) >= 1
|
||||
or math.abs(line_start.screen.y - line_end.screen.y) >= 1)
|
||||
|
||||
local a = assdraw:ass_new()
|
||||
local draw_setup = function(bord)
|
||||
a:new_event()
|
||||
a:pos(0,0)
|
||||
a:append("{\\bord" .. bord .. "}")
|
||||
a:append("{\\shad0}")
|
||||
local r = opts.ruler_line_color
|
||||
a:append("{\\3c&H".. r .. r .. r .. "&}")
|
||||
a:append("{\\1a&HFF}")
|
||||
a:append("{\\2a&HFF}")
|
||||
a:append("{\\3a&H00}")
|
||||
a:append("{\\4a&HFF}")
|
||||
a:draw_start()
|
||||
end
|
||||
local dot = function(pos, size)
|
||||
draw_setup(size)
|
||||
a:move_to(pos.x, pos.y-0.5)
|
||||
a:line_to(pos.x, pos.y+0.5)
|
||||
end
|
||||
local line = function(from, to, size)
|
||||
draw_setup(size)
|
||||
a:move_to(from.x, from.y)
|
||||
a:line_to(to.x, to.y)
|
||||
end
|
||||
if distinct then
|
||||
dot(line_start.screen, opts.ruler_dots_radius)
|
||||
line(line_start.screen, line_end.screen, opts.ruler_line_width)
|
||||
dot(line_end.screen, opts.ruler_dots_radius)
|
||||
else
|
||||
dot(line_start.screen, opts.ruler_dots_radius)
|
||||
end
|
||||
|
||||
local line_info = function()
|
||||
if not opts.ruler_show_distance then return end
|
||||
a:new_event()
|
||||
a:append("{\\fs36}{\\bord1}")
|
||||
a:pos((line_start.screen.x + line_end.screen.x) / 2, (line_start.screen.y + line_end.screen.y) / 2)
|
||||
local an = 1
|
||||
if line_start.image.x < line_end.image.x then an = an + 2 end
|
||||
if line_start.image.y < line_end.image.y then an = an + 6 end
|
||||
a:an(an)
|
||||
local image = math.sqrt(math.pow(line_start.image.x - line_end.image.x, 2) + math.pow(line_start.image.y - line_end.image.y, 2))
|
||||
local screen = math.sqrt(math.pow(line_start.screen.x - line_end.screen.x, 2) + math.pow(line_start.screen.y - line_end.screen.y, 2))
|
||||
if opts.ruler_coordinates_space == "both" then
|
||||
a:append(string.format("image: %.1f\\Nscreen: %.1f", image, screen))
|
||||
elseif opts.ruler_coordinates_space == "image" then
|
||||
a:append(string.format("%.1f", image))
|
||||
elseif opts.ruler_coordinates_space == "window" then
|
||||
a:append(string.format("%.1f", screen))
|
||||
end
|
||||
end
|
||||
local dot_info = function(pos, opposite)
|
||||
if not opts.ruler_show_coordinates then return end
|
||||
a:new_event()
|
||||
a:append("{\\fs" .. opts.ruler_font_size .."}{\\bord1}")
|
||||
a:pos(pos.screen.x, pos.screen.y)
|
||||
local an
|
||||
if distinct then
|
||||
an = 1
|
||||
if line_start.image.x > line_end.image.x then an = an + 2 end
|
||||
if line_start.image.y < line_end.image.y then an = an + 6 end
|
||||
else
|
||||
an = 7
|
||||
end
|
||||
if opposite then
|
||||
an = 9 + 1 - an
|
||||
end
|
||||
a:an(an)
|
||||
if opts.ruler_coordinates_space == "both" then
|
||||
a:append(string.format("image: %.1f, %.1f\\Nscreen: %i, %i",
|
||||
pos.image.x, pos.image.y, pos.screen.x, pos.screen.y))
|
||||
elseif opts.ruler_coordinates_space == "image" then
|
||||
a:append(string.format("%.1f, %.1f", pos.image.x, pos.image.y))
|
||||
elseif opts.ruler_coordinates_space == "window" then
|
||||
a:append(string.format("%i, %i", pos.screen.x, pos.screen.y))
|
||||
end
|
||||
end
|
||||
dot_info(line_start, true)
|
||||
if distinct then
|
||||
line_info()
|
||||
dot_info(line_end, false)
|
||||
end
|
||||
if distinct and opts.ruler_show_angles ~= "no" then
|
||||
local dist = 50
|
||||
local pos_from_angle = function(mult, angle)
|
||||
return {
|
||||
x = line_start.screen.x + mult * dist * math.cos(angle),
|
||||
y = line_start.screen.y + mult * dist * math.sin(angle)
|
||||
}
|
||||
end
|
||||
local extended = {x=line_start.screen.x, y=line_start.screen.y}
|
||||
if line_end.screen.x > line_start.screen.x then
|
||||
extended.x = extended.x + dist
|
||||
else
|
||||
extended.x = extended.x - dist
|
||||
end
|
||||
line(line_start.screen, extended, math.max(0, opts.ruler_line_width-0.5))
|
||||
local angle = math.atan(math.abs(line_start.image.y - line_end.image.y) / math.abs(line_start.image.x - line_end.image.x))
|
||||
local fix_angle
|
||||
local an
|
||||
if line_end.image.y < line_start.image.y and line_end.image.x > line_start.image.x then
|
||||
-- upper-right
|
||||
an = 4
|
||||
fix_angle = function(angle) return - angle end
|
||||
elseif line_end.image.y < line_start.image.y then
|
||||
-- upper-left
|
||||
an = 6
|
||||
fix_angle = function(angle) return math.pi + angle end
|
||||
elseif line_end.image.x < line_start.image.x then
|
||||
-- bottom-left
|
||||
an = 6
|
||||
fix_angle = function(angle) return math.pi - angle end
|
||||
else
|
||||
-- bottom-right
|
||||
an = 4
|
||||
fix_angle = function(angle) return angle end
|
||||
end
|
||||
-- should implement this https://math.stackexchange.com/questions/873224/calculate-control-points-of-cubic-bezier-curve-approximating-a-part-of-a-circle
|
||||
local cp1 = pos_from_angle(1, fix_angle(angle*1/4))
|
||||
local cp2 = pos_from_angle(1, fix_angle(angle*3/4))
|
||||
local p2 = pos_from_angle(1, fix_angle(angle))
|
||||
a:bezier_curve(cp1.x, cp1.y, cp2.x, cp2.y, p2.x, p2.y)
|
||||
|
||||
a:new_event()
|
||||
a:append("{\\fs" .. opts.ruler_font_size .."}{\\bord1}")
|
||||
local text_pos = pos_from_angle(1.1, fix_angle(angle*2/3)) -- you'd think /2 would make more sense, but *2/3 looks better
|
||||
a:pos(text_pos.x, text_pos.y)
|
||||
a:an(an)
|
||||
if opts.ruler_show_angles == "both" then
|
||||
a:append(string.format("%.2f\\N%.1f°", angle, angle / math.pi * 180))
|
||||
elseif opts.ruler_show_angles == "degrees" then
|
||||
a:append(string.format("%.1f°", angle / math.pi * 180))
|
||||
elseif opts.ruler_show_angles == "radians" then
|
||||
a:append(string.format("%.2f", angle))
|
||||
end
|
||||
end
|
||||
|
||||
ass.ruler = a.text
|
||||
draw_ass()
|
||||
end
|
||||
|
||||
function ruler_next()
|
||||
if ruler_state == 0 then
|
||||
mp.register_idle(refresh_ruler)
|
||||
add_mouse_move_callback("ruler", function() end) -- only used to get an idle event on mouse move
|
||||
for _,key in ipairs(opts.ruler_confirm_bindings) do
|
||||
mp.add_forced_key_binding(key, "ruler-next-" .. key, ruler_next)
|
||||
end
|
||||
for _,key in ipairs(opts.ruler_exit_bindings) do
|
||||
mp.add_forced_key_binding(key, "ruler-stop-" .. key, ruler_stop)
|
||||
end
|
||||
ruler_state = 1
|
||||
if opts.ruler_set_first_point_on_begin then
|
||||
ruler_next()
|
||||
end
|
||||
elseif ruler_state == 1 then
|
||||
ruler_first_point = cursor_video_space()
|
||||
ruler_state = 2
|
||||
elseif ruler_state == 2 then
|
||||
ruler_state = 3
|
||||
ruler_second_point = cursor_video_space()
|
||||
if opts.ruler_clear_on_second_point_set then
|
||||
ruler_next()
|
||||
end
|
||||
else
|
||||
ruler_stop()
|
||||
end
|
||||
end
|
||||
|
||||
function ruler_stop()
|
||||
if ruler_state == 0 then return end
|
||||
mp.unregister_idle(refresh_ruler)
|
||||
for _,key in ipairs(opts.ruler_confirm_bindings) do
|
||||
mp.remove_key_binding("ruler-next-" .. key)
|
||||
end
|
||||
for _,key in ipairs(opts.ruler_exit_bindings) do
|
||||
mp.remove_key_binding("ruler-stop-" .. key)
|
||||
end
|
||||
remove_mouse_move_callback("ruler")
|
||||
ruler_state = 0
|
||||
ruler_first_point = nil
|
||||
ruler_second_point = nil
|
||||
ass.ruler = ""
|
||||
draw_ass()
|
||||
end
|
||||
|
||||
mp.add_key_binding(nil, "drag-to-pan", drag_to_pan_handler, {complex = true})
|
||||
mp.add_key_binding(nil, "pan-follows-cursor", pan_follows_cursor_handler, {complex = true})
|
||||
mp.add_key_binding(nil, "cursor-centric-zoom", cursor_centric_zoom_handler)
|
||||
mp.add_key_binding(nil, "align-border", align_border)
|
||||
mp.add_key_binding(nil, "pan-image", pan_image)
|
||||
mp.add_key_binding(nil, "rotate-video", rotate_video)
|
||||
mp.add_key_binding(nil, "reset-pan-if-visible", reset_pan_if_visible)
|
||||
mp.add_key_binding(nil, "force-print-filename", force_print_filename)
|
||||
|
||||
mp.add_key_binding(nil, "ruler", ruler_next)
|
||||
|
||||
mp.add_key_binding(nil, "enable-status-line", enable_status_line)
|
||||
mp.add_key_binding(nil, "disable-status-line", disable_status_line)
|
||||
mp.add_key_binding(nil, "toggle-status-line", function() if status_line_enabled then disable_status_line() else enable_status_line() end end)
|
||||
|
||||
mp.add_key_binding(nil, "enable-minimap", enable_minimap)
|
||||
mp.add_key_binding(nil, "disable-minimap", disable_minimap)
|
||||
mp.add_key_binding(nil, "toggle-minimap", function() if minimap_enabled then disable_minimap() else enable_minimap() end end)
|
|
@ -9,10 +9,9 @@ mpd_music_dir = ~/Music
|
|||
mpd_crossfade_time = 2
|
||||
|
||||
##### visualizer #####
|
||||
visualizer_fifo_path = /tmp/mpd.fifo
|
||||
visualizer_data_source = /tmp/mpd.fifo
|
||||
visualizer_output_name = Visualizer
|
||||
visualizer_in_stereo = yes
|
||||
visualizer_sync_interval = 30
|
||||
# spectrum,wave,wave_filled,ellipse.
|
||||
visualizer_type = wave_filled
|
||||
visualizer_look = ●▮
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
# vim: filetype=muttrc
|
||||
|
||||
set my_email = "admin@reekynet.com"
|
||||
set from = $my_email
|
||||
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||
set realname = "ReekyNET Admin"
|
||||
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||
set mbox_type = Maildir
|
||||
set folder = "~/.mail/$my_email"
|
||||
set mbox = "+INBOX"
|
||||
set record = "+INBOX"
|
||||
set postponed = "+Drafts"
|
||||
set spoolfile = "+INBOX"
|
||||
mailboxes = +INBOX
|
|
@ -1,14 +0,0 @@
|
|||
# vim: filetype=muttrc
|
||||
|
||||
set my_email = "marko.korhonen@metropolia.fi"
|
||||
set from = $my_email
|
||||
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||
set realname = "Marko Korhonen"
|
||||
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||
set mbox_type = Maildir
|
||||
set folder = "~/.mail/$my_email"
|
||||
set mbox = "+INBOX"
|
||||
set record = "+INBOX"
|
||||
set postponed = "+Drafts"
|
||||
set spoolfile = "+INBOX"
|
||||
mailboxes = +INBOX
|
|
@ -1,14 +0,0 @@
|
|||
# vim: filetype=muttrc
|
||||
|
||||
set my_email = "marko.korhonen@reekynet.com"
|
||||
set from = $my_email
|
||||
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||
set realname = "Marko Korhonen"
|
||||
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||
set mbox_type = Maildir
|
||||
set folder = "~/.mail/$my_email"
|
||||
set mbox = "+INBOX"
|
||||
set record = "+INBOX"
|
||||
set postponed = "+Drafts"
|
||||
set spoolfile = "+INBOX"
|
||||
mailboxes = +INBOX
|
9
home/.config/neomutt/accounts/marko@korhonen.cc
Normal file
9
home/.config/neomutt/accounts/marko@korhonen.cc
Normal file
|
@ -0,0 +1,9 @@
|
|||
# vim: filetype=neomuttrc
|
||||
|
||||
set folder = ~/.mail/marko@korhonen.cc
|
||||
set spoolfile = +INBOX
|
||||
set postponed = +Drafts
|
||||
set record = +Sent
|
||||
|
||||
set realname='Marko Korhonen'
|
||||
set from=marko@korhonen.cc
|
|
@ -1,15 +0,0 @@
|
|||
# vim: filetype=muttrc
|
||||
|
||||
# Incoming mail from maildir
|
||||
set my_email = "reekymarko@reekynet.com"
|
||||
set from = $my_email
|
||||
set sendmail = "/usr/bin/msmtp -a $my_email"
|
||||
set realname = "Marko Korhonen"
|
||||
set status_format = "-%r-Mutt: $my_email %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
|
||||
set mbox_type = Maildir
|
||||
set folder = ~/.mail/$my_email
|
||||
set mbox = +INBOX
|
||||
set record = +Sent
|
||||
set postponed = +Drafts
|
||||
set spoolfile = +INBOX
|
||||
mailboxes = +INBOX
|
|
@ -1 +0,0 @@
|
|||
color normal default default
|
|
@ -1,15 +1,9 @@
|
|||
# vim: filetype=muttrc
|
||||
# vim: filetype=neomuttrc
|
||||
|
||||
set sendmail = "/usr/bin/msmtp"
|
||||
set mbox_type = Maildir
|
||||
set folder = ~/.mail
|
||||
set spoolfile = +Personal/INBOX
|
||||
## General options
|
||||
set header_cache = "~/.cache/neomutt"
|
||||
set mbox_type=Maildir
|
||||
|
||||
source ~/.config/neomutt/appearance
|
||||
source ~/.config/neomutt/sidebar
|
||||
source ~/.config/neomutt/accounts/reekymarko@reekynet.com
|
||||
|
||||
macro index <f2> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/reekymarko@reekynet.com<enter><change-folder>!<enter>'
|
||||
macro index <f3> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/marko.korhonen@reekynet.com<enter><change-folder>!<enter>'
|
||||
macro index <f4> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/admin@reekynet.com<enter><change-folder>!<enter>'
|
||||
macro index <f5> '<sync-mailbox><enter-command>source ~/.config/neomutt/accounts/marko.korhonen@metropolia.fi<enter><change-folder>!<enter>'
|
||||
# Accounts
|
||||
source "~/.config/neomutt/accounts/marko@korhonen.cc"
|
||||
folder-hook $folder 'source ~/.config/neomutt/accounts/marko@korhonen.cc'
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
# vim: filetype=muttrc
|
||||
|
||||
set sidebar_visible = yes
|
||||
set sidebar_indent_string = ' '
|
||||
sidebar_whitelist '~/.mail/<>/INBOX'
|
16
home/.config/nvim/README.adoc
Normal file
16
home/.config/nvim/README.adoc
Normal file
|
@ -0,0 +1,16 @@
|
|||
= FunctionalHacker's NeoVim configuration
|
||||
|
||||
This is my personal NeoVim configuration I use for all text editing in my free
|
||||
time and at my day job. I mostly code in Java, TypeScript and ReactJS, with
|
||||
a bit of Rust and Python once in a blue moon.
|
||||
|
||||
The configuration is quite minimal but still fully featured. Some highlights
|
||||
include
|
||||
|
||||
* LSP support with neovim's built in LSP client
|
||||
** LSP servers are easily installed and auto-configured with Mason
|
||||
* Treesitter
|
||||
** Code folding
|
||||
** Code highlighting
|
||||
** Text objects
|
||||
* Lazy plugin manager for fast startup times
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"python.jediEnabled": false,
|
||||
"suggest.noselect": false,
|
||||
"suggest.echodocSupport": true,
|
||||
"suggest.maxCompleteItemCount": 20,
|
||||
"coc.preferences.formatOnSaveFiletypes": [
|
||||
"javascript",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"json",
|
||||
"javascriptreact",
|
||||
"yaml"
|
||||
],
|
||||
"prettier.singleQuote": true,
|
||||
"diagnostic.errorSign": "•",
|
||||
"diagnostic.warningSign": "•",
|
||||
"diagnostic.infoSign": "•",
|
||||
"suggest.snippetIndicator": "~",
|
||||
"languageserver": {
|
||||
"bash": {
|
||||
"command": "bash-language-server",
|
||||
"args": ["start"],
|
||||
"filetypes": ["sh"],
|
||||
"ignoredRootPaths": ["~"]
|
||||
},
|
||||
"xml": {
|
||||
"command": "xml-language-server",
|
||||
"args": ["start"],
|
||||
"filetypes": ["xml"],
|
||||
"ignoredRootPaths": ["~"]
|
||||
}
|
||||
},
|
||||
"markdownlint.config": {
|
||||
"rules": {
|
||||
"default": true,
|
||||
"line_length": false
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
" Auto-install vim-plug
|
||||
if empty(glob('~/.config/nvim/autoload/plug.vim'))
|
||||
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||
autocmd VimEnter * PlugInstall
|
||||
endif
|
||||
|
||||
" Set coc extensions
|
||||
let g:coc_global_extensions = [
|
||||
\ 'coc-tsserver',
|
||||
\ 'coc-html',
|
||||
\ 'coc-tsserver',
|
||||
\ 'coc-json',
|
||||
\ 'coc-yaml',
|
||||
\ 'coc-texlab',
|
||||
\ 'coc-prettier',
|
||||
\ 'coc-python',
|
||||
\ 'coc-emmet',
|
||||
\ 'coc-rust-analyzer',
|
||||
\ 'coc-markdownlint',
|
||||
\ 'coc-snippets',
|
||||
\ ]
|
||||
|
||||
call plug#begin()
|
||||
|
||||
" statusline/tabline
|
||||
Plug 'vim-airline/vim-airline'
|
||||
|
||||
" Make editing passwords safer
|
||||
Plug 'https://git.zx2c4.com/password-store', { 'rtp': 'contrib/vim/redact_pass.vim' }
|
||||
|
||||
" Colorize color words
|
||||
Plug 'norcalli/nvim-colorizer.lua'
|
||||
|
||||
" Use neovim from firefox
|
||||
Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } }
|
||||
|
||||
" Spelling
|
||||
Plug 'vim-scripts/Vimchant'
|
||||
|
||||
" Pandoc plugins
|
||||
Plug 'vim-pandoc/vim-pandoc'
|
||||
Plug 'conornewton/vim-pandoc-markdown-preview'
|
||||
|
||||
" Fuzzy finder
|
||||
Plug 'junegunn/fzf'
|
||||
Plug 'junegunn/fzf.vim'
|
||||
|
||||
" Language syntax pack
|
||||
Plug 'sheerun/vim-polyglot'
|
||||
|
||||
" Read editorconfig settings
|
||||
Plug 'editorconfig/editorconfig-vim'
|
||||
|
||||
" Make directory if it doesn't exist
|
||||
Plug 'pbrisbin/vim-mkdir'
|
||||
|
||||
" Tree explorer
|
||||
Plug 'scrooloose/nerdtree'
|
||||
|
||||
" Moar snippets
|
||||
Plug 'honza/vim-snippets'
|
||||
|
||||
" Filetype icons
|
||||
Plug 'ryanoasis/vim-devicons'
|
||||
|
||||
" Surround stuff with brackets and quotes
|
||||
Plug 'tpope/vim-surround'
|
||||
|
||||
" Do stuff as sudo
|
||||
Plug 'lambdalisue/suda.vim'
|
||||
|
||||
" Conguer of Completion
|
||||
Plug 'neoclide/coc.nvim', {'do': './install.sh nightly'}
|
||||
|
||||
" VimL source for CoC
|
||||
Plug 'Shougo/neco-vim'
|
||||
Plug 'neoclide/coc-neco'
|
||||
|
||||
" Git plugin
|
||||
Plug 'jreybert/vimagit'
|
||||
|
||||
" Git diff in gutter
|
||||
Plug 'airblade/vim-gitgutter'
|
||||
|
||||
" Gpg support
|
||||
Plug 'jamessan/vim-gnupg'
|
||||
|
||||
" Colorscheme
|
||||
Plug 'joshdick/onedark.vim'
|
||||
|
||||
" Latex plugin
|
||||
Plug 'lervag/vimtex'
|
||||
|
||||
call plug#end()
|
|
@ -1,43 +0,0 @@
|
|||
" Set colorscheme
|
||||
colorscheme onedark
|
||||
|
||||
" Floating window transparency
|
||||
set winblend=10
|
||||
|
||||
" Enable italics
|
||||
let g:onedark_terminal_italics=1
|
||||
|
||||
" Disable built-in statusline because airline shows it
|
||||
set noshowmode
|
||||
|
||||
" Airline
|
||||
set laststatus=2
|
||||
set encoding=utf-8
|
||||
let g:airline#extensions#tabline#enabled = 1
|
||||
let g:airline_powerline_fonts = 1
|
||||
let g:airline_section_warning = ''
|
||||
let g:airline_section_error = ''
|
||||
let g:airline_theme='onedark'
|
||||
|
||||
" True color support
|
||||
set termguicolors
|
||||
|
||||
" Line numbering
|
||||
set relativenumber
|
||||
set number
|
||||
|
||||
" Always show signcolumn
|
||||
set signcolumn=yes
|
||||
|
||||
" Autoindent and syntax highlight
|
||||
set autoindent
|
||||
set smartindent
|
||||
syntax on
|
||||
filetype on
|
||||
filetype plugin indent on
|
||||
set tabstop=4
|
||||
set shiftwidth=4
|
||||
|
||||
" Make gutter and cursorline bg transparent
|
||||
highlight CursorLineNr guibg=transparent
|
||||
highlight SignColumn guibg=transparent
|
|
@ -1,35 +0,0 @@
|
|||
" Change leader to space
|
||||
nnoremap <SPACE> <Nop>
|
||||
let mapleader = ' '
|
||||
|
||||
" Toggle nerdtree
|
||||
map <silent> <C-t> :NERDTreeToggle<CR>
|
||||
|
||||
" Markdown preview
|
||||
nmap <C-s> <Plug>MarkdownPreview
|
||||
nmap <M-s> <Plug>MarkdownPreviewStop
|
||||
nmap <C-p> <Plug>MarkdownPreviewToggle
|
||||
|
||||
set splitbelow
|
||||
set splitright
|
||||
|
||||
" Move between buffers
|
||||
nnoremap <C-N> :bn<CR>
|
||||
nnoremap <C-B> :bp<CR>
|
||||
|
||||
" Move between splits
|
||||
nnoremap <C-J> <C-W><C-J>
|
||||
nnoremap <C-K> <C-W><C-K>
|
||||
nnoremap <C-L> <C-W><C-L>
|
||||
nnoremap <C-H> <C-W><C-H>
|
||||
|
||||
" Enable mouse
|
||||
set mouse=a
|
||||
|
||||
" Toggle equalalways
|
||||
function ToggleEqual ()
|
||||
:set equalalways!
|
||||
:set equalalways!
|
||||
endfunction
|
||||
|
||||
nnoremap <leader>= :call ToggleEqual()<CR>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue