Compare commits
594 Commits
Arch-Hyprl
...
ddubs-ags-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43adf21548 | ||
|
|
7afaf65973 | ||
|
|
a9e33e5c58 | ||
|
|
93581957d4 | ||
|
|
6c86adfcdc | ||
|
|
0ab997e352 | ||
|
|
5b427072ae | ||
|
|
f6a7c27229 | ||
|
|
aa140acf69 | ||
|
|
d26c9e30bd | ||
|
|
78aa1dbcb2 | ||
|
|
47836c2fb9 | ||
|
|
3b2281568c | ||
|
|
f185af7389 | ||
|
|
deb545e3b1 | ||
|
|
5a3895682d | ||
|
|
2fbfecd07a | ||
|
|
2afc7293d5 | ||
|
|
e433e89754 | ||
|
|
b5f342f62c | ||
|
|
0803fb9c0f | ||
|
|
10d45b5d99 | ||
|
|
3fcfdc0bad | ||
|
|
5011f153be | ||
|
|
672a700695 | ||
|
|
78310220d4 | ||
|
|
409c612049 | ||
|
|
aab92dac45 | ||
|
|
165b06ea25 | ||
|
|
9ff63be4ac | ||
|
|
807ca99fc2 | ||
|
|
63330afe2f | ||
|
|
6b88c9cc58 | ||
|
|
ced0769af2 | ||
|
|
26ee47374d | ||
|
|
14711bacd3 | ||
|
|
ead1dc65a5 | ||
|
|
d29eee9b17 | ||
|
|
6cfb2ef41f | ||
|
|
7b759fd829 | ||
|
|
585357ca07 | ||
|
|
1f034b4f22 | ||
|
|
36e84ebc53 | ||
|
|
a4164ca612 | ||
|
|
ff2e5a02e3 | ||
|
|
eedc504ecd | ||
|
|
6820111709 | ||
|
|
ffee7f7b9a | ||
|
|
9b3df653a9 | ||
|
|
050fd2dcc4 | ||
|
|
2c54155221 | ||
|
|
1e1253d1e6 | ||
|
|
8c0de4d74f | ||
|
|
4212522647 | ||
|
|
9b41ac3eeb | ||
|
|
750d565ee1 | ||
|
|
79b725deb6 | ||
|
|
cde0a7c6f8 | ||
|
|
3e0c99b822 | ||
|
|
e2e2e47738 | ||
|
|
f4a2591cde | ||
|
|
817c1d9810 | ||
|
|
d158b95283 | ||
|
|
a5aab435fd | ||
|
|
3c65d6b5b6 | ||
|
|
e632e64fce | ||
|
|
9e144ad61a | ||
|
|
92b279e5a0 | ||
|
|
64040f0b34 | ||
|
|
c93101a99e | ||
|
|
bab65fd28d | ||
|
|
ccb1ceb29e | ||
|
|
5fb35a7d3e | ||
|
|
c20d0682d1 | ||
|
|
acc2238bf0 | ||
|
|
a74b17a97c | ||
|
|
068d55dd4b | ||
|
|
06187ec5e6 | ||
|
|
f0c32198fc | ||
|
|
ec1285d8d1 | ||
|
|
3486e33dde | ||
|
|
0bdef7305d | ||
|
|
f3d0b3ddfb | ||
|
|
96d3adc1ed | ||
|
|
e6b78f074a | ||
|
|
902464683c | ||
|
|
3010cc882d | ||
|
|
cd16826482 | ||
|
|
96c03b18a2 | ||
|
|
11a27c79b9 | ||
|
|
e565faf376 | ||
|
|
17494d5d9d | ||
|
|
971a4083ff | ||
|
|
432a2070cf | ||
|
|
450267e45b | ||
|
|
279536e69b | ||
|
|
ffaf189402 | ||
|
|
e31f518c36 | ||
|
|
3c6090925b | ||
|
|
d345c08e01 | ||
|
|
36b0732056 | ||
|
|
30fb2d1814 | ||
|
|
213e3757df | ||
|
|
e87f6c1beb | ||
|
|
16f1b2418d | ||
|
|
54ff099d51 | ||
|
|
79ce9a266e | ||
|
|
ab7063cadc | ||
|
|
eafb151d0d | ||
|
|
7976768137 | ||
|
|
5a459d35e7 | ||
|
|
59f9364309 | ||
|
|
185a7d2db7 | ||
|
|
07ab9e9147 | ||
|
|
f0186dec33 | ||
|
|
bf44e13dac | ||
|
|
aae594ecff | ||
|
|
c3c4d621ca | ||
|
|
58185e1dd3 | ||
|
|
ea2125a467 | ||
|
|
1182b17d0b | ||
|
|
cc3d20e664 | ||
|
|
b16f579e86 | ||
|
|
11f2b0c6fe | ||
|
|
2ee27f6959 | ||
|
|
6c5c4b22b8 | ||
|
|
c1b872865a | ||
|
|
8d92fdd1af | ||
|
|
07f5053b2b | ||
|
|
e4e488fc4c | ||
|
|
1970cca375 | ||
|
|
2828811ad8 | ||
|
|
653ca995ae | ||
|
|
f4fcd6deed | ||
|
|
52531e7d1f | ||
|
|
5db40aafa3 | ||
|
|
1d2126b7ff | ||
|
|
622e09c781 | ||
|
|
5baaec6f12 | ||
|
|
941b24ed1d | ||
|
|
cfab030ca2 | ||
|
|
8ea3dc390c | ||
|
|
6c1b941fa1 | ||
|
|
3e7f5664e5 | ||
|
|
af4d191ee3 | ||
|
|
5fa3096724 | ||
|
|
d00addba58 | ||
|
|
e28b5940cb | ||
|
|
49f8cef0be | ||
|
|
ac4ffc922a | ||
|
|
c93e1861d0 | ||
|
|
4185638900 | ||
|
|
a4f16e24cb | ||
|
|
d09e2dfd09 | ||
|
|
9695a4c75b | ||
|
|
68af696789 | ||
|
|
b2f43b18fd | ||
|
|
f450ddd382 | ||
|
|
04c090a828 | ||
|
|
bb58ae9940 | ||
|
|
39e515f9b0 | ||
|
|
8842d72a79 | ||
|
|
573321fd5f | ||
|
|
e766866207 | ||
|
|
fb9b3a8205 | ||
|
|
3420522393 | ||
|
|
409aadf655 | ||
|
|
dcc282968e | ||
|
|
a66845607d | ||
|
|
f5e3ed99d2 | ||
|
|
2d31448492 | ||
|
|
39d3f1a958 | ||
|
|
28c12f6df2 | ||
|
|
79af4e7b7d | ||
|
|
8a60729680 | ||
|
|
fd1358d920 | ||
|
|
113fee6d7a | ||
|
|
87676210e2 | ||
|
|
cf6cc1010e | ||
|
|
52dfbe8593 | ||
|
|
e9c5d3d4a6 | ||
|
|
1e2704bc23 | ||
|
|
f049050b73 | ||
|
|
094ccb9b1f | ||
|
|
47791287f1 | ||
|
|
4fba08d8d6 | ||
|
|
a19b9b8a8d | ||
|
|
5f20c04b05 | ||
|
|
9aa43ae531 | ||
|
|
bf67e6030c | ||
|
|
9873283814 | ||
|
|
03aa990f35 | ||
|
|
2c4cdd3889 | ||
|
|
eb486d7ef2 | ||
|
|
262b6eb87c | ||
|
|
3233396b72 | ||
|
|
df48873278 | ||
|
|
3af8762a88 | ||
|
|
e35d66658c | ||
|
|
e320af02c8 | ||
|
|
6a67a21a33 | ||
|
|
b6d982d168 | ||
|
|
2590e76bd2 | ||
|
|
bde3ef8433 | ||
|
|
6b3d3efbb5 | ||
|
|
c4074aeffa | ||
|
|
f578249698 | ||
|
|
b43ace2f24 | ||
|
|
815438934a | ||
|
|
5d5af21bea | ||
|
|
e1d258503a | ||
|
|
fa9c2ae04f | ||
|
|
8a7f40c75a | ||
|
|
d6a25e04e7 | ||
|
|
61b61a980c | ||
|
|
cc9ce2cb49 | ||
|
|
7278a45305 | ||
|
|
049c27ac22 | ||
|
|
90121d9172 | ||
|
|
2b0528ca89 | ||
|
|
528551ea86 | ||
|
|
8c71bdeee7 | ||
|
|
63f2f45866 | ||
|
|
c1f67feb18 | ||
|
|
d215fbd786 | ||
|
|
1d812d7357 | ||
|
|
083c20878e | ||
|
|
695081332b | ||
|
|
93d3a18b9a | ||
|
|
29cc1c3f52 | ||
|
|
bfbbbd2e52 | ||
|
|
e2fe39222c | ||
|
|
872fd89261 | ||
|
|
d3f0016158 | ||
|
|
8995c47902 | ||
|
|
058859a07e | ||
|
|
54363d5267 | ||
|
|
b2628c8126 | ||
|
|
7ecb641731 | ||
|
|
497e71fdf5 | ||
|
|
35aa72e021 | ||
|
|
9c1741e00d | ||
|
|
fcf18bede5 | ||
|
|
6abc879468 | ||
|
|
38ce478f5c | ||
|
|
527a504e83 | ||
|
|
a44b376e79 | ||
|
|
2e62542a35 | ||
|
|
5343041805 | ||
|
|
221870054e | ||
|
|
193977dcb6 | ||
|
|
c18526390d | ||
|
|
7b403cd72d | ||
|
|
9a6fce78ab | ||
|
|
0c8c829c57 | ||
|
|
2ed79c491a | ||
|
|
c1c5450c9b | ||
|
|
7eea1d7659 | ||
|
|
dac6c373c9 | ||
|
|
b9b437cb23 | ||
|
|
01a001f9a6 | ||
|
|
fc2df0f9a3 | ||
|
|
67d6c1524e | ||
|
|
e96da3ea4a | ||
|
|
b3a0055785 | ||
|
|
bd03f3eeeb | ||
|
|
68eef02324 | ||
|
|
6ab203a6d4 | ||
|
|
2fc7acf538 | ||
|
|
7a70f63f3e | ||
|
|
7d056ae6e4 | ||
|
|
4c09bdfad1 | ||
|
|
94bc08c1a4 | ||
|
|
71cc8ef641 | ||
|
|
5610bc9d30 | ||
|
|
e7fc2dc95a | ||
|
|
ced449539e | ||
|
|
79fbcc022b | ||
|
|
2f4790f04e | ||
|
|
ef7e427b7e | ||
|
|
fbe4560a4a | ||
|
|
4d783a270b | ||
|
|
e4c8763d6f | ||
|
|
b253c9f764 | ||
|
|
813b11dcab | ||
|
|
09fb19d8a3 | ||
|
|
3cab113056 | ||
|
|
a31f6a4716 | ||
|
|
3f2c9ac655 | ||
|
|
080c210d60 | ||
|
|
70604dc0a5 | ||
|
|
ac22f4e161 | ||
|
|
cbe3de92f5 | ||
|
|
e5c54b9145 | ||
|
|
170e36518a | ||
|
|
54b65e92b8 | ||
|
|
84a413c615 | ||
|
|
cea9183d2d | ||
|
|
8eef96db51 | ||
|
|
f99474f81f | ||
|
|
10a1e9142d | ||
|
|
b4bfd935d9 | ||
|
|
17b836ee2f | ||
|
|
54bc0d1499 | ||
|
|
0e876533c2 | ||
|
|
f096714637 | ||
|
|
38f24a43bb | ||
|
|
0ed0894c38 | ||
|
|
c0b198d562 | ||
|
|
99cc2c481b | ||
|
|
b16dffda4d | ||
|
|
04995241c4 | ||
|
|
44b58b3c65 | ||
|
|
eb033d3220 | ||
|
|
ba7dcc8523 | ||
|
|
bbc3094e3d | ||
|
|
8ad8784443 | ||
|
|
477545ac2e | ||
|
|
5f59d96640 | ||
|
|
4f7ff52523 | ||
|
|
16f3c44ec8 | ||
|
|
fb2866eed1 | ||
|
|
b47a5f7a9a | ||
|
|
8a452057cf | ||
|
|
9241cbf2c6 | ||
|
|
3318f33c31 | ||
|
|
267eda6dc4 | ||
|
|
48b57acbfd | ||
|
|
e25cbba2c6 | ||
|
|
38cb01047c | ||
|
|
6fe4514341 | ||
|
|
43ce92bb86 | ||
|
|
8a5705156e | ||
|
|
3ed441614e | ||
|
|
37f9b02292 | ||
|
|
f8a0c925c3 | ||
|
|
d0605b5afe | ||
|
|
39a97acf3b | ||
|
|
a177ed254f | ||
|
|
73938d8343 | ||
|
|
f82fcf966c | ||
|
|
f7bf5a4667 | ||
|
|
9ac06f2125 | ||
|
|
acce625ac7 | ||
|
|
a09c819cb6 | ||
|
|
c891da45d5 | ||
|
|
0b1be97f7b | ||
|
|
939444a27d | ||
|
|
ae4bc4a855 | ||
|
|
7ebfa06c3b | ||
|
|
6655cc12e6 | ||
|
|
3502766cd7 | ||
|
|
60c62bd122 | ||
|
|
611d8ba612 | ||
|
|
56d3cbb19b | ||
|
|
69e938e33c | ||
|
|
b0f2e59cd1 | ||
|
|
227ef1d75d | ||
|
|
165d8ff0bb | ||
|
|
0fdd31534f | ||
|
|
2ae238ace1 | ||
|
|
1f822e3d5f | ||
|
|
322ddee8e7 | ||
|
|
9615baf63e | ||
|
|
5add49ac89 | ||
|
|
86943a51b3 | ||
|
|
d24a9c4888 | ||
|
|
62e69cfd73 | ||
|
|
97992554b1 | ||
|
|
6120faaea5 | ||
|
|
f45f41d14a | ||
|
|
f214cf3c8d | ||
|
|
55f5819ae9 | ||
|
|
c15100db44 | ||
|
|
c429266320 | ||
|
|
3b6c7c3c73 | ||
|
|
4c56e4fbcc | ||
|
|
e3c10a7661 | ||
|
|
5fc5342a67 | ||
|
|
216008382e | ||
|
|
51f4bcfa26 | ||
|
|
6f2128a27a | ||
|
|
07824f1fab | ||
|
|
1d100b2ca9 | ||
|
|
8b01d91625 | ||
|
|
bd162bffd3 | ||
|
|
bc4a9b54f7 | ||
|
|
dc3dc39e12 | ||
|
|
03ca2d6494 | ||
|
|
eb62120deb | ||
|
|
340019c627 | ||
|
|
7a111e0284 | ||
|
|
6252e96186 | ||
|
|
92f595b6e4 | ||
|
|
37f09a8e7e | ||
|
|
ae859493b6 | ||
|
|
ae720c7299 | ||
|
|
84e32d5ea3 | ||
|
|
b2195df659 | ||
|
|
c5837fd525 | ||
|
|
c3710b89aa | ||
|
|
87dfa43733 | ||
|
|
faa76f335f | ||
|
|
dc800878a6 | ||
|
|
f7a20da6ea | ||
|
|
fdafa3d472 | ||
|
|
9abf9a459d | ||
|
|
8ed397017c | ||
|
|
88629e5e07 | ||
|
|
fdd442e74b | ||
|
|
f1758c4a67 | ||
|
|
85eac029b8 | ||
|
|
28a183f820 | ||
|
|
f57842bd36 | ||
|
|
6247e2fa09 | ||
|
|
a6b1defa6c | ||
|
|
d41ff66680 | ||
|
|
51bd4af82c | ||
|
|
74ca2e4f90 | ||
|
|
0dec7b3ef2 | ||
|
|
2c69ef4342 | ||
|
|
aeeb8b50d8 | ||
|
|
8e97290429 | ||
|
|
1c49abbe54 | ||
|
|
8cf857efc7 | ||
|
|
a265f12931 | ||
|
|
95cc453086 | ||
|
|
fbf8545540 | ||
|
|
f1fd1d1170 | ||
|
|
2154eef613 | ||
|
|
77192cd06e | ||
|
|
c73c155a79 | ||
|
|
45612f287a | ||
|
|
b93b09e850 | ||
|
|
24be6f7e0f | ||
|
|
37a6170c86 | ||
|
|
1626443441 | ||
|
|
1a09f27e8c | ||
|
|
3ba886fc82 | ||
|
|
80dad5f613 | ||
|
|
198b3e95eb | ||
|
|
f9a98bc123 | ||
|
|
81efa38c70 | ||
|
|
7159473715 | ||
|
|
dc6b2523c9 | ||
|
|
0ff82e2781 | ||
|
|
be24393d81 | ||
|
|
f406c12892 | ||
|
|
0258e4f128 | ||
|
|
c0bef5bf88 | ||
|
|
93218e0ff7 | ||
|
|
e8773551c2 | ||
|
|
376cd5ddb7 | ||
|
|
382b9d6d37 | ||
|
|
986b94d138 | ||
|
|
8fe78dd9c8 | ||
|
|
743a9e992d | ||
|
|
531edb0107 | ||
|
|
dc6f780932 | ||
|
|
e7d04b4f7b | ||
|
|
457dbc577f | ||
|
|
fbfdf9bc91 | ||
|
|
0a35fe2b15 | ||
|
|
6066051354 | ||
|
|
fc31b99d98 | ||
|
|
33f538966f | ||
|
|
d574e9f10a | ||
|
|
749393f31e | ||
|
|
7d18142300 | ||
|
|
cee14736b6 | ||
|
|
af581c5582 | ||
|
|
97c2a6f802 | ||
|
|
2788c45347 | ||
|
|
fa1b5cc43a | ||
|
|
f1542a11ed | ||
|
|
b540e8a930 | ||
|
|
70af4617c2 | ||
|
|
4dc56c6493 | ||
|
|
2720bb7441 | ||
|
|
b5985dab7e | ||
|
|
489a060a3e | ||
|
|
64a0cfae32 | ||
|
|
662e54aecd | ||
|
|
38e3430c64 | ||
|
|
fe60a6129e | ||
|
|
36c054be45 | ||
|
|
9c80e88985 | ||
|
|
2c8edda4f2 | ||
|
|
5052416f08 | ||
|
|
7ba47f5a6d | ||
|
|
dd9626d900 | ||
|
|
4fcc7577de | ||
|
|
d6a6ff75ee | ||
|
|
4ab51d13cf | ||
|
|
388142c7e4 | ||
|
|
211750e014 | ||
|
|
d6049a0f75 | ||
|
|
7ceffc7ec5 | ||
|
|
7018a5f637 | ||
|
|
84aa42707a | ||
|
|
2fa25ac977 | ||
|
|
772dc1bb8f | ||
|
|
049086eada | ||
|
|
6195d3ada6 | ||
|
|
32c06e65f7 | ||
|
|
cfc668b8ac | ||
|
|
038d58036a | ||
|
|
02999fed50 | ||
|
|
c578711910 | ||
|
|
8777ae50e8 | ||
|
|
e9c611daaa | ||
|
|
5aa16a287e | ||
|
|
27d0ca8862 | ||
|
|
4f962424ec | ||
|
|
9feb2b3bab | ||
|
|
2d045f2a13 | ||
|
|
2efbb6c91b | ||
|
|
17d919c0ed | ||
|
|
eb2938d708 | ||
|
|
ddac7a448f | ||
|
|
3960ba1cab | ||
|
|
aecee4a16a | ||
|
|
13ca00c332 | ||
|
|
e2b30a1f13 | ||
|
|
4f53fd7773 | ||
|
|
430fe82041 | ||
|
|
b5da9a78be | ||
|
|
d7de71a8f1 | ||
|
|
1e69dea51e | ||
|
|
d7550bdc0c | ||
|
|
42012e6aea | ||
|
|
9f6ba90d0d | ||
|
|
7f7a9e7d3d | ||
|
|
52b3a1e49d | ||
|
|
c7538f5a2b | ||
|
|
d6b68d94b5 | ||
|
|
a0e478cc1d | ||
|
|
3a566896fd | ||
|
|
a36a7ffa09 | ||
|
|
f4e8f3d935 | ||
|
|
280299cf0e | ||
|
|
8a0eca2d54 | ||
|
|
df78898e94 | ||
|
|
79e99a06d3 | ||
|
|
0e6491c5a6 | ||
|
|
e5ddccd3e8 | ||
|
|
666609aafa | ||
|
|
b72710f46f | ||
|
|
75ed5deb03 | ||
|
|
2ce7758065 | ||
|
|
297bce5749 | ||
|
|
b09466a312 | ||
|
|
19aedecd59 | ||
|
|
3e71965252 | ||
|
|
377a5bc5b1 | ||
|
|
69e9da0950 | ||
|
|
5b786fe48d | ||
|
|
2f15a2cb83 | ||
|
|
b46406810a | ||
|
|
a261cbdd68 | ||
|
|
2ebcb4062a | ||
|
|
ecb1722801 | ||
|
|
01272c65c7 | ||
|
|
e7fc267c32 | ||
|
|
91dec4b0be | ||
|
|
825f120667 | ||
|
|
f62efcee7d | ||
|
|
b75ff8f111 | ||
|
|
ac283c0974 | ||
|
|
f96cbf5722 | ||
|
|
5620ea4e2c | ||
|
|
59fd595c75 | ||
|
|
3f332c1b0c | ||
|
|
8b636ff792 | ||
|
|
77ea625027 | ||
|
|
c1a35ec44b | ||
|
|
fbc62f7b0d | ||
|
|
53b9cd7374 | ||
|
|
d1a53bd199 | ||
|
|
b4b0ecfcb0 | ||
|
|
d5b11183f5 | ||
|
|
1b120d85f4 | ||
|
|
ea671cde6a | ||
|
|
d1b3be54b6 | ||
|
|
bbe0ccc9b3 | ||
|
|
180e1e01ae | ||
|
|
d3a04c7033 | ||
|
|
1c2ba10c5b | ||
|
|
ea77d9c80f | ||
|
|
bbdde1f233 | ||
|
|
1432003f65 | ||
|
|
5d2250bb4d | ||
|
|
9d0fc9770c | ||
|
|
d7ca57ac9d |
4
.github/FUNDING.yml
vendored
Normal file
4
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: JaKooLit
|
||||||
|
ko_fi: jakoolit
|
||||||
83
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
83
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: Something is not working right
|
||||||
|
title: "[Bug]: "
|
||||||
|
labels: ["bug"]
|
||||||
|
assignees:
|
||||||
|
- JaKooLit
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Already reported ? *
|
||||||
|
description: Before opening a new bug report, please take a moment to search through the current open and closed issues to check if it already exists.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing open and closed issues.
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: type
|
||||||
|
attributes:
|
||||||
|
label: Regression?
|
||||||
|
description: |
|
||||||
|
Regression means that something used to work but no longer does.
|
||||||
|
options:
|
||||||
|
- "Yes"
|
||||||
|
- "No"
|
||||||
|
- "Not sure"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: ver
|
||||||
|
attributes:
|
||||||
|
label: System Info and Version
|
||||||
|
description: |
|
||||||
|
Paste the output of `inxi --full` here.
|
||||||
|
install inxi if command not found.
|
||||||
|
value: "<details>
|
||||||
|
<summary>System/Version info</summary>
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
<Paste the output of the command here, without removing any formatting around this>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
</details>"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: dots
|
||||||
|
attributes:
|
||||||
|
label: KooL's Dots version
|
||||||
|
description: |
|
||||||
|
Paste the output of `find ~/.config/hypr/ -type f -name 'v*' -exec basename {} \;`
|
||||||
|
This is just KooL's Hyprland Dots version.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: desc
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: "What went wrong? What exactly happened?"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: repro
|
||||||
|
attributes:
|
||||||
|
label: How to reproduce
|
||||||
|
description: "How can someone else reproduce the issue?"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: install logs, images or videos
|
||||||
|
description: |
|
||||||
|
Anything that can help. Please always ATTACH and not paste them.
|
||||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
30
.github/ISSUE_TEMPLATE/documentation-update.yml
vendored
Normal file
30
.github/ISSUE_TEMPLATE/documentation-update.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
name: Documentation update
|
||||||
|
description: Propose a change to the project documentation wiki
|
||||||
|
title: "[Documentation update]: "
|
||||||
|
labels: ["documentation_update"]
|
||||||
|
assignees:
|
||||||
|
- JaKooLit
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: textarea
|
||||||
|
id: desc
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: "Provide a clear and concise description of the documentation update"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: repro
|
||||||
|
attributes:
|
||||||
|
label: Proposed Solution
|
||||||
|
description: "Provide a clear and concise description of the updated documentation that you'd like to see added"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: install links, images or videos
|
||||||
|
description: |
|
||||||
|
Add any other information about the documentation update here. For example, you might include links to similar documentation in other projects, or screenshots or diagrams to help explain your idea
|
||||||
38
.github/ISSUE_TEMPLATE/feature.yml
vendored
Normal file
38
.github/ISSUE_TEMPLATE/feature.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Feature Request
|
||||||
|
description: I'd like to propose some changes and enhancements
|
||||||
|
title: "[Enhancement]: "
|
||||||
|
labels: ["enhancement"]
|
||||||
|
assignees:
|
||||||
|
- JaKooLit
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Already reported ? *
|
||||||
|
description: Before opening a new feature request, please take a moment to search through the current open and closed issues / request to check if it already exists.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing open and closed request.
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: desc
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: "Describe your idea?"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: repro
|
||||||
|
attributes:
|
||||||
|
label: Proposed Solution
|
||||||
|
description: "describe if you have a specific solution in mind"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
43
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
43
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Pull Request
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Please read these instructions and remove unnecessary text.
|
||||||
|
|
||||||
|
- Try to include a summary of the changes and which issue is fixed.
|
||||||
|
- Also include relevant motivation and context (if applicable).
|
||||||
|
- List any dependencies that are required for this change. (e.g., packages or other PRs)
|
||||||
|
- Provide a link if there is an issue related to this pull request. e.g., Fixes # (issue)
|
||||||
|
- Please add Reviewers, Assignees, Labels, Projects, and Milestones to the PR. (if applicable)
|
||||||
|
|
||||||
|
## Type of change
|
||||||
|
|
||||||
|
Please put an `x` in the boxes that apply:
|
||||||
|
|
||||||
|
- [ ] **Bug fix** (non-breaking change which fixes an issue)
|
||||||
|
- [ ] **New feature** (non-breaking change which adds functionality)
|
||||||
|
- [ ] **Breaking change** (fix or feature that would cause existing functionality to not work as expected)
|
||||||
|
- [ ] **Documentation update** (non-breaking change; modified files are limited to the documentations)
|
||||||
|
- [ ] **Technical debt** (a code change that does not fix a bug or add a feature but makes something clearer for devs)
|
||||||
|
- [ ] **Other** (provide details below)
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
Please put an `x` in the boxes that apply:
|
||||||
|
|
||||||
|
- [ ] I have read the [CONTRIBUTING](https://github.com/JaKooLit/Arch-Hyprland/blob/main/CONTRIBUTING.md) document.
|
||||||
|
- [ ] My code follows the code style of this project.
|
||||||
|
- [ ] My commit message follows the [commit guidelines](https://github.com/JaKooLit/Arch-Hyprland/blob/main/CONTRIBUTING.md#git-commit-messages).
|
||||||
|
- [ ] My change requires a change to the documentation.
|
||||||
|
- [ ] I want to add something in Arch-Hyprland wiki.
|
||||||
|
- [ ] I have added tests to cover my changes.
|
||||||
|
- [ ] I have tested my code locally and it works as expected.
|
||||||
|
- [ ] All new and existing tests passed.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
(if appropriate)
|
||||||
|
|
||||||
|
## Additional context
|
||||||
|
|
||||||
|
Add any other context about the problem here.
|
||||||
228
CHANGELOGS.md
228
CHANGELOGS.md
@@ -1,4 +1,230 @@
|
|||||||
## Changelogs
|
## CHANGELOGS
|
||||||
|
|
||||||
|
## 22 July 2025
|
||||||
|
- Updated sddm theme and script to work with the updated simple_sddm_2 theme
|
||||||
|
|
||||||
|
## 17 July 2025
|
||||||
|
- added quickshell script to replace ags for desktop overview
|
||||||
|
|
||||||
|
## 08 June 2025
|
||||||
|
- updated SDDM theme.
|
||||||
|
|
||||||
|
## 20 March 2025
|
||||||
|
- adjusted hyprland installation script. This is great for those who are using -git packages
|
||||||
|
- added findutils as dependencies
|
||||||
|
|
||||||
|
## 11 March 2025
|
||||||
|
- Added uninstall script
|
||||||
|
- forked AGS v1 into JakooLit repo. This is just incase Aylur decide to take down v1
|
||||||
|
|
||||||
|
## 10 March 2025
|
||||||
|
- Dropped pyprland in favor of hyprland built in tool for a drop down like terminal and Desktop magnifier
|
||||||
|
|
||||||
|
## 06 March 2025
|
||||||
|
- Switched to whiptail version for Y & N questions
|
||||||
|
- switched eza to lsd
|
||||||
|
|
||||||
|
## 23 Feb 2025
|
||||||
|
- added Victor Mono Font for proper hyprlock font rendering for Dots v2.3.12
|
||||||
|
- added Fantasque Sans Mono Nerd for Kitty
|
||||||
|
|
||||||
|
## 22 Feb 2025
|
||||||
|
- replaced eog with loupe
|
||||||
|
- changed url for installing oh-my-zsh to get wider coverage. Some countries are blocking github raw url's
|
||||||
|
|
||||||
|
## 20 Feb 2025
|
||||||
|
- Added nwg-displays for the upcoming Kools dots v2.3.12
|
||||||
|
|
||||||
|
## 18 Feb 2025
|
||||||
|
- Change default zsh theme to adnosterzak
|
||||||
|
- pokemon coloscript integrated with fastfetch when opted with pokemon to add some bling
|
||||||
|
- additional external oh-my-zsh theme
|
||||||
|
|
||||||
|
## 06 Feb 2025
|
||||||
|
- added semi-unattended function.
|
||||||
|
- move all the initial questions at the beginning
|
||||||
|
|
||||||
|
## 04 Feb 2025
|
||||||
|
- Re-coded for better visibility
|
||||||
|
- Offered a new SDDM theme.
|
||||||
|
- script will automatically detect if you have nvidia but script still offer if you want to set up for user
|
||||||
|
|
||||||
|
## 29 Jan 2025
|
||||||
|
- enhanced nvidia.sh to add additional systemd-bootloader entries for nvidia
|
||||||
|
|
||||||
|
## 16 Jan 2025
|
||||||
|
- updated nvidia.sh to install non-git libva-nvidia-driver
|
||||||
|
|
||||||
|
## 13 Jan 2025
|
||||||
|
- replaced polkit-gnome with hyprpolkitagent
|
||||||
|
|
||||||
|
## 12 Jan 2025
|
||||||
|
- switch to final version of aylurs-gtk-shell-v1
|
||||||
|
|
||||||
|
## 11 Jan 2025
|
||||||
|
- added cachyos-hyprland-settings to uninstall
|
||||||
|
|
||||||
|
## 06 Jan 2025
|
||||||
|
- added copying of modified fastfetch-compact for Arch
|
||||||
|
- default theme for oh my zsh theme is now "funky"
|
||||||
|
|
||||||
|
## 26 Dec 2024
|
||||||
|
- Removal of Bibata Ice cursor on assets since its integrated in the GTK Themes and Icons extract from a separate repo
|
||||||
|
- integrated hyprcursor in Bibata Ice Cursor
|
||||||
|
|
||||||
|
## 15 Nov 2024
|
||||||
|
- revert Aylurs GTK Shell (AGS) to install older version
|
||||||
|
- added aylurs-gtk-shell to uninstall
|
||||||
|
|
||||||
|
## 20 Sep 2024
|
||||||
|
- User will be ask if they want to set Thunar as default file manager if they decided to install it
|
||||||
|
|
||||||
|
## 19 Sep 2024
|
||||||
|
- Added fastfetch on tty. However, will be disabled if user decided to install pokemon colorscripts
|
||||||
|
|
||||||
|
## 18 Sep 2024
|
||||||
|
- dotfiles will now be downloaded from main or master branch instead of from the releases version.
|
||||||
|
|
||||||
|
## 14 Sep 2024
|
||||||
|
- remove the final error checks instead, introduced a final check of essential packages to ran Hyprland
|
||||||
|
|
||||||
|
## 08 Sep 2024
|
||||||
|
- Added final error checks on install-logs
|
||||||
|
|
||||||
|
## 07 Sep 2024
|
||||||
|
- added pulseaudio check
|
||||||
|
- added sof-firmware
|
||||||
|
|
||||||
|
## 29 Aug 2024
|
||||||
|
- switched over to non-git wallust package
|
||||||
|
- improved indentions on some install scripts
|
||||||
|
|
||||||
|
## 28 Aug 2024
|
||||||
|
- Added final check if hyprland is installed and will give an error to user
|
||||||
|
|
||||||
|
## 26 Aug 2024
|
||||||
|
- Set to uninstall rofi as conflicts with rofi-wayland
|
||||||
|
- added nvidia_drm.fbdev=1 for grub
|
||||||
|
|
||||||
|
## 14 Aug 2024
|
||||||
|
- added archlinux-keyring on base.sh
|
||||||
|
|
||||||
|
## 08 Aug 2024
|
||||||
|
- Increased to 1 sec delay for installing base-devel [commit](https://github.com/JaKooLit/Arch-Hyprland/commit/7ebfa06c3b186f9bec0bcf268fae401ba67dfc2a)
|
||||||
|
|
||||||
|
## 07 Jul 2024
|
||||||
|
- added eza (ls replacement for tty). Note only on .zshrc
|
||||||
|
|
||||||
|
## 25 Jun 2024
|
||||||
|
- added fbdev=1 for nvidia.sh on `/etc/modprobe.d/nvidia.conf`. see here `https://wiki.hyprland.org/Nvidia/#drm-kernel-mode-setting`
|
||||||
|
|
||||||
|
## 26 May 2024
|
||||||
|
- Added fzf for zsh (CTRL R to invoke FZF history)
|
||||||
|
|
||||||
|
## 23 May 2024
|
||||||
|
- added qalculate-gtk to work with rofi-calc. Default keybinds (SUPER ALT C)
|
||||||
|
- added power-profiles-daemon for ROG laptops. Note, I cant add to all since it conflicts with TLP, CPU-Auto-frequency etc.
|
||||||
|
- added fastfetch
|
||||||
|
|
||||||
|
## 22 May 2024
|
||||||
|
- nwg-look is now in extra repo so replaced with nwg-look from nwg-look-bin
|
||||||
|
- change the sddm theme destination to /etc/sddm.conf.d/10-theme.conf to theme.conf.user
|
||||||
|
|
||||||
|
## 19 May 2024
|
||||||
|
- Disabled the auto-login in .zprofile as it causes auto-login to Hyprland if any wayland was chosen. Can enabled if only using hyprland
|
||||||
|
|
||||||
|
## 10 May 2024
|
||||||
|
- added wallust-git and remove python-pywal for migration to wallust on Hyprland-Dots v2.2.11
|
||||||
|
|
||||||
|
## 08 May 2024
|
||||||
|
- Adjusted sddm.sh since it does not respect preset.sh
|
||||||
|
- install.sh have been rearranged so it quits if user choose not to proceed
|
||||||
|
|
||||||
|
## 07 May 2024
|
||||||
|
- Minor typo change on nvidia.sh
|
||||||
|
- switch back to cava since installing cava-git keep it hanging (see known-issue on readme)
|
||||||
|
|
||||||
|
## 05 May 2024
|
||||||
|
- switched to rofi-wayland Extra Repo
|
||||||
|
|
||||||
|
## 04 May 2024
|
||||||
|
- separated fonts installation script for easy debugging
|
||||||
|
|
||||||
|
## 03 May 2024
|
||||||
|
- added python3-pyquery for new weather-waybar python based on Hyprland-Dots
|
||||||
|
|
||||||
|
## 02 May 2024
|
||||||
|
- Added pyprland (hyprland plugin)
|
||||||
|
|
||||||
|
## 26 Apr 2024
|
||||||
|
- Updated sddm.sh for Qt6 variant
|
||||||
|
|
||||||
|
## 23 Apr 2024
|
||||||
|
- Dropping swayidle and swaylock in favor of hypridle and hyprlock
|
||||||
|
|
||||||
|
## 20 Apr 2024
|
||||||
|
- Change default Oh-my-zsh theme to xiong-chiamiov-plus
|
||||||
|
|
||||||
|
## 16 Mar 2024
|
||||||
|
- added hyprcursor
|
||||||
|
|
||||||
|
## 1 Mar 2024
|
||||||
|
- replaced sddm-git with sddm
|
||||||
|
|
||||||
|
## 11 Jan 2024
|
||||||
|
- dropped wlsunset
|
||||||
|
|
||||||
|
## 05 Jan 2024
|
||||||
|
- Added a preset feature
|
||||||
|
- Added templates for contributing, and reporting, etc
|
||||||
|
|
||||||
|
## 01 Jan 2024
|
||||||
|
- Re-coded complete and test
|
||||||
|
- Added to spice up pacman.conf including adding of ILoveCandy on it :)
|
||||||
|
|
||||||
|
## 30 Dec 2023
|
||||||
|
- Install scripts reconstructed
|
||||||
|
|
||||||
|
## 29 December 2023
|
||||||
|
- Remove dunst in favor of swaync. NOTE: Part of the script is to also uninstall mako and dunst (if installed) as on my experience, dunst is sometimes taking over the notification even if it is not set to start
|
||||||
|
|
||||||
|
## 16 Dec 2023
|
||||||
|
- zsh theme switched to `agnoster` theme by default
|
||||||
|
- pywal tty color change disabled by default
|
||||||
|
|
||||||
|
## 13 Dec 2023
|
||||||
|
- switched hyprland to Extra Repo hyprland (both nvidia and non-nvidia). Seeing they are updating all the time :)
|
||||||
|
|
||||||
|
## 11 Dec 2023
|
||||||
|
- Changing over to zsh automatically if user opted
|
||||||
|
- If chose to install zsh and have no login manager, zsh auto login will auto start Hyprland
|
||||||
|
- added as optional, with zsh, pokemon colorscripts
|
||||||
|
- improved zsh install scripts, so even the existing zsh users of can still opt for zsh and oh-my-zsh installation :)
|
||||||
|
|
||||||
|
## 03 Dec 2023
|
||||||
|
- Added kvantum for qt apps theming
|
||||||
|
- return of wlogout due to theming issues of rofi-power
|
||||||
|
|
||||||
|
## 01 Dec 2023
|
||||||
|
- Added pipewire to install
|
||||||
|
|
||||||
|
## 30 Nov 2023
|
||||||
|
- switched to swaylock-effects-git as non-git does not seem to work
|
||||||
|
|
||||||
|
## 29 Nov 2023
|
||||||
|
- nvidia.sh edited to remove hyprland-nvidia-git as well
|
||||||
|
|
||||||
|
## 26 Nov 2023
|
||||||
|
- nvidia - Move to hyprland-git. see [`commit`](https://github.com/hyprwm/Hyprland/commit/cd96ceecc551c25631783499bd92c6662c5d3616)
|
||||||
|
|
||||||
|
## 25 Nov 2023
|
||||||
|
- drop wlogout since Hyprland-Dots v2.1.9 uses rofi-power
|
||||||
|
|
||||||
|
## 23-Nov-2023
|
||||||
|
- Added Bibata cursor to install if opted for GTK Themes. However, it is not pre-applied. Use nwg-look utility to apply
|
||||||
|
|
||||||
|
## 19-Nov-2023
|
||||||
|
- Adjust dotfiles script to download from releases instead of from upstream
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
mail[at]ml4w.com.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
https://www.contributor-covenant.org/faq. Translations are available at
|
||||||
|
https://www.contributor-covenant.org/translations.
|
||||||
149
COMMIT_MESSAGE_GUIDELINES.md
Normal file
149
COMMIT_MESSAGE_GUIDELINES.md
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Commit Message Guidelines
|
||||||
|
|
||||||
|
A good commit message should be descriptive and provide context about the changes made. This makes it easier to understand and review the changes in the future.
|
||||||
|
|
||||||
|
Here are some guidelines for writing descriptive commit messages:
|
||||||
|
|
||||||
|
- Start with a short summary of the changes made in the commit.
|
||||||
|
|
||||||
|
- Use imperative mood for the summary, as if you're giving a command. For example, "Add feature" instead of "Added feature".
|
||||||
|
|
||||||
|
- Provide additional details in the commit message body, if necessary. This could include the reason for the change, the impact of the change, or any dependencies that were introduced or removed.
|
||||||
|
|
||||||
|
- Keep the message within 72 characters per line to ensure that it's easy to read in Git log output.
|
||||||
|
|
||||||
|
Examples of good commit messages:
|
||||||
|
|
||||||
|
- "Add authentication feature for user login"
|
||||||
|
- "Fix bug causing application to crash on startup"
|
||||||
|
- "Update documentation for API endpoints"
|
||||||
|
|
||||||
|
Remember, writing descriptive commit messages can save time and frustration in the future, and help others understand the changes made to the codebase.
|
||||||
|
|
||||||
|
## Commit Message Types
|
||||||
|
|
||||||
|
Here's a more comprehensive list of commit types that you can use:
|
||||||
|
|
||||||
|
`feat`: Adding a new feature to the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
feat: Add multi-image upload support
|
||||||
|
```
|
||||||
|
|
||||||
|
`fix`: Fixing a bug or issue in the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
fix: Fix bug causing application to crash on startup
|
||||||
|
```
|
||||||
|
|
||||||
|
`docs`: Updating documentation in the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
docs: Update documentation for API endpoints
|
||||||
|
```
|
||||||
|
|
||||||
|
`style`: Making cosmetic or style changes to the project (such as changing colors or formatting code)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
style: Update colors and formatting
|
||||||
|
```
|
||||||
|
|
||||||
|
`refactor`: Making code changes that don't affect the behavior of the project, but improve its quality or maintainability
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
refactor: Remove unused code
|
||||||
|
```
|
||||||
|
|
||||||
|
`test`: Adding or modifying tests for the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
test: Add tests for new feature
|
||||||
|
```
|
||||||
|
|
||||||
|
`chore`: Making changes to the project that don't fit into any other category, such as updating dependencies or configuring the build system
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
chore: Update dependencies
|
||||||
|
```
|
||||||
|
|
||||||
|
`perf`: Improving performance of the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
perf: Improve performance of image processing
|
||||||
|
```
|
||||||
|
|
||||||
|
`security`: Addressing security issues in the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
security: Update dependencies to address security issues
|
||||||
|
```
|
||||||
|
|
||||||
|
`merge`: Merging branches in the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
merge: Merge branch 'feature/branch-name' into develop
|
||||||
|
```
|
||||||
|
|
||||||
|
`revert`: Reverting a previous commit
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
revert: Revert "Add feature"
|
||||||
|
```
|
||||||
|
|
||||||
|
`build`: Making changes to the build system or dependencies of the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
build: Update dependencies
|
||||||
|
```
|
||||||
|
|
||||||
|
`ci`: Making changes to the continuous integration (CI) system for the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
ci: Update CI configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
`config`: Making changes to configuration files for the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
config: Update configuration files
|
||||||
|
```
|
||||||
|
|
||||||
|
`deploy`: Making changes to the deployment process for the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
deploy: Update deployment scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
`init`: Creating or initializing a new repository or project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
init: Initialize project
|
||||||
|
```
|
||||||
|
|
||||||
|
`move`: Moving files or directories within the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
move: Move files to new directory
|
||||||
|
```
|
||||||
|
|
||||||
|
`rename`: Renaming files or directories within the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
rename: Rename files
|
||||||
|
```
|
||||||
|
|
||||||
|
`remove`: Removing files or directories from the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
remove: Remove files
|
||||||
|
```
|
||||||
|
|
||||||
|
`update`: Updating code, dependencies, or other components of the project
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
update: Update code
|
||||||
|
```
|
||||||
|
|
||||||
|
These are just some examples, and you can create your own custom commit types as well. However, it's important to use them consistently and write clear, descriptive commit messages to make it easy for others to understand the changes you've made.
|
||||||
|
|
||||||
|
**Important:** If you are planning to use a custom commit message type other than the ones listed above, make sure to add it to this list so that others can understand it as well. Create a pull request to add it to this file.
|
||||||
69
CONTRIBUTING.md
Normal file
69
CONTRIBUTING.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Contributing to KooL Hyprland Projects
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to KooL Hyprland Projects! We welcome any contributions, including bug fixes, feature enhancements, documentation improvements, and other general improvements.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
1. Fork the branch development repository to your GitHub account. This will create a copy of this repository in your account. You can make changes to this copy without affecting the original repository.
|
||||||
|
- For fork this repository, click the **Fork** button in the top right corner of this page or click [here](https://github.com/JaKooLit/Arch-Hyprland/fork).
|
||||||
|
- Make sure to uncheck the Copy the `main` branch only. This will copy the development branch and other branches (if any)
|
||||||
|
|
||||||
|
2. Clone your forked repository to your local machine.
|
||||||
|
|
||||||
|
- Use the following command to clone your forked repository to your local machine.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone --depth=1 -b development https://github.com/JaKooLit/Arch-Hyprland.git
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Create a new branch for your changes.
|
||||||
|
|
||||||
|
- For example, to create a new branch named `your-branch-name`, use the following command.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout -b your-branch-name
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Make your changes and commit them with a descriptive commit message.
|
||||||
|
|
||||||
|
- For example, to commit your changes, use the following command and make sure to follow the [commit message guidelines](https://github.com/JaKooLit/Arch-Hyprland/blob/main/COMMIT_MESSAGE_GUIDELINES.md).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git commit -m "feat: add a new feature"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Push your changes to your forked repository.
|
||||||
|
|
||||||
|
- For example, to push your changes to your forked repository, use the following command.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git push origin your-branch-name
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Submit a **pull request** to the development branch repository.
|
||||||
|
- For example, to create a pull request, use the following steps.
|
||||||
|
1. Go to your forked repository.
|
||||||
|
2. Click the **Compare & pull request** button next to your `your-branch-name` branch.
|
||||||
|
3. Add a title and description for your pull request.
|
||||||
|
4. Click **Create pull request** and remember to add the relevant labels with using the [pull request template](https://github.com/JaKooLit/Arch-Hyprland/blob/main/.github/PULL_REQUEST_TEMPLATE.md).
|
||||||
|
|
||||||
|
## Guidelines
|
||||||
|
|
||||||
|
- Follow the code style of the project.
|
||||||
|
- Update the **documentation** if necessary.
|
||||||
|
- Add tests if applicable.
|
||||||
|
- Make sure all tests pass or fully tested before submitting your changes.
|
||||||
|
- Keep your pull request focused and avoid including unrelated changes.
|
||||||
|
- Remember to follow the following files before submitting your changes.
|
||||||
|
- [bug.yml](https://github.com/JaKooLit/Arch-Hyprland/blob/main/.github/ISSUE_TEMPLATE/bug.yml) - Use this template to create a report to help us improve.
|
||||||
|
- [feature.yml](https://github.com/JaKooLit/Arch-Hyprland/blob/main/.github/ISSUE_TEMPLATE/feature.yml) - Use this template to suggest a feature for this project.
|
||||||
|
- [documentation-update.yml](https://github.com/JaKooLit/Arch-Hyprland/blob/main/.github/ISSUE_TEMPLATE/documentation-update.yml) - Use this template to propose a change to the documentation.
|
||||||
|
- [PULL_REQUEST_TEMPLATE.md](https://github.com/JaKooLit/Arch-Hyprland/blob/main/.github/PULL_REQUEST_TEMPLATE.md) - Use this template to submit a pull request.
|
||||||
|
- [COMMIT_MESSAGE_GUIDELINES.md](https://github.com/JaKooLit/Arch-Hyprland/blob/main/COMMIT_MESSAGE_GUIDELINES.md) - Read this file to learn about the commit message guidelines.
|
||||||
|
- [CONTRIBUTING.md](https://github.com/JaKooLit/Arch-Hyprland/blob/main/CONTRIBUTING.md) - Read this file to learn about the contributing guidelines.
|
||||||
|
- [LICENSE](https://github.com/JaKooLit/Arch-Hyprland/blob/main/LICENSE.md) - Read this file to learn about the license.
|
||||||
|
- [README.md](https://github.com/JaKooLit/Arch-Hyprland/blob/main/README.md) - Read this file to learn about the project.
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
If you have any questions, feel free to contact via [GitHub Discussions](https://github.com/JaKooLit/Arch-Hyprland/discussions) or [Through Discord Server](https://discord.gg/kool-tech-world)
|
||||||
690
LICENSE.md
690
LICENSE.md
@@ -1,24 +1,674 @@
|
|||||||
This is free and unencumbered software released into the public domain.
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
distribute this software, either in source code form or as a compiled
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
binary, for any purpose, commercial or non-commercial, and by any
|
of this license document, but changing it is not allowed.
|
||||||
means.
|
|
||||||
|
|
||||||
In jurisdictions that recognize copyright laws, the author or authors
|
Preamble
|
||||||
of this software dedicate any and all copyright interest in the
|
|
||||||
software to the public domain. We make this dedication for the benefit
|
|
||||||
of the public at large and to the detriment of our heirs and
|
|
||||||
successors. We intend this dedication to be an overt act of
|
|
||||||
relinquishment in perpetuity of all present and future rights to this
|
|
||||||
software under copyright law.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
The GNU General Public License is a free, copyleft license for
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
software and other kinds of works.
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
IN NO EVENT SHALL THE AUTHORS 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.
|
|
||||||
|
|
||||||
For more information, please refer to <https://unlicense.org>
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
the GNU General Public License is intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users. We, the Free Software Foundation, use the
|
||||||
|
GNU General Public License for most of our software; it applies also to
|
||||||
|
any other work released this way by its authors. You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to prevent others from denying you
|
||||||
|
these rights or asking you to surrender the rights. Therefore, you have
|
||||||
|
certain responsibilities if you distribute copies of the software, or if
|
||||||
|
you modify it: responsibilities to respect the freedom of others.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must pass on to the recipients the same
|
||||||
|
freedoms that you received. You must make sure that they, too, receive
|
||||||
|
or can get the source code. And you must show them these terms so they
|
||||||
|
know their rights.
|
||||||
|
|
||||||
|
Developers that use the GNU GPL protect your rights with two steps:
|
||||||
|
(1) assert copyright on the software, and (2) offer you this License
|
||||||
|
giving you legal permission to copy, distribute and/or modify it.
|
||||||
|
|
||||||
|
For the developers' and authors' protection, the GPL clearly explains
|
||||||
|
that there is no warranty for this free software. For both users' and
|
||||||
|
authors' sake, the GPL requires that modified versions be marked as
|
||||||
|
changed, so that their problems will not be attributed erroneously to
|
||||||
|
authors of previous versions.
|
||||||
|
|
||||||
|
Some devices are designed to deny users access to install or run
|
||||||
|
modified versions of the software inside them, although the manufacturer
|
||||||
|
can do so. This is fundamentally incompatible with the aim of
|
||||||
|
protecting users' freedom to change the software. The systematic
|
||||||
|
pattern of such abuse occurs in the area of products for individuals to
|
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we
|
||||||
|
have designed this version of the GPL to prohibit the practice for those
|
||||||
|
products. If such problems arise substantially in other domains, we
|
||||||
|
stand ready to extend this provision to those domains in future versions
|
||||||
|
of the GPL, as needed to protect the freedom of users.
|
||||||
|
|
||||||
|
Finally, every program is threatened constantly by software patents.
|
||||||
|
States should not allow patents to restrict development and use of
|
||||||
|
software on general-purpose computers, but in those that do, we wish to
|
||||||
|
avoid the special danger that patents applied to a free program could
|
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that
|
||||||
|
patents cannot be used to render the program non-free.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you
|
||||||
|
receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU Affero General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the special requirements of the GNU Affero General Public License,
|
||||||
|
section 13, concerning interaction through a network will apply to the
|
||||||
|
combination as such.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short
|
||||||
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
|
<program> Copyright (C) <year> <name of author>
|
||||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, your program's commands
|
||||||
|
might be different; for a GUI interface, you would use an "about box".
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
|
<https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
The GNU General Public License does not permit incorporating your program
|
||||||
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
|
may consider it more useful to permit linking proprietary applications with
|
||||||
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License. But first, please read
|
||||||
|
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||||
|
|||||||
280
README.md
280
README.md
@@ -1,68 +1,221 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
# 💌 ** JaKooLit's Arch Hyprland Install Script ** 💌
|
# 💌 ** KooL's Arch - Hyprland Install Script ** 💌
|
||||||
|
|
||||||
  
|
<p align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/assets/latte.png" width="400" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
   <a href="https://discord.gg/kool-tech-world"> <img src="https://img.shields.io/discord/1151869464405606400?style=for-the-badge&logo=discord&color=cba6f7&link=https%3A%2F%2Fdiscord.gg%kool-tech-world"> </a>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
### Basically a copy of my Hyprland-v4 Hyprland-install script [`Link`](https://github.com/JaKooLit/Hyprland-v4)
|
<div align="center">
|
||||||
|
<br>
|
||||||
|
<a href="#-announcement-"><kbd> <br> Read this First <br> </kbd></a>  
|
||||||
|
<a href="#-to-use-this-script"><kbd> <br> How to use this script <br> </kbd></a>  
|
||||||
|
<a href="#gallery-and-videos"><kbd> <br> Gallery <br> </kbd></a>  
|
||||||
|
</div><br>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Arch-Hyprland/dual-panel-light-dark-switch.png" /> <img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Arch-Hyprland/dual-panel-dark_light-switch.png" />
|
<img src="https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/assets/latte.png" width="200" />
|
||||||
<img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Arch-Hyprland/gnome-style.png" /> <img align="center" width="49%" src="https://raw.githubusercontent.com/JaKooLit/screenshots/main/Arch-Hyprland/Plasma-Style.png" /> />
|
</p>
|
||||||
|
|
||||||
### 📽️ youtube video showcase: [`Youtube Link`](https://youtu.be/otda1nXJ5Dg?si=Wbb8eg-u3Y-tDnDQ)
|
<div align="center">
|
||||||
|
👇 KOOL's Hyprland-Dots related Links 👇
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
<div align="center">
|
||||||
|
<br>
|
||||||
|
<a href="https://github.com/JaKooLit/Hyprland-Dots"><kbd> <br> Hyprland-Dots repo <br> </kbd></a>  
|
||||||
|
<a href="https://www.youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx"><kbd> <br> Youtube <br> </kbd></a>  
|
||||||
|
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki"><kbd> <br> Wiki <br> </kbd></a>  
|
||||||
|
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds"><kbd> <br> Keybinds <br> </kbd></a>  
|
||||||
|
<a href="https://github.com/JaKooLit/Hyprland-Dots/wiki/FAQ"><kbd> <br> FAQ <br> </kbd></a>  
|
||||||
|
<a href="https://discord.gg/kool-tech-world"><kbd> <br> Discord <br> </kbd></a>
|
||||||
|
</div><br>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/assets/latte.png" width="200" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 align="center">
|
||||||
|
<img src="https://github.com/JaKooLit/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" />
|
||||||
|
KooL Hyprland-Dotfiles Showcase
|
||||||
|
<img src="https://github.com/JaKooLit/Telegram-Animated-Emojis/blob/main/Activity/Sparkles.webp" alt="Sparkles" width="38" height="38" />
|
||||||
|
</h3>
|
||||||
|
|
||||||
### ✨ A video walk through my dotfiles[`Link`](https://youtu.be/fO-RBHvVEcc?si=ijqxxnq_DLiyO8xb)
|
<div align="center">
|
||||||
|
|
||||||
|
https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872
|
||||||
|
|
||||||
### 🆕 What's new?
|
</div>
|
||||||
- Basically just a clone of my Hyprland-v4. Just renamed and cleaned up codes.
|
|
||||||
- Concentrated on Tokyo Themes and Tokyo Night SE icons only
|
|
||||||
- Downloading of dot files will be a centralized repo
|
|
||||||
|
|
||||||
|
### Gallery and Videos
|
||||||
|
|
||||||
### 👀 NVidia GPU Owners.
|
#### 🎥 Feb 2025 Video explanation of installation with preset
|
||||||
- By default, nvidia-dkms will be installed. and only supports GTX 900 and newer. If required to install older driver, edit the nvidia.sh in scripts-folder
|
|
||||||
|
|
||||||
|
- [YOUTUBE-LINK](https://youtu.be/wQ70lo7P6vA?si=_QcbrNKh_Bg0L3wC)
|
||||||
|
- [YOUTUBE-Hyprland-Playlist](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t)
|
||||||
|
|
||||||
|
### 🪧🪧🪧 ANNOUNCEMENT 🪧🪧🪧
|
||||||
|
|
||||||
|
- This Repo does not contain Hyprland Dots or configs! Dotfiles can be checked here [`Hyprland-Dots`](https://github.com/JaKooLit/Hyprland-Dots) . During installation, if you opt to copy pre-configured dots, it will be downloaded from that centralized repo.
|
||||||
|
- Hyprland-Dots use are constantly evolving / improving. you can check CHANGELOGS here [`Hyprland-Dots-Changelogs`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Changelogs)
|
||||||
|
- Since the Hyprland-Dots are evolving, some of the screenshots maybe old
|
||||||
|
- the wallpaper offered to be downloaded towards the end is from this [`REPO`](https://github.com/JaKooLit/Wallpaper-Bank)
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> install a backup tool like `snapper` or `timeshift`. and Backup your system before installing hyprland using this script (HIGHLY RECOMMENDED)
|
||||||
|
|
||||||
|
> [!CAUTION]
|
||||||
|
> Download this script on a directory where you have write permissions. ie. HOME. Or any directory within your home directory. Else script will fail
|
||||||
|
|
||||||
|
#### 🆕 Prerequisites
|
||||||
|
|
||||||
|
- This install script is intended for atleast Server type / Minimal Arch Linux installed.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> 🔘 Pipewire and Pipewire audio
|
||||||
|
|
||||||
|
- This script will install pipewire and will also disable or will uninstall pulseaudio. If you dont want it, edit install.sh, about line 191 and comment the line `execute_script "pipewire.sh"` or you can simply just delete pipewire.sh in install-scripts directory before installing.
|
||||||
|
|
||||||
|
#### ✨ Customize the packages to be installed
|
||||||
|
|
||||||
|
- inside the install-scripts directory, you can edit 00-hypr-pkgs.sh. Care though as the Hyprland Dots may not work properly!
|
||||||
|
|
||||||
|
#### 🚩 Switching to SDDM assuming you have GDM installed and running
|
||||||
|
|
||||||
|
- if you really want switch to SDDM from GDM, you need to disable the gdm first.
|
||||||
|
- `sudo systemctl disable gdm.service` then reboot
|
||||||
|
- after reboot, need to ran the install script via tty. So suggest download the install script first. Then disable gdm. reboot and once logged in, cd into Distro-Hyprland then `./install.sh` and then choose SDDM and SDDM theme in the options.
|
||||||
|
- NOTE: Distro-Hyprland is Arch-Hyprland, or Fedora-Hyprland .. depends on which install scripts you downloaded.
|
||||||
|
|
||||||
|
#### 💫 SDDM and GTK Themes offered
|
||||||
|
|
||||||
|
- If you opted to install SDDM theme, here's the [`LINK`](https://github.com/JaKooLit/simple-sddm-2) which is a modified fork of [`LINK`](https://github.com/Keyitdev/sddm-astronaut-theme)
|
||||||
|
- If you opted to install GTK Themes, Icons, here's the [`LINK`](https://github.com/JaKooLit/GTK-themes-icons). This also includes Bibata Modern Ice cursor.
|
||||||
|
|
||||||
|
#### 👀 NVidia GPU Owners.
|
||||||
|
|
||||||
|
- By default, nvidia-dkms will be installed. and only supports GTX 900 and newer. If required to install older driver, edit the nvidia.sh in install-scripts directory
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> If you want to use nouveau driver, dont choose nvidia in the option. This is because the nvidia installer part, it will blacklist nouveau. Hyprland will still be installed but it will skip blacklisting nouveau.
|
||||||
|
|
||||||
|
- After installation, check [`THIS`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Notes_to_remember#--for-nvidia-gpu-users)
|
||||||
|
|
||||||
|
## ✨ Auto clone and install
|
||||||
|
|
||||||
|
> [!CAUTION]
|
||||||
|
> If you are using FISH SHELL, DO NOT use this function. Clone and ran install.sh instead
|
||||||
|
|
||||||
|
- you can use this command to automatically clone the installer and ran the script for you
|
||||||
|
- NOTE: `curl` package is required before running this command
|
||||||
|
|
||||||
### ✨ to run
|
|
||||||
> clone this repo by using git. Change directory, make executable and run the script
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/JaKooLit/Arch-Hyprland.git
|
sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Arch-Hyprland/main/auto-install.sh)
|
||||||
cd Arch-Hyprland
|
```
|
||||||
|
|
||||||
|
## ✨ to use this script
|
||||||
|
|
||||||
|
- clone this repo (latest commit only) to reduce file size download by using git. Change directory, make executable and run the script
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone --depth=1 https://github.com/JaKooLit/Arch-Hyprland.git ~/Arch-Hyprland
|
||||||
|
cd ~/Arch-Hyprland
|
||||||
chmod +x install.sh
|
chmod +x install.sh
|
||||||
./install.sh
|
./install.sh
|
||||||
```
|
```
|
||||||
### ✨ for ZSH and OH-MY-ZSH installation
|
|
||||||
> do this once installed and script completed; do the following to change the default shell zsh
|
### 💥 💥 UNINSTALL SCRIPT / Removal of Config Files
|
||||||
|
|
||||||
|
- 11 March 2025, due to popular request, created a guided `uninstall.sh` script. USE this with caution as it may render your system unstable.
|
||||||
|
- I will not be responsible if your system breaks
|
||||||
|
- The best still to revert to previous state of your system is via `timeshift or snapper`
|
||||||
|
|
||||||
|
#### ✨ for ZSH and OH-MY-ZSH installation
|
||||||
|
|
||||||
|
> installer should auto change your default shell to zsh. However, if it does not, do this
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chsh -s $(which zsh)
|
chsh -s $(which zsh)
|
||||||
zsh
|
zsh
|
||||||
source ~/.zshrc
|
source ~/.zshrc
|
||||||
```
|
```
|
||||||
|
|
||||||
- reboot or logout
|
- reboot or logout
|
||||||
- by default gnzh theme is installed. You can find more themes from this [`OH-MY-ZSH-THEMES`](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
|
- by default `agnosterzak` theme is installed. Which is from external oh-my-zsh theme. You can find more themes from this [`OH-MY-ZSH-THEMES`](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes)
|
||||||
- to change the theme, edit ~/.zshrc ZSH_THEME="desired theme"
|
- to change the theme, `SUPER SHIFT O` , choose desired theme, and close and open terminal.
|
||||||
|
- or manually edit `~/.zshrc` . Look for ZSH_THEME="desired theme"
|
||||||
|
|
||||||
### 📒 Notes
|
#### 🎞️ AGS Overview DEMO
|
||||||
- super h for launching a small help file
|
|
||||||
- super e to view / edit settings, monitor, keybinds, Environment Variables, etc
|
|
||||||
- go through the keybinds. There are alot of hidden features like dual panel, change waybar styles, change wallpaper, etc... its too long to put all in the readme!!!
|
|
||||||
|
|
||||||
### 🛣️ Roadmap:
|
- in case you wonder, here is a short demo of AGS overview [Youtube LINK](https://youtu.be/zY5SLNPBJTs)
|
||||||
- [ ] Install zsh and oh-my-zsh without necessary steps above
|
|
||||||
- [ ] possibly adding gruvbox themes, cursors, icons
|
#### ✨ TO DO once installation done and dotfiles copied
|
||||||
- [ ] adding vertical waybar
|
|
||||||
- [X] ~~Use kitty in favor of foot~~ - Dropped the idea of kitty. Kitty is using twice memory compared to foot.
|
- SUPER H for HINT or click on the waybar HINT! Button
|
||||||
|
- Head over to [KooL Hyprland WIKI](https://github.com/JaKooLit/Hyprland-Dots/wiki)
|
||||||
|
|
||||||
|
#### 🙋 Got a questions regarding the Hyprland Dots or configurations? 🙋
|
||||||
|
|
||||||
|
- Head over to wiki Link [`WIKI`](https://github.com/JaKooLit/Hyprland-Dots/wiki)
|
||||||
|
|
||||||
|
#### ⌨ Keybinds
|
||||||
|
|
||||||
|
- Keybinds [`CLICK`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Keybinds)
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> KooL Hyprland has a searchable keybind function via rofi. (SUPER SHIFT K) or right click the `HINTS` waybar button
|
||||||
|
|
||||||
|
#### 🔄 switching between Hyprland-git and none Hyprland-git
|
||||||
|
|
||||||
|
- you can use my prepared script [`LINK`](https://github.com/JaKooLit/Arch-Hyprland/tree/main/assets/hyprland-install)
|
||||||
|
- Readme is also there
|
||||||
|
|
||||||
|
#### 🙋 👋 Having issues or questions?
|
||||||
|
|
||||||
|
- for the install part, kindly open issue on this repo
|
||||||
|
- for the Pre-configured Hyprland dots / configuration, submit issue [`here`](https://github.com/JaKooLit/Hyprland-Dots/issues)
|
||||||
|
|
||||||
|
#### 🔧 Proper way to re-installing a particular script from install-scripts directory
|
||||||
|
|
||||||
|
- CD into Arch-Hyprland directory and then ran the below command.
|
||||||
|
- i.e. `./install-scripts/gtk-themes.sh` - For reinstall GTK Themes or
|
||||||
|
- `./install-scripts/sddm.sh` - For reinstall sddm
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> DO NOT cd into install-scripts directory as script will most likely to fail
|
||||||
|
#### 🛠️ Optional system monitor scripts (cross-distro compatible)
|
||||||
|
- These installer helpers will set up user-level services and install required packages automatically.
|
||||||
|
- Works on Fedora, Arch, and other distributions using standard tools.
|
||||||
|
- Re-run any time from the repo root (do not `cd` into `install-scripts`).
|
||||||
|
|
||||||
|
- `./install-scripts/battery-monitor.sh`
|
||||||
|
- Installs: `acpi`, `libnotify`
|
||||||
|
- Creates: `~/.config/hypr/scripts/battery-monitor.sh` and user service `battery-monitor.service`
|
||||||
|
- Manage: `systemctl --user status|start|stop battery-monitor`
|
||||||
|
- `./install-scripts/disk-monitor.sh`
|
||||||
|
- Installs: `libnotify`
|
||||||
|
- Creates: `~/.config/hypr/scripts/disk-monitor.sh` and user service `disk-monitor.service`
|
||||||
|
- Manage: `systemctl --user status|start|stop disk-monitor`
|
||||||
|
- `./install-scripts/temp-monitor.sh`
|
||||||
|
- Installs: `lm_sensors`, `libnotify`
|
||||||
|
- Detects sensors (runs `sudo sensors-detect --auto` once)
|
||||||
|
- Creates: `~/.config/hypr/scripts/temp-monitor.sh` and user service `temp-monitor.service`
|
||||||
|
- Manage: `systemctl --user status|start|stop temp-monitor`
|
||||||
|
> Packages above are installed by the respective installer scripts; no manual action is required. If you prefer package pre-install via the main package list, ensure `acpi`, `lm_sensors`, and `libnotify` are present in your setup.
|
||||||
|
|
||||||
|
#### 🛣️ Roadmap:
|
||||||
|
|
||||||
|
- [ ] show a progress bar in downloading and compiling part when installing outside AUR or official repo
|
||||||
|
|
||||||
|
#### ❗ some known issues for nvidia
|
||||||
|
|
||||||
### ⚠️ some known issues
|
|
||||||
- reports from members of my discord, states that some users of nvidia are getting stuck on sddm login. credit to @Kenni Fix stated was
|
- reports from members of my discord, states that some users of nvidia are getting stuck on sddm login. credit to @Kenni Fix stated was
|
||||||
|
|
||||||
```
|
```
|
||||||
while in sddm press ctrl+alt+F2 or F3
|
while in sddm press ctrl+alt+F2 or F3
|
||||||
log into your account
|
log into your account
|
||||||
@@ -70,20 +223,75 @@ log into your account
|
|||||||
`ls /dev/dri/by-path` find the matching id
|
`ls /dev/dri/by-path` find the matching id
|
||||||
`ls -l /dev/dri/by-path` to check where the symlink points to
|
`ls -l /dev/dri/by-path` to check where the symlink points to
|
||||||
)
|
)
|
||||||
7. add "env = WLR_DRM_DEVICES,/dev/dri/cardX" to the ENVvariables config (.config/hypr/configs/ENVariables.conf) ; X being where the symlink of the gpu points to
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- add "env = WLR_DRM_DEVICES,/dev/dri/cardX" to the ENVvariables config `~/.config/hypr/UserConfigs/ENVariables.conf` ; X being where the symlink of the gpu points to
|
||||||
|
|
||||||
- more info from the hyprland wiki [`Hyprland Wiki Link`](https://wiki.hyprland.org/FAQ/#my-external-monitor-is-blank--doesnt-render--receives-no-signal-laptop)
|
- more info from the hyprland wiki [`Hyprland Wiki Link`](https://wiki.hyprland.org/FAQ/#my-external-monitor-is-blank--doesnt-render--receives-no-signal-laptop)
|
||||||
|
|
||||||
|
- reports from a member of discord for Nvidia for additional env's
|
||||||
|
- remove # from the following env's on
|
||||||
|
|
||||||
### 👍👍👍 Thanks and Credits!
|
```
|
||||||
- shout out to CooSee from Gentoo forums for the nice rainbow borders
|
env = GBM_BACKEND,nvidia-drm
|
||||||
|
env = WLR_RENDERER_ALLOW_SOFTWARE,1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### ❗ other known issues
|
||||||
|
|
||||||
|
- [ ] If you are using this script on an Arch-Based distros like Arco linux, or cachy OS or EOS or Manjaro, make sure to install pipewire, pipewire-pulse & pipewire-audio first. Arco Linux, on some of their ISO's still shipped with pulseaudio as audio backend. You will experience getting "stuck" on installation.
|
||||||
|
- [ ] To install pipewire and its services , `sudo pacman -S pipewire wireplumber pipewire-audio pipewire-pulse` . When prompted, remove / replace pulseaudio. After that, you can ran `./install.sh`
|
||||||
|
- [ ] installing of cava-git on a newly installed Arch makes the install keep hanging. Switched back to cava. After booting and logged in, if cava dont work, replace it cava-git `yay -S cava-git` or `paru -S cava-git`
|
||||||
|
> [!NOTE]
|
||||||
|
> Auto start of Hyprland after login (no SDDM or GDM or any login managers)
|
||||||
|
- [ ] This was disabled a few days ago. (19 May 2024). This was because some users, after they used the Distro-Hyprland scripts with other DE (gnome-wayland or plasma-wayland), if they choose to login into gnome-wayland for example, Hyprland is starting.
|
||||||
|
- [ ] to avoid this, I disabled it. You can re-enable again by editing `~/.zprofile` . Remove all the # on the first lines
|
||||||
|
- [ ] ROFI issues (scaling, unexplained scaling etc). This is most likely to experience if you are installing on a system where rofi is currently installed. To fix it uninstall rofi and install rofi-wayland . `sudo pacman -Rns rofi` . Install rofi-wayland with `sudo pacman -S rofi-wayland`. Rofi-wayland is compatible with x11 so no need to worry.
|
||||||
|
|
||||||
|
#### 🫥 Improving performance for Older Nvidia Cards using driver 470
|
||||||
|
|
||||||
|
- [`SEE HERE`](https://github.com/JaKooLit/Hyprland-Dots/discussions/123#discussion-6035205)
|
||||||
|
|
||||||
|
#### 📒 Final Notes
|
||||||
|
|
||||||
|
- join my discord channel [`Discord`](https://discord.com/invite/kool-tech-world)
|
||||||
|
- Feel free to copy, re-distribute, and use this script however you want. Would appreciate if you give me some loves by crediting my work :)
|
||||||
|
|
||||||
|
#### ✍️ Contributing
|
||||||
|
|
||||||
|
- As stated above, these script does not contain actual config files. These are only the installer of packages
|
||||||
|
- If you want to contribute and/or test the Hyprland-Dotfiles (development branch), [`Hyprland-Dots-Development`](https://github.com/JaKooLit/Hyprland-Dots/tree/development)
|
||||||
|
- Want to contribute on KooL-Hyprland-Dots Click [`HERE`](https://github.com/JaKooLit/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute
|
||||||
|
- Want to contribute on This Installer? Click [`HERE`](https://github.com/JaKooLit/Arch-Hyprland/blob/main/CONTRIBUTING.md) for a guide how to contribute
|
||||||
|
|
||||||
|
#### 👍👍👍 Thanks and Credits!
|
||||||
|
|
||||||
|
- [`Hyprland`](https://hyprland.org/) Of course to Hyprland and @vaxerski for this awesome Dynamic Tiling Manager.
|
||||||
|
|
||||||
## 💖 Support
|
## 💖 Support
|
||||||
|
|
||||||
- a Star on my Github repos would be nice 🌟
|
- a Star on my Github repos would be nice 🌟
|
||||||
|
|
||||||
- Subscribe to my Youtube Channel [YouTube](https://www.youtube.com/@Ja.KooLit)
|
- Subscribe to my Youtube Channel [YouTube](https://www.youtube.com/@Ja.KooLit)
|
||||||
|
|
||||||
- You can also buy me Coffee Through ko-fi.com 🤩
|
- you can also give support through coffee's or btc 😊
|
||||||
|
|
||||||
<a href='https://ko-fi.com/jakoolit' target='_blank'><img height='35' style='border:0px;height:46px;' src='https://az743702.vo.msecnd.net/cdn/kofi3.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' />
|
[](https://ko-fi.com/jakoolit)
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
[](https://www.buymeacoffee.com/JaKooLit)
|
||||||
|
|
||||||
|
Or you can donate cryto on my btc wallet :)
|
||||||
|
|
||||||
|
> 1N3MeV2dsX6gQB42HXU6MF2hAix1mqjo8i
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 📹 Youtube videos (Click to view and watch the playlist) 📹
|
||||||
|
|
||||||
|
[](https://youtube.com/playlist?list=PLDtGd5Fw5_GjXCznR0BzCJJDIQSZJRbxx&si=iaNjLulFdsZ6AV-t)
|
||||||
|
|
||||||
|
## 🥰🥰 💖💖 👍👍👍
|
||||||
|
|
||||||
|
[](https://starchart.cc/JaKooLit/Arch-Hyprland)
|
||||||
|
|||||||
3
assets/.zprofile
Normal file
3
assets/.zprofile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
|
||||||
|
# Hyprland
|
||||||
|
#fi
|
||||||
41
assets/.zshrc
Normal file
41
assets/.zshrc
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# If you come from bash you might have to change your $PATH.
|
||||||
|
# export PATH=$HOME/bin:/usr/local/bin:$PATH
|
||||||
|
|
||||||
|
export ZSH="$HOME/.oh-my-zsh"
|
||||||
|
|
||||||
|
ZSH_THEME="agnosterzak"
|
||||||
|
|
||||||
|
plugins=(
|
||||||
|
git
|
||||||
|
archlinux
|
||||||
|
zsh-autosuggestions
|
||||||
|
zsh-syntax-highlighting
|
||||||
|
)
|
||||||
|
|
||||||
|
source $ZSH/oh-my-zsh.sh
|
||||||
|
|
||||||
|
# Check archlinux plugin commands here
|
||||||
|
# https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/archlinux
|
||||||
|
|
||||||
|
# Display Pokemon-colorscripts
|
||||||
|
# Project page: https://gitlab.com/phoneybadger/pokemon-colorscripts#on-other-distros-and-macos
|
||||||
|
#pokemon-colorscripts --no-title -s -r #without fastfetch
|
||||||
|
#pokemon-colorscripts --no-title -s -r | fastfetch -c $HOME/.config/fastfetch/config-pokemon.jsonc --logo-type file-raw --logo-height 10 --logo-width 5 --logo -
|
||||||
|
|
||||||
|
# fastfetch. Will be disabled if above colorscript was chosen to install
|
||||||
|
fastfetch -c $HOME/.config/fastfetch/config-compact.jsonc
|
||||||
|
|
||||||
|
# Set-up icons for files/directories in terminal using lsd
|
||||||
|
alias ls='lsd'
|
||||||
|
alias l='ls -l'
|
||||||
|
alias la='ls -a'
|
||||||
|
alias lla='ls -la'
|
||||||
|
alias lt='ls --tree'
|
||||||
|
|
||||||
|
# Set-up FZF key bindings (CTRL R for fuzzy history finder)
|
||||||
|
source <(fzf --zsh)
|
||||||
|
|
||||||
|
HISTFILE=~/.zsh_history
|
||||||
|
HISTSIZE=10000
|
||||||
|
SAVEHIST=10000
|
||||||
|
setopt appendhistory
|
||||||
124
assets/Thunar/accels.scm
Normal file
124
assets/Thunar/accels.scm
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
; Thunar GtkAccelMap rc-file -*- scheme -*-
|
||||||
|
; this file is an automated accelerator map dump
|
||||||
|
;
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-type" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-last-modified" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/cut" "<Primary>x")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-size" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/file-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/close-tab" "<Primary>w")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-size" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/new-window" "<Primary>n")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/clear-directory-specific-settings" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/close-window" "<Primary>q")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-parent" "<Alt>Up")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-size-in-bytes" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/switch-previous-tab" "<Primary>Page_Up")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/3925ac2f7e4055558c447a20c2e047ad" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/open" "<Primary>o")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-ascending" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/toggle-split-view" "F3")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/copy-2" "<Primary>Insert")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/trash-delete" "Delete")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-recent" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-configure-toolbar" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/forward" "<Alt>Right")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/restore" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/9f0d843e4074095bf657b996746ec75c" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-location-alt" "<Alt>d")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/a16339451d60726d0755a887bd755af2" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out-alt" "<Primary>KP_Subtract")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/select-by-pattern" "<Primary>s")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-file-menu" "F10")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/contents" "F1")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/show-highlight" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/44e0e66b3d753576f90ed75c87917822" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-descending" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-name" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/select-all-files" "<Primary>a")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/execute" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/properties" "<Alt>Return")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/cut-2" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-dtime" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/switch-next-tab" "<Primary>Page_Down")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/paste-2" "<Shift>Insert")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-templates" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-filetype" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/close-all-windows" "<Primary><Shift>w")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/create-document" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/detach-tab" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/978d3e7a7225e42c977fe94183792d87" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/cancel-search" "Escape")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in-alt2" "<Primary>equal")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarShortcutsPane/sendto-shortcuts" "<Primary>d")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/undo" "<Primary>z")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/toggle-sort-order" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/reload-alt" "F5")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-entry" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/paste" "<Primary>v")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in-alt1" "<Primary>KP_Add")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-menubar" "<Primary>m")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/back" "<Alt>Left")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-desktop" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-detailed-list" "<Primary>2")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/restore-show" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out" "<Primary>minus")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-display-name" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/sendto-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/go-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/remove-from-recent" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/open-with-other" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/invert-selection" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-shortcuts" "<Primary>b")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/edit-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/reload" "<Primary>r")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/move-to-trash" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/copy" "<Primary>c")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/delete-3" "<Shift>KP_Delete")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/toggle-side-pane" "F9")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-mtime" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/a50db0a56a1e6c31df6bf18c55eb78cd" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/arrange-items-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/unselect-all-files" "Escape")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-computer" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/bookmarks-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/toggle-image-preview" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-icons" "<Primary>1")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/delete-2" "<Shift>Delete")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in" "<Primary>plus")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/rename" "F2")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-location" "<Primary>l")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-as-compact-list" "<Primary>3")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/search" "<Primary>f")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/new-tab" "<Primary>t")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset" "<Primary>0")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/contents/help-menu" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/open-in-new-tab" "<Primary><Shift>p")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-buttons" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/redo" "<Primary><Shift>z")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-trash" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/open-in-new-window" "<Primary><Shift>o")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-statusbar" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/open-location" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/duplicate" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/c76f07a72d3c8ef5d4bf8e84c8981221" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/trash-delete-2" "KP_Delete")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/create-folder" "<Primary><Shift>n")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-home" "<Alt>Home")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/show-hidden" "<Primary>h")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/set-default-app" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/empty-trash" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/back-alt" "BackSpace")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/preferences" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarBookmarks/8ea92a0b35875a5a65ffafcf02698ce8" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/delete" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-tree" "<Primary>e")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-file-system" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/open-network" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarActionManager/sendto-desktop" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarStandardView/make-link" "")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset-alt" "<Primary>KP_0")
|
||||||
|
; (gtk_accel_path "<Actions>/ThunarWindow/about" "")
|
||||||
59
assets/Thunar/uca.xml
Normal file
59
assets/Thunar/uca.xml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<actions>
|
||||||
|
<action>
|
||||||
|
<icon>audacious</icon>
|
||||||
|
<name>Add to audacious playlist</name>
|
||||||
|
<submenu></submenu>
|
||||||
|
<unique-id>1681893052016505-1</unique-id>
|
||||||
|
<command>audacious -e %U</command>
|
||||||
|
<description></description>
|
||||||
|
<range>*</range>
|
||||||
|
<patterns>*</patterns>
|
||||||
|
<audio-files/>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<icon>utilities-terminal</icon>
|
||||||
|
<name>Open Terminal Here</name>
|
||||||
|
<submenu></submenu>
|
||||||
|
<unique-id>1703572977408169-1</unique-id>
|
||||||
|
<command>exo-open --working-directory %f --launch TerminalEmulator</command>
|
||||||
|
<description>Launch TerminalEmulator</description>
|
||||||
|
<range></range>
|
||||||
|
<patterns>*</patterns>
|
||||||
|
<startup-notify/>
|
||||||
|
<directories/>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<icon>checkbox</icon>
|
||||||
|
<name>Check sha1sum</name>
|
||||||
|
<submenu></submenu>
|
||||||
|
<unique-id>1526633271260079-26</unique-id>
|
||||||
|
<command>yad --info --title="Check sha1 for %n" --text="$(sha1sum %f)"</command>
|
||||||
|
<description>Check sha1sum</description>
|
||||||
|
<range></range>
|
||||||
|
<patterns>*.iso;*.ISO</patterns>
|
||||||
|
<other-files/>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<icon>checkbox</icon>
|
||||||
|
<name>Check sha256sum</name>
|
||||||
|
<submenu></submenu>
|
||||||
|
<unique-id>1577688162350307-1</unique-id>
|
||||||
|
<command>yad --info --title="Check sha256 for %n" --text="$(sha256sum %f)"</command>
|
||||||
|
<description>Check sha256sum</description>
|
||||||
|
<range></range>
|
||||||
|
<patterns>*.iso;*.ISO</patterns>
|
||||||
|
<other-files/>
|
||||||
|
</action>
|
||||||
|
<action>
|
||||||
|
<icon>checkbox</icon>
|
||||||
|
<name>Check md5sum</name>
|
||||||
|
<submenu></submenu>
|
||||||
|
<unique-id>1526736788575383-2</unique-id>
|
||||||
|
<command>yad --info --title="Check md5 for %n" --text="$(md5sum %f)"</command>
|
||||||
|
<description>Check md5sum</description>
|
||||||
|
<range></range>
|
||||||
|
<patterns>*.iso;*.ISO;*.tar.gz;*.TAR.GZ;*.zip;*.ZIP</patterns>
|
||||||
|
<other-files/>
|
||||||
|
</action>
|
||||||
|
</actions>
|
||||||
370
assets/add_zsh_theme/agnosterzak.zsh-theme
Normal file
370
assets/add_zsh_theme/agnosterzak.zsh-theme
Normal file
@@ -0,0 +1,370 @@
|
|||||||
|
# vim:ft=zsh ts=2 sw=2 sts=2
|
||||||
|
#
|
||||||
|
# agnoster's Theme - https://gist.github.com/3712874
|
||||||
|
# A Powerline-inspired theme for ZSH
|
||||||
|
#
|
||||||
|
# # README
|
||||||
|
#
|
||||||
|
# In order for this theme to render correctly, you will need a
|
||||||
|
# [Powerline-patched font](https://gist.github.com/1595572).
|
||||||
|
#
|
||||||
|
# In addition, I recommend the
|
||||||
|
# [Solarized theme](https://github.com/altercation/solarized/) and, if you're
|
||||||
|
# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app -
|
||||||
|
# it has significantly better color fidelity.
|
||||||
|
#
|
||||||
|
# # Goals
|
||||||
|
#
|
||||||
|
# The aim of this theme is to only show you *relevant* information. Like most
|
||||||
|
# prompts, it will only show git information when in a git working directory.
|
||||||
|
# However, it goes a step further: everything from the current user and
|
||||||
|
# hostname to whether the last call exited with an error to whether background
|
||||||
|
# jobs are running in this shell will all be displayed automatically when
|
||||||
|
# appropriate.
|
||||||
|
|
||||||
|
### Segment drawing
|
||||||
|
# A few utility functions to make it easy and re-usable to draw segmented prompts
|
||||||
|
|
||||||
|
CURRENT_BG='NONE'
|
||||||
|
|
||||||
|
# Characters
|
||||||
|
SEGMENT_SEPARATOR="\ue0b0"
|
||||||
|
PLUSMINUS="\u00b1"
|
||||||
|
BRANCH="\ue0a0"
|
||||||
|
DETACHED="\u27a6"
|
||||||
|
CROSS="\u2718"
|
||||||
|
LIGHTNING="\u26a1"
|
||||||
|
GEAR="\u2699"
|
||||||
|
|
||||||
|
# Begin a segment
|
||||||
|
# Takes two arguments, background and foreground. Both can be omitted,
|
||||||
|
# rendering default background/foreground.
|
||||||
|
prompt_segment() {
|
||||||
|
local bg fg
|
||||||
|
[[ -n $1 ]] && bg="%K{$1}" || bg="%k"
|
||||||
|
[[ -n $2 ]] && fg="%F{$2}" || fg="%f"
|
||||||
|
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
|
||||||
|
print -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
|
||||||
|
else
|
||||||
|
print -n "%{$bg%}%{$fg%} "
|
||||||
|
fi
|
||||||
|
CURRENT_BG=$1
|
||||||
|
[[ -n $3 ]] && print -n $3
|
||||||
|
}
|
||||||
|
|
||||||
|
# End the prompt, closing any open segments
|
||||||
|
prompt_end() {
|
||||||
|
if [[ -n $CURRENT_BG ]]; then
|
||||||
|
print -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
|
||||||
|
else
|
||||||
|
print -n "%{%k%}"
|
||||||
|
fi
|
||||||
|
print -n "%{%f%}"
|
||||||
|
CURRENT_BG=''
|
||||||
|
}
|
||||||
|
|
||||||
|
### Prompt components
|
||||||
|
# Each component will draw itself, and hide itself if no information needs to be shown
|
||||||
|
|
||||||
|
# Context: user@hostname (who am I and where am I)
|
||||||
|
prompt_context() {
|
||||||
|
if [[ -n "$SSH_CLIENT" ]]; then
|
||||||
|
prompt_segment magenta white "%{$fg_bold[white]%(!.%{%F{white}%}.)%}$USER@%m%{$fg_no_bold[white]%}"
|
||||||
|
else
|
||||||
|
prompt_segment yellow magenta "%{$fg_bold[magenta]%(!.%{%F{magenta}%}.)%}@$USER%{$fg_no_bold[magenta]%}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Battery Level
|
||||||
|
prompt_battery() {
|
||||||
|
HEART='♥ '
|
||||||
|
|
||||||
|
if [[ $(uname) == "Darwin" ]] ; then
|
||||||
|
|
||||||
|
function battery_is_charging() {
|
||||||
|
[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]
|
||||||
|
}
|
||||||
|
|
||||||
|
function battery_pct() {
|
||||||
|
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
|
||||||
|
typeset -F maxcapacity=$(echo $smart_battery_status | grep '^.*"MaxCapacity"\ =\ ' | sed -e 's/^.*"MaxCapacity"\ =\ //')
|
||||||
|
typeset -F currentcapacity=$(echo $smart_battery_status | grep '^.*"CurrentCapacity"\ =\ ' | sed -e 's/^.*CurrentCapacity"\ =\ //')
|
||||||
|
integer i=$(((currentcapacity/maxcapacity) * 100))
|
||||||
|
echo $i
|
||||||
|
}
|
||||||
|
|
||||||
|
function battery_pct_remaining() {
|
||||||
|
if battery_is_charging ; then
|
||||||
|
battery_pct
|
||||||
|
else
|
||||||
|
echo "External Power"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function battery_time_remaining() {
|
||||||
|
local smart_battery_status="$(ioreg -rc "AppleSmartBattery")"
|
||||||
|
if [[ $(echo $smart_battery_status | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
|
||||||
|
timeremaining=$(echo $smart_battery_status | grep '^.*"AvgTimeToEmpty"\ =\ ' | sed -e 's/^.*"AvgTimeToEmpty"\ =\ //')
|
||||||
|
if [ $timeremaining -gt 720 ] ; then
|
||||||
|
echo "::"
|
||||||
|
else
|
||||||
|
echo "~$((timeremaining / 60)):$((timeremaining % 60))"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
b=$(battery_pct_remaining)
|
||||||
|
if [[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
|
||||||
|
if [ $b -gt 50 ] ; then
|
||||||
|
prompt_segment green white
|
||||||
|
elif [ $b -gt 20 ] ; then
|
||||||
|
prompt_segment yellow white
|
||||||
|
else
|
||||||
|
prompt_segment red white
|
||||||
|
fi
|
||||||
|
echo -n "%{$fg_bold[white]%}$HEART$(battery_pct_remaining)%%%{$fg_no_bold[white]%}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(uname) == "Linux" && -d /sys/module/battery ]] ; then
|
||||||
|
|
||||||
|
function battery_is_charging() {
|
||||||
|
! [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
function battery_pct() {
|
||||||
|
if (( $+commands[acpi] )) ; then
|
||||||
|
echo "$(acpi | cut -f2 -d ',' | tr -cd '[:digit:]')"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function battery_pct_remaining() {
|
||||||
|
if [ ! $(battery_is_charging) ] ; then
|
||||||
|
battery_pct
|
||||||
|
else
|
||||||
|
echo "External Power"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function battery_time_remaining() {
|
||||||
|
if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
|
||||||
|
echo $(acpi | cut -f3 -d ',')
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
b=$(battery_pct_remaining)
|
||||||
|
if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
|
||||||
|
if [ $b -gt 40 ] ; then
|
||||||
|
prompt_segment green white
|
||||||
|
elif [ $b -gt 20 ] ; then
|
||||||
|
prompt_segment yellow white
|
||||||
|
else
|
||||||
|
prompt_segment red white
|
||||||
|
fi
|
||||||
|
echo -n "%{$fg_bold[white]%}$HEART$(battery_pct_remaining)%%%{$fg_no_bold[white]%}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Git: branch/detached head, dirty status
|
||||||
|
prompt_git() {
|
||||||
|
#«»±˖˗‑‐‒ ━ ✚‐↔←↑↓→↭⇎⇔⋆━◂▸◄►◆☀★☗☊✔✖❮❯⚑⚙
|
||||||
|
local PL_BRANCH_CHAR
|
||||||
|
() {
|
||||||
|
local LC_ALL="" LC_CTYPE="en_US.UTF-8"
|
||||||
|
PL_BRANCH_CHAR="$BRANCH"
|
||||||
|
}
|
||||||
|
local ref dirty mode repo_path clean has_upstream
|
||||||
|
local modified untracked added deleted tagged stashed
|
||||||
|
local ready_commit git_status bgclr fgclr
|
||||||
|
local commits_diff commits_ahead commits_behind has_diverged to_push to_pull
|
||||||
|
|
||||||
|
repo_path=$(git rev-parse --git-dir 2>/dev/null)
|
||||||
|
|
||||||
|
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
|
||||||
|
dirty=$(parse_git_dirty)
|
||||||
|
git_status=$(git status --porcelain 2> /dev/null)
|
||||||
|
ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)"
|
||||||
|
if [[ -n $dirty ]]; then
|
||||||
|
clean=''
|
||||||
|
bgclr='yellow'
|
||||||
|
fgclr='magenta'
|
||||||
|
else
|
||||||
|
clean=' ✔'
|
||||||
|
bgclr='green'
|
||||||
|
fgclr='white'
|
||||||
|
fi
|
||||||
|
|
||||||
|
local upstream=$(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 2> /dev/null)
|
||||||
|
if [[ -n "${upstream}" && "${upstream}" != "@{upstream}" ]]; then has_upstream=true; fi
|
||||||
|
|
||||||
|
local current_commit_hash=$(git rev-parse HEAD 2> /dev/null)
|
||||||
|
|
||||||
|
local number_of_untracked_files=$(\grep -c "^??" <<< "${git_status}")
|
||||||
|
# if [[ $number_of_untracked_files -gt 0 ]]; then untracked=" $number_of_untracked_files◆"; fi
|
||||||
|
if [[ $number_of_untracked_files -gt 0 ]]; then untracked=" $number_of_untracked_files☀"; fi
|
||||||
|
|
||||||
|
local number_added=$(\grep -c "^A" <<< "${git_status}")
|
||||||
|
if [[ $number_added -gt 0 ]]; then added=" $number_added✚"; fi
|
||||||
|
|
||||||
|
local number_modified=$(\grep -c "^.M" <<< "${git_status}")
|
||||||
|
if [[ $number_modified -gt 0 ]]; then
|
||||||
|
modified=" $number_modified●"
|
||||||
|
bgclr='red'
|
||||||
|
fgclr='white'
|
||||||
|
fi
|
||||||
|
|
||||||
|
local number_added_modified=$(\grep -c "^M" <<< "${git_status}")
|
||||||
|
local number_added_renamed=$(\grep -c "^R" <<< "${git_status}")
|
||||||
|
if [[ $number_modified -gt 0 && $number_added_modified -gt 0 ]]; then
|
||||||
|
modified="$modified$((number_added_modified+number_added_renamed))±"
|
||||||
|
elif [[ $number_added_modified -gt 0 ]]; then
|
||||||
|
modified=" ●$((number_added_modified+number_added_renamed))±"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local number_deleted=$(\grep -c "^.D" <<< "${git_status}")
|
||||||
|
if [[ $number_deleted -gt 0 ]]; then
|
||||||
|
deleted=" $number_deleted‒"
|
||||||
|
bgclr='red'
|
||||||
|
fgclr='white'
|
||||||
|
fi
|
||||||
|
|
||||||
|
local number_added_deleted=$(\grep -c "^D" <<< "${git_status}")
|
||||||
|
if [[ $number_deleted -gt 0 && $number_added_deleted -gt 0 ]]; then
|
||||||
|
deleted="$deleted$number_added_deleted±"
|
||||||
|
elif [[ $number_added_deleted -gt 0 ]]; then
|
||||||
|
deleted=" ‒$number_added_deleted±"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local tag_at_current_commit=$(git describe --exact-match --tags $current_commit_hash 2> /dev/null)
|
||||||
|
if [[ -n $tag_at_current_commit ]]; then tagged=" ☗$tag_at_current_commit "; fi
|
||||||
|
|
||||||
|
local number_of_stashes="$(git stash list -n1 2> /dev/null | wc -l)"
|
||||||
|
if [[ $number_of_stashes -gt 0 ]]; then
|
||||||
|
stashed=" ${number_of_stashes##*( )}⚙"
|
||||||
|
bgclr='magenta'
|
||||||
|
fgclr='white'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $number_added -gt 0 || $number_added_modified -gt 0 || $number_added_deleted -gt 0 ]]; then ready_commit=' ⚑'; fi
|
||||||
|
|
||||||
|
local upstream_prompt=''
|
||||||
|
if [[ $has_upstream == true ]]; then
|
||||||
|
commits_diff="$(git log --pretty=oneline --topo-order --left-right ${current_commit_hash}...${upstream} 2> /dev/null)"
|
||||||
|
commits_ahead=$(\grep -c "^<" <<< "$commits_diff")
|
||||||
|
commits_behind=$(\grep -c "^>" <<< "$commits_diff")
|
||||||
|
upstream_prompt="$(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 2> /dev/null)"
|
||||||
|
upstream_prompt=$(sed -e 's/\/.*$/ ☊ /g' <<< "$upstream_prompt")
|
||||||
|
fi
|
||||||
|
|
||||||
|
has_diverged=false
|
||||||
|
if [[ $commits_ahead -gt 0 && $commits_behind -gt 0 ]]; then has_diverged=true; fi
|
||||||
|
if [[ $has_diverged == false && $commits_ahead -gt 0 ]]; then
|
||||||
|
if [[ $bgclr == 'red' || $bgclr == 'magenta' ]] then
|
||||||
|
to_push=" $fg_bold[white]↑$commits_ahead$fg_bold[$fgclr]"
|
||||||
|
else
|
||||||
|
to_push=" $fg_bold[black]↑$commits_ahead$fg_bold[$fgclr]"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $has_diverged == false && $commits_behind -gt 0 ]]; then to_pull=" $fg_bold[magenta]↓$commits_behind$fg_bold[$fgclr]"; fi
|
||||||
|
|
||||||
|
if [[ -e "${repo_path}/BISECT_LOG" ]]; then
|
||||||
|
mode=" <B>"
|
||||||
|
elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then
|
||||||
|
mode=" >M<"
|
||||||
|
elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then
|
||||||
|
mode=" >R>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt_segment $bgclr $fgclr
|
||||||
|
|
||||||
|
print -n "%{$fg_bold[$fgclr]%}${ref/refs\/heads\//$PL_BRANCH_CHAR $upstream_prompt}${mode}$to_push$to_pull$clean$tagged$stashed$untracked$modified$deleted$added$ready_commit%{$fg_no_bold[$fgclr]%}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_hg() {
|
||||||
|
local rev status
|
||||||
|
if $(hg id >/dev/null 2>&1); then
|
||||||
|
if $(hg prompt >/dev/null 2>&1); then
|
||||||
|
if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
|
||||||
|
# if files are not added
|
||||||
|
prompt_segment red white
|
||||||
|
st='±'
|
||||||
|
elif [[ -n $(hg prompt "{status|modified}") ]]; then
|
||||||
|
# if any modification
|
||||||
|
prompt_segment yellow black
|
||||||
|
st='±'
|
||||||
|
else
|
||||||
|
# if working copy is clean
|
||||||
|
prompt_segment green black
|
||||||
|
fi
|
||||||
|
print -n $(hg prompt "☿ {rev}@{branch}") $st
|
||||||
|
else
|
||||||
|
st=""
|
||||||
|
rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
|
||||||
|
branch=$(hg id -b 2>/dev/null)
|
||||||
|
if `hg st | grep -q "^\?"`; then
|
||||||
|
prompt_segment red black
|
||||||
|
st='±'
|
||||||
|
elif `hg st | grep -q "^[MA]"`; then
|
||||||
|
prompt_segment yellow black
|
||||||
|
st='±'
|
||||||
|
else
|
||||||
|
prompt_segment green black
|
||||||
|
fi
|
||||||
|
print -n "☿ $rev@$branch" $st
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dir: current working directory
|
||||||
|
prompt_dir() {
|
||||||
|
prompt_segment cyan white "%{$fg_bold[white]%}%~%{$fg_no_bold[white]%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Virtualenv: current working virtualenv
|
||||||
|
prompt_virtualenv() {
|
||||||
|
local virtualenv_path="$VIRTUAL_ENV"
|
||||||
|
if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
|
||||||
|
prompt_segment blue black "(`basename $virtualenv_path`)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_time() {
|
||||||
|
prompt_segment blue white "%{$fg_bold[white]%}%D{%a %e %b - %H:%M}%{$fg_no_bold[white]%}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Status:
|
||||||
|
# - was there an error
|
||||||
|
# - am I root
|
||||||
|
# - are there background jobs?
|
||||||
|
prompt_status() {
|
||||||
|
local symbols
|
||||||
|
symbols=()
|
||||||
|
[[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}$CROSS"
|
||||||
|
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}$LIGHTNING"
|
||||||
|
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$GEAR"
|
||||||
|
|
||||||
|
[[ -n "$symbols" ]] && prompt_segment black default "$symbols"
|
||||||
|
}
|
||||||
|
|
||||||
|
## Main prompt
|
||||||
|
build_prompt() {
|
||||||
|
RETVAL=$?
|
||||||
|
print -n "\n"
|
||||||
|
prompt_status
|
||||||
|
#prompt_battery
|
||||||
|
prompt_time
|
||||||
|
prompt_virtualenv
|
||||||
|
prompt_dir
|
||||||
|
prompt_git
|
||||||
|
prompt_hg
|
||||||
|
prompt_end
|
||||||
|
CURRENT_BG='NONE'
|
||||||
|
print -n "\n"
|
||||||
|
prompt_context
|
||||||
|
prompt_end
|
||||||
|
}
|
||||||
|
|
||||||
|
PROMPT='%{%f%b%k%}$(build_prompt) '
|
||||||
392
assets/add_zsh_theme/antares.zsh-theme
Normal file
392
assets/add_zsh_theme/antares.zsh-theme
Normal file
@@ -0,0 +1,392 @@
|
|||||||
|
|
||||||
|
###
|
||||||
|
### You can re-define the following variables in your .zshrc file
|
||||||
|
### in order to customize the appearance of the prompt
|
||||||
|
###
|
||||||
|
|
||||||
|
# The indentation of the rprompt
|
||||||
|
ZLE_RPROMPT_INDENT=${ZLE_RPROMPT_INDENT:-0}
|
||||||
|
|
||||||
|
# Whether to use oh-my-zsh's git-prompt plugin
|
||||||
|
# or the builtin logic written in this file
|
||||||
|
ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT=""
|
||||||
|
|
||||||
|
# Whether to gather additional details about the git status
|
||||||
|
# This option only applies when using the builtin logic
|
||||||
|
# Usefull when dealing with huge repositories to speed things up
|
||||||
|
ZSH_ANTARES_USE_LIGHT_GIT_MODE=""
|
||||||
|
|
||||||
|
# The colors to use for the various elements of the prompt
|
||||||
|
ZSH_ANTARES_FG_EXECTIME="#dd00ff"
|
||||||
|
ZSH_ANTARES_FG_ERRVAL="#c31a1a"
|
||||||
|
ZSH_ANTARES_FG_DECO="#ffffff"
|
||||||
|
ZSH_ANTARES_FG_PWD_OK="#ffffff"
|
||||||
|
ZSH_ANTARES_BG_PWD_OK="#0055ff"
|
||||||
|
ZSH_ANTARES_FG_PWD_ERR="#ffffff"
|
||||||
|
ZSH_ANTARES_BG_PWD_ERR="#c31a1a"
|
||||||
|
ZSH_ANTARES_FG_GIT_INIT="#000000"
|
||||||
|
ZSH_ANTARES_BG_GIT_INIT="#b5f3a1"
|
||||||
|
ZSH_ANTARES_FG_GIT_BARE="#000000"
|
||||||
|
ZSH_ANTARES_BG_GIT_BARE="#b07a4e"
|
||||||
|
ZSH_ANTARES_FG_GIT_BRANCH="#000000"
|
||||||
|
ZSH_ANTARES_BG_GIT_BRANCH="#47cc2b"
|
||||||
|
ZSH_ANTARES_FG_GIT_DETACH="#000000"
|
||||||
|
ZSH_ANTARES_BG_GIT_DETACH="#eeaa22"
|
||||||
|
ZSH_ANTARES_FG_GIT_CONFLICT="#000000"
|
||||||
|
ZSH_ANTARES_BG_GIT_CONFLICT="#c31a1a"
|
||||||
|
ZSH_ANTARES_FG_GIT_AHEAD="#cfcfcf"
|
||||||
|
ZSH_ANTARES_FG_GIT_BEHIND="#9f9f9f"
|
||||||
|
ZSH_ANTARES_FG_GIT_STAGED="#6cc6ee"
|
||||||
|
ZSH_ANTARES_FG_GIT_ADDED="#04c304"
|
||||||
|
ZSH_ANTARES_FG_GIT_DELETED="#e7165a"
|
||||||
|
ZSH_ANTARES_FG_GIT_CHANGED="#ee9931"
|
||||||
|
ZSH_ANTARES_FG_GIT_CONFLICTS="#ff0000"
|
||||||
|
ZSH_ANTARES_FG_GIT_UNTRACKED="#bbffff"
|
||||||
|
ZSH_ANTARES_FG_GIT_STASHED="#eaa0ff"
|
||||||
|
ZSH_ANTARES_FG_GIT_TAG="#ffffff"
|
||||||
|
ZSH_ANTARES_FG_JOBS="#9f9f9f"
|
||||||
|
ZSH_ANTARES_FG_PRIVILEDGES="#ffdd44"
|
||||||
|
|
||||||
|
# The characters (or strings, by will) to use for some of the elements
|
||||||
|
ZSH_ANTARES_STR_GIT_BARE="⛁"
|
||||||
|
ZSH_ANTARES_STR_GIT_AHEAD="↑"
|
||||||
|
ZSH_ANTARES_STR_GIT_BEHIND="↓"
|
||||||
|
ZSH_ANTARES_STR_GIT_STAGED="●"
|
||||||
|
ZSH_ANTARES_STR_GIT_ADDED="✚"
|
||||||
|
ZSH_ANTARES_STR_GIT_DELETED="━"
|
||||||
|
ZSH_ANTARES_STR_GIT_CHANGED="✱"
|
||||||
|
ZSH_ANTARES_STR_GIT_CONFLICTS="✖"
|
||||||
|
ZSH_ANTARES_STR_GIT_UNTRACKED="❍"
|
||||||
|
ZSH_ANTARES_STR_GIT_STASHED="⚑"
|
||||||
|
ZSH_ANTARES_STR_GIT_TAG="🏲"
|
||||||
|
ZSH_ANTARES_STR_JOBS="⚙"
|
||||||
|
ZSH_ANTARES_STR_ROOT="#"
|
||||||
|
ZSH_ANTARES_STR_USER="$"
|
||||||
|
|
||||||
|
# The path expansion to use to display the pwd
|
||||||
|
ZSH_ANTARES_PATHVAR='%~'
|
||||||
|
|
||||||
|
# The minimum amount of time (in seconds) a command shall take to complete
|
||||||
|
# in order to display the execution time in the prompt
|
||||||
|
ZSH_ANTARES_MIN_EXEC_TIME=0
|
||||||
|
|
||||||
|
# The control character used to insert a new line
|
||||||
|
# You shouldn't edit this variable, but if you really want to...
|
||||||
|
ZSH_ANTARES_LINEFEED=$'\n'
|
||||||
|
|
||||||
|
###
|
||||||
|
### End of the re-definable section
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
|
antares_update_git_status()
|
||||||
|
{
|
||||||
|
ZSH_ANTARES_GIT_STATUS=""
|
||||||
|
ZSH_ANTARES_GIT_IN_WORKING_TREE=0
|
||||||
|
ZSH_ANTARES_GIT_IS_INIT_REPO=0
|
||||||
|
ZSH_ANTARES_GIT_IS_BARE_REPO=0
|
||||||
|
ZSH_ANTARES_GIT_IS_DETACHED_HEAD=0
|
||||||
|
ZSH_ANTARES_GIT_HAS_CONFLICTS=0
|
||||||
|
ZSH_ANTARES_GIT_HAS_TAGS=0
|
||||||
|
ZSH_ANTARES_GIT_TAG=""
|
||||||
|
|
||||||
|
if ( $(git rev-parse --is-inside-work-tree 1>/dev/null 2>/dev/null) )
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_IN_WORKING_TREE=1
|
||||||
|
private branch_name="$(git branch --show-current)"
|
||||||
|
if [ -n "$branch_name" ]
|
||||||
|
then
|
||||||
|
if [ -z "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
|
||||||
|
then
|
||||||
|
GIT_BRANCH="$branch_name"
|
||||||
|
fi
|
||||||
|
if ( ! $(git rev-parse --verify HEAD 1>/dev/null 2>/dev/null) )
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_IS_INIT_REPO=1
|
||||||
|
fi
|
||||||
|
if [ $(git rev-parse --is-bare-repository) = "true" ]
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_IS_BARE_REPO=1
|
||||||
|
GIT_BRANCH="$ZSH_ANTARES_STR_GIT_BARE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ZSH_ANTARES_GIT_IS_DETACHED_HEAD=1
|
||||||
|
if [ -z "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
|
||||||
|
then
|
||||||
|
GIT_BRANCH="$(git rev-parse --short HEAD)"
|
||||||
|
if [ -z "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ]
|
||||||
|
then
|
||||||
|
private git_tag="$(git tag --points-at=HEAD)"
|
||||||
|
if [ -n "$git_tag" ]
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_HAS_TAGS=1
|
||||||
|
private n_tags="$(echo "$git_tag" | wc -l)"
|
||||||
|
if (( n_tags == 1 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_TAG=" $ZSH_ANTARES_STR_GIT_TAG $git_tag"
|
||||||
|
elif (( n_tags > 1 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_TAG=" $ZSH_ANTARES_STR_GIT_TAG $n_tags"
|
||||||
|
else
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
antares_reset_git_info
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( ZSH_ANTARES_GIT_IS_BARE_REPO ))
|
||||||
|
then
|
||||||
|
antares_reset_git_counts
|
||||||
|
GIT_AHEAD=$(git rev-list --left-only HEAD..FETCH_HEAD --count)
|
||||||
|
GIT_BEHIND=$(git rev-list --right-only HEAD..FETCH_HEAD --count)
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
|
||||||
|
then
|
||||||
|
GIT_ADDED=0
|
||||||
|
elif [ -n "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ]
|
||||||
|
then
|
||||||
|
antares_reset_git_counts
|
||||||
|
return
|
||||||
|
else
|
||||||
|
private git_status="$(git status -sb)"
|
||||||
|
if [ -n "$git_status" ]
|
||||||
|
then
|
||||||
|
GIT_STAGED=$(echo $git_status | grep '^[AMD]. ' | wc -l)
|
||||||
|
GIT_ADDED=$(echo $git_status | grep '^A ' | wc -l)
|
||||||
|
GIT_DELETED=$(echo $git_status | grep -E '^(D |.D) ' | wc -l)
|
||||||
|
GIT_CHANGED=$(echo $git_status | grep -E '^(M |.M) ' | wc -l)
|
||||||
|
GIT_CONFLICTS=$(echo $git_status | grep '^U. ' | wc -l)
|
||||||
|
GIT_UNTRACKED=$(echo $git_status | grep '^?? ' | wc -l)
|
||||||
|
GIT_STASHED=$(git stash list | wc -l)
|
||||||
|
if (( ZSH_ANTARES_GIT_IS_DETACHED_HEAD ))
|
||||||
|
then
|
||||||
|
GIT_AHEAD=0
|
||||||
|
GIT_BEHIND=0
|
||||||
|
elif (( ! ZSH_ANTARES_GIT_IS_INIT_REPO ))
|
||||||
|
then
|
||||||
|
private left_right=$(echo $git_status | grep '^## ' | cut -d" " -f2)
|
||||||
|
GIT_AHEAD=$(git rev-list --left-only $left_right --count)
|
||||||
|
GIT_BEHIND=$(git rev-list --right-only $left_right --count)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZSH_ANTARES_GIT_HAS_CONFLICTS=$(( GIT_CONFLICTS > 0 ))
|
||||||
|
}
|
||||||
|
|
||||||
|
antares_reset_git_info()
|
||||||
|
{
|
||||||
|
if [ -z "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
|
||||||
|
then
|
||||||
|
GIT_BRANCH=""
|
||||||
|
fi
|
||||||
|
antares_reset_git_counts
|
||||||
|
}
|
||||||
|
antares_reset_git_counts()
|
||||||
|
{
|
||||||
|
if [ -n "$ZSH_ANTARES_USE_OHMYZSH_GIT_PROMPT" ]
|
||||||
|
then
|
||||||
|
GIT_ADDED=0
|
||||||
|
else
|
||||||
|
GIT_AHEAD=0
|
||||||
|
GIT_BEHIND=0
|
||||||
|
GIT_STAGED=0
|
||||||
|
GIT_ADDED=0
|
||||||
|
GIT_DELETED=0
|
||||||
|
GIT_CHANGED=0
|
||||||
|
GIT_CONFLICTS=0
|
||||||
|
GIT_UNTRACKED=0
|
||||||
|
GIT_STASHED=0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
antares_update_prompt()
|
||||||
|
{
|
||||||
|
ZSH_ANTARES_RETURN=""
|
||||||
|
if [ -n "$ZSH_ANTARES_EXEC_FLAG" ]
|
||||||
|
then
|
||||||
|
if (( ZSH_ANTARES_MIN_EXEC_TIME >= 0 ))
|
||||||
|
then
|
||||||
|
private exec_time=$(( SECONDS - ZSH_ANTARES_EXEC_START ))
|
||||||
|
if (( exec_time >= ZSH_ANTARES_MIN_EXEC_TIME ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_RETURN+="%F{$ZSH_ANTARES_FG_EXECTIME}%B⤷%b $exec_time%f"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "$ZSH_ANTARES_ERR_CODE" != "0" ]]
|
||||||
|
then
|
||||||
|
if [ -z "$ZSH_ANTARES_RETURN" ]
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_RETURN+="%F{$ZSH_ANTARES_FG_ERRVAL}%B⤷%b%f"
|
||||||
|
fi
|
||||||
|
ZSH_ANTARES_RETURN+=" %F{$ZSH_ANTARES_FG_ERRVAL}✘%B${ZSH_ANTARES_ERR_CODE}%b%f"
|
||||||
|
fi
|
||||||
|
[ -n "$ZSH_ANTARES_RETURN" ] && ZSH_ANTARES_RETURN+="$ZSH_ANTARES_LINEFEED"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZSH_ANTARES_FILLER=""
|
||||||
|
private fillchar=" "
|
||||||
|
|
||||||
|
private width=$(( COLUMNS - ${ZLE_RPROMPT_INDENT:-1} ))
|
||||||
|
|
||||||
|
private decosize=7
|
||||||
|
private pwdsize=${#${(%):-$ZSH_ANTARES_PATHVAR}}
|
||||||
|
private pwdcut=""
|
||||||
|
private gitsize=${#${(%):-$GIT_BRANCH$ZSH_ANTARES_GIT_TAG}}
|
||||||
|
private gitcut=""
|
||||||
|
|
||||||
|
if (( pwdsize + gitsize + (decosize * 2) > width )); then
|
||||||
|
private half_width=$(( width / 2 ))
|
||||||
|
private pwd_over_half=$(( (pwdsize + decosize) > half_width ))
|
||||||
|
private git_over_half=$(( (gitsize + decosize) > half_width ))
|
||||||
|
if (( pwd_over_half > 0 )) && (( git_over_half > 0 ))
|
||||||
|
then
|
||||||
|
(( pwdcut = half_width - decosize ))
|
||||||
|
(( gitcut = half_width - decosize ))
|
||||||
|
elif (( pwd_over_half > 0 ))
|
||||||
|
then
|
||||||
|
(( pwdcut = width - gitsize - (decosize * 2) ))
|
||||||
|
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdcut - gitsize - (decosize * 2) ))::$fillchar:)}"
|
||||||
|
elif (( git_over_half > 0 ))
|
||||||
|
then
|
||||||
|
(( gitcut = width - pwdsize - (decosize * 2) ))
|
||||||
|
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdsize - gitcut - (decosize * 2) ))::$fillchar:)}"
|
||||||
|
else
|
||||||
|
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdsize - gitsize - (decosize * 2) ))::$fillchar:)}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ZSH_ANTARES_FILLER="\${(l:$(( width - pwdsize - gitsize - (decosize * 2) ))::$fillchar:)}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$ZSH_ANTARES_EXEC_FLAG" ]
|
||||||
|
then
|
||||||
|
private pwd_fg_color="%(?.${ZSH_ANTARES_FG_PWD_OK}.${ZSH_ANTARES_FG_PWD_ERR})"
|
||||||
|
private pwd_bg_color="%(?.${ZSH_ANTARES_BG_PWD_OK}.${ZSH_ANTARES_BG_PWD_ERR})"
|
||||||
|
else
|
||||||
|
private pwd_fg_color="$ZSH_ANTARES_FG_PWD_OK"
|
||||||
|
private pwd_bg_color="$ZSH_ANTARES_BG_PWD_OK"
|
||||||
|
fi
|
||||||
|
ZSH_ANTARES_PWD="%K{$pwd_bg_color}%F{$pwd_fg_color} %${pwdcut}<...<${ZSH_ANTARES_PATHVAR}%<< %f%k%F{$pwd_bg_color}▓▒░%f"
|
||||||
|
|
||||||
|
ZSH_ANTARES_GIT_BRANCH=""
|
||||||
|
if (( ZSH_ANTARES_GIT_IN_WORKING_TREE ))
|
||||||
|
then
|
||||||
|
if (( ZSH_ANTARES_GIT_HAS_CONFLICTS ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_CONFLICT}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_CONFLICT}%F{$ZSH_ANTARES_FG_GIT_CONFLICT}"
|
||||||
|
elif (( ZSH_ANTARES_GIT_IS_DETACHED_HEAD ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_DETACH}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_DETACH}%F{$ZSH_ANTARES_FG_GIT_DETACH}"
|
||||||
|
if (( ZSH_ANTARES_GIT_HAS_TAGS ))
|
||||||
|
then
|
||||||
|
GIT_BRANCH+="%F{$ZSH_ANTARES_FG_GIT_TAG}${ZSH_ANTARES_GIT_TAG}%f"
|
||||||
|
fi
|
||||||
|
elif (( ZSH_ANTARES_GIT_IS_BARE_REPO ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_BARE}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_BARE}%F{$ZSH_ANTARES_FG_GIT_BARE}"
|
||||||
|
elif (( ZSH_ANTARES_GIT_IS_INIT_REPO ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_INIT}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_INIT}%F{$ZSH_ANTARES_FG_GIT_INIT}"
|
||||||
|
else
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_BG_GIT_BRANCH}░▒▓%f%K{$ZSH_ANTARES_BG_GIT_BRANCH}%F{$ZSH_ANTARES_FG_GIT_BRANCH}"
|
||||||
|
fi
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+=" %${gitcut}>...>$GIT_BRANCH%>> %f%k"
|
||||||
|
if [ -n "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ]
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_FG_DECO}├╼%f"
|
||||||
|
else
|
||||||
|
ZSH_ANTARES_GIT_BRANCH+="%F{$ZSH_ANTARES_FG_DECO}├╮%f"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZSH_ANTARES_JOBS="%(1j.%F{$ZSH_ANTARES_FG_JOBS}${ZSH_ANTARES_STR_JOBS}%j%f .)"
|
||||||
|
|
||||||
|
ZSH_ANTARES_PRIVILEDGES="%F{$ZSH_ANTARES_FG_PRIVILEDGES}%B%(!.${ZSH_ANTARES_STR_ROOT}.${ZSH_ANTARES_STR_USER})%b%f"
|
||||||
|
}
|
||||||
|
|
||||||
|
antares_update_rprompt()
|
||||||
|
{
|
||||||
|
ZSH_ANTARES_GIT_STATUS=""
|
||||||
|
|
||||||
|
[ -n "$ZSH_ANTARES_USE_LIGHT_GIT_MODE" ] && return
|
||||||
|
|
||||||
|
(( ZSH_ANTARES_GIT_IN_WORKING_TREE )) || return
|
||||||
|
|
||||||
|
if (( GIT_CONFLICTS > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_CONFLICTS}${ZSH_ANTARES_STR_GIT_CONFLICTS}${GIT_CONFLICTS}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_STAGED > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_STAGED}${ZSH_ANTARES_STR_GIT_STAGED}${GIT_STAGED}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_DELETED > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_DELETED}${ZSH_ANTARES_STR_GIT_DELETED}${GIT_DELETED}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_CHANGED > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_CHANGED}${ZSH_ANTARES_STR_GIT_CHANGED}${GIT_CHANGED}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_ADDED > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_ADDED}${ZSH_ANTARES_STR_GIT_ADDED}${GIT_ADDED}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_UNTRACKED > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_UNTRACKED}${ZSH_ANTARES_STR_GIT_UNTRACKED}${GIT_UNTRACKED}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_STASHED > 0 ))
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_GIT_STASHED}${ZSH_ANTARES_STR_GIT_STASHED}${GIT_STASHED}%f"
|
||||||
|
fi
|
||||||
|
if (( ! ZSH_ANTARES_GIT_IS_DETACHED_HEAD ))
|
||||||
|
then
|
||||||
|
private ahead_behind=""
|
||||||
|
if (( GIT_AHEAD > 0 ))
|
||||||
|
then
|
||||||
|
ahead_behind+="%F{$ZSH_ANTARES_FG_GIT_AHEAD}${ZSH_ANTARES_STR_GIT_AHEAD}${GIT_AHEAD}%f"
|
||||||
|
fi
|
||||||
|
if (( GIT_BEHIND > 0 ))
|
||||||
|
then
|
||||||
|
ahead_behind+="%F{$ZSH_ANTARES_FG_GIT_BEHIND}${ZSH_ANTARES_STR_GIT_BEHIND}${GIT_BEHIND}%f"
|
||||||
|
fi
|
||||||
|
if [ -n "$ahead_behind" ]
|
||||||
|
then
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" $ahead_behind"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ZSH_ANTARES_GIT_STATUS+=" %F{$ZSH_ANTARES_FG_DECO}╾─╯%f"
|
||||||
|
}
|
||||||
|
|
||||||
|
antares_precmd()
|
||||||
|
{
|
||||||
|
ZSH_ANTARES_ERR_CODE="$?"
|
||||||
|
antares_update_git_status
|
||||||
|
antares_update_prompt
|
||||||
|
antares_update_rprompt
|
||||||
|
ZSH_ANTARES_EXEC_FLAG=""
|
||||||
|
}
|
||||||
|
|
||||||
|
antares_preexec()
|
||||||
|
{
|
||||||
|
ZSH_ANTARES_EXEC_FLAG="+"
|
||||||
|
ZSH_ANTARES_EXEC_START=$SECONDS
|
||||||
|
}
|
||||||
|
|
||||||
|
autoload -U add-zsh-hook
|
||||||
|
add-zsh-hook precmd antares_precmd
|
||||||
|
add-zsh-hook preexec antares_preexec
|
||||||
|
|
||||||
|
PROMPT='${ZSH_ANTARES_RETURN}\
|
||||||
|
%F{$ZSH_ANTARES_FG_DECO}╭┤%f${ZSH_ANTARES_PWD}${(e)ZSH_ANTARES_FILLER}${ZSH_ANTARES_GIT_BRANCH}
|
||||||
|
%F{$ZSH_ANTARES_FG_DECO}╰─╼%f ${ZSH_ANTARES_JOBS}${ZSH_ANTARES_PRIVILEDGES} '
|
||||||
|
|
||||||
|
RPROMPT='${ZSH_ANTARES_GIT_STATUS}'
|
||||||
|
|
||||||
696
assets/add_zsh_theme/bullet-train.zsh-theme
Normal file
696
assets/add_zsh_theme/bullet-train.zsh-theme
Normal file
@@ -0,0 +1,696 @@
|
|||||||
|
# README
|
||||||
|
#
|
||||||
|
# In order for this theme to render correctly, you will need a
|
||||||
|
# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts).
|
||||||
|
#
|
||||||
|
# In addition, I recommend the
|
||||||
|
# [Tomorrow Night theme](https://github.com/chriskempson/tomorrow-theme) and, if
|
||||||
|
# you're using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over
|
||||||
|
# Terminal.app - it has significantly better color fidelity.
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# CONFIGURATION
|
||||||
|
# The default configuration, that can be overwrite in your .zshrc file
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
VIRTUAL_ENV_DISABLE_PROMPT=true
|
||||||
|
|
||||||
|
# Define order and content of prompt
|
||||||
|
if [ ! -n "${BULLETTRAIN_PROMPT_ORDER+1}" ]; then
|
||||||
|
BULLETTRAIN_PROMPT_ORDER=(
|
||||||
|
time
|
||||||
|
status
|
||||||
|
custom
|
||||||
|
context
|
||||||
|
dir
|
||||||
|
screen
|
||||||
|
perl
|
||||||
|
ruby
|
||||||
|
virtualenv
|
||||||
|
nvm
|
||||||
|
aws
|
||||||
|
go
|
||||||
|
rust
|
||||||
|
elixir
|
||||||
|
git
|
||||||
|
hg
|
||||||
|
cmd_exec_time
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# PROMPT
|
||||||
|
if [ ! -n "${BULLETTRAIN_PROMPT_CHAR+1}" ]; then
|
||||||
|
BULLETTRAIN_PROMPT_CHAR="\$"
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_PROMPT_ROOT+1}" ]; then
|
||||||
|
BULLETTRAIN_PROMPT_ROOT=true
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_PROMPT_SEPARATE_LINE+1}" ]; then
|
||||||
|
BULLETTRAIN_PROMPT_SEPARATE_LINE=true
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_PROMPT_ADD_NEWLINE+1}" ]; then
|
||||||
|
BULLETTRAIN_PROMPT_ADD_NEWLINE=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# STATUS
|
||||||
|
if [ ! -n "${BULLETTRAIN_STATUS_EXIT_SHOW+1}" ]; then
|
||||||
|
BULLETTRAIN_STATUS_EXIT_SHOW=false
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_STATUS_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_STATUS_BG=green
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_STATUS_ERROR_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_STATUS_ERROR_BG=red
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_STATUS_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_STATUS_FG=white
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TIME
|
||||||
|
if [ ! -n "${BULLETTRAIN_TIME_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_TIME_BG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_TIME_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_TIME_FG=black
|
||||||
|
fi
|
||||||
|
|
||||||
|
# CUSTOM
|
||||||
|
if [ ! -n "${BULLETTRAIN_CUSTOM_MSG+1}" ]; then
|
||||||
|
BULLETTRAIN_CUSTOM_MSG=false
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_CUSTOM_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_CUSTOM_BG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_CUSTOM_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_CUSTOM_FG=default
|
||||||
|
fi
|
||||||
|
|
||||||
|
# VIRTUALENV
|
||||||
|
if [ ! -n "${BULLETTRAIN_VIRTUALENV_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_VIRTUALENV_BG=yellow
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_VIRTUALENV_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_VIRTUALENV_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_VIRTUALENV_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_VIRTUALENV_PREFIX=🐍
|
||||||
|
fi
|
||||||
|
|
||||||
|
# NVM
|
||||||
|
if [ ! -n "${BULLETTRAIN_NVM_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_NVM_BG=green
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_NVM_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_NVM_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_NVM_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_NVM_PREFIX="⬡ "
|
||||||
|
fi
|
||||||
|
|
||||||
|
# AWS
|
||||||
|
if [ ! -n "${BULLETTRAIN_AWS_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_AWS_BG=yellow
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_AWS_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_AWS_FG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_AWS_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_AWS_PREFIX="☁️"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# RUBY
|
||||||
|
if [ ! -n "${BULLETTRAIN_RUBY_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_RUBY_BG=red
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_RUBY_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_RUBY_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_RUBY_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_RUBY_PREFIX=♦️
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Go
|
||||||
|
if [ ! -n "${BULLETTRAIN_GO_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_GO_BG=cyan
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GO_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_GO_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GO_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_GO_PREFIX="go"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rust
|
||||||
|
if [ ! -n "${BULLETTRAIN_RUST_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_RUST_BG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_RUST_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_RUST_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_RUST_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_RUST_PREFIX="🦀"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Kubernetes Context
|
||||||
|
if [ ! -n "${BULLETTRAIN_KCTX_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_KCTX_BG=yellow
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_KCTX_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_KCTX_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_KCTX_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_KCTX_PREFIX="⎈"
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_KCTX_KCONFIG+1}" ]; then
|
||||||
|
BULLETTRAIN_KCTX_KCONFIG="${HOME}/.kube/config"
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_KCTX_KUBECTL+1}" ]; then
|
||||||
|
BULLETTRAIN_KCTX_KUBECTL="true"
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_KCTX_NAMESPACE+1}" ]; then
|
||||||
|
BULLETTRAIN_KCTX_NAMESPACE="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ELIXIR
|
||||||
|
if [ ! -n "${BULLETTRAIN_ELIXIR_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_ELIXIR_BG=magenta
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_ELIXIR_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_ELIXIR_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_ELIXIR_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_ELIXIR_PREFIX="💧"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# DIR
|
||||||
|
if [ ! -n "${BULLETTRAIN_DIR_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_DIR_BG=blue
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_DIR_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_DIR_FG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_DIR_CONTEXT_SHOW+1}" ]; then
|
||||||
|
BULLETTRAIN_DIR_CONTEXT_SHOW=false
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_DIR_EXTENDED+1}" ]; then
|
||||||
|
BULLETTRAIN_DIR_EXTENDED=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# GIT
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_COLORIZE_DIRTY=false
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR=yellow
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_BG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_FG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_EXTENDED+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_EXTENDED=true
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_PROMPT_CMD+1}" ]; then
|
||||||
|
BULLETTRAIN_GIT_PROMPT_CMD="\$(git_prompt_info)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# PERL
|
||||||
|
if [ ! -n "${BULLETTRAIN_PERL_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_PERL_BG=yellow
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_PERL_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_PERL_FG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_PERL_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_PERL_PREFIX=🐪
|
||||||
|
fi
|
||||||
|
|
||||||
|
# CONTEXT
|
||||||
|
if [ ! -n "${BULLETTRAIN_CONTEXT_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_CONTEXT_BG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_CONTEXT_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_CONTEXT_FG=default
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_CONTEXT_HOSTNAME+1}" ]; then
|
||||||
|
BULLETTRAIN_CONTEXT_HOSTNAME=%m
|
||||||
|
fi
|
||||||
|
|
||||||
|
# GIT PROMPT
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_PREFIX+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX="\ue0a0 "
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX=$BULLETTRAIN_GIT_PREFIX
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_SUFFIX+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX=""
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX=$BULLETTRAIN_GIT_SUFFIX
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_DIRTY+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY=" %F{red}✘%F{black}"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY=$BULLETTRAIN_GIT_DIRTY
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_CLEAN+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN=" %F{green}✔%F{black}"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN=$BULLETTRAIN_GIT_CLEAN
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_ADDED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_ADDED=" %F{green}✚%F{black}"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_ADDED=$BULLETTRAIN_GIT_ADDED
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_MODIFIED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_MODIFIED=" %F{blue}✹%F{black}"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_MODIFIED=$BULLETTRAIN_GIT_MODIFIED
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_DELETED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_DELETED=" %F{red}✖%F{black}"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_DELETED=$BULLETTRAIN_GIT_DELETED
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_UNTRACKED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNTRACKED=" %F{yellow}✭%F{black}"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNTRACKED=$BULLETTRAIN_GIT_UNTRACKED
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_RENAMED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_RENAMED=" ➜"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_RENAMED=$BULLETTRAIN_GIT_RENAMED
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_UNMERGED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNMERGED=" ═"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNMERGED=$BULLETTRAIN_GIT_UNMERGED
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_AHEAD+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_AHEAD=" ⬆"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_AHEAD=$BULLETTRAIN_GIT_AHEAD
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_BEHIND+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_BEHIND=" ⬇"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_BEHIND=$BULLETTRAIN_GIT_BEHIND
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_GIT_DIVERGED+1}" ]; then
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIVERGED=" ⬍"
|
||||||
|
else
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIVERGED=$BULLETTRAIN_GIT_PROMPT_DIVERGED
|
||||||
|
fi
|
||||||
|
|
||||||
|
# SCREEN
|
||||||
|
if [ ! -n "${BULLETTRAIN_SCREEN_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_SCREEN_BG=white
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_SCREEN_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_SCREEN_FG=black
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_SCREEN_PREFIX+1}" ]; then
|
||||||
|
BULLETTRAIN_SCREEN_PREFIX="⬗"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# COMMAND EXECUTION TIME
|
||||||
|
if [ ! -n "${BULLETTRAIN_EXEC_TIME_ELAPSED+1}" ]; then
|
||||||
|
BULLETTRAIN_EXEC_TIME_ELAPSED=5
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_EXEC_TIME_BG+1}" ]; then
|
||||||
|
BULLETTRAIN_EXEC_TIME_BG=yellow
|
||||||
|
fi
|
||||||
|
if [ ! -n "${BULLETTRAIN_EXEC_TIME_FG+1}" ]; then
|
||||||
|
BULLETTRAIN_EXEC_TIME_FG=black
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# SEGMENT DRAWING
|
||||||
|
# A few functions to make it easy and re-usable to draw segmented prompts
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
CURRENT_BG='NONE'
|
||||||
|
SEGMENT_SEPARATOR=''
|
||||||
|
|
||||||
|
# Begin a segment
|
||||||
|
# Takes three arguments, background, foreground and text. All of them can be omitted,
|
||||||
|
# rendering default background/foreground and no text.
|
||||||
|
prompt_segment() {
|
||||||
|
local bg fg
|
||||||
|
[[ -n $1 ]] && bg="%K{$1}" || bg="%k"
|
||||||
|
[[ -n $2 ]] && fg="%F{$2}" || fg="%f"
|
||||||
|
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
|
||||||
|
echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
|
||||||
|
else
|
||||||
|
echo -n "%{$bg%}%{$fg%} "
|
||||||
|
fi
|
||||||
|
CURRENT_BG=$1
|
||||||
|
[[ -n $3 ]] && echo -n $3
|
||||||
|
}
|
||||||
|
|
||||||
|
# End the prompt, closing any open segments
|
||||||
|
prompt_end() {
|
||||||
|
if [[ -n $CURRENT_BG ]]; then
|
||||||
|
echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
|
||||||
|
else
|
||||||
|
echo -n "%{%k%}"
|
||||||
|
fi
|
||||||
|
echo -n "%{%f%}"
|
||||||
|
CURRENT_BG=''
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# PROMPT COMPONENTS
|
||||||
|
# Each component will draw itself, and hide itself if no information needs
|
||||||
|
# to be shown
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Context: user@hostname (who am I and where am I)
|
||||||
|
context() {
|
||||||
|
local user="$(whoami)"
|
||||||
|
[[ "$user" != "$BULLETTRAIN_CONTEXT_DEFAULT_USER" || -n "$BULLETTRAIN_IS_SSH_CLIENT" ]] && echo -n "${user}@$BULLETTRAIN_CONTEXT_HOSTNAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_context() {
|
||||||
|
local _context="$(context)"
|
||||||
|
[[ -n "$_context" ]] && prompt_segment $BULLETTRAIN_CONTEXT_BG $BULLETTRAIN_CONTEXT_FG "$_context"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Based on http://stackoverflow.com/a/32164707/3859566
|
||||||
|
function displaytime {
|
||||||
|
local T=$1
|
||||||
|
local D=$((T/60/60/24))
|
||||||
|
local H=$((T/60/60%24))
|
||||||
|
local M=$((T/60%60))
|
||||||
|
local S=$((T%60))
|
||||||
|
[[ $D > 0 ]] && printf '%dd' $D
|
||||||
|
[[ $H > 0 ]] && printf '%dh' $H
|
||||||
|
[[ $M > 0 ]] && printf '%dm' $M
|
||||||
|
printf '%ds' $S
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prompt previous command execution time
|
||||||
|
preexec() {
|
||||||
|
cmd_timestamp=`date +%s`
|
||||||
|
}
|
||||||
|
|
||||||
|
precmd() {
|
||||||
|
local stop=`date +%s`
|
||||||
|
local start=${cmd_timestamp:-$stop}
|
||||||
|
let BULLETTRAIN_last_exec_duration=$stop-$start
|
||||||
|
cmd_timestamp=''
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_cmd_exec_time() {
|
||||||
|
[ $BULLETTRAIN_last_exec_duration -gt $BULLETTRAIN_EXEC_TIME_ELAPSED ] && prompt_segment $BULLETTRAIN_EXEC_TIME_BG $BULLETTRAIN_EXEC_TIME_FG "$(displaytime $BULLETTRAIN_last_exec_duration)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Custom
|
||||||
|
prompt_custom() {
|
||||||
|
if [[ $BULLETTRAIN_CUSTOM_MSG == false ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local custom_msg
|
||||||
|
eval custom_msg=$BULLETTRAIN_CUSTOM_MSG
|
||||||
|
[[ -n "${custom_msg}" ]] && prompt_segment $BULLETTRAIN_CUSTOM_BG $BULLETTRAIN_CUSTOM_FG "${custom_msg}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Git
|
||||||
|
prompt_git() {
|
||||||
|
if [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" == "1" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local ref dirty mode repo_path git_prompt
|
||||||
|
repo_path=$(git rev-parse --git-dir 2>/dev/null)
|
||||||
|
|
||||||
|
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
|
||||||
|
if [[ $BULLETTRAIN_GIT_COLORIZE_DIRTY == true && -n $(git status --porcelain --ignore-submodules) ]]; then
|
||||||
|
BULLETTRAIN_GIT_BG=$BULLETTRAIN_GIT_COLORIZE_DIRTY_BG_COLOR
|
||||||
|
BULLETTRAIN_GIT_FG=$BULLETTRAIN_GIT_COLORIZE_DIRTY_FG_COLOR
|
||||||
|
fi
|
||||||
|
prompt_segment $BULLETTRAIN_GIT_BG $BULLETTRAIN_GIT_FG
|
||||||
|
|
||||||
|
eval git_prompt=${BULLETTRAIN_GIT_PROMPT_CMD}
|
||||||
|
if [[ $BULLETTRAIN_GIT_EXTENDED == true ]]; then
|
||||||
|
echo -n ${git_prompt}$(git_prompt_status)
|
||||||
|
else
|
||||||
|
echo -n ${git_prompt}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_hg() {
|
||||||
|
local rev status
|
||||||
|
if $(hg id >/dev/null 2>&1); then
|
||||||
|
if $(hg prompt >/dev/null 2>&1); then
|
||||||
|
if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
|
||||||
|
# if files are not added
|
||||||
|
prompt_segment red white
|
||||||
|
st='±'
|
||||||
|
elif [[ -n $(hg prompt "{status|modified}") ]]; then
|
||||||
|
# if any modification
|
||||||
|
prompt_segment yellow black
|
||||||
|
st='±'
|
||||||
|
else
|
||||||
|
# if working copy is clean
|
||||||
|
prompt_segment green black
|
||||||
|
fi
|
||||||
|
echo -n $(hg prompt "☿ {rev}@{branch}") $st
|
||||||
|
else
|
||||||
|
st=""
|
||||||
|
rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
|
||||||
|
branch=$(hg id -b 2>/dev/null)
|
||||||
|
if $(hg st | grep -Eq "^\?"); then
|
||||||
|
prompt_segment red black
|
||||||
|
st='±'
|
||||||
|
elif $(hg st | grep -Eq "^(M|A)"); then
|
||||||
|
prompt_segment yellow black
|
||||||
|
st='±'
|
||||||
|
else
|
||||||
|
prompt_segment green black
|
||||||
|
fi
|
||||||
|
echo -n "☿ $rev@$branch" $st
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dir: current working directory
|
||||||
|
prompt_dir() {
|
||||||
|
local dir=''
|
||||||
|
local _context="$(context)"
|
||||||
|
[[ $BULLETTRAIN_DIR_CONTEXT_SHOW == true && -n "$_context" ]] && dir="${dir}${_context}:"
|
||||||
|
|
||||||
|
if [[ $BULLETTRAIN_DIR_EXTENDED == 0 ]]; then
|
||||||
|
#short directories
|
||||||
|
dir="${dir}%1~"
|
||||||
|
elif [[ $BULLETTRAIN_DIR_EXTENDED == 2 ]]; then
|
||||||
|
#long directories
|
||||||
|
dir="${dir}%0~"
|
||||||
|
else
|
||||||
|
#medium directories (default case)
|
||||||
|
dir="${dir}%4(c:...:)%3c"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt_segment $BULLETTRAIN_DIR_BG $BULLETTRAIN_DIR_FG $dir
|
||||||
|
}
|
||||||
|
|
||||||
|
# RUBY
|
||||||
|
# RVM: only shows RUBY info if on a gemset that is not the default one
|
||||||
|
# RBENV: shows current ruby version active in the shell; also with non-global gemsets if any is active
|
||||||
|
# CHRUBY: shows current ruby version active in the shell
|
||||||
|
prompt_ruby() {
|
||||||
|
if command -v rvm-prompt > /dev/null 2>&1; then
|
||||||
|
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rvm-prompt i v g)"
|
||||||
|
elif command -v chruby > /dev/null 2>&1; then
|
||||||
|
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(chruby | sed -n -e 's/ \* //p')"
|
||||||
|
elif command -v rbenv > /dev/null 2>&1; then
|
||||||
|
current_gemset() {
|
||||||
|
echo "$(rbenv gemset active 2&>/dev/null | sed -e 's/ global$//')"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -n $(current_gemset) ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rbenv version | sed -e 's/ (set.*$//')"@"$(current_gemset)"
|
||||||
|
else
|
||||||
|
prompt_segment $BULLETTRAIN_RUBY_BG $BULLETTRAIN_RUBY_FG $BULLETTRAIN_RUBY_PREFIX" $(rbenv version | sed -e 's/ (set.*$//')"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ELIXIR
|
||||||
|
prompt_elixir() {
|
||||||
|
if command -v elixir > /dev/null 2>&1; then
|
||||||
|
prompt_segment $BULLETTRAIN_ELIXIR_BG $BULLETTRAIN_ELIXIR_FG $BULLETTRAIN_ELIXIR_PREFIX" $(elixir -v | tail -n 1 | awk '{print $2}')"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# PERL
|
||||||
|
# PLENV: shows current PERL version active in the shell
|
||||||
|
prompt_perl() {
|
||||||
|
if command -v plenv > /dev/null 2>&1; then
|
||||||
|
prompt_segment $BULLETTRAIN_PERL_BG $BULLETTRAIN_PERL_FG $BULLETTRAIN_PERL_PREFIX" $(plenv version | sed -e 's/ (set.*$//')"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Go
|
||||||
|
prompt_go() {
|
||||||
|
setopt extended_glob
|
||||||
|
if [[ (-f *.go(#qN) || -d Godeps || -f glide.yaml) ]]; then
|
||||||
|
if command -v go > /dev/null 2>&1; then
|
||||||
|
prompt_segment $BULLETTRAIN_GO_BG $BULLETTRAIN_GO_FG $BULLETTRAIN_GO_PREFIX" $(go version | grep --colour=never -oE '[[:digit:]].[[:digit:]]+')"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rust
|
||||||
|
prompt_rust() {
|
||||||
|
if [[ (-f Cargo.toml) ]]; then
|
||||||
|
if command -v rustc > /dev/null 2>&1; then
|
||||||
|
prompt_segment $BULLETTRAIN_RUST_BG $BULLETTRAIN_RUST_FG $BULLETTRAIN_RUST_PREFIX" $(rustc -V version | cut -d' ' -f2)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Kubernetes Context
|
||||||
|
prompt_kctx() {
|
||||||
|
if [[ "$BULLETTRAIN_KCTX_KUBECTL" == "true" ]] && command -v kubectl > /dev/null 2>&1; then
|
||||||
|
local jsonpath='{.current-context}'
|
||||||
|
if [[ "$BULLETTRAIN_KCTX_NAMESPACE" == "true" ]]; then
|
||||||
|
jsonpath="${jsonpath}{':'}{..namespace}"
|
||||||
|
fi
|
||||||
|
prompt_segment $BULLETTRAIN_KCTX_BG $BULLETTRAIN_KCTX_FG $BULLETTRAIN_KCTX_PREFIX" $(kubectl config view --minify --output "jsonpath=${jsonpath}" 2>/dev/null)"
|
||||||
|
elif [[ -f $BULLETTRAIN_KCTX_KCONFIG ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_KCTX_BG $BULLETTRAIN_KCTX_FG $BULLETTRAIN_KCTX_PREFIX" $(cat $BULLETTRAIN_KCTX_KCONFIG | grep current-context | awk '{print $2}')"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Virtualenv: current working virtualenv
|
||||||
|
prompt_virtualenv() {
|
||||||
|
local virtualenv_path="$VIRTUAL_ENV"
|
||||||
|
if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(basename $virtualenv_path)"
|
||||||
|
elif which pyenv &> /dev/null; then
|
||||||
|
if [[ "$(pyenv version | sed -e 's/ (set.*$//' | tr '\n' ' ' | sed 's/.$//')" != "system" ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(pyenv version | sed -e 's/ (set.*$//' | tr '\n' ' ' | sed 's/.$//')"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# NVM: Node version manager
|
||||||
|
prompt_nvm() {
|
||||||
|
local nvm_prompt
|
||||||
|
if type nvm >/dev/null 2>&1; then
|
||||||
|
nvm_prompt=$(nvm current 2>/dev/null)
|
||||||
|
[[ "${nvm_prompt}x" == "x" || "${nvm_prompt}" == "system" ]] && return
|
||||||
|
elif type node >/dev/null 2>&1; then
|
||||||
|
nvm_prompt="$(node --version)"
|
||||||
|
else
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
nvm_prompt=${nvm_prompt}
|
||||||
|
prompt_segment $BULLETTRAIN_NVM_BG $BULLETTRAIN_NVM_FG $BULLETTRAIN_NVM_PREFIX$nvm_prompt
|
||||||
|
}
|
||||||
|
|
||||||
|
#AWS Profile
|
||||||
|
prompt_aws() {
|
||||||
|
local spaces=" "
|
||||||
|
|
||||||
|
if [[ -n "$AWS_PROFILE" ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_AWS_BG $BULLETTRAIN_AWS_FG $BULLETTRAIN_AWS_PREFIX$spaces$AWS_PROFILE
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# SCREEN Session
|
||||||
|
prompt_screen() {
|
||||||
|
local session_name="$STY"
|
||||||
|
if [[ "$session_name" != "" ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_SCREEN_BG $BULLETTRAIN_SCREEN_FG $BULLETTRAIN_SCREEN_PREFIX" $session_name"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_time() {
|
||||||
|
if [[ $BULLETTRAIN_TIME_12HR == true ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%r}
|
||||||
|
else
|
||||||
|
prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%T}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Status:
|
||||||
|
# - was there an error
|
||||||
|
# - am I root
|
||||||
|
# - are there background jobs?
|
||||||
|
prompt_status() {
|
||||||
|
local symbols
|
||||||
|
symbols=()
|
||||||
|
[[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW != true ]] && symbols+="✘"
|
||||||
|
[[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW == true ]] && symbols+="✘ $RETVAL"
|
||||||
|
[[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡%f"
|
||||||
|
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="⚙"
|
||||||
|
|
||||||
|
if [[ -n "$symbols" && $RETVAL -ne 0 ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_STATUS_ERROR_BG $BULLETTRAIN_STATUS_FG "$symbols"
|
||||||
|
elif [[ -n "$symbols" ]]; then
|
||||||
|
prompt_segment $BULLETTRAIN_STATUS_BG $BULLETTRAIN_STATUS_FG "$symbols"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prompt Character
|
||||||
|
prompt_chars() {
|
||||||
|
local bt_prompt_chars="${BULLETTRAIN_PROMPT_CHAR}"
|
||||||
|
|
||||||
|
if [[ $BULLETTRAIN_PROMPT_ROOT == true ]]; then
|
||||||
|
bt_prompt_chars="%(!.%F{red}# .%F{green}${bt_prompt_chars}%f)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == false ]]; then
|
||||||
|
bt_prompt_chars="${bt_prompt_chars}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "$bt_prompt_chars"
|
||||||
|
|
||||||
|
if [[ -n $BULLETTRAIN_PROMPT_CHAR ]]; then
|
||||||
|
echo -n " "
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prompt Line Separator
|
||||||
|
prompt_line_sep() {
|
||||||
|
if [[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == true ]]; then
|
||||||
|
# newline wont print without a non newline character, so add a zero-width space
|
||||||
|
echo -e '\n%{\u200B%}'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# MAIN
|
||||||
|
# Entry point
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
build_prompt() {
|
||||||
|
RETVAL=$?
|
||||||
|
for segment in $BULLETTRAIN_PROMPT_ORDER
|
||||||
|
do
|
||||||
|
prompt_$segment
|
||||||
|
done
|
||||||
|
prompt_end
|
||||||
|
}
|
||||||
|
|
||||||
|
NEWLINE='
|
||||||
|
'
|
||||||
|
PROMPT=''
|
||||||
|
[[ $BULLETTRAIN_PROMPT_ADD_NEWLINE == true ]] && PROMPT="$PROMPT$NEWLINE"
|
||||||
|
PROMPT="$PROMPT"'%{%f%b%k%}$(build_prompt)'
|
||||||
|
[[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == true ]] && PROMPT="$PROMPT$NEWLINE"
|
||||||
|
PROMPT="$PROMPT"'%{${fg_bold[default]}%}'
|
||||||
|
[[ $BULLETTRAIN_PROMPT_SEPARATE_LINE == false ]] && PROMPT="$PROMPT "
|
||||||
|
PROMPT="$PROMPT"'$(prompt_chars)%{$reset_color%}'
|
||||||
38
assets/add_zsh_theme/color-input.zsh-theme
Normal file
38
assets/add_zsh_theme/color-input.zsh-theme
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Refer https://misc.flogisoft.com/bash/tip_colors_and_formatting for the ANSI/VT100 control sequences
|
||||||
|
|
||||||
|
local user_color=026
|
||||||
|
local dir_color=130
|
||||||
|
local git_branch_color=010
|
||||||
|
local input_color=220
|
||||||
|
|
||||||
|
# Uncomment the following line to hide the virtual environment name.
|
||||||
|
# export VIRTUAL_ENV_DISABLE_PROMPT=1
|
||||||
|
|
||||||
|
# User details in green, bold
|
||||||
|
local user='%B$FG[${user_color}]%}%n@%m%{$reset_color%}'
|
||||||
|
# Directory details in cyan, bold
|
||||||
|
local dir='%B$FG[${dir_color}]%~%{$reset_color%}'
|
||||||
|
# git branch details in green
|
||||||
|
local git_branch='$FG[${git_branch_color}]$(git_prompt_info)%{$reset_color%}'
|
||||||
|
|
||||||
|
# Error message on command returning non-zero exit code
|
||||||
|
error_msg="\e[0;31mCommand failed"
|
||||||
|
|
||||||
|
PROMPT="${user}:${dir}:${git_branch}
|
||||||
|
$ $FG[${input_color}]"
|
||||||
|
|
||||||
|
# Resetting color to default white.
|
||||||
|
preexec()
|
||||||
|
{
|
||||||
|
echo -ne "\e[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Printing error message if command failed.
|
||||||
|
precmd()
|
||||||
|
{
|
||||||
|
# Command failed
|
||||||
|
if [ $? -ne 0 ];
|
||||||
|
then
|
||||||
|
echo "${error_msg}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
418
assets/add_zsh_theme/comfyline.zsh-theme
Normal file
418
assets/add_zsh_theme/comfyline.zsh-theme
Normal file
@@ -0,0 +1,418 @@
|
|||||||
|
##########################################
|
||||||
|
### Comfyline - theme for zsh ###
|
||||||
|
# Original Author: not pua ( imnotpua ) #
|
||||||
|
# email: atp@tutamail.com #
|
||||||
|
##########################################
|
||||||
|
|
||||||
|
|
||||||
|
# make prompt work without oh-my-zsh
|
||||||
|
setopt PROMPT_SUBST
|
||||||
|
export LANG=en_US.UTF-8
|
||||||
|
export LC_ALL=en_US.UTF-8
|
||||||
|
|
||||||
|
# default segment seperators
|
||||||
|
if [[ $COMFYLINE_SEGSEP == "" ]]; then
|
||||||
|
COMFYLINE_SEGSEP='\ue0b4'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $COMFYLINE_SEGSEP_REVERSE == "" ]]; then
|
||||||
|
COMFYLINE_SEGSEP_REVERSE='\ue0b6'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# date and time formats
|
||||||
|
if [[ $COMFYLINE_DATE_FORMAT == "" ]]; then
|
||||||
|
COMFYLINE_DATE_FORMAT="%A, %e %B %Y"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $COMFYLINE_TIME_FORMAT == "" ]]; then
|
||||||
|
COMFYLINE_TIME_FORMAT="%l:%M %p"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# default light theme
|
||||||
|
if [[ $RETVAL_RANK == "" ]]; then
|
||||||
|
RETVAL_RANK=1
|
||||||
|
fi
|
||||||
|
if [[ $HOST_RANK == "" ]]; then
|
||||||
|
HOST_RANK=2
|
||||||
|
fi
|
||||||
|
if [[ $USER_RANK == "" ]] then
|
||||||
|
USER_RANK=3
|
||||||
|
fi
|
||||||
|
if [[ $DIR_RANK == "" ]]; then
|
||||||
|
DIR_RANK=4
|
||||||
|
fi
|
||||||
|
if [[ $GIT_RANK == "" ]] then
|
||||||
|
GIT_RANK=5
|
||||||
|
fi
|
||||||
|
if [[ $VENV_RANK = "" ]]; then
|
||||||
|
VENV_RANK=6
|
||||||
|
fi
|
||||||
|
if [[ $BAT_RANK == "" ]] then
|
||||||
|
BAT_RANK=-3
|
||||||
|
fi
|
||||||
|
if [[ $DATE_RANK == "" ]]; then
|
||||||
|
DATE_RANK=-2
|
||||||
|
fi
|
||||||
|
if [[ $TIME_RANK == "" ]]; then
|
||||||
|
TIME_RANK=-1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# default colors
|
||||||
|
if [[ $RETVAL_b == "" ]]; then
|
||||||
|
RETVAL_b="#8a8bd8"
|
||||||
|
fi
|
||||||
|
if [[ $RETVAL_f == "" ]]; then
|
||||||
|
RETVAL_f="#61355c"
|
||||||
|
fi
|
||||||
|
if [[ $HOST_b == "" ]]; then
|
||||||
|
HOST_b="#b3b5fb"
|
||||||
|
fi
|
||||||
|
if [[ $HOST_f == "" ]]; then
|
||||||
|
HOST_f="#4a4b87"
|
||||||
|
fi
|
||||||
|
if [[ $USER_b == "" ]]; then
|
||||||
|
USER_b="#f8bbe5"
|
||||||
|
fi
|
||||||
|
if [[ $USER_f == "" ]]; then
|
||||||
|
USER_f="#874c80"
|
||||||
|
fi
|
||||||
|
if [[ $GIT_b == "" ]]; then
|
||||||
|
GIT_b="#f6b3b3"
|
||||||
|
fi
|
||||||
|
if [[ $GIT_f == "" ]]; then
|
||||||
|
GIT_f="#d95353"
|
||||||
|
fi
|
||||||
|
if [[ $GIT_CLEAN_b == "" ]]; then
|
||||||
|
GIT_CLEAN_b="#b3f58c"
|
||||||
|
fi
|
||||||
|
if [[ $GIT_CLEAN_f == "" ]]; then
|
||||||
|
GIT_CLEAN_f="#568459"
|
||||||
|
fi
|
||||||
|
if [[ $DIR_b == "" ]]; then
|
||||||
|
DIR_b="#e1bff2"
|
||||||
|
fi
|
||||||
|
if [[ $DIR_f == "" ]]; then
|
||||||
|
DIR_f="#844189"
|
||||||
|
fi
|
||||||
|
if [[ $VENV_b == "" ]]; then
|
||||||
|
VENV_b="#a8ddf9"
|
||||||
|
fi
|
||||||
|
if [[ $VENV_f == "" ]]; then
|
||||||
|
VENV_f="#0066a4"
|
||||||
|
fi
|
||||||
|
if [[ $BAT_b == "" ]]; then
|
||||||
|
BAT_b="#b3b5fb"
|
||||||
|
fi
|
||||||
|
if [[ $BAT_f == "" ]]; then
|
||||||
|
BAT_f="#4a4b87"
|
||||||
|
fi
|
||||||
|
if [[ $DATE_b == "" ]]; then
|
||||||
|
DATE_b="#f8bbe5"
|
||||||
|
fi
|
||||||
|
if [[ $DATE_f == "" ]]; then
|
||||||
|
DATE_f="#874c80"
|
||||||
|
fi
|
||||||
|
if [[ $TIME_b == "" ]]; then
|
||||||
|
TIME_b="#e1bff2"
|
||||||
|
fi
|
||||||
|
if [[ $TIME_f == "" ]]; then
|
||||||
|
TIME_f="#844189"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# basic functions
|
||||||
|
|
||||||
|
#function takes 4 arguments, background, foreground, text and rank (for edge cases)
|
||||||
|
function create_segment(){
|
||||||
|
if [[ $4 -lt $RIGHTMOST_RANK ]]; then
|
||||||
|
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE"
|
||||||
|
echo -n "$segment%K{$1}%F{$2} $3 "
|
||||||
|
elif [[ $4 -gt $LEFTMOST_RANK ]]; then
|
||||||
|
local segment="%K{$1}$COMFYLINE_SEGSEP "
|
||||||
|
echo -n "$segment%F{$2}$3%F{$1} "
|
||||||
|
elif [[ $4 -eq $RIGHTMOST_RANK ]]; then
|
||||||
|
if [[ $COMFYLINE_NO_START -eq 1 ]]; then
|
||||||
|
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE"
|
||||||
|
echo -n "$segment%K{$1}%F{$2} $3"
|
||||||
|
else
|
||||||
|
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE"
|
||||||
|
echo -n "$segment%K{$1}%F{$2} $3 %k%F{$1}$COMFYLINE_SEGSEP"
|
||||||
|
fi
|
||||||
|
elif [[ $4 -eq $LEFTMOST_RANK ]]; then
|
||||||
|
if [[ $COMFYLINE_NO_START -eq 1 ]]; then
|
||||||
|
local segment="%K{$1} "
|
||||||
|
echo -n "$segment%F{$2}$3%F{$1} "
|
||||||
|
else
|
||||||
|
local segment="%F{$1}$COMFYLINE_SEGSEP_REVERSE%K{$1} "
|
||||||
|
echo -n "$segment%F{$2}$3%F{$1} "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
### explanation: creates segment seperator with new bg but fg as old bg.
|
||||||
|
### then prints contents in new fg and prepares for next fg as current bg
|
||||||
|
|
||||||
|
# segment functions
|
||||||
|
function retval(){
|
||||||
|
if [[ $COMFYLINE_RETVAL_NUMBER -eq 2 ]]; then
|
||||||
|
symbol="%(?..✘ %?)"
|
||||||
|
elif [[ $COMFYLINE_RETVAL_NUMBER -eq 1 ]]; then
|
||||||
|
symbol="%?"
|
||||||
|
else
|
||||||
|
symbol="%(?..✘)"
|
||||||
|
fi
|
||||||
|
create_segment $RETVAL_b $RETVAL_f $symbol $RETVAL_RANK
|
||||||
|
}
|
||||||
|
|
||||||
|
function hostname(){
|
||||||
|
if [[ $COMFYLINE_FULL_HOSTNAME -eq 1 ]]; then
|
||||||
|
create_segment $HOST_b $HOST_f "%M" $HOST_RANK
|
||||||
|
else
|
||||||
|
create_segment $HOST_b $HOST_f "%m" $HOST_RANK
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function username(){
|
||||||
|
create_segment $USER_b $USER_f "%n" $USER_RANK
|
||||||
|
}
|
||||||
|
|
||||||
|
function dir(){
|
||||||
|
if [[ $COMFYLINE_FULL_DIR -eq 1 ]]; then
|
||||||
|
symbol="%d"
|
||||||
|
else
|
||||||
|
symbol="%~"
|
||||||
|
fi
|
||||||
|
create_segment $DIR_b $DIR_f $symbol $DIR_RANK
|
||||||
|
}
|
||||||
|
|
||||||
|
# variables to set git_prompt info and status
|
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX=" \ue0a0 "
|
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX=""
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY=""
|
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN=""
|
||||||
|
ZSH_THEME_GIT_PROMPT_ADDED=" ✚"
|
||||||
|
ZSH_THEME_GIT_PROMPT_MODIFIED=" ±"
|
||||||
|
ZSH_THEME_GIT_PROMPT_DELETED=" \u2796"
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNTRACKED=" !"
|
||||||
|
ZSH_THEME_GIT_PROMPT_RENAMED=" \u21b7"
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNMERGED=" \u21e1"
|
||||||
|
ZSH_THEME_GIT_PROMPT_AHEAD=" \u21c5"
|
||||||
|
ZSH_THEME_GIT_PROMPT_BEHIND=" \u21b1"
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIVERGED=" \u21b0"
|
||||||
|
|
||||||
|
function gitrepo(){
|
||||||
|
if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
|
||||||
|
if [[ $(git status --porcelain) == "" ]]; then
|
||||||
|
if [[ $(command -v git_prompt_info 2> /dev/null) ]]; then
|
||||||
|
create_segment $GIT_CLEAN_b $GIT_CLEAN_f "$(git_prompt_info)$(git_prompt_status)" $GIT_RANK
|
||||||
|
else
|
||||||
|
create_segment $GIT_CLEAN_b $GIT_CLEAN_f "$ZSH_THEME_GIT_PROMPT_PREFIX$(git rev-parse --abbrev-ref HEAD)" $GIT_RANK
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ $(command -v git_prompt_info 2> /dev/null) ]]; then
|
||||||
|
create_segment $GIT_b $GIT_f "$(git_prompt_info)$(git_prompt_status)" $GIT_RANK
|
||||||
|
else
|
||||||
|
create_segment $GIT_b $GIT_f "$ZSH_THEME_GIT_PROMPT_PREFIX$(git rev-parse --abbrev-ref HEAD)" $GIT_RANK
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function venv(){
|
||||||
|
if [ -n "$VIRTUAL_ENV" ]; then
|
||||||
|
create_segment $VENV_b $VENV_f ${VIRTUAL_ENV:t:gs/%/%%} $VENV_RANK
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# battery function
|
||||||
|
|
||||||
|
# variables
|
||||||
|
|
||||||
|
if [[ $COMFYLINE_BATTERY_LOW == "" ]]; then
|
||||||
|
COMFYLINE_BATTERY_LOW=15
|
||||||
|
fi
|
||||||
|
if [[ $COMFYLINE_BATTERY_HIGH == "" ]]; then
|
||||||
|
COMFYLINE_BATTERY_HIGH=90
|
||||||
|
fi
|
||||||
|
if [[ $COMFYLINE_CHARGING_ICON == "" ]]; then
|
||||||
|
COMFYLINE_CHARGING_ICON="⚡️"
|
||||||
|
fi
|
||||||
|
if [[ $COMFYLINE_HIGHCHARGE_ICON == "" ]]; then
|
||||||
|
COMFYLINE_HIGHCHARGE_ICON=""
|
||||||
|
fi
|
||||||
|
if [[ $COMFYLINE_MIDCHARGE_ICON == "" ]]; then
|
||||||
|
COMFYLINE_MIDCHARGE_ICON=""
|
||||||
|
fi
|
||||||
|
if [[ $COMFYLINE_LOWCHARGE_ICON == "" ]]; then
|
||||||
|
COMFYLINE_LOWCHARGE_ICON=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
function calcbat(){
|
||||||
|
BAT=""
|
||||||
|
if [[ $(uname) == "Linux" ]]; then
|
||||||
|
number=$(ls /sys/class/power_supply/ | grep 'BAT' | wc -l )
|
||||||
|
if [[ $number -eq 0 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
for ((i=0;i<$number;i++));do
|
||||||
|
capacity=$(cat /sys/class/power_supply/BAT${i}/capacity)
|
||||||
|
stats=$(cat /sys/class/power_supply/BAT${i}/status)
|
||||||
|
if [[ $stats == "Charging" ]]; then
|
||||||
|
stats="$COMFYLINE_CHARGING_ICON"
|
||||||
|
elif [[ $stats == "Discharging" ]]; then
|
||||||
|
if [ $capacity -gt $COMFYLINE_BATTERY_HIGH ]; then
|
||||||
|
stats="$COMFYLINE_HIGHCHARGE_ICON"
|
||||||
|
elif [ $capacity -lt $COMFYLINE_BATTERY_LOW ]; then
|
||||||
|
stats="$COMFYLINE_LOWCHARGE_ICON"
|
||||||
|
else
|
||||||
|
stats="$COMFYLINE_MIDCHARGE_ICON"
|
||||||
|
fi
|
||||||
|
elif [[ $stats == "Not charging" ]]; then
|
||||||
|
stats="$COMFYLINE_HIGHCHARGE_ICON"
|
||||||
|
fi
|
||||||
|
BAT="$BAT$capacity%% $stats "
|
||||||
|
done
|
||||||
|
|
||||||
|
elif [[ $(uname) == "Darwin" ]]; then
|
||||||
|
battery_details = $(pmset -g batt)
|
||||||
|
charged=$(echo "$battery_details" | grep -w 'charged')
|
||||||
|
charging=$(echo "$battery_details" | grep -w 'AC Power')
|
||||||
|
discharging=$(echo "$battery_details" | grep -w 'Battery Power')
|
||||||
|
capacity=$(echo "$battery_details" | grep -o "([0-9]*)"%)
|
||||||
|
|
||||||
|
if [ -n "$charging" ]; then
|
||||||
|
stats="$COMFYLINE_CHARGING_ICON"
|
||||||
|
elif [[ -n "$discharging" ]]; then
|
||||||
|
if [ $capacity -gt $COMFYLINE_BATTERY_HIGH ]; then
|
||||||
|
stats="$COMFYLINE_HIGHCHARGE_ICON"
|
||||||
|
elif [ $capacity -lt $COMFYLINE_BATTERY_LOW ]; then
|
||||||
|
stats="$COMFYLINE_LOWCHARGE_ICON"
|
||||||
|
else
|
||||||
|
stats="$COMFYLINE_MIDCHARGE_ICON"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
BAT="$capacity%% $stats"
|
||||||
|
|
||||||
|
elif [[ $(uname) == "FreeBSD" || $(uname) == "OpenBSD" ]]; then
|
||||||
|
capacity=$(apm -l)
|
||||||
|
stats=$(apm -b)
|
||||||
|
if [ $stats -eq 3 ]; then
|
||||||
|
stats="$COMFYLINE_CHARGING_ICON"
|
||||||
|
else
|
||||||
|
if [[ $capacity -gt $COMFYLINE_BATTERY_HIGH ]]; then
|
||||||
|
stats="$COMFYLINE_HIGHCHARGE_ICON"
|
||||||
|
elif [[ $capacity -lt $COMFYLINE_BATTERY_LOW ]]; then
|
||||||
|
stats="$COMFYLINE_LOWCHARGE_ICON"
|
||||||
|
else
|
||||||
|
stats="$COMFYLINE_MIDCHARGE_ICON"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
BAT="$capacity%% $stats"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# function to call battery calculation
|
||||||
|
function currbat(){
|
||||||
|
if [[ $COMFYLINE_BATTERY_PLUGIN -eq 1 ]]; then
|
||||||
|
create_segment $BAT_b $BAT_f "$(battery_pct_prompt)" $BAT_RANK
|
||||||
|
else
|
||||||
|
calcbat
|
||||||
|
create_segment $BAT_b $BAT_f "$BAT" $BAT_RANK
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function currdate(){
|
||||||
|
info="%D{$COMFYLINE_DATE_FORMAT}"
|
||||||
|
create_segment $DATE_b $DATE_f $info $DATE_RANK
|
||||||
|
}
|
||||||
|
|
||||||
|
function currtime(){
|
||||||
|
info="%D{$COMFYLINE_TIME_FORMAT}"
|
||||||
|
create_segment $TIME_b $TIME_f $info $TIME_RANK
|
||||||
|
}
|
||||||
|
|
||||||
|
function endleft(){
|
||||||
|
echo -n "%k$COMFYLINE_SEGSEP%f"
|
||||||
|
}
|
||||||
|
|
||||||
|
# parse variables
|
||||||
|
|
||||||
|
segments=("retval" "hostname" "username" "dir" "gitrepo" "venv" "currbat" "currtime" "currdate")
|
||||||
|
segment_ranks=($RETVAL_RANK $HOST_RANK $USER_RANK $DIR_RANK $GIT_RANK $VENV_RANK $BAT_RANK $TIME_RANK $DATE_RANK)
|
||||||
|
|
||||||
|
# split into left and right
|
||||||
|
|
||||||
|
left_prompt=()
|
||||||
|
right_prompt=()
|
||||||
|
left_ranks=()
|
||||||
|
right_ranks=()
|
||||||
|
for ((i=1;i<=${#segments[@]};i++)); do
|
||||||
|
if [[ segment_ranks[$i] -gt 0 ]]; then
|
||||||
|
left_prompt+=(${segments[$i]})
|
||||||
|
left_ranks+=(${segment_ranks[$i]})
|
||||||
|
elif [[ segment_ranks[$i] -lt 0 ]]; then
|
||||||
|
right_prompt+=(${segments[$i]})
|
||||||
|
right_ranks+=(${segment_ranks[$i]#-})
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# sort the prompts according to ranks and find the leftmost and rightmost
|
||||||
|
# I use the traditional iterative method to find max/min and using count-sort for sorting
|
||||||
|
|
||||||
|
LEFTMOST_RANK=100
|
||||||
|
declare -A sorted_left
|
||||||
|
for ((i=1;i<=${#left_prompt[@]};i++)); do
|
||||||
|
if [[ $left_ranks[$i] -lt $LEFTMOST_RANK ]]; then LEFTMOST_RANK=$left_ranks[$i] fi
|
||||||
|
sorted_left[$left_ranks[$i]]="$left_prompt[$i]"
|
||||||
|
done
|
||||||
|
|
||||||
|
RIGHTMOST_RANK=100
|
||||||
|
declare -A sorted_right
|
||||||
|
for ((i=1;i<=${#right_prompt[@]};i++)); do
|
||||||
|
if [[ $right_ranks[$i] -lt $RIGHTMOST_RANK ]]; then RIGHTMOST_RANK=$right_ranks[$i] fi
|
||||||
|
sorted_right[$right_ranks[$i]]="$right_prompt[$i]"
|
||||||
|
done
|
||||||
|
((RIGHTMOST_RANK*=-1))
|
||||||
|
|
||||||
|
|
||||||
|
# finally make_prompt which makes prompts
|
||||||
|
make_left_prompt(){
|
||||||
|
for ((j = 1; j <= ${#left_prompt[@]}; j++)); do
|
||||||
|
type $sorted_left[$j] &>/dev/null && $sorted_left[$j]
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
make_right_prompt(){
|
||||||
|
for ((j = ${#right_prompt[@]}; j>0; j--)); do
|
||||||
|
type $sorted_right[$j] &>/dev/null && $sorted_right[$j]
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
export PROMPT='%{%f%b%k%}$(make_left_prompt)$(endleft) '
|
||||||
|
export RPROMPT=' %{%f%b%k%}$(make_right_prompt)' # spaces left so that hiding is triggered
|
||||||
|
|
||||||
|
if [[ $COMFYLINE_NEXT_LINE_CHAR == "" ]]; then
|
||||||
|
COMFYLINE_NEXT_LINE_CHAR='➟'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $COMFYLINE_NEXT_LINE_CHAR_COLOR == "" ]]; then
|
||||||
|
COMFYLINE_NEXT_LINE_CHAR_COLOR="grey"
|
||||||
|
fi
|
||||||
|
|
||||||
|
next_line_maker(){
|
||||||
|
echo -n "%F{$COMFYLINE_NEXT_LINE_CHAR_COLOR}$COMFYLINE_NEXT_LINE_CHAR %f"
|
||||||
|
}
|
||||||
|
|
||||||
|
# setting up typing area
|
||||||
|
if [[ COMFYLINE_START_NEXT_LINE -eq 2 ]]; then
|
||||||
|
|
||||||
|
PROMPT=$PROMPT'
|
||||||
|
'$(next_line_maker)
|
||||||
|
|
||||||
|
|
||||||
|
elif [[ COMFYLINE_NO_GAP_LINE -eq 1 ]]; then
|
||||||
|
else
|
||||||
|
|
||||||
|
PROMPT='
|
||||||
|
'$PROMPT
|
||||||
|
|
||||||
|
fi
|
||||||
7
assets/add_zsh_theme/emoji.zsh-theme
Normal file
7
assets/add_zsh_theme/emoji.zsh-theme
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
PROMPT=" %(?:%{$fg_bold[green]%}➜:%{$fg_bold[red]%}➜)"
|
||||||
|
PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
|
||||||
|
|
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}(%{$fg[red]%}"
|
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✏️ "
|
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}) ✅"
|
||||||
60
assets/add_zsh_theme/fishbone++.zsh-theme
Normal file
60
assets/add_zsh_theme/fishbone++.zsh-theme
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
local username="%n"
|
||||||
|
local path_prefix="%{$fg[yellow]%}["
|
||||||
|
local path_string="%{$fg[blue]%}%~"
|
||||||
|
local path_postfix="%{$fg[yellow]%}]"
|
||||||
|
local prompt_string="❯❯ "
|
||||||
|
local local_time="%T"
|
||||||
|
local newline=$'\n'
|
||||||
|
local line_mode=$'\n'
|
||||||
|
|
||||||
|
# customize user settings
|
||||||
|
# prompt symbol
|
||||||
|
if [ ! -z "$FISHBONEPP_PROMPT" ]; then
|
||||||
|
prompt_string="$FISHBONEPP_PROMPT"
|
||||||
|
fi
|
||||||
|
# username
|
||||||
|
if [ ! -z "$FISHBONEPP_USER" ]; then
|
||||||
|
username="$FISHBONEPP_USER"
|
||||||
|
fi
|
||||||
|
# time mode
|
||||||
|
if [ "$FISHBONEPP_TIME" = "12HR" ]; then
|
||||||
|
local_time="%t"
|
||||||
|
elif [ "$FISHBONEPP_TIME" = "FULL" ]; then
|
||||||
|
local_time="%*"
|
||||||
|
else
|
||||||
|
local_time="%T"
|
||||||
|
fi
|
||||||
|
# new line on start
|
||||||
|
if [ "$FISHBONEPP_NEWLINE" = false ]; then
|
||||||
|
newline=''
|
||||||
|
fi
|
||||||
|
# line mode
|
||||||
|
if [ "$FISHBONEPP_LINE_MODE" = "singleline" ]; then
|
||||||
|
line_mode=''
|
||||||
|
fi
|
||||||
|
|
||||||
|
local host_name="%{$fg[blue]%}${username}"
|
||||||
|
local time_string="%{$fg[blue]%}${local_time}"
|
||||||
|
# Make prompt_string red if the previous command failed.
|
||||||
|
local return_status="%(?:%{$fg[cyan]%}$prompt_string:%{$fg[red]%}$prompt_string%}"
|
||||||
|
|
||||||
|
|
||||||
|
# set the git_prompt_info text
|
||||||
|
ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[blue](%{$reset_color%}%{$fg[yellow]%}"
|
||||||
|
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%{$fg[blue])%}"
|
||||||
|
ZSH_THEME_GIT_PROMPT_DIRTY="⚡"
|
||||||
|
ZSH_THEME_GIT_PROMPT_CLEAN=""
|
||||||
|
|
||||||
|
PROMPT='${newline}\
|
||||||
|
${host_name}${hosr}%{$reset_color%}@${time_string} ${line_mode}\
|
||||||
|
${path_prefix}${path_string}${path_postfix}$(git_prompt_info)$(git_prompt_status) \
|
||||||
|
${return_status} %{$reset_color%}'
|
||||||
|
|
||||||
|
|
||||||
|
ZSH_THEME_GIT_PROMPT_ADDED="➕"
|
||||||
|
ZSH_THEME_GIT_PROMPT_MODIFIED="✒️ "
|
||||||
|
ZSH_THEME_GIT_PROMPT_DELETED="➖"
|
||||||
|
ZSH_THEME_GIT_PROMPT_RENAMED="⁉️ "
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNMERGED="🥺"
|
||||||
|
ZSH_THEME_GIT_PROMPT_UNTRACKED="🚝"
|
||||||
BIN
assets/fastfetch/arch.png
Normal file
BIN
assets/fastfetch/arch.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 71 KiB |
75
assets/fastfetch/config-compact.jsonc
Normal file
75
assets/fastfetch/config-compact.jsonc
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
"source": "~/.config/fastfetch/arch.png",
|
||||||
|
"type": "kitty-direct",
|
||||||
|
"height": 10,
|
||||||
|
"width": 20,
|
||||||
|
"padding": {
|
||||||
|
"top": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"separator": " -> "
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "title",
|
||||||
|
"keyWidth": 10,
|
||||||
|
"format": " {6}{7}{8}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": " ─────────────────────────── "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminal",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "magenta",
|
||||||
|
// format: used / total
|
||||||
|
"format": "{1} / {2}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "uptime",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": " ─────────────────────────── "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": " \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m \u001b[90m "
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
]
|
||||||
|
}
|
||||||
73
assets/fastfetch/config-pokemon.jsonc
Normal file
73
assets/fastfetch/config-pokemon.jsonc
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
"height": 5,
|
||||||
|
"width": 10,
|
||||||
|
"padding": {
|
||||||
|
"top": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"separator": " -> "
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "title",
|
||||||
|
"keyWidth": 10,
|
||||||
|
"format": " {6}{7}{8}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": " ─────────────────────────── "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminal",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "magenta",
|
||||||
|
// format: used / total
|
||||||
|
"format": "{1} / {2}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "uptime",
|
||||||
|
"key": " ",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": " ─────────────────────────── "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": " \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m \u001b[90m "
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
]
|
||||||
|
}
|
||||||
112
assets/fastfetch/config-v2.jsonc
Normal file
112
assets/fastfetch/config-v2.jsonc
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
//"source": "~/.config/fastfetch/nixos.png",
|
||||||
|
//"type": "kitty-direct",
|
||||||
|
"height": 15,
|
||||||
|
"width": 30,
|
||||||
|
"padding": {
|
||||||
|
"top": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"separator": " ➜ "
|
||||||
|
},
|
||||||
|
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "os",
|
||||||
|
"key": " DISTRO",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": " └ ",
|
||||||
|
"keyColor": "31",
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": " DE/WM",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wmtheme",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "icons",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cursor",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminal",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminalfont",
|
||||||
|
"key": " └ ",
|
||||||
|
"keyColor": "32",
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "host",
|
||||||
|
"format": "{2}",
|
||||||
|
"key": " SYSTEM",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cpu",
|
||||||
|
"format": "{1} ({3}) @ {7} GHz",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "gpu",
|
||||||
|
"format": "{2}",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "swap",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "disk",
|
||||||
|
"key": " ├ ",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "display",
|
||||||
|
"key": " └ ",
|
||||||
|
"compactType": "original-with-refresh-rate",
|
||||||
|
"keyColor": "33",
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
"break",
|
||||||
|
]
|
||||||
|
}
|
||||||
128
assets/fastfetch/config.jsonc
Normal file
128
assets/fastfetch/config.jsonc
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
|
||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
"padding": {
|
||||||
|
"top": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"separator": " "
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "os",
|
||||||
|
"key": " DISTRO",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": "│ └",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": " DE/WM",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wmtheme",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "icons",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cursor",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminalfont",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminal",
|
||||||
|
"key": "│ └",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "host",
|
||||||
|
"key": " SYSTEM",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cpu",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "gpu",
|
||||||
|
"key": "│ ├",
|
||||||
|
"format": "{2}",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "display",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green",
|
||||||
|
"compactType": "original-with-refresh-rate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "swap",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "uptime",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "display",
|
||||||
|
"key": "│ └",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "sound",
|
||||||
|
"key": " AUDIO",
|
||||||
|
"format": "{2}",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "player",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "media",
|
||||||
|
"key": "│ └",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m \u001b[38m \u001b[39m \u001b[39m \u001b[38m \u001b[37m \u001b[36m \u001b[35m \u001b[34m \u001b[33m \u001b[32m \u001b[31m \u001b[90m "
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
]
|
||||||
|
}
|
||||||
17
assets/gtk-3.0/settings.ini
Normal file
17
assets/gtk-3.0/settings.ini
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[Settings]
|
||||||
|
gtk-theme-name=Andromeda-dark
|
||||||
|
gtk-icon-theme-name=Flat-Remix-Blue-Dark
|
||||||
|
gtk-font-name=Fira Code Semi-Bold 14
|
||||||
|
gtk-cursor-theme-name=Bibata-Modern-Ice
|
||||||
|
gtk-cursor-theme-size=24
|
||||||
|
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||||
|
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||||
|
gtk-button-images=1
|
||||||
|
gtk-menu-images=1
|
||||||
|
gtk-enable-event-sounds=1
|
||||||
|
gtk-enable-input-feedback-sounds=0
|
||||||
|
gtk-xft-antialias=1
|
||||||
|
gtk-xft-hinting=1
|
||||||
|
gtk-xft-hintstyle=hintslight
|
||||||
|
gtk-xft-rgba=rgb
|
||||||
|
gtk-application-prefer-dark-theme=1
|
||||||
7
assets/hyprland-install/README
Normal file
7
assets/hyprland-install/README
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Arch-Hyprland - Sharing a scripts to install hyprland git or non-git versions
|
||||||
|
|
||||||
|
Basically created this script so I can easily switch to git and non-git version of hyprland on Arch Linux
|
||||||
|
|
||||||
|
|
||||||
|
chmod +x actions.sh
|
||||||
|
./actions.sh
|
||||||
63
assets/hyprland-install/actions.sh
Executable file
63
assets/hyprland-install/actions.sh
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||||
|
|
||||||
|
# Set some colors for output messages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA=$(tput setaf 5)
|
||||||
|
WARNING=$(tput setaf 1)
|
||||||
|
YELLOW=$(tput setaf 3)
|
||||||
|
BLUE=$(tput setaf 4)
|
||||||
|
RESET=$(tput sgr0)
|
||||||
|
|
||||||
|
|
||||||
|
# Make all scripts in the scripts directory executable
|
||||||
|
echo -e "${INFO} Making all files in the ${BLUE}scripts${RESET} directory executable..."
|
||||||
|
chmod +x ./scripts/*
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo -e "${BLUE} Please choose an option:${RESET}"
|
||||||
|
echo -e "${YELLOW} -- 1 - Install non-git Hyprland version${RESET}"
|
||||||
|
echo -e "${YELLOW} -- 2 - Install git Hyprland version${RESET}"
|
||||||
|
echo -e "${YELLOW} -- 3 - Update Hyprland-git packages${RESET}"
|
||||||
|
echo -e "${MAGENTA} -- 4 - Quit${RESET}"
|
||||||
|
|
||||||
|
read -p "${CAT} Enter your choice [1, 2, or 3]: " choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
printf "\n${OK} You chose ${BLUE}non-git version of Hyprland${RESET}....... executing...\n"
|
||||||
|
echo -e "${YELLOW} Uninstalling some hyprland packages first...${RESET}"
|
||||||
|
./scripts/uninstall.sh &&
|
||||||
|
./scripts/install-hyprland.sh
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
printf "\n${OK} You chose ${BLUE}git version of Hyprland${RESET}....... executing...\n"
|
||||||
|
echo -e "${YELLOW} Uninstalling some hyprland packages....${RESET}"
|
||||||
|
./scripts/uninstall.sh &&
|
||||||
|
./scripts/install-hyprland-git.sh
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
printf "\n${OK} You chose ${BLUE} to update Hyprland-git packages${RESET}....... executing...\n"
|
||||||
|
./scripts/install-hyprland-git.sh
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
echo -e "${MAGENTA} You have cancel it. Good Bye!!...${RESET}"
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "\n${WARNING} There are only 4 Choices!!!! 1 2 3 or 4. Enter 1, 2, 3, or 4 only.${RESET}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
86
assets/hyprland-install/scripts/install-hyprland-git.sh
Executable file
86
assets/hyprland-install/scripts/install-hyprland-git.sh
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||||
|
|
||||||
|
# Set some colors for output messages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA="$(tput setaf 5)"
|
||||||
|
ORANGE="$(tput setaf 214)"
|
||||||
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
|
ISAUR=$(command -v yay || command -v paru)
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
|
||||||
|
# List of packages to install / update
|
||||||
|
packages=(
|
||||||
|
"hyprutils-git"
|
||||||
|
"hyprcursor-git"
|
||||||
|
"hyprwayland-scanner-git"
|
||||||
|
"aquamarine-git"
|
||||||
|
"hyprgraphics-git"
|
||||||
|
"hyprlang-git"
|
||||||
|
"hyprland-protocols-git"
|
||||||
|
"hyprland-qt-support-git"
|
||||||
|
"hyprland-qtutils-git"
|
||||||
|
"hyprland-git"
|
||||||
|
"hyprlock-git"
|
||||||
|
"hypridle-git"
|
||||||
|
"xdg-desktop-portal-hyprland-git"
|
||||||
|
"hyprpolkitagent-git"
|
||||||
|
)
|
||||||
|
|
||||||
|
# rotating stars progress
|
||||||
|
show_progress() {
|
||||||
|
spin='-'
|
||||||
|
while ps | grep $1 &> /dev/null; do
|
||||||
|
echo -ne "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! $spin"
|
||||||
|
sleep 0.3
|
||||||
|
case $spin in
|
||||||
|
'-') spin='\';;
|
||||||
|
'\') spin='|';;
|
||||||
|
'|') spin='/';;
|
||||||
|
'/') spin='-';;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
echo -en "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! .... Done!"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clearing cache
|
||||||
|
echo -n "${CAT} Recommend (choose y to all) to clear ${MAGENTA}pacman and aur helper${RESET} cache ..."
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
sudo pacman -Scc &&
|
||||||
|
$ISAUR -Scc
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "${NOTE} Installing ${BLUE}git hyprland version${RESET}....."
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Installing packages
|
||||||
|
for package in "${packages[@]}"; do
|
||||||
|
$ISAUR -S --noconfirm "$package" &>/dev/null &
|
||||||
|
pid=$!
|
||||||
|
|
||||||
|
show_progress $pid $package
|
||||||
|
|
||||||
|
wait $pid
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "\n${OK} ${ORANGE}$package${RESET} successfully installed."
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
else
|
||||||
|
echo -e "\n${ERROR} Failed to install ${MAGENTA}$package${RESET}"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "${OK} Done!! Now you NEED to ${YELLOW}EXIT${RESET} Hyprland and Re-Login! Enjoy!!!!"
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
80
assets/hyprland-install/scripts/install-hyprland.sh
Executable file
80
assets/hyprland-install/scripts/install-hyprland.sh
Executable file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||||
|
|
||||||
|
# Set some colors for output messages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA="$(tput setaf 5)"
|
||||||
|
ORANGE="$(tput setaf 214)"
|
||||||
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
|
ISAUR=$(command -v yay || command -v paru)
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
|
||||||
|
# List of packages to install / update
|
||||||
|
packages=(
|
||||||
|
"aquamarine"
|
||||||
|
"hyprutils"
|
||||||
|
"hyprcursor"
|
||||||
|
"hyprwayland-scanner"
|
||||||
|
"hyprgraphics"
|
||||||
|
"hyprlang"
|
||||||
|
"hyprland-protocols"
|
||||||
|
"hyprland-qt-support"
|
||||||
|
"hyprland-qtutils"
|
||||||
|
"hyprland"
|
||||||
|
"hyprlock"
|
||||||
|
"hypridle"
|
||||||
|
"xdg-desktop-portal-hyprland"
|
||||||
|
"hyprpolkitagent"
|
||||||
|
)
|
||||||
|
|
||||||
|
# rotating stars progress
|
||||||
|
show_progress() {
|
||||||
|
spin='-'
|
||||||
|
while ps | grep $1 &> /dev/null; do
|
||||||
|
echo -ne "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! $spin"
|
||||||
|
sleep 0.3
|
||||||
|
case $spin in
|
||||||
|
'-') spin='\';;
|
||||||
|
'\') spin='|';;
|
||||||
|
'|') spin='/';;
|
||||||
|
'/') spin='-';;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
echo -en "\rInstalling ${ORANGE}$2${RESET} ... Kindly wait! .... Done!"
|
||||||
|
}
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "${NOTE} Installing ${BLUE}non-git hyprland version${RESET}....."
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Installing packages
|
||||||
|
for package in "${packages[@]}"; do
|
||||||
|
$ISAUR -S --noconfirm "$package" &>/dev/null &
|
||||||
|
pid=$!
|
||||||
|
|
||||||
|
show_progress $pid $package
|
||||||
|
|
||||||
|
wait $pid
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "\n${OK} ${ORANGE}$package${RESET} successfully installed."
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
else
|
||||||
|
echo -e "\n${ERROR} Failed to install ${MAGENTA}$package${RESET}"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "${OK} Done!! Now you NEED to ${YELLOW}EXIT${RESET} Hyprland and Re-Login! Enjoy!!!!"
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
90
assets/hyprland-install/scripts/uninstall.sh
Executable file
90
assets/hyprland-install/scripts/uninstall.sh
Executable file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||||
|
|
||||||
|
# uninstalling hyprland packages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA="$(tput setaf 5)"
|
||||||
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
|
|
||||||
|
# List of packages to uninstall (including git versions)
|
||||||
|
packages=(
|
||||||
|
"aquamarine"
|
||||||
|
"aquamarine-git"
|
||||||
|
"hyprutils"
|
||||||
|
"hyprutils-git"
|
||||||
|
"hyprcursor"
|
||||||
|
"hyprcursor-git"
|
||||||
|
"hyprwayland-scanner"
|
||||||
|
"hyprwayland-scanner-git"
|
||||||
|
"hyprgraphics"
|
||||||
|
"hyprgraphics-git"
|
||||||
|
"hyprlang"
|
||||||
|
"hyprlang-git"
|
||||||
|
"hyprland-protocols"
|
||||||
|
"hyprland-protocols-git"
|
||||||
|
"hyprland-qt-support"
|
||||||
|
"hyprland-qt-support-git"
|
||||||
|
"hyprland-qtutils"
|
||||||
|
"hyprland-qtutils-git"
|
||||||
|
"hyprland"
|
||||||
|
"hyprland-git"
|
||||||
|
"hyprlock"
|
||||||
|
"hyprlock-git"
|
||||||
|
"hypridle"
|
||||||
|
"hypridle-git"
|
||||||
|
"xdg-desktop-portal-hyprland"
|
||||||
|
"xdg-desktop-portal-hyprland-git"
|
||||||
|
"hyprpolkitagent"
|
||||||
|
"hyprpolkitagent-git"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Function for uninstall packages
|
||||||
|
uninstall_package() {
|
||||||
|
local pkg="$1"
|
||||||
|
|
||||||
|
if pacman -Qi "$pkg" &>> /dev/null ; then
|
||||||
|
echo -e "${NOTE} Uninstalling $pkg ..."
|
||||||
|
sudo pacman -Rnsdd --noconfirm "$pkg" | grep -v "error: target not found"
|
||||||
|
|
||||||
|
if ! pacman -Qi "$pkg" &>> /dev/null ; then
|
||||||
|
echo -e "\e[1A\e[K${OK} $pkg was uninstalled."
|
||||||
|
else
|
||||||
|
echo -e "\e[1A\e[K${ERROR} $pkg failed to uninstall"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${NOTE} $pkg is not installed, skipping uninstallation."
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
printf "\n%s - Removing Hyprland Packages including -git versions \n" "${NOTE}"
|
||||||
|
|
||||||
|
# Track failures but continue with next packages
|
||||||
|
overall_failed=0
|
||||||
|
for PKG in "${packages[@]}"; do
|
||||||
|
uninstall_package "$PKG"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
|
||||||
|
overall_failed=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove specific configuration file since on my experience, it conflicts.
|
||||||
|
# Dont worry, it will be reinstalled by either xdph non-git or git version
|
||||||
|
sudo rm -rf "/usr/share/xdg-desktop-portal/hyprland-portals.conf"
|
||||||
|
|
||||||
|
if [ $overall_failed -eq 0 ]; then
|
||||||
|
echo -e "${OK} All specified hyprland packages have been uninstalled."
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Name=Hyprland
|
|
||||||
Comment=An intelligent dynamic tiling Wayland compositor
|
|
||||||
Exec=Hyprland
|
|
||||||
Type=Application
|
|
||||||
BIN
assets/sddm.png
Normal file
BIN
assets/sddm.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
Binary file not shown.
Binary file not shown.
4
assets/xfce4/helpers.rc
Normal file
4
assets/xfce4/helpers.rc
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
FileManager=Thunar
|
||||||
|
TerminalEmulator=kitty
|
||||||
|
#WebBrowser=firefox
|
||||||
|
#MailReader=evolution
|
||||||
50
auto-install.sh
Normal file
50
auto-install.sh
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# https://github.com/JaKooLit
|
||||||
|
|
||||||
|
# Set some colors for output messages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA="$(tput setaf 5)"
|
||||||
|
ORANGE="$(tput setaf 214)"
|
||||||
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
GREEN="$(tput setaf 2)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
SKY_BLUE="$(tput setaf 6)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
Distro="Arch-Hyprland"
|
||||||
|
Github_URL="https://github.com/JaKooLit/$Distro.git"
|
||||||
|
Distro_DIR="$HOME/$Distro"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
if ! command -v git &> /dev/null
|
||||||
|
then
|
||||||
|
echo "${INFO} Git not found! ${SKY_BLUE}Installing Git...${RESET}"
|
||||||
|
if ! sudo pacman -S git --noconfirm; then
|
||||||
|
echo "${ERROR} Failed to install Git. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
if [ -d "$Distro_DIR" ]; then
|
||||||
|
echo "${YELLOW}$Distro_DIR exists. Updating the repository... ${RESET}"
|
||||||
|
cd "$Distro_DIR"
|
||||||
|
git stash && git pull
|
||||||
|
chmod +x install.sh
|
||||||
|
./install.sh
|
||||||
|
else
|
||||||
|
echo "${MAGENTA}$Distro_DIR does not exist. Cloning the repository...${RESET}"
|
||||||
|
git clone --depth=1 "$Github_URL" "$Distro_DIR"
|
||||||
|
cd "$Distro_DIR"
|
||||||
|
chmod +x install.sh
|
||||||
|
./install.sh
|
||||||
|
fi
|
||||||
35
install-scripts/00-base.sh
Executable file
35
install-scripts/00-base.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# base-devel + archlinux-keyring #
|
||||||
|
|
||||||
|
base=(
|
||||||
|
base-devel
|
||||||
|
archlinux-keyring
|
||||||
|
findutils
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_base.log"
|
||||||
|
|
||||||
|
# Installation of main components with pacman
|
||||||
|
echo -e "\nInstalling ${SKY_BLUE}base-devel${RESET} and ${SKY_BLUE}archlinux-keyring${RESET}..."
|
||||||
|
|
||||||
|
for PKG1 in "${base[@]}"; do
|
||||||
|
echo "Installing $PKG1 with pacman..."
|
||||||
|
install_package_pacman "$PKG1" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# https://github.com/JaKooLit
|
|
||||||
|
|
||||||
# edit your packages desired here.
|
|
||||||
# WARNING! If you remove packages here, dotfiles may not work properly.
|
|
||||||
# and also, ensure that packages are present in AUR and official Arch Repo
|
|
||||||
|
|
||||||
# add packages wanted here
|
|
||||||
Extra=(
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
hypr_package=(
|
|
||||||
cliphist
|
|
||||||
dunst
|
|
||||||
foot
|
|
||||||
grim
|
|
||||||
gvfs
|
|
||||||
gvfs-mtp
|
|
||||||
jq
|
|
||||||
network-manager-applet
|
|
||||||
pamixer
|
|
||||||
pavucontrol
|
|
||||||
pipewire-alsa
|
|
||||||
playerctl
|
|
||||||
polkit-kde-agent
|
|
||||||
python-requests
|
|
||||||
qt5ct
|
|
||||||
slurp
|
|
||||||
swappy
|
|
||||||
swayidle
|
|
||||||
swaylock-effects
|
|
||||||
swww
|
|
||||||
waybar
|
|
||||||
wget
|
|
||||||
wl-clipboard
|
|
||||||
wofi
|
|
||||||
xdg-user-dirs
|
|
||||||
)
|
|
||||||
|
|
||||||
# the following packages can be deleted. however, dotfiles may not work properly
|
|
||||||
hypr_package_2=(
|
|
||||||
brightnessctl
|
|
||||||
btop
|
|
||||||
cava
|
|
||||||
ffmpegthumbs
|
|
||||||
gnome-system-monitor
|
|
||||||
mousepad
|
|
||||||
mpv
|
|
||||||
nvtop
|
|
||||||
nwg-look-bin
|
|
||||||
swaybg
|
|
||||||
viewnior
|
|
||||||
vim
|
|
||||||
wlsunset
|
|
||||||
)
|
|
||||||
|
|
||||||
fonts=(
|
|
||||||
adobe-source-code-pro-fonts
|
|
||||||
noto-fonts-emoji
|
|
||||||
otf-font-awesome
|
|
||||||
otf-font-awesome-4
|
|
||||||
ttf-droid
|
|
||||||
ttf-fira-code
|
|
||||||
ttf-jetbrains-mono
|
|
||||||
ttf-jetbrains-mono-nerd
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
############## WARNING DO NOT EDIT BEYOND THIS LINE if you dont know what you are doing! ######################################
|
|
||||||
|
|
||||||
# Set some colors for output messages
|
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +%d-%H%M%S)_hypr-pkgs.log"
|
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
|
||||||
|
|
||||||
# Set the script to exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Installation of main components
|
|
||||||
printf "\n%s - Installing hyprland packages.... \n" "${NOTE}"
|
|
||||||
|
|
||||||
for PKG1 in "${hypr_package[@]}" "${hypr_package_2[@]}" "${fonts[@]}" "${Extra[@]}"; do
|
|
||||||
install_package "$PKG1" 2>&1 | tee -a "$LOG"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\e[1A\e[K${ERROR} - $PKG1 install had failed, please check the install.log"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
clear
|
|
||||||
127
install-scripts/01-hypr-pkgs.sh
Executable file
127
install-scripts/01-hypr-pkgs.sh
Executable file
@@ -0,0 +1,127 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Hyprland Packages #
|
||||||
|
|
||||||
|
# edit your packages desired here.
|
||||||
|
# WARNING! If you remove packages here, dotfiles may not work properly.
|
||||||
|
# and also, ensure that packages are present in AUR and official Arch Repo
|
||||||
|
|
||||||
|
# add packages wanted here
|
||||||
|
Extra=(
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
hypr_package=(
|
||||||
|
#aylurs-gtk-shell
|
||||||
|
bc
|
||||||
|
cliphist
|
||||||
|
curl
|
||||||
|
grim
|
||||||
|
gvfs
|
||||||
|
gvfs-mtp
|
||||||
|
hyprpolkitagent
|
||||||
|
imagemagick
|
||||||
|
inxi
|
||||||
|
jq
|
||||||
|
kitty
|
||||||
|
kvantum
|
||||||
|
libspng
|
||||||
|
nano
|
||||||
|
network-manager-applet
|
||||||
|
pamixer
|
||||||
|
pavucontrol
|
||||||
|
playerctl
|
||||||
|
python-requests
|
||||||
|
python-pyquery
|
||||||
|
qt5ct
|
||||||
|
qt6ct
|
||||||
|
qt6-svg
|
||||||
|
rofi
|
||||||
|
slurp
|
||||||
|
swappy
|
||||||
|
swaync
|
||||||
|
swww
|
||||||
|
unzip # needed later
|
||||||
|
wallust
|
||||||
|
waybar
|
||||||
|
wget
|
||||||
|
wl-clipboard
|
||||||
|
wlogout
|
||||||
|
xdg-user-dirs
|
||||||
|
xdg-utils
|
||||||
|
yad
|
||||||
|
)
|
||||||
|
|
||||||
|
# the following packages can be deleted. however, dotfiles may not work properly
|
||||||
|
hypr_package_2=(
|
||||||
|
brightnessctl
|
||||||
|
btop
|
||||||
|
cava
|
||||||
|
loupe
|
||||||
|
fastfetch
|
||||||
|
gnome-system-monitor
|
||||||
|
mousepad
|
||||||
|
mpv
|
||||||
|
mpv-mpris
|
||||||
|
nvtop
|
||||||
|
nwg-look
|
||||||
|
nwg-displays
|
||||||
|
pacman-contrib
|
||||||
|
qalculate-gtk
|
||||||
|
yt-dlp
|
||||||
|
)
|
||||||
|
|
||||||
|
# List of packages to uninstall as it conflicts some packages
|
||||||
|
uninstall=(
|
||||||
|
aylurs-gtk-shell
|
||||||
|
dunst
|
||||||
|
cachyos-hyprland-settings
|
||||||
|
mako
|
||||||
|
rofi
|
||||||
|
wallust-git
|
||||||
|
rofi-lbonn-wayland
|
||||||
|
rofi-lbonn-wayland-git
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hypr-pkgs.log"
|
||||||
|
|
||||||
|
# conflicting packages removal
|
||||||
|
overall_failed=0
|
||||||
|
printf "\n%s - ${SKY_BLUE}Removing some packages${RESET} as it conflicts with KooL's Hyprland Dots \n" "${NOTE}"
|
||||||
|
for PKG in "${uninstall[@]}"; do
|
||||||
|
uninstall_package "$PKG" 2>&1 | tee -a "$LOG"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
overall_failed=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $overall_failed -ne 0 ]; then
|
||||||
|
echo -e "${ERROR} Some packages failed to uninstall. Please check the log."
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Installation of main components
|
||||||
|
printf "\n%s - Installing ${SKY_BLUE}KooL's Hyprland necessary packages${RESET} .... \n" "${NOTE}"
|
||||||
|
|
||||||
|
for PKG1 in "${hypr_package[@]}" "${hypr_package_2[@]}" "${Extra[@]}"; do
|
||||||
|
install_package "$PKG1" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
89
install-scripts/02-Final-Check.sh
Executable file
89
install-scripts/02-Final-Check.sh
Executable file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Final checking if packages are installed
|
||||||
|
# NOTE: These package check are only the essentials
|
||||||
|
|
||||||
|
packages=(
|
||||||
|
cliphist
|
||||||
|
kvantum
|
||||||
|
rofi-wayland
|
||||||
|
imagemagick
|
||||||
|
swaync
|
||||||
|
swww
|
||||||
|
wallust
|
||||||
|
waybar
|
||||||
|
wl-clipboard
|
||||||
|
wlogout
|
||||||
|
kitty
|
||||||
|
hypridle
|
||||||
|
hyprlock
|
||||||
|
hyprland
|
||||||
|
)
|
||||||
|
|
||||||
|
# Local packages that should be in /usr/local/bin/
|
||||||
|
local_pkgs_installed=(
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
# Determine the directory where the script is located
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/00_CHECK-$(date +%d-%H%M%S)_installed.log"
|
||||||
|
|
||||||
|
printf "\n%s - Final Check if all ${SKY_BLUE}Essential packages${RESET} were installed \n" "${NOTE}"
|
||||||
|
# Initialize an empty array to hold missing packages
|
||||||
|
missing=()
|
||||||
|
local_missing=()
|
||||||
|
|
||||||
|
# Function to check if a packages are installed using pacman
|
||||||
|
is_installed_pacman() {
|
||||||
|
pacman -Qi "$1" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Loop through each package
|
||||||
|
for pkg in "${packages[@]}"; do
|
||||||
|
# Check if the packages are installed
|
||||||
|
if ! is_installed_pacman "$pkg"; then
|
||||||
|
missing+=("$pkg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check for local packages
|
||||||
|
for pkg1 in "${local_pkgs_installed[@]}"; do
|
||||||
|
if ! [ -f "/usr/local/bin/$pkg1" ]; then
|
||||||
|
local_missing+=("$pkg1")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Log missing packages
|
||||||
|
if [ ${#missing[@]} -eq 0 ] && [ ${#local_missing[@]} -eq 0 ]; then
|
||||||
|
echo "${OK} GREAT! All ${YELLOW}essential packages${RESET} have been successfully installed." | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
if [ ${#missing[@]} -ne 0 ]; then
|
||||||
|
echo "${WARN} The following packages are not installed and will be logged:"
|
||||||
|
for pkg in "${missing[@]}"; do
|
||||||
|
echo "${WARNING}$pkg${RESET}"
|
||||||
|
echo "$pkg" >> "$LOG"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${#local_missing[@]} -ne 0 ]; then
|
||||||
|
echo "${WARN} The following local packages are missing from /usr/local/bin/ and will be logged:"
|
||||||
|
for pkg1 in "${local_missing[@]}"; do
|
||||||
|
echo "${WARNING}$pkg1${REST} is not installed. Can't find it in /usr/local/bin/"
|
||||||
|
echo "$pkg1" >> "$LOG"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${NOTE} Missing packages logged at $(date)" >> "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
132
install-scripts/Global_functions.sh
Executable file
132
install-scripts/Global_functions.sh
Executable file
@@ -0,0 +1,132 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Global Functions for Scripts #
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Set some colors for output messages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA="$(tput setaf 5)"
|
||||||
|
ORANGE="$(tput setaf 214)"
|
||||||
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
GREEN="$(tput setaf 2)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
SKY_BLUE="$(tput setaf 6)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
|
# Create Directory for Install Logs
|
||||||
|
if [ ! -d Install-Logs ]; then
|
||||||
|
mkdir Install-Logs
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show progress function
|
||||||
|
show_progress() {
|
||||||
|
local pid=$1
|
||||||
|
local package_name=$2
|
||||||
|
local spin_chars=("●○○○○○○○○○" "○●○○○○○○○○" "○○●○○○○○○○" "○○○●○○○○○○" "○○○○●○○○○" \
|
||||||
|
"○○○○○●○○○○" "○○○○○○●○○○" "○○○○○○○●○○" "○○○○○○○○●○" "○○○○○○○○○●")
|
||||||
|
local i=0
|
||||||
|
|
||||||
|
tput civis
|
||||||
|
printf "\r${NOTE} Installing ${YELLOW}%s${RESET} ..." "$package_name"
|
||||||
|
|
||||||
|
while ps -p $pid &> /dev/null; do
|
||||||
|
printf "\r${NOTE} Installing ${YELLOW}%s${RESET} %s" "$package_name" "${spin_chars[i]}"
|
||||||
|
i=$(( (i + 1) % 10 ))
|
||||||
|
sleep 0.3
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\r${NOTE} Installing ${YELLOW}%s${RESET} ... Done!%-20s \n" "$package_name" ""
|
||||||
|
tput cnorm
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Function to install packages with pacman
|
||||||
|
install_package_pacman() {
|
||||||
|
# Check if package is already installed
|
||||||
|
if pacman -Q "$1" &>/dev/null ; then
|
||||||
|
echo -e "${INFO} ${MAGENTA}$1${RESET} is already installed. Skipping..."
|
||||||
|
else
|
||||||
|
# Run pacman and redirect all output to a log file
|
||||||
|
(
|
||||||
|
stdbuf -oL sudo pacman -S --noconfirm "$1" 2>&1
|
||||||
|
) >> "$LOG" 2>&1 &
|
||||||
|
PID=$!
|
||||||
|
show_progress $PID "$1"
|
||||||
|
|
||||||
|
# Double check if package is installed
|
||||||
|
if pacman -Q "$1" &>/dev/null ; then
|
||||||
|
echo -e "${OK} Package ${YELLOW}$1${RESET} has been successfully installed!"
|
||||||
|
else
|
||||||
|
echo -e "\n${ERROR} ${YELLOW}$1${RESET} failed to install. Please check the $LOG. You may need to install manually."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ISAUR=$(command -v yay || command -v paru)
|
||||||
|
# Function to install packages with either yay or paru
|
||||||
|
install_package() {
|
||||||
|
if $ISAUR -Q "$1" &>> /dev/null ; then
|
||||||
|
echo -e "${INFO} ${MAGENTA}$1${RESET} is already installed. Skipping..."
|
||||||
|
else
|
||||||
|
(
|
||||||
|
stdbuf -oL $ISAUR -S --noconfirm "$1" 2>&1
|
||||||
|
) >> "$LOG" 2>&1 &
|
||||||
|
PID=$!
|
||||||
|
show_progress $PID "$1"
|
||||||
|
|
||||||
|
# Double check if package is installed
|
||||||
|
if $ISAUR -Q "$1" &>> /dev/null ; then
|
||||||
|
echo -e "${OK} Package ${YELLOW}$1${RESET} has been successfully installed!"
|
||||||
|
else
|
||||||
|
# Something is missing, exiting to review log
|
||||||
|
echo -e "\n${ERROR} ${YELLOW}$1${RESET} failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to just install packages with either yay or paru without checking if installed
|
||||||
|
install_package_f() {
|
||||||
|
(
|
||||||
|
stdbuf -oL $ISAUR -S --noconfirm "$1" 2>&1
|
||||||
|
) >> "$LOG" 2>&1 &
|
||||||
|
PID=$!
|
||||||
|
show_progress $PID "$1"
|
||||||
|
|
||||||
|
# Double check if package is installed
|
||||||
|
if $ISAUR -Q "$1" &>> /dev/null ; then
|
||||||
|
echo -e "${OK} Package ${YELLOW}$1${RESET} has been successfully installed!"
|
||||||
|
else
|
||||||
|
# Something is missing, exiting to review log
|
||||||
|
echo -e "\n${ERROR} ${YELLOW}$1${RESET} failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Function for removing packages
|
||||||
|
uninstall_package() {
|
||||||
|
local pkg="$1"
|
||||||
|
|
||||||
|
# Checking if package is installed
|
||||||
|
if pacman -Qi "$pkg" &>/dev/null; then
|
||||||
|
echo -e "${NOTE} removing $pkg ..."
|
||||||
|
sudo pacman -R --noconfirm "$pkg" 2>&1 | tee -a "$LOG" | grep -v "error: target not found"
|
||||||
|
|
||||||
|
if ! pacman -Qi "$pkg" &>/dev/null; then
|
||||||
|
echo -e "\e[1A\e[K${OK} $pkg removed."
|
||||||
|
else
|
||||||
|
echo -e "\e[1A\e[K${ERROR} $pkg Removal failed. No actions required."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${INFO} Package $pkg not installed, skipping."
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
36
install-scripts/InputGroup.sh
Executable file
36
install-scripts/InputGroup.sh
Executable file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Adding users into input group #
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_input.log"
|
||||||
|
|
||||||
|
# Check if the 'input' group exists
|
||||||
|
if grep -q '^input:' /etc/group; then
|
||||||
|
echo "${OK} ${MAGENTA}input${RESET} group exists."
|
||||||
|
else
|
||||||
|
echo "${NOTE} ${MAGENTA}input${RESET} group doesn't exist. Creating ${MAGENTA}input${RESET} group..."
|
||||||
|
sudo groupadd input
|
||||||
|
echo "${MAGENTA}input${RESET} group created" >> "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add the user to the 'input' group
|
||||||
|
sudo usermod -aG input "$(whoami)"
|
||||||
|
echo "${OK} ${YELLOW}user${RESET} added to the ${MAGENTA}input${RESET} group. Changes will take effect after you log out and log back in." >> "$LOG"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
138
install-scripts/ags.sh
Executable file
138
install-scripts/ags.sh
Executable file
@@ -0,0 +1,138 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Aylur's GTK Shell v 1.9.0 #
|
||||||
|
# for desktop overview
|
||||||
|
|
||||||
|
if [[ $USE_PRESET = [Yy] ]]; then
|
||||||
|
source ./preset.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
ags=(
|
||||||
|
typescript
|
||||||
|
npm
|
||||||
|
meson
|
||||||
|
glib2-devel
|
||||||
|
gjs
|
||||||
|
gtk3
|
||||||
|
gtk-layer-shell
|
||||||
|
upower
|
||||||
|
networkmanager
|
||||||
|
gobject-introspection
|
||||||
|
libdbusmenu-gtk3
|
||||||
|
libsoup3
|
||||||
|
)
|
||||||
|
|
||||||
|
# specific tags to download
|
||||||
|
ags_tag="v1.9.0"
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_ags.log"
|
||||||
|
MLOG="install-$(date +%d-%H%M%S)_ags2.log"
|
||||||
|
|
||||||
|
# Check if AGS is installed
|
||||||
|
if command -v ags &>/dev/null; then
|
||||||
|
AGS_VERSION=$(ags -v | awk '{print $NF}')
|
||||||
|
if [[ "$AGS_VERSION" == "1.9.0" ]]; then
|
||||||
|
printf "${INFO} ${MAGENTA}Aylur's GTK Shell v1.9.0${RESET} is already installed. Skipping installation."
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Installation of main components
|
||||||
|
printf "\n%s - Installing ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET} Dependencies \n" "${NOTE}"
|
||||||
|
|
||||||
|
# Installing ags Dependencies
|
||||||
|
for PKG1 in "${ags[@]}"; do
|
||||||
|
install_package "$PKG1" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# ags v1
|
||||||
|
printf "${NOTE} Install and Compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}..\n"
|
||||||
|
|
||||||
|
# Check if directory exists and remove it
|
||||||
|
if [ -d "ags_v1.9.0" ]; then
|
||||||
|
printf "${NOTE} Removing existing ags directory...\n"
|
||||||
|
rm -rf "ags_v1.9.0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "${INFO} Kindly Standby...cloning and compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}...\n"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
# Clone repository with the specified tag and capture git output into MLOG
|
||||||
|
if git clone --depth=1 https://github.com/JaKooLit/ags_v1.9.0.git; then
|
||||||
|
cd ags_v1.9.0 || exit 1
|
||||||
|
npm install
|
||||||
|
meson setup build
|
||||||
|
if sudo meson install -C build 2>&1 | tee -a "$MLOG"; then
|
||||||
|
printf "\n${OK} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG"
|
||||||
|
|
||||||
|
# Patch installed AGS launcher to ensure GI typelibs in /usr/local/lib are discoverable in GJS ESM
|
||||||
|
printf "${NOTE} Applying AGS launcher patch for GI typelibs search path...\n"
|
||||||
|
LAUNCHER="/usr/local/share/com.github.Aylur.ags/com.github.Aylur.ags"
|
||||||
|
if sudo test -f "$LAUNCHER"; then
|
||||||
|
# 1) Switch from GIRepository ESM import to GLib and drop deprecated prepend_* calls
|
||||||
|
sudo sed -i \
|
||||||
|
-e 's|^import GIR from "gi://GIRepository?version=2.0";$|import GLib from "gi://GLib";|' \
|
||||||
|
-e '/GIR.Repository.prepend_search_path/d' \
|
||||||
|
-e '/GIR.Repository.prepend_library_path/d' \
|
||||||
|
"$LAUNCHER"
|
||||||
|
|
||||||
|
# 2) Inject GI_TYPELIB_PATH export right after the GLib import
|
||||||
|
sudo awk '{print} $0 ~ /^import GLib from "gi:\/\/GLib";$/ {print "const __old = GLib.getenv(\"GI_TYPELIB_PATH\");"; print "GLib.setenv(\"GI_TYPELIB_PATH\", \"/usr/local/lib\" + (__old ? \":\" + __old : \"\"), true);"}' "$LAUNCHER" | sudo tee "$LAUNCHER" >/dev/null
|
||||||
|
|
||||||
|
printf "${OK} AGS launcher patched.\n"
|
||||||
|
|
||||||
|
# Create an env-setting wrapper for AGS to ensure GI typelibs/libs are discoverable
|
||||||
|
printf "${NOTE} Creating env wrapper /usr/local/bin/ags...\n"
|
||||||
|
MAIN_JS="/usr/local/share/com.github.Aylur.ags/com.github.Aylur.ags"
|
||||||
|
if ! sudo test -f "$MAIN_JS"; then
|
||||||
|
MAIN_JS="/usr/share/com.github.Aylur.ags/com.github.Aylur.ags"
|
||||||
|
fi
|
||||||
|
sudo tee /usr/local/bin/ags >/dev/null <<WRAP
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$HOME" 2>/dev/null || true
|
||||||
|
# Ensure GI typelibs and native libs are discoverable before gjs ESM loads
|
||||||
|
export GI_TYPELIB_PATH="/usr/local/lib64:/usr/local/lib:/usr/local/lib64/girepository-1.0:/usr/local/lib/girepository-1.0:/usr/lib64/girepository-1.0:/usr/lib/girepository-1.0:/usr/lib64/ags:/usr/lib/ags:${GI_TYPELIB_PATH-}"
|
||||||
|
export LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:${LD_LIBRARY_PATH-}"
|
||||||
|
exec /usr/bin/gjs -m "$MAIN_JS" -- "$@"
|
||||||
|
WRAP
|
||||||
|
sudo chmod 0755 /usr/local/bin/ags
|
||||||
|
# Ensure ESM entry is readable by gjs
|
||||||
|
sudo chmod 0644 /usr/local/share/com.github.Aylur.ags/com.github.Aylur.ags 2>/dev/null || true
|
||||||
|
sudo chmod 0644 /usr/share/com.github.Aylur.ags/com.github.Aylur.ags 2>/dev/null || true
|
||||||
|
printf "${OK} AGS wrapper installed at /usr/local/bin/ags\n"
|
||||||
|
else
|
||||||
|
printf "${WARN} Launcher not found at $LAUNCHER, skipping patch.\n"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "\n${ERROR} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Installation failed\n " 2>&1 | tee -a "$MLOG"
|
||||||
|
fi
|
||||||
|
# Move logs to Install-Logs directory
|
||||||
|
mv "$MLOG" ../Install-Logs/ || true
|
||||||
|
cd ..
|
||||||
|
else
|
||||||
|
echo -e "\n${ERROR} Failed to download ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Please check your connection\n" 2>&1 | tee -a "$LOG"
|
||||||
|
mv "$MLOG" ../Install-Logs/ || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
116
install-scripts/battery-monitor.sh
Normal file
116
install-scripts/battery-monitor.sh
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Battery Monitor and Low Battery Notification #
|
||||||
|
|
||||||
|
battery=(
|
||||||
|
acpi
|
||||||
|
libnotify
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_battery-monitor.log"
|
||||||
|
|
||||||
|
# Battery Monitor
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}Battery Monitor${RESET} Packages...\n"
|
||||||
|
for BAT in "${battery[@]}"; do
|
||||||
|
install_package "$BAT" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create battery monitoring script
|
||||||
|
printf "${NOTE} Creating ${YELLOW}battery monitoring${RESET} script...\n"
|
||||||
|
|
||||||
|
BATTERY_SCRIPT="$HOME/.config/hypr/scripts/battery-monitor.sh"
|
||||||
|
mkdir -p "$HOME/.config/hypr/scripts"
|
||||||
|
|
||||||
|
cat > "$BATTERY_SCRIPT" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
# Low Battery Notification Script
|
||||||
|
# Monitors battery level and sends notifications
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
LOW_BATTERY_THRESHOLD=20
|
||||||
|
CRITICAL_BATTERY_THRESHOLD=10
|
||||||
|
CHECK_INTERVAL=60 # Check every 60 seconds
|
||||||
|
|
||||||
|
# Track notification state to avoid spam
|
||||||
|
NOTIFIED_LOW=false
|
||||||
|
NOTIFIED_CRITICAL=false
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# Get battery percentage
|
||||||
|
BATTERY_LEVEL=$(acpi -b | grep -P -o '[0-9]+(?=%)')
|
||||||
|
BATTERY_STATUS=$(acpi -b | grep -o 'Discharging\|Charging\|Full')
|
||||||
|
|
||||||
|
# Only send notifications when discharging
|
||||||
|
if [ "$BATTERY_STATUS" = "Discharging" ]; then
|
||||||
|
if [ "$BATTERY_LEVEL" -le "$CRITICAL_BATTERY_THRESHOLD" ] && [ "$NOTIFIED_CRITICAL" = false ]; then
|
||||||
|
notify-send -u critical -i battery-caution "Critical Battery" "Battery level is at ${BATTERY_LEVEL}%! Please plug in your charger immediately."
|
||||||
|
NOTIFIED_CRITICAL=true
|
||||||
|
NOTIFIED_LOW=true
|
||||||
|
elif [ "$BATTERY_LEVEL" -le "$LOW_BATTERY_THRESHOLD" ] && [ "$NOTIFIED_LOW" = false ]; then
|
||||||
|
notify-send -u normal -i battery-low "Low Battery" "Battery level is at ${BATTERY_LEVEL}%. Consider plugging in your charger."
|
||||||
|
NOTIFIED_LOW=true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Reset notification flags when charging or full
|
||||||
|
NOTIFIED_LOW=false
|
||||||
|
NOTIFIED_CRITICAL=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep "$CHECK_INTERVAL"
|
||||||
|
done
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$BATTERY_SCRIPT"
|
||||||
|
|
||||||
|
printf "${OK} Battery monitoring script created at ${YELLOW}$BATTERY_SCRIPT${RESET}\n"
|
||||||
|
|
||||||
|
# Create systemd user service
|
||||||
|
printf "${NOTE} Creating ${YELLOW}systemd user service${RESET} for battery monitoring...\n"
|
||||||
|
|
||||||
|
SYSTEMD_DIR="$HOME/.config/systemd/user"
|
||||||
|
mkdir -p "$SYSTEMD_DIR"
|
||||||
|
|
||||||
|
cat > "$SYSTEMD_DIR/battery-monitor.service" << EOF
|
||||||
|
[Unit]
|
||||||
|
Description=Battery Level Monitor
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=$BATTERY_SCRIPT
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
printf "${OK} Systemd service created\n"
|
||||||
|
|
||||||
|
# Enable and start the service
|
||||||
|
printf "${NOTE} Enabling and starting ${YELLOW}battery-monitor${RESET} service...\n"
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable battery-monitor.service 2>&1 | tee -a "$LOG"
|
||||||
|
systemctl --user start battery-monitor.service 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf "${OK} Battery monitor service is now running!\n"
|
||||||
|
printf "${INFO} You can check status with: ${YELLOW}systemctl --user status battery-monitor${RESET}\n"
|
||||||
|
printf "${INFO} To stop: ${YELLOW}systemctl --user stop battery-monitor${RESET}\n"
|
||||||
|
printf "${INFO} To disable: ${YELLOW}systemctl --user disable battery-monitor${RESET}\n"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
58
install-scripts/bluetooth.sh
Normal file → Executable file
58
install-scripts/bluetooth.sh
Normal file → Executable file
@@ -1,4 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Bluetooth Stuff #
|
||||||
|
|
||||||
blue=(
|
blue=(
|
||||||
bluez
|
bluez
|
||||||
@@ -6,53 +8,31 @@ bluez-utils
|
|||||||
blueman
|
blueman
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set some colors for output messages
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
# Change the working directory to the parent directory of the script
|
||||||
LOG="install-$(date +%d-%H%M%S)_bluetooth.log"
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
# Set the script to exit on error
|
echo "Failed to source Global_functions.sh"
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_bluetooth.log"
|
||||||
|
|
||||||
# Bluetooth
|
# Bluetooth
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}Bluetooth${RESET} Packages...\n"
|
||||||
printf "${NOTE} Installing Bluetooth Packages...\n"
|
|
||||||
for BLUE in "${blue[@]}"; do
|
for BLUE in "${blue[@]}"; do
|
||||||
install_package "$BLUE" 2>&1 | tee -a "$LOG"
|
install_package "$BLUE" "$LOG"
|
||||||
[ $? -ne 0 ] && { echo -e "\e[1A\e[K${ERROR} - $BLUE install had failed, please check the install.log"; exit 1; }
|
|
||||||
done
|
done
|
||||||
|
|
||||||
printf " Activating Bluetooth Services...\n"
|
printf " Activating ${YELLOW}Bluetooth${RESET} Services...\n"
|
||||||
sudo systemctl enable --now bluetooth.service 2>&1 | tee -a "$LOG"
|
sudo systemctl enable --now bluetooth.service 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
clear
|
printf "\n%.0s" {1..2}
|
||||||
126
install-scripts/disk-monitor.sh
Normal file
126
install-scripts/disk-monitor.sh
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Disk Space Monitor #
|
||||||
|
|
||||||
|
disk=(
|
||||||
|
libnotify
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_disk-monitor.log"
|
||||||
|
|
||||||
|
# Disk Monitor
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}Disk Monitor${RESET} Packages...\n"
|
||||||
|
for DISK in "${disk[@]}"; do
|
||||||
|
install_package "$DISK" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create disk monitoring script
|
||||||
|
printf "${NOTE} Creating ${YELLOW}disk space monitoring${RESET} script...\n"
|
||||||
|
|
||||||
|
DISK_SCRIPT="$HOME/.config/hypr/scripts/disk-monitor.sh"
|
||||||
|
mkdir -p "$HOME/.config/hypr/scripts"
|
||||||
|
|
||||||
|
cat > "$DISK_SCRIPT" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
# Disk Space Monitoring Script
|
||||||
|
# Monitors disk usage and sends notifications
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
DISK_WARNING_THRESHOLD=80
|
||||||
|
DISK_CRITICAL_THRESHOLD=90
|
||||||
|
CHECK_INTERVAL=300 # Check every 5 minutes
|
||||||
|
|
||||||
|
# Track notification state
|
||||||
|
declare -A NOTIFIED_WARNING
|
||||||
|
declare -A NOTIFIED_CRITICAL
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# Get disk usage for all mounted filesystems
|
||||||
|
df -h | grep '^/dev/' | while read -r line; do
|
||||||
|
DEVICE=$(echo "$line" | awk '{print $1}')
|
||||||
|
MOUNT=$(echo "$line" | awk '{print $6}')
|
||||||
|
USAGE=$(echo "$line" | awk '{print $5}' | sed 's/%//')
|
||||||
|
|
||||||
|
# Skip if usage is not a number
|
||||||
|
if ! [[ "$USAGE" =~ ^[0-9]+$ ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check disk usage
|
||||||
|
if [ "$USAGE" -ge "$DISK_CRITICAL_THRESHOLD" ]; then
|
||||||
|
if [ "${NOTIFIED_CRITICAL[$MOUNT]}" != "true" ]; then
|
||||||
|
notify-send -u critical -i drive-harddisk "Critical Disk Space" "Mount point $MOUNT is ${USAGE}% full!\nDevice: $DEVICE"
|
||||||
|
NOTIFIED_CRITICAL[$MOUNT]="true"
|
||||||
|
NOTIFIED_WARNING[$MOUNT]="true"
|
||||||
|
fi
|
||||||
|
elif [ "$USAGE" -ge "$DISK_WARNING_THRESHOLD" ]; then
|
||||||
|
if [ "${NOTIFIED_WARNING[$MOUNT]}" != "true" ]; then
|
||||||
|
notify-send -u normal -i drive-harddisk "Low Disk Space" "Mount point $MOUNT is ${USAGE}% full\nDevice: $DEVICE"
|
||||||
|
NOTIFIED_WARNING[$MOUNT]="true"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Reset notifications when usage drops
|
||||||
|
if [ "$USAGE" -lt $((DISK_WARNING_THRESHOLD - 5)) ]; then
|
||||||
|
NOTIFIED_WARNING[$MOUNT]="false"
|
||||||
|
NOTIFIED_CRITICAL[$MOUNT]="false"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep "$CHECK_INTERVAL"
|
||||||
|
done
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$DISK_SCRIPT"
|
||||||
|
|
||||||
|
printf "${OK} Disk monitoring script created at ${YELLOW}$DISK_SCRIPT${RESET}\n"
|
||||||
|
|
||||||
|
# Create systemd user service
|
||||||
|
printf "${NOTE} Creating ${YELLOW}systemd user service${RESET} for disk monitoring...\n"
|
||||||
|
|
||||||
|
SYSTEMD_DIR="$HOME/.config/systemd/user"
|
||||||
|
mkdir -p "$SYSTEMD_DIR"
|
||||||
|
|
||||||
|
cat > "$SYSTEMD_DIR/disk-monitor.service" << EOF
|
||||||
|
[Unit]
|
||||||
|
Description=Disk Space Monitor
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=$DISK_SCRIPT
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
printf "${OK} Systemd service created\n"
|
||||||
|
|
||||||
|
# Enable and start the service
|
||||||
|
printf "${NOTE} Enabling and starting ${YELLOW}disk-monitor${RESET} service...\n"
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable disk-monitor.service 2>&1 | tee -a "$LOG"
|
||||||
|
systemctl --user start disk-monitor.service 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf "${OK} Disk monitor service is now running!\n"
|
||||||
|
printf "${INFO} You can check status with: ${YELLOW}systemctl --user status disk-monitor${RESET}\n"
|
||||||
|
printf "${INFO} View disk usage: ${YELLOW}df -h${RESET}\n"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
37
install-scripts/dotfiles-main.sh
Executable file
37
install-scripts/dotfiles-main.sh
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Hyprland-Dots to download from main #
|
||||||
|
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if Hyprland-Dots exists
|
||||||
|
printf "${NOTE} Cloning and Installing ${SKY_BLUE}KooL's Hyprland Dots${RESET}....\n"
|
||||||
|
|
||||||
|
if [ -d Hyprland-Dots ]; then
|
||||||
|
cd Hyprland-Dots
|
||||||
|
git stash && git pull
|
||||||
|
chmod +x copy.sh
|
||||||
|
./copy.sh
|
||||||
|
else
|
||||||
|
if git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots; then
|
||||||
|
cd Hyprland-Dots || exit 1
|
||||||
|
chmod +x copy.sh
|
||||||
|
./copy.sh
|
||||||
|
else
|
||||||
|
echo -e "$ERROR Can't download ${YELLOW}KooL's Hyprland-Dots${RESET} . Check your internet connection"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Set some colors for output messages
|
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +'%d-%H%M%S')_dots.log"
|
|
||||||
|
|
||||||
printf "${NOTE} Downloading Hyprland dots...\n"
|
|
||||||
|
|
||||||
if git clone https://github.com/JaKooLit/Hyprland-Dots.git; then
|
|
||||||
cd Hyprland-Dots || exit 1
|
|
||||||
chmod +x copy.sh
|
|
||||||
./copy.sh 2>&1 | tee -a "$LOG"
|
|
||||||
else
|
|
||||||
echo -e "${ERROR} Cant download Hyprland-Dots" 2>&1 | tee -a "$LOG"
|
|
||||||
fi
|
|
||||||
|
|
||||||
48
install-scripts/fonts.sh
Executable file
48
install-scripts/fonts.sh
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Fonts #
|
||||||
|
|
||||||
|
# These fonts are minimun required for pre-configured dots to work. You can add here as required
|
||||||
|
# WARNING! If you remove packages here, dotfiles may not work properly.
|
||||||
|
# and also, ensure that packages are present in AUR and official Arch Repo
|
||||||
|
|
||||||
|
fonts=(
|
||||||
|
adobe-source-code-pro-fonts
|
||||||
|
noto-fonts-emoji
|
||||||
|
otf-font-awesome
|
||||||
|
ttf-droid
|
||||||
|
ttf-fira-code
|
||||||
|
ttf-fantasque-nerd
|
||||||
|
ttf-jetbrains-mono
|
||||||
|
ttf-jetbrains-mono-nerd
|
||||||
|
ttf-victor-mono
|
||||||
|
noto-fonts
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_fonts.log"
|
||||||
|
|
||||||
|
|
||||||
|
# Installation of main components
|
||||||
|
printf "\n%s - Installing necessary ${SKY_BLUE}fonts${RESET}.... \n" "${NOTE}"
|
||||||
|
|
||||||
|
for PKG1 in "${fonts[@]}"; do
|
||||||
|
install_package "$PKG1" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
105
install-scripts/gtk_themes.sh
Normal file → Executable file
105
install-scripts/gtk_themes.sh
Normal file → Executable file
@@ -1,83 +1,50 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# GTK Themes & ICONS and Sourcing from a different Repo #
|
||||||
|
|
||||||
# Determine the directory where the script is located
|
engine=(
|
||||||
|
unzip
|
||||||
|
gtk-engine-murrine
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
# Change the working directory to the parent directory of the script
|
# Change the working directory to the parent directory of the script
|
||||||
PARENT_DIR="$SCRIPT_DIR/.."
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
cd "$PARENT_DIR" || exit 1
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Source the global functions script
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
echo "Failed to source Global_functions.sh"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +%d-%H%M%S)_themes.log"
|
|
||||||
|
|
||||||
# Set some colors for output messages
|
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +%d-%H%M%S)_themes.log"
|
|
||||||
|
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
|
||||||
|
|
||||||
# Set the script to exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# installing unzip package to unzip theme packages
|
|
||||||
for PKG1 in unzip; do
|
# Set the name of the log file to include the current date and time
|
||||||
install_package "$PKG1" 2>&1 | tee -a "$LOG"
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_themes.log"
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\033[1A\033[K${ERROR} - $PKG1 install had failed, please check the install.log"
|
|
||||||
exit 1
|
# installing engine needed for gtk themes
|
||||||
fi
|
for PKG1 in "${engine[@]}"; do
|
||||||
|
install_package "$PKG1" "$LOG"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Themes and cursors
|
# Check if the directory exists and delete it if present
|
||||||
printf "${NOTE} Installing Tokyo Theme GTK packages...\n"
|
if [ -d "GTK-themes-icons" ]; then
|
||||||
if wget https://github.com/ljmill/tokyo-night-icons/releases/download/v0.2.0/TokyoNight-SE.tar.bz2; then
|
echo "$NOTE GTK themes and Icons directory exist..deleting..." 2>&1 | tee -a "$LOG"
|
||||||
mkdir -p ~/.icons
|
rm -rf "GTK-themes-icons" 2>&1 | tee -a "$LOG"
|
||||||
tar -xvjf TokyoNight-SE.tar.bz2 -C ~/.icons
|
|
||||||
mkdir -p ~/.themes
|
|
||||||
unzip -q "assets/tokyo-themes/Tokyonight-Dark-B.zip" -d ~/.themes || true
|
|
||||||
unzip -q "assets/tokyo-themes/Tokyonight-Light-B.zip" -d ~/.themes || true
|
|
||||||
else
|
|
||||||
echo -e "${ERROR} Download failed for Tokyo Theme GTK packages."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
clear
|
echo "$NOTE Cloning ${SKY_BLUE}GTK themes and Icons${RESET} repository..." 2>&1 | tee -a "$LOG"
|
||||||
|
if git clone --depth=1 https://github.com/JaKooLit/GTK-themes-icons.git ; then
|
||||||
|
cd GTK-themes-icons
|
||||||
|
chmod +x auto-extract.sh
|
||||||
|
./auto-extract.sh
|
||||||
|
cd ..
|
||||||
|
echo "$OK Extracted GTK Themes & Icons to ~/.icons & ~/.themes directories" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo "$ERROR Download failed for GTK themes and Icons.." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
76
install-scripts/hyprland.sh
Normal file → Executable file
76
install-scripts/hyprland.sh
Normal file → Executable file
@@ -1,53 +1,51 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Main Hyprland Package #
|
||||||
|
|
||||||
|
hypr_eco=(
|
||||||
|
hypridle
|
||||||
|
hyprlock
|
||||||
|
)
|
||||||
|
|
||||||
hypr=(
|
hypr=(
|
||||||
hyprland
|
hyprland
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set some colors for output messages
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
# Change the working directory to the parent directory of the script
|
||||||
LOG="install-$(date +%d-%H%M%S)_hyprland.log"
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
# Set the script to exit on error
|
echo "Failed to source Global_functions.sh"
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_hyprland.log"
|
||||||
|
|
||||||
|
# Check if Hyprland is installed
|
||||||
|
if command -v Hyprland >/dev/null 2>&1; then
|
||||||
|
printf "$NOTE - ${YELLOW} Hyprland is already installed.${RESET} No action required.\n"
|
||||||
|
else
|
||||||
|
printf "$INFO - Hyprland not found. ${SKY_BLUE} Installing Hyprland...${RESET}\n"
|
||||||
|
for HYPRLAND in "${hypr[@]}"; do
|
||||||
|
install_package "$HYPRLAND" "$LOG"
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
# Hyprland
|
# Hyprland -eco packages
|
||||||
|
printf "${NOTE} - Installing ${SKY_BLUE}other Hyprland-eco packages${RESET} .......\n"
|
||||||
printf "${NOTE} Installing Hyprland Packages...\n"
|
for HYPR in "${hypr_eco[@]}"; do
|
||||||
for HYPR in "${hypr[@]}"; do
|
if ! command -v "$HYPR" >/dev/null 2>&1; then
|
||||||
install_package "$HYPR" 2>&1 | tee -a "$LOG"
|
printf "$INFO - ${YELLOW}$HYPR${RESET} not found. Installing ${YELLOW}$HYPR...${RESET}\n"
|
||||||
[ $? -ne 0 ] && { echo -e "\e[1A\e[K${ERROR} - $HYPR install had failed, please check the install.log"; exit 1; }
|
install_package "$HYPR" "$LOG"
|
||||||
|
else
|
||||||
|
printf "$NOTE - ${YELLOW} $HYPR is already installed.${RESET} No action required.\n"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
clear
|
printf "\n%.0s" {1..2}
|
||||||
150
install-scripts/nvidia.sh
Normal file → Executable file
150
install-scripts/nvidia.sh
Normal file → Executable file
@@ -1,68 +1,49 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Nvidia Stuffs #
|
||||||
|
|
||||||
nvidia_pkg=(
|
nvidia_pkg=(
|
||||||
nvidia-dkms
|
nvidia-dkms
|
||||||
nvidia-settings
|
nvidia-settings
|
||||||
nvidia-utils
|
nvidia-utils
|
||||||
libva
|
libva
|
||||||
libva-nvidia-driver-git
|
libva-nvidia-driver
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set some colors for output messages
|
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
LOG="install-$(date +%d-%H%M%S)_nvidia.log"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
# Set the script to exit on error
|
# Source the global functions script
|
||||||
set -e
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry, I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_nvidia.log"
|
||||||
|
|
||||||
|
|
||||||
# nvidia stuff
|
# nvidia stuff
|
||||||
printf "${YELLOW}Installing Nvidia Hyprland...${RESET}\n"
|
printf "${YELLOW} Checking for other hyprland packages and remove if any..${RESET}\n"
|
||||||
if pacman -Qs hyprland > /dev/null; then
|
if pacman -Qs hyprland > /dev/null; then
|
||||||
printf "${YELLOW} Hyprland detected uninstalling to install Hyprland-nvidia-git...${RESET}\n"
|
printf "${YELLOW} Hyprland detected. removing to install Hyprland from official repo...${RESET}\n"
|
||||||
for hyprnvi in hyprland hyprland-nvidia hyprland-git hyprland-nvidia-hidpi-git; do
|
for hyprnvi in hyprland-git hyprland-nvidia hyprland-nvidia-git hyprland-nvidia-hidpi-git; do
|
||||||
sudo pacman -R --noconfirm "$hyprnvi" 2>/dev/null | tee -a "$LOG" || true
|
sudo pacman -R --noconfirm "$hyprnvi" 2>/dev/null | tee -a "$LOG" || true
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# install hyprland-nvidia-git
|
|
||||||
install_package "hyprland-nvidia-git" 2>&1 | tee -a "$LOG"
|
|
||||||
|
|
||||||
# Install additional Nvidia packages
|
# Install additional Nvidia packages
|
||||||
printf "${YELLOW} Installing addition Nvidia packages...\n"
|
printf "${YELLOW} Installing ${SKY_BLUE}Nvidia Packages and Linux headers${RESET}...\n"
|
||||||
for krnl in $(cat /usr/lib/modules/*/pkgbase); do
|
for krnl in $(cat /usr/lib/modules/*/pkgbase); do
|
||||||
for NVIDIA in "${krnl}-headers" "${nvidia_pkg[@]}"; do
|
for NVIDIA in "${krnl}-headers" "${nvidia_pkg[@]}"; do
|
||||||
install_package "$NVIDIA" 2>&1 | tee -a "$LOG"
|
install_package "$NVIDIA" "$LOG"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -71,63 +52,74 @@ if grep -qE '^MODULES=.*nvidia. *nvidia_modeset.*nvidia_uvm.*nvidia_drm' /etc/mk
|
|||||||
echo "Nvidia modules already included in /etc/mkinitcpio.conf" 2>&1 | tee -a "$LOG"
|
echo "Nvidia modules already included in /etc/mkinitcpio.conf" 2>&1 | tee -a "$LOG"
|
||||||
else
|
else
|
||||||
sudo sed -Ei 's/^(MODULES=\([^\)]*)\)/\1 nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' /etc/mkinitcpio.conf 2>&1 | tee -a "$LOG"
|
sudo sed -Ei 's/^(MODULES=\([^\)]*)\)/\1 nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' /etc/mkinitcpio.conf 2>&1 | tee -a "$LOG"
|
||||||
echo "Nvidia modules added in /etc/mkinitcpio.conf"
|
echo "${OK} Nvidia modules added in /etc/mkinitcpio.conf"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "${INFO} Rebuilding ${YELLOW}Initramfs${RESET}...\n" 2>&1 | tee -a "$LOG"
|
||||||
sudo mkinitcpio -P 2>&1 | tee -a "$LOG"
|
sudo mkinitcpio -P 2>&1 | tee -a "$LOG"
|
||||||
printf "\n\n\n"
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
# Additional Nvidia steps
|
# Additional Nvidia steps
|
||||||
NVEA="/etc/modprobe.d/nvidia.conf"
|
NVEA="/etc/modprobe.d/nvidia.conf"
|
||||||
if [ -f "$NVEA" ]; then
|
if [ -f "$NVEA" ]; then
|
||||||
printf "${OK} Seems like nvidia-drm modeset=1 is already added in your system..moving on.\n"
|
printf "${INFO} Seems like ${YELLOW}nvidia_drm modeset=1 fbdev=1${RESET} is already added in your system..moving on."
|
||||||
printf "\n"
|
printf "\n"
|
||||||
else
|
else
|
||||||
printf "\n"
|
printf "\n"
|
||||||
printf "${YELLOW} Adding options to $NVEA..."
|
printf "${YELLOW} Adding options to $NVEA..."
|
||||||
sudo echo -e "options nvidia-drm modeset=1" | sudo tee -a /etc/modprobe.d/nvidia.conf 2>&1 | tee -a "$LOG"
|
sudo echo -e "options nvidia_drm modeset=1 fbdev=1" | sudo tee -a /etc/modprobe.d/nvidia.conf 2>&1 | tee -a "$LOG"
|
||||||
printf "\n"
|
printf "\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# additional for GRUB users
|
# Additional for GRUB users
|
||||||
# Check if /etc/default/grub exists
|
|
||||||
if [ -f /etc/default/grub ]; then
|
if [ -f /etc/default/grub ]; then
|
||||||
# Check if nvidia_drm.modeset=1 is already present
|
printf "${INFO} ${YELLOW}GRUB${RESET} bootloader detected\n" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
# Check if nvidia-drm.modeset=1 is present
|
||||||
if ! sudo grep -q "nvidia-drm.modeset=1" /etc/default/grub; then
|
if ! sudo grep -q "nvidia-drm.modeset=1" /etc/default/grub; then
|
||||||
# Add nvidia_drm.modeset=1 to GRUB_CMDLINE_LINUX_DEFAULT
|
sudo sed -i -e 's/\(GRUB_CMDLINE_LINUX_DEFAULT=".*\)"/\1 nvidia-drm.modeset=1"/' /etc/default/grub
|
||||||
sudo sed -i 's/\(GRUB_CMDLINE_LINUX_DEFAULT=".*\)"/\1 nvidia-drm.modeset=1"/' /etc/default/grub
|
printf "${OK} nvidia-drm.modeset=1 added to /etc/default/grub\n" 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if nvidia_drm.fbdev=1 is present
|
||||||
|
if ! sudo grep -q "nvidia_drm.fbdev=1" /etc/default/grub; then
|
||||||
|
sudo sed -i -e 's/\(GRUB_CMDLINE_LINUX_DEFAULT=".*\)"/\1 nvidia_drm.fbdev=1"/' /etc/default/grub
|
||||||
|
printf "${OK} nvidia_drm.fbdev=1 added to /etc/default/grub\n" 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
# Regenerate GRUB configuration
|
# Regenerate GRUB configuration
|
||||||
|
if sudo grep -q "nvidia-drm.modeset=1" /etc/default/grub || sudo grep -q "nvidia_drm.fbdev=1" /etc/default/grub; then
|
||||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
echo "nvidia-drm.modeset=1 added to /etc/default/grub"
|
printf "${INFO} ${YELLOW}GRUB${RESET} configuration regenerated\n" 2>&1 | tee -a "$LOG"
|
||||||
else
|
|
||||||
echo "nvidia-drm.modeset=1 is already present in /etc/default/grub"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "/etc/default/grub does not exist"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Blacklist nouveau
|
printf "${OK} Additional steps for ${YELLOW}GRUB${RESET} completed\n" 2>&1 | tee -a "$LOG"
|
||||||
read -n1 -rep "${CAT} Would you like to blacklist nouveau? (y/n)" response
|
|
||||||
echo
|
|
||||||
if [[ $response =~ ^[Yy]$ ]]; then
|
|
||||||
NOUVEAU="/etc/modprobe.d/nouveau.conf"
|
|
||||||
if [ -f "$NOUVEAU" ]; then
|
|
||||||
printf "${OK} Seems like nouveau is already blacklisted..moving on.\n"
|
|
||||||
else
|
|
||||||
printf "\n"
|
|
||||||
echo "blacklist nouveau" | sudo tee -a "$NOUVEAU" 2>&1 | tee -a "$LOG"
|
|
||||||
printf "${NOTE} has been added to $NOUVEAU.\n"
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
# To completely blacklist nouveau (See wiki.archlinux.org/title/Kernel_module#Blacklisting 6.1)
|
|
||||||
if [ -f "/etc/modprobe.d/blacklist.conf" ]; then
|
|
||||||
echo "install nouveau /bin/true" | sudo tee -a "/etc/modprobe.d/blacklist.conf" 2>&1 | tee -a "$LOG"
|
|
||||||
else
|
|
||||||
echo "install nouveau /bin/true" | sudo tee "/etc/modprobe.d/blacklist.conf" 2>&1 | tee -a "$LOG"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf "${NOTE} Skipping nouveau blacklisting.\n"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
clear
|
# Additional for systemd-boot users
|
||||||
|
if [ -f /boot/loader/loader.conf ]; then
|
||||||
|
printf "${INFO} ${YELLOW}systemd-boot${RESET} bootloader detected\n" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
backup_count=$(find /boot/loader/entries/ -type f -name "*.conf.bak" | wc -l)
|
||||||
|
conf_count=$(find /boot/loader/entries/ -type f -name "*.conf" | wc -l)
|
||||||
|
|
||||||
|
if [ "$backup_count" -ne "$conf_count" ]; then
|
||||||
|
find /boot/loader/entries/ -type f -name "*.conf" | while read imgconf; do
|
||||||
|
# Backup conf
|
||||||
|
sudo cp "$imgconf" "$imgconf.bak"
|
||||||
|
printf "${INFO} Backup created for systemd-boot loader: %s\n" "$imgconf" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
# Clean up options and update with NVIDIA settings
|
||||||
|
sdopt=$(grep -w "^options" "$imgconf" | sed 's/\b nvidia-drm.modeset=[^ ]*\b//g' | sed 's/\b nvidia_drm.fbdev=[^ ]*\b//g')
|
||||||
|
sudo sed -i "/^options/c${sdopt} nvidia-drm.modeset=1 nvidia_drm.fbdev=1" "$imgconf" 2>&1 | tee -a "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "${OK} Additional steps for ${YELLOW}systemd-boot${RESET} completed\n" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
printf "${NOTE} ${YELLOW}systemd-boot${RESET} is already configured...\n" 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
39
install-scripts/nvidia_nouveau.sh
Executable file
39
install-scripts/nvidia_nouveau.sh
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Nvidia Blacklist #
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_nvidia.log"
|
||||||
|
|
||||||
|
printf "${INFO} ${SKY_BLUE}blacklist nouveau${RESET}...\n"
|
||||||
|
# Blacklist nouveau
|
||||||
|
NOUVEAU="/etc/modprobe.d/nouveau.conf"
|
||||||
|
if [ -f "$NOUVEAU" ]; then
|
||||||
|
printf "${OK} Seems like ${YELLOW}nouveau${RESET} is already blacklisted..moving on.\n"
|
||||||
|
else
|
||||||
|
echo "blacklist nouveau" | sudo tee -a "$NOUVEAU" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
# To completely blacklist nouveau (See wiki.archlinux.org/title/Kernel_module#Blacklisting 6.1)
|
||||||
|
if [ -f "/etc/modprobe.d/blacklist.conf" ]; then
|
||||||
|
echo "install nouveau /bin/true" | sudo tee -a "/etc/modprobe.d/blacklist.conf" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo "install nouveau /bin/true" | sudo tee "/etc/modprobe.d/blacklist.conf" 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
58
install-scripts/pacman.sh
Executable file
58
install-scripts/pacman.sh
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# pacman adding up extra-spices #
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_pacman.log"
|
||||||
|
|
||||||
|
echo -e "${NOTE} Adding ${MAGENTA}Extra Spice${RESET} in pacman.conf ... ${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
pacman_conf="/etc/pacman.conf"
|
||||||
|
|
||||||
|
# Remove comments '#' from specific lines
|
||||||
|
lines_to_edit=(
|
||||||
|
"Color"
|
||||||
|
"CheckSpace"
|
||||||
|
"VerbosePkgLists"
|
||||||
|
"ParallelDownloads"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Uncomment specified lines if they are commented out
|
||||||
|
for line in "${lines_to_edit[@]}"; do
|
||||||
|
if grep -q "^#$line" "$pacman_conf"; then
|
||||||
|
sudo sed -i "s/^#$line/$line/" "$pacman_conf"
|
||||||
|
echo -e "${CAT} Uncommented: $line ${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo -e "${CAT} $line is already uncommented. ${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Add "ILoveCandy" below ParallelDownloads if it doesn't exist
|
||||||
|
if grep -q "^ParallelDownloads" "$pacman_conf" && ! grep -q "^ILoveCandy" "$pacman_conf"; then
|
||||||
|
sudo sed -i "/^ParallelDownloads/a ILoveCandy" "$pacman_conf"
|
||||||
|
echo -e "${CAT} Added ${MAGENTA}ILoveCandy${RESET} after ${MAGENTA}ParallelDownloads${RESET}. ${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo -e "${CAT} It seems ${YELLOW}ILoveCandy${RESET} already exists ${RESET} moving on.." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${CAT} ${MAGENTA}Pacman.conf${RESET} spicing up completed ${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
|
||||||
|
# updating pacman.conf
|
||||||
|
printf "\n%s - ${SKY_BLUE}Synchronizing Pacman Repo${RESET}\n" "${INFO}"
|
||||||
|
sudo pacman -Sy
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
52
install-scripts/paru.sh
Normal file → Executable file
52
install-scripts/paru.sh
Normal file → Executable file
@@ -1,29 +1,53 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Paru AUR Helper #
|
||||||
|
# NOTE: If yay is already installed, paru will not be installed #
|
||||||
|
|
||||||
|
pkg="paru-bin"
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="install-$(date +%d-%H%M%S)_yay.log"
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Set some colors for output messages
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
ORANGE=$(tput setaf 166)
|
MAGENTA="$(tput setaf 5)"
|
||||||
YELLOW=$(tput setaf 3)
|
ORANGE="$(tput setaf 214)"
|
||||||
RESET=$(tput sgr0)
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
GREEN="$(tput setaf 2)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
SKY_BLUE="$(tput setaf 6)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
# Create Directory for Install Logs
|
||||||
LOG="install-$(date +%d-%H%M%S)_paru.log"
|
if [ ! -d Install-Logs ]; then
|
||||||
|
mkdir Install-Logs
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for AUR helper and install if not found
|
# Check for AUR helper and install if not found
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
ISAUR=$(command -v yay || command -v paru)
|
||||||
|
|
||||||
if [ -n "$ISAUR" ]; then
|
if [ -n "$ISAUR" ]; then
|
||||||
printf "\n%s - AUR helper was located, moving on.\n" "${OK}"
|
printf "\n%s - ${SKY_BLUE}AUR helper${RESET} already installed, moving on.\n" "${OK}"
|
||||||
else
|
else
|
||||||
printf "\n%s - AUR helper was NOT located\n" "$WARN"
|
printf "\n%s - Installing ${SKY_BLUE}$pkg${RESET} from AUR\n" "${NOTE}"
|
||||||
printf "\n%s - Installing paru from AUR\n" "${NOTE}"
|
|
||||||
git clone https://aur.archlinux.org/paru-bin.git || { printf "%s - Failed to clone paru from AUR\n" "${ERROR}"; exit 1; }
|
# Check if directory exists and remove it
|
||||||
cd paru-bin || { printf "%s - Failed to enter paru-bin directory\n" "${ERROR}"; exit 1; }
|
if [ -d "$pkg" ]; then
|
||||||
makepkg -si --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to install paru from AUR\n" "${ERROR}"; exit 1; }
|
rm -rf "$pkg"
|
||||||
|
fi
|
||||||
|
git clone https://aur.archlinux.org/$pkg.git || { printf "%s - Failed to clone ${YELLOW}$pkg${RESET} from AUR\n" "${ERROR}"; exit 1; }
|
||||||
|
cd $pkg || { printf "%s - Failed to enter $pkg directory\n" "${ERROR}"; exit 1; }
|
||||||
|
makepkg -si --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to install ${YELLOW}$pkg${RESET} from AUR\n" "${ERROR}"; exit 1; }
|
||||||
|
|
||||||
|
# moving install logs in to Install-Logs directory
|
||||||
|
mv install*.log ../Install-Logs/ || true
|
||||||
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update system before proceeding
|
# Update system before proceeding
|
||||||
@@ -32,4 +56,4 @@ ISAUR=$(command -v yay || command -v paru)
|
|||||||
|
|
||||||
$ISAUR -Syu --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to update system\n" "${ERROR}"; exit 1; }
|
$ISAUR -Syu --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to update system\n" "${ERROR}"; exit 1; }
|
||||||
|
|
||||||
clear
|
printf "\n%.0s" {1..2}
|
||||||
54
install-scripts/pipewire.sh
Executable file
54
install-scripts/pipewire.sh
Executable file
@@ -0,0 +1,54 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Pipewire and Pipewire Audio Stuff #
|
||||||
|
|
||||||
|
pipewire=(
|
||||||
|
pipewire
|
||||||
|
wireplumber
|
||||||
|
pipewire-audio
|
||||||
|
pipewire-alsa
|
||||||
|
pipewire-pulse
|
||||||
|
sof-firmware
|
||||||
|
)
|
||||||
|
|
||||||
|
# added this as some reports script didnt install this.
|
||||||
|
# basically force reinstall
|
||||||
|
pipewire_2=(
|
||||||
|
pipewire-pulse
|
||||||
|
)
|
||||||
|
|
||||||
|
############## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##############
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_pipewire.log"
|
||||||
|
|
||||||
|
# Disabling pulseaudio to avoid conflicts and logging output
|
||||||
|
echo -e "${NOTE} Disabling pulseaudio to avoid conflicts..."
|
||||||
|
systemctl --user disable --now pulseaudio.socket pulseaudio.service >> "$LOG" 2>&1 || true
|
||||||
|
|
||||||
|
# Pipewire
|
||||||
|
echo -e "${NOTE} Installing ${SKY_BLUE}Pipewire${RESET} Packages..."
|
||||||
|
for PIPEWIRE in "${pipewire[@]}"; do
|
||||||
|
install_package "$PIPEWIRE" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
for PIPEWIRE2 in "${pipewire_2[@]}"; do
|
||||||
|
install_package_pacman "$PIPEWIRE" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "${NOTE} Activating Pipewire Services..."
|
||||||
|
# Redirect systemctl output to log file
|
||||||
|
systemctl --user enable --now pipewire.socket pipewire-pulse.socket wireplumber.service 2>&1 | tee -a "$LOG"
|
||||||
|
systemctl --user enable --now pipewire.service 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
echo -e "\n${OK} Pipewire Installation and services setup complete!" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
41
install-scripts/quickshell.sh
Executable file
41
install-scripts/quickshell.sh
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# quickshell - for desktop overview replacing AGS
|
||||||
|
|
||||||
|
if [[ $USE_PRESET = [Yy] ]]; then
|
||||||
|
source ./preset.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
quick=(
|
||||||
|
qt6-5compat
|
||||||
|
quickshell
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || {
|
||||||
|
echo "${ERROR} Failed to change directory to $PARENT_DIR"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_quick.log"
|
||||||
|
|
||||||
|
# Installation of main components
|
||||||
|
printf "\n%s - Installing ${SKY_BLUE}Quick Shell ${RESET} for Desktop Overview \n" "${NOTE}"
|
||||||
|
|
||||||
|
for PKG1 in "${quick[@]}"; do
|
||||||
|
install_package "$PKG1" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
76
install-scripts/rog.sh
Normal file → Executable file
76
install-scripts/rog.sh
Normal file → Executable file
@@ -1,61 +1,43 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Asus ROG Laptops #
|
||||||
|
|
||||||
# Determine the directory where the script is located
|
rog=(
|
||||||
|
power-profiles-daemon
|
||||||
|
asusctl
|
||||||
|
supergfxctl
|
||||||
|
rog-control-center
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
# Change the working directory to the parent directory of the script
|
# Change the working directory to the parent directory of the script
|
||||||
PARENT_DIR="$SCRIPT_DIR/.."
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
cd "$PARENT_DIR" || exit 1
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Source the global functions script
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
echo "Failed to source Global_functions.sh"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +%d-%H%M%S)_rog.log"
|
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
|
||||||
|
|
||||||
# Set the script to exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_rog.log"
|
||||||
|
|
||||||
### Install software for Asus ROG laptops ###
|
### Install software for Asus ROG laptops ###
|
||||||
|
|
||||||
printf " Installing ASUS ROG packages...\n"
|
printf " Installing ${SKY_BLUE}ASUS ROG packages${RESET}...\n"
|
||||||
for ASUS in asusctl supergfxctl rog-control-center; do
|
for ASUS in "${rog[@]}"; do
|
||||||
install_package "$ASUS" 2>&1 | tee -a "$LOG"
|
install_package "$ASUS" "$LOG"
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\e[1A\e[K${ERROR} - $ASUS install had failed, please check the install.log"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
printf " Activating ROG services...\n"
|
|
||||||
sudo systemctl enable --now supergfxd 2>&1 | tee -a "$LOG"
|
|
||||||
|
|
||||||
clear
|
printf " Activating ROG services...\n"
|
||||||
|
sudo systemctl enable supergfxd 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf " enabling power-profiles-daemon...\n"
|
||||||
|
sudo systemctl enable power-profiles-daemon 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
145
install-scripts/sddm.sh
Normal file → Executable file
145
install-scripts/sddm.sh
Normal file → Executable file
@@ -1,119 +1,72 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# SDDM Log-in Manager #
|
||||||
|
|
||||||
# Determine the directory where the script is located
|
sddm=(
|
||||||
|
qt6-declarative
|
||||||
|
qt6-svg
|
||||||
|
qt6-virtualkeyboard
|
||||||
|
qt6-multimedia-ffmpeg
|
||||||
|
sddm
|
||||||
|
)
|
||||||
|
|
||||||
|
# login managers to attempt to disable
|
||||||
|
login=(
|
||||||
|
lightdm
|
||||||
|
gdm3
|
||||||
|
gdm
|
||||||
|
lxdm
|
||||||
|
lxdm-gtk3
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
# Change the working directory to the parent directory of the script
|
# Change the working directory to the parent directory of the script
|
||||||
PARENT_DIR="$SCRIPT_DIR/.."
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
cd "$PARENT_DIR" || exit 1
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Source the global functions script
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
echo "Failed to source Global_functions.sh"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +%d-%H%M%S)_sddm.log"
|
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
|
||||||
|
|
||||||
# Set the script to exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# SDDM
|
|
||||||
|
|
||||||
# Check if SDDM is already installed
|
|
||||||
if pacman -Qs sddm > /dev/null; then
|
|
||||||
# Prompt user to manually install sddm-git to remove SDDM
|
|
||||||
read -n1 -rep "SDDM is already installed. Would you like to manually install sddm-git to remove it? This requires manual intervention. (y/n)" manual_install_sddm
|
|
||||||
echo
|
|
||||||
if [[ $manual_install_sddm =~ ^[Yy]$ ]]; then
|
|
||||||
$ISAUR -S sddm-git 2>&1 | tee -a "$LOG"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install SDDM and Catppuccin theme
|
# Set the name of the log file to include the current date and time
|
||||||
printf "${NOTE} Installing SDDM-git........\n"
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_sddm.log"
|
||||||
for package in sddm-git; do
|
|
||||||
install_package "$package" 2>&1 | tee -a "$LOG"
|
|
||||||
[ $? -ne 0 ] && { echo -e "\e[1A\e[K${ERROR} - $package install has failed, please check the install.log"; exit 1; }
|
# Install SDDM and SDDM theme
|
||||||
|
printf "${NOTE} Installing sddm and dependencies........\n"
|
||||||
|
for package in "${sddm[@]}"; do
|
||||||
|
install_package "$package" "$LOG"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
# Check if other login managers installed and disabling its service before enabling sddm
|
# Check if other login managers installed and disabling its service before enabling sddm
|
||||||
for login_manager in lightdm gdm lxdm lxdm-gtk3; do
|
for login_manager in "${login[@]}"; do
|
||||||
if pacman -Qs "$login_manager" > /dev/null; then
|
if pacman -Qs "$login_manager" > /dev/null 2>&1; then
|
||||||
echo "disabling $login_manager..."
|
sudo systemctl disable "$login_manager.service" >> "$LOG" 2>&1
|
||||||
sudo systemctl disable "$login_manager.service" 2>&1 | tee -a "$LOG"
|
echo "$login_manager disabled." >> "$LOG" 2>&1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
printf " Activating sddm service........\n"
|
# Double check with systemctl
|
||||||
sudo systemctl enable sddm
|
for manager in "${login[@]}"; do
|
||||||
|
if systemctl is-active --quiet "$manager" > /dev/null 2>&1; then
|
||||||
|
echo "$manager is active, disabling it..." >> "$LOG" 2>&1
|
||||||
|
sudo systemctl disable "$manager" --now >> "$LOG" 2>&1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# Set up SDDM
|
printf "\n%.0s" {1..1}
|
||||||
echo -e "${NOTE} Setting up the login screen."
|
printf "${INFO} Activating sddm service........\n"
|
||||||
sddm_conf_dir=/etc/sddm.conf.d
|
sudo systemctl enable sddm
|
||||||
[ ! -d "$sddm_conf_dir" ] && { printf "$CAT - $sddm_conf_dir not found, creating...\n"; sudo mkdir "$sddm_conf_dir" 2>&1 | tee -a "$LOG"; }
|
|
||||||
|
|
||||||
wayland_sessions_dir=/usr/share/wayland-sessions
|
wayland_sessions_dir=/usr/share/wayland-sessions
|
||||||
[ ! -d "$wayland_sessions_dir" ] && { printf "$CAT - $wayland_sessions_dir not found, creating...\n"; sudo mkdir "$wayland_sessions_dir" 2>&1 | tee -a "$LOG"; }
|
[ ! -d "$wayland_sessions_dir" ] && { printf "$CAT - $wayland_sessions_dir not found, creating...\n"; sudo mkdir "$wayland_sessions_dir" 2>&1 | tee -a "$LOG"; }
|
||||||
sudo cp assets/hyprland.desktop "$wayland_sessions_dir/" 2>&1 | tee -a "$LOG"
|
|
||||||
|
|
||||||
# SDDM-themes
|
printf "\n%.0s" {1..2}
|
||||||
read -n1 -rep "${CAT} OPTIONAL - Would you like to install SDDM themes? (y/n)" install_sddm_theme
|
|
||||||
if [[ $install_sddm_theme =~ ^[Yy]$ ]]; then
|
|
||||||
while true; do
|
|
||||||
read -rp "${CAT} Which SDDM Theme you want to install? Catpuccin or Tokyo Night 'c' or 't': " choice
|
|
||||||
case "$choice" in
|
|
||||||
c|C)
|
|
||||||
printf "\n%s - Installing Catpuccin SDDM Theme\n" "${NOTE}"
|
|
||||||
for sddm_theme in sddm-catppuccin-git; do
|
|
||||||
install_package "$sddm_theme" 2>&1 | tee -a "$LOG"
|
|
||||||
[ $? -ne 0 ] && { echo -e "\e[1A\e[K${ERROR} - $sddm_theme install has failed, please check the install.log"; }
|
|
||||||
done
|
|
||||||
echo -e "[Theme]\nCurrent=catppuccin" | sudo tee -a "$sddm_conf_dir/10-theme.conf" 2>&1 | tee -a "$LOG"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
t|T)
|
|
||||||
printf "\n%s - Installing Tokyo SDDM Theme\n" "${NOTE}"
|
|
||||||
for sddm_theme in sddm-theme-tokyo-night; do
|
|
||||||
install_package "$sddm_theme" 2>&1 | tee -a "$LOG"
|
|
||||||
[ $? -ne 0 ] && { echo -e "\e[1A\e[K${ERROR} - $sddm_theme install has failed, please check the install.log"; }
|
|
||||||
done
|
|
||||||
echo -e "[Theme]\nCurrent=tokyo-night-sddm" | sudo tee -a "$sddm_conf_dir/10-theme.conf" 2>&1 | tee -a "$LOG"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
printf "%s - Invalid choice. Please enter 'c' or 't'\n" "${ERROR}"
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
clear
|
|
||||||
114
install-scripts/sddm_theme.sh
Executable file
114
install-scripts/sddm_theme.sh
Executable file
@@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# SDDM themes #
|
||||||
|
|
||||||
|
source_theme="https://github.com/JaKooLit/simple-sddm-2.git"
|
||||||
|
theme_name="simple_sddm_2"
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_sddm_theme.log"
|
||||||
|
|
||||||
|
# SDDM-themes
|
||||||
|
printf "${INFO} Installing ${SKY_BLUE}Additional SDDM Theme${RESET}\n"
|
||||||
|
|
||||||
|
# Check if /usr/share/sddm/themes/$theme_name exists and remove if it does
|
||||||
|
if [ -d "/usr/share/sddm/themes/$theme_name" ]; then
|
||||||
|
sudo rm -rf "/usr/share/sddm/themes/$theme_name"
|
||||||
|
echo -e "\e[1A\e[K${OK} - Removed existing $theme_name directory." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if $theme_name directory exists in the current directory and remove if it does
|
||||||
|
if [ -d "$theme_name" ]; then
|
||||||
|
rm -rf "$theme_name"
|
||||||
|
echo -e "\e[1A\e[K${OK} - Removed existing $theme_name directory from the current location." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone the repository
|
||||||
|
if git clone --depth=1 "$source_theme" "$theme_name"; then
|
||||||
|
if [ ! -d "$theme_name" ]; then
|
||||||
|
echo "${ERROR} Failed to clone the repository." | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create themes directory if it doesn't exist
|
||||||
|
if [ ! -d "/usr/share/sddm/themes" ]; then
|
||||||
|
sudo mkdir -p /usr/share/sddm/themes
|
||||||
|
echo "${OK} - Directory '/usr/share/sddm/themes' created." | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Move cloned theme to the themes directory
|
||||||
|
sudo mv "$theme_name" "/usr/share/sddm/themes/$theme_name" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
# setting up SDDM theme
|
||||||
|
sddm_conf="/etc/sddm.conf"
|
||||||
|
BACKUP_SUFFIX=".bak"
|
||||||
|
|
||||||
|
echo -e "${NOTE} Setting up the login screen." | tee -a "$LOG"
|
||||||
|
|
||||||
|
# Backup the sddm.conf file if it exists
|
||||||
|
if [ -f "$sddm_conf" ]; then
|
||||||
|
echo "Backing up $sddm_conf" | tee -a "$LOG"
|
||||||
|
sudo cp "$sddm_conf" "$sddm_conf$BACKUP_SUFFIX" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo "$sddm_conf does not exist, creating a new one." | tee -a "$LOG"
|
||||||
|
sudo touch "$sddm_conf" 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the [Theme] section exists
|
||||||
|
if grep -q '^\[Theme\]' "$sddm_conf"; then
|
||||||
|
# Update the Current= line under [Theme]
|
||||||
|
sudo sed -i "/^\[Theme\]/,/^\[/{s/^\s*Current=.*/Current=$theme_name/}" "$sddm_conf" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
# If no Current= line was found and replaced, append it after the [Theme] section
|
||||||
|
if ! grep -q '^\s*Current=' "$sddm_conf"; then
|
||||||
|
sudo sed -i "/^\[Theme\]/a Current=$theme_name" "$sddm_conf" 2>&1 | tee -a "$LOG"
|
||||||
|
echo "Appended Current=$theme_name under [Theme] in $sddm_conf" | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo "Updated Current=$theme_name in $sddm_conf" | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Append the [Theme] section at the end if it doesn't exist
|
||||||
|
echo -e "\n[Theme]\nCurrent=$theme_name" | sudo tee -a "$sddm_conf" > /dev/null
|
||||||
|
echo "Added [Theme] section with Current=$theme_name in $sddm_conf" | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add [General] section with InputMethod=qtvirtualkeyboard if it doesn't exist
|
||||||
|
if ! grep -q '^\[General\]' "$sddm_conf"; then
|
||||||
|
echo -e "\n[General]\nInputMethod=qtvirtualkeyboard" | sudo tee -a "$sddm_conf" > /dev/null
|
||||||
|
echo "Added [General] section with InputMethod=qtvirtualkeyboard in $sddm_conf" | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
# Update InputMethod line if section exists
|
||||||
|
if grep -q '^\s*InputMethod=' "$sddm_conf"; then
|
||||||
|
sudo sed -i '/^\[General\]/,/^\[/{s/^\s*InputMethod=.*/InputMethod=qtvirtualkeyboard/}' "$sddm_conf" 2>&1 | tee -a "$LOG"
|
||||||
|
echo "Updated InputMethod to qtvirtualkeyboard in $sddm_conf" | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
sudo sed -i '/^\[General\]/a InputMethod=qtvirtualkeyboard' "$sddm_conf" 2>&1 | tee -a "$LOG"
|
||||||
|
echo "Appended InputMethod=qtvirtualkeyboard under [General] in $sddm_conf" | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Replace current background from assets
|
||||||
|
sudo cp -r assets/sddm.png "/usr/share/sddm/themes/$theme_name/Backgrounds/default" 2>&1 | tee -a "$LOG"
|
||||||
|
sudo sed -i 's|^wallpaper=".*"|wallpaper="Backgrounds/default"|' "/usr/share/sddm/themes/$theme_name/theme.conf" 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
echo "${OK} - ${MAGENTA}Additional ${YELLOW}$theme_name SDDM Theme${RESET} successfully installed." | tee -a "$LOG"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "${ERROR} - Failed to clone the sddm theme repository. Please check your internet connection." | tee -a "$LOG" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
156
install-scripts/temp-monitor.sh
Normal file
156
install-scripts/temp-monitor.sh
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Temperature Monitor - CPU/GPU Temperature Alerts #
|
||||||
|
|
||||||
|
temp=(
|
||||||
|
lm_sensors
|
||||||
|
libnotify
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_temp-monitor.log"
|
||||||
|
|
||||||
|
# Temperature Monitor
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}Temperature Monitor${RESET} Packages...\n"
|
||||||
|
for TEMP in "${temp[@]}"; do
|
||||||
|
install_package "$TEMP" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Detect sensors
|
||||||
|
printf "${NOTE} Detecting ${YELLOW}hardware sensors${RESET}...\n"
|
||||||
|
sudo sensors-detect --auto 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
# Create temperature monitoring script
|
||||||
|
printf "${NOTE} Creating ${YELLOW}temperature monitoring${RESET} script...\n"
|
||||||
|
|
||||||
|
TEMP_SCRIPT="$HOME/.config/hypr/scripts/temp-monitor.sh"
|
||||||
|
mkdir -p "$HOME/.config/hypr/scripts"
|
||||||
|
|
||||||
|
cat > "$TEMP_SCRIPT" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
# Temperature Monitoring Script
|
||||||
|
# Monitors CPU and GPU temperatures and sends alerts
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
CPU_TEMP_WARNING=75
|
||||||
|
CPU_TEMP_CRITICAL=85
|
||||||
|
GPU_TEMP_WARNING=75
|
||||||
|
GPU_TEMP_CRITICAL=85
|
||||||
|
CHECK_INTERVAL=30 # Check every 30 seconds
|
||||||
|
|
||||||
|
# Track notification state
|
||||||
|
NOTIFIED_CPU_WARN=false
|
||||||
|
NOTIFIED_CPU_CRIT=false
|
||||||
|
NOTIFIED_GPU_WARN=false
|
||||||
|
NOTIFIED_GPU_CRIT=false
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# Get CPU temperature (average of all cores)
|
||||||
|
CPU_TEMP=$(sensors | grep -i 'Package id 0:\|Tdie:' | awk '{print $4}' | sed 's/+//;s/°C//' | head -1)
|
||||||
|
|
||||||
|
# If Package id not found, try other methods
|
||||||
|
if [ -z "$CPU_TEMP" ]; then
|
||||||
|
CPU_TEMP=$(sensors | grep -i 'Core 0:' | awk '{print $3}' | sed 's/+//;s/°C//' | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get GPU temperature (if available)
|
||||||
|
GPU_TEMP=$(sensors | grep -i 'edge:\|temp1:' | awk '{print $2}' | sed 's/+//;s/°C//' | head -1)
|
||||||
|
|
||||||
|
# Check CPU temperature
|
||||||
|
if [ -n "$CPU_TEMP" ]; then
|
||||||
|
CPU_TEMP_INT=${CPU_TEMP%.*}
|
||||||
|
|
||||||
|
if [ "$CPU_TEMP_INT" -ge "$CPU_TEMP_CRITICAL" ]; then
|
||||||
|
if [ "$NOTIFIED_CPU_CRIT" = false ]; then
|
||||||
|
notify-send -u critical -i temperature-high "Critical CPU Temperature" "CPU temperature is ${CPU_TEMP}°C! System may throttle or shutdown."
|
||||||
|
NOTIFIED_CPU_CRIT=true
|
||||||
|
NOTIFIED_CPU_WARN=true
|
||||||
|
fi
|
||||||
|
elif [ "$CPU_TEMP_INT" -ge "$CPU_TEMP_WARNING" ]; then
|
||||||
|
if [ "$NOTIFIED_CPU_WARN" = false ]; then
|
||||||
|
notify-send -u normal -i temperature-normal "High CPU Temperature" "CPU temperature is ${CPU_TEMP}°C"
|
||||||
|
NOTIFIED_CPU_WARN=true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
NOTIFIED_CPU_WARN=false
|
||||||
|
NOTIFIED_CPU_CRIT=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check GPU temperature
|
||||||
|
if [ -n "$GPU_TEMP" ]; then
|
||||||
|
GPU_TEMP_INT=${GPU_TEMP%.*}
|
||||||
|
|
||||||
|
if [ "$GPU_TEMP_INT" -ge "$GPU_TEMP_CRITICAL" ]; then
|
||||||
|
if [ "$NOTIFIED_GPU_CRIT" = false ]; then
|
||||||
|
notify-send -u critical -i temperature-high "Critical GPU Temperature" "GPU temperature is ${GPU_TEMP}°C!"
|
||||||
|
NOTIFIED_GPU_CRIT=true
|
||||||
|
NOTIFIED_GPU_WARN=true
|
||||||
|
fi
|
||||||
|
elif [ "$GPU_TEMP_INT" -ge "$GPU_TEMP_WARNING" ]; then
|
||||||
|
if [ "$NOTIFIED_GPU_WARN" = false ]; then
|
||||||
|
notify-send -u normal -i temperature-normal "High GPU Temperature" "GPU temperature is ${GPU_TEMP}°C"
|
||||||
|
NOTIFIED_GPU_WARN=true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
NOTIFIED_GPU_WARN=false
|
||||||
|
NOTIFIED_GPU_CRIT=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep "$CHECK_INTERVAL"
|
||||||
|
done
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$TEMP_SCRIPT"
|
||||||
|
|
||||||
|
printf "${OK} Temperature monitoring script created at ${YELLOW}$TEMP_SCRIPT${RESET}\n"
|
||||||
|
|
||||||
|
# Create systemd user service
|
||||||
|
printf "${NOTE} Creating ${YELLOW}systemd user service${RESET} for temperature monitoring...\n"
|
||||||
|
|
||||||
|
SYSTEMD_DIR="$HOME/.config/systemd/user"
|
||||||
|
mkdir -p "$SYSTEMD_DIR"
|
||||||
|
|
||||||
|
cat > "$SYSTEMD_DIR/temp-monitor.service" << EOF
|
||||||
|
[Unit]
|
||||||
|
Description=Temperature Monitor
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=$TEMP_SCRIPT
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
printf "${OK} Systemd service created\n"
|
||||||
|
|
||||||
|
# Enable and start the service
|
||||||
|
printf "${NOTE} Enabling and starting ${YELLOW}temp-monitor${RESET} service...\n"
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user enable temp-monitor.service 2>&1 | tee -a "$LOG"
|
||||||
|
systemctl --user start temp-monitor.service 2>&1 | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf "${OK} Temperature monitor service is now running!\n"
|
||||||
|
printf "${INFO} You can check status with: ${YELLOW}systemctl --user status temp-monitor${RESET}\n"
|
||||||
|
printf "${INFO} View temperatures: ${YELLOW}sensors${RESET}\n"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
75
install-scripts/thunar.sh
Normal file → Executable file
75
install-scripts/thunar.sh
Normal file → Executable file
@@ -1,77 +1,50 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Thunar #
|
||||||
|
|
||||||
thunar=(
|
thunar=(
|
||||||
thunar
|
thunar
|
||||||
thunar-volman
|
thunar-volman
|
||||||
tumbler
|
tumbler
|
||||||
|
ffmpegthumbnailer
|
||||||
thunar-archive-plugin
|
thunar-archive-plugin
|
||||||
|
xarchiver
|
||||||
)
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
# Determine the directory where the script is located
|
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
# Change the working directory to the parent directory of the script
|
# Change the working directory to the parent directory of the script
|
||||||
PARENT_DIR="$SCRIPT_DIR/.."
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
cd "$PARENT_DIR" || exit 1
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Source the global functions script
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
echo "Failed to source Global_functions.sh"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
|
||||||
LOG="install-$(date +%d-%H%M%S)_thunar.log"
|
|
||||||
|
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
|
||||||
|
|
||||||
# Set the script to exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Bluetooth
|
|
||||||
|
|
||||||
printf "${NOTE} Installing Thunar Packages...\n"
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_thunar.log"
|
||||||
|
|
||||||
|
# Thunar
|
||||||
|
printf "${INFO} Installing ${SKY_BLUE}Thunar${RESET} Packages...\n"
|
||||||
for THUNAR in "${thunar[@]}"; do
|
for THUNAR in "${thunar[@]}"; do
|
||||||
install_package "$THUNAR" 2>&1 | tee -a "$LOG"
|
install_package "$THUNAR" "$LOG"
|
||||||
[ $? -ne 0 ] && { echo -e "\e[1A\e[K${ERROR} - $THUNAR install had failed, please check the install.log"; exit 1; }
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check for existing config folders and backup
|
printf "\n%.0s" {1..1}
|
||||||
for DIR1 in Thunar xfce4; do
|
|
||||||
|
# Check for existing configs and copy if does not exist
|
||||||
|
for DIR1 in gtk-3.0 Thunar xfce4; do
|
||||||
DIRPATH=~/.config/$DIR1
|
DIRPATH=~/.config/$DIR1
|
||||||
if [ -d "$DIRPATH" ]; then
|
if [ -d "$DIRPATH" ]; then
|
||||||
echo -e "${NOTE} Config for $DIR1 found, backing up."
|
echo -e "${NOTE} Config for ${MAGENTA}$DIR1${RESET} found, no need to copy." 2>&1 | tee -a "$LOG"
|
||||||
mv $DIRPATH $DIRPATH-back-up 2>&1 | tee -a "$LOG"
|
else
|
||||||
echo -e "${NOTE} Backed up $DIR1 to $DIRPATH-back-up."
|
echo -e "${NOTE} Config for ${YELLOW}$DIR1${RESET} not found, copying from assets." 2>&1 | tee -a "$LOG"
|
||||||
|
cp -r assets/$DIR1 ~/.config/ && echo "${OK} Copy $DIR1 completed!" || echo "${ERROR} Failed to copy $DIR1 config files." 2>&1 | tee -a "$LOG"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
cp -r config/xfce4 ~/.config/ && { echo "Copy xfce4 completed!"; } || { echo "Error: Failed to copy xfce4 config files."; exit 1; } 2>&1 | tee -a "$LOG"
|
|
||||||
cp -r config/Thunar ~/.config/ && { echo "Copy Thunar completed!"; } || { echo "Error: Failed to copy Thunar config files."; exit 1; } 2>&1 | tee -a "$LOG"
|
|
||||||
|
|
||||||
clear
|
printf "\n%.0s" {1..2}
|
||||||
30
install-scripts/thunar_default.sh
Executable file
30
install-scripts/thunar_default.sh
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Thunar-default #
|
||||||
|
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_thunar-default.log"
|
||||||
|
|
||||||
|
printf "${INFO} Setting ${SKY_BLUE}Thunar${RESET} as default file manager...\n"
|
||||||
|
|
||||||
|
xdg-mime default thunar.desktop inode/directory
|
||||||
|
xdg-mime default thunar.desktop application/x-wayland-gnome-saved-search
|
||||||
|
echo "${OK} ${MAGENTA}Thunar${RESET} is now set as the default file manager." | tee -a "$LOG"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
97
install-scripts/xdph.sh
Normal file → Executable file
97
install-scripts/xdph.sh
Normal file → Executable file
@@ -1,79 +1,34 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# XDG-Desktop-Portals hyprland #
|
||||||
|
|
||||||
|
xdg=(
|
||||||
|
xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
umockdev
|
||||||
|
)
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Set some colors for output messages
|
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
# Set the name of the log file to include the current date and time
|
||||||
LOG="install-$(date +%d-%H%M%S)_xdph.log"
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_xdph.log"
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
|
||||||
|
|
||||||
# Set the script to exit on error
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Function for installing packages
|
|
||||||
install_package() {
|
|
||||||
# Checking if package is already installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# XDG-DESKTOP-PORTAL-HYPRLAND
|
# XDG-DESKTOP-PORTAL-HYPRLAND
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}xdg-desktop-portal-hyprland${RESET}\n"
|
||||||
for xdph in xdg-desktop-portal-hyprland; do
|
for xdgs in "${xdg[@]}"; do
|
||||||
install_package "$xdph" 2>&1 | tee -a "$LOG"
|
install_package "$xdgs" "$LOG"
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "\e[1A\e[K${ERROR} - $xdph install had failed, please check the install.log"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
printf "${NOTE} Checking for other XDG-Desktop-Portal-Implementations....\n"
|
printf "\n%.0s" {1..2}
|
||||||
sleep 1
|
|
||||||
printf "\n"
|
|
||||||
printf "${NOTE} XDG-desktop-portal-KDE (if installed) should be manually disabled or removed! I can't remove it... sorry...\n"
|
|
||||||
read -n1 -rep "${CAT} Would you like me to try to remove other XDG-Desktop-Portal-Implementations? (y/n)" XDPH1
|
|
||||||
sleep 1
|
|
||||||
if [[ $XDPH1 =~ ^[Yy]$ ]]; then
|
|
||||||
# Clean out other portals
|
|
||||||
printf "${NOTE} Clearing any other xdg-desktop-portal implementations...\n"
|
|
||||||
# Check if packages are installed and uninstall if present
|
|
||||||
if pacman -Qs xdg-desktop-portal-gnome > /dev/null ; then
|
|
||||||
echo "Removing xdg-desktop-portal-gnome..."
|
|
||||||
sudo pacman -R --noconfirm xdg-desktop-portal-gnome 2>&1 | tee -a $LOG
|
|
||||||
fi
|
|
||||||
if pacman -Qs xdg-desktop-portal-gtk > /dev/null ; then
|
|
||||||
echo "Removing xdg-desktop-portal-gtk..."
|
|
||||||
sudo pacman -R --noconfirm xdg-desktop-portal-gtk 2>&1 | tee -a $LOG
|
|
||||||
fi
|
|
||||||
if pacman -Qs xdg-desktop-portal-wlr > /dev/null ; then
|
|
||||||
echo "Removing xdg-desktop-portal-wlr..."
|
|
||||||
sudo pacman -R --noconfirm xdg-desktop-portal-wlr 2>&1 | tee -a $LOG
|
|
||||||
fi
|
|
||||||
if pacman -Qs xdg-desktop-portal-lxqt > /dev/null ; then
|
|
||||||
echo "Removing xdg-desktop-portal-lxqt..."
|
|
||||||
sudo pacman -R --noconfirm xdg-desktop-portal-lxqt 2>&1 | tee -a $LOG
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
clear
|
|
||||||
|
|||||||
52
install-scripts/yay.sh
Normal file → Executable file
52
install-scripts/yay.sh
Normal file → Executable file
@@ -1,29 +1,53 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# Yay AUR Helper #
|
||||||
|
# NOTE: If paru is already installed, yay will not be installed #
|
||||||
|
|
||||||
|
pkg="yay-bin"
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="install-$(date +%d-%H%M%S)_yay.log"
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Set some colors for output messages
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
ORANGE=$(tput setaf 166)
|
MAGENTA="$(tput setaf 5)"
|
||||||
YELLOW=$(tput setaf 3)
|
ORANGE="$(tput setaf 214)"
|
||||||
RESET=$(tput sgr0)
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
GREEN="$(tput setaf 2)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
SKY_BLUE="$(tput setaf 6)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
# Create Directory for Install Logs
|
||||||
LOG="install-$(date +%d-%H%M%S)_yay.log"
|
if [ ! -d Install-Logs ]; then
|
||||||
|
mkdir Install-Logs
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for AUR helper and install if not found
|
# Check for AUR helper and install if not found
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
ISAUR=$(command -v yay || command -v paru)
|
||||||
|
|
||||||
if [ -n "$ISAUR" ]; then
|
if [ -n "$ISAUR" ]; then
|
||||||
printf "\n%s - AUR helper yay was located, moving on.\n" "${OK}"
|
printf "\n%s - ${SKY_BLUE}AUR helper${RESET} already installed, moving on.\n" "${OK}"
|
||||||
else
|
else
|
||||||
printf "\n%s - AUR helper was NOT located\n" "$WARN"
|
printf "\n%s - Installing ${SKY_BLUE}$pkg${RESET} from AUR\n" "${NOTE}"
|
||||||
printf "\n%s - Installing yay from AUR\n" "${NOTE}"
|
|
||||||
git clone https://aur.archlinux.org/yay-bin.git || { printf "%s - Failed to clone yay from AUR\n" "${ERROR}"; exit 1; }
|
# Check if directory exists and remove it
|
||||||
cd yay-bin || { printf "%s - Failed to enter yay-bin directory\n" "${ERROR}"; exit 1; }
|
if [ -d "$pkg" ]; then
|
||||||
makepkg -si --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to install yay from AUR\n" "${ERROR}"; exit 1; }
|
rm -rf "$pkg"
|
||||||
|
fi
|
||||||
|
git clone https://aur.archlinux.org/$pkg.git || { printf "%s - Failed to clone ${YELLOW}$pkg${RESET} from AUR\n" "${ERROR}"; exit 1; }
|
||||||
|
cd $pkg || { printf "%s - Failed to enter $pkg directory\n" "${ERROR}"; exit 1; }
|
||||||
|
makepkg -si --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to install ${YELLOW}$pkg${RESET} from AUR\n" "${ERROR}"; exit 1; }
|
||||||
|
|
||||||
|
# moving install logs in to Install-Logs directory
|
||||||
|
mv install*.log ../Install-Logs/ || true
|
||||||
|
cd ..
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update system before proceeding
|
# Update system before proceeding
|
||||||
@@ -32,4 +56,4 @@ ISAUR=$(command -v yay || command -v paru)
|
|||||||
|
|
||||||
$ISAUR -Syu --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to update system\n" "${ERROR}"; exit 1; }
|
$ISAUR -Syu --noconfirm 2>&1 | tee -a "$LOG" || { printf "%s - Failed to update system\n" "${ERROR}"; exit 1; }
|
||||||
|
|
||||||
clear
|
printf "\n%.0s" {1..2}
|
||||||
152
install-scripts/zsh.sh
Normal file → Executable file
152
install-scripts/zsh.sh
Normal file → Executable file
@@ -1,66 +1,112 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# zsh and oh my zsh#
|
||||||
|
|
||||||
# Set some colors for output messages
|
zsh_pkg=(
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
lsd
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
mercurial
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
zsh
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
zsh-completions
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
)
|
||||||
ORANGE=$(tput setaf 166)
|
|
||||||
YELLOW=$(tput setaf 3)
|
|
||||||
RESET=$(tput sgr0)
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
zsh_pkg2=(
|
||||||
LOG="install-$(date +%d-%H%M%S)_zsh.log"
|
fzf
|
||||||
|
)
|
||||||
|
|
||||||
ISAUR=$(command -v yay || command -v paru)
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
# Set the script to exit on error
|
# Change the working directory to the parent directory of the script
|
||||||
set -e
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
# Function for installing packages
|
# Source the global functions script
|
||||||
install_package() {
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
# Checking if package is already installed
|
echo "Failed to source Global_functions.sh"
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "${OK} $1 is already installed. Skipping..."
|
|
||||||
else
|
|
||||||
# Package not installed
|
|
||||||
echo -e "${NOTE} Installing $1 ..."
|
|
||||||
$ISAUR -S --noconfirm "$1" 2>&1 | tee -a "$LOG"
|
|
||||||
# Making sure package is installed
|
|
||||||
if $ISAUR -Q "$1" &>> /dev/null ; then
|
|
||||||
echo -e "\e[1A\e[K${OK} $1 was installed."
|
|
||||||
else
|
|
||||||
# Something is missing, exiting to review log
|
|
||||||
echo -e "\e[1A\e[K${ERROR} $1 failed to install :( , please check the install.log. You may need to install manually! Sorry I have tried :("
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
|
||||||
# zsh and oh-my-zsh
|
|
||||||
printf "${WARN} #### IF YOU HAVE ALREADY ZSH AND OH MY ZSH, YOU SHOULD CHOOSE NO HERE #########\n"
|
|
||||||
printf "${WARN} ### --------------------------------------------------------------------########\n"
|
|
||||||
printf "${NOTE} ## CHECK OUT README FOR ADDITIONAL STEPS REQUIRED ONCE ZSH AND OH-MY-ZSH INSTALLED ##\n"
|
|
||||||
printf "\n\n"
|
|
||||||
read -n1 -rep "${CAT} OPTIONAL - Would you like to install zsh and oh-my-zsh and use as default shell? (y/n)" zsh
|
|
||||||
echo
|
|
||||||
|
|
||||||
if [[ $zsh =~ ^[Yy]$ ]]; then
|
|
||||||
for ZSH in zsh zsh-completions; do
|
|
||||||
install_package "$ZSH" 2>&1 | tee -a "$LOG"
|
# Set the name of the log file to include the current date and time
|
||||||
if [ $? -ne 0 ]; then
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_zsh.log"
|
||||||
echo -e "\e[1A\e[K${ERROR} - $ZSH install had failed, please check the install.log"
|
|
||||||
fi
|
# Installing core zsh packages
|
||||||
|
printf "\n%s - Installing ${SKY_BLUE}zsh packages${RESET} .... \n" "${NOTE}"
|
||||||
|
for ZSH in "${zsh_pkg[@]}"; do
|
||||||
|
install_package "$ZSH" "$LOG"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Oh-my-zsh plus zsh-autosuggestions and zsh-syntax-highlighting
|
|
||||||
printf "${NOTE} Installing oh-my-zsh and plugins.\n"
|
|
||||||
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended && \
|
# Check if the zsh-completions directory exists
|
||||||
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && \
|
if [ -d "zsh-completions" ]; then
|
||||||
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && \
|
rm -rf zsh-completions
|
||||||
cp -r 'assets/.zshrc' ~/
|
|
||||||
else
|
|
||||||
printf "${NOTE} ZSH wont be installed.\n"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
clear
|
# Install Oh My Zsh, plugins, and set zsh as default shell
|
||||||
|
if command -v zsh >/dev/null; then
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}Oh My Zsh and plugins${RESET} ...\n"
|
||||||
|
if [ ! -d "$HOME/.oh-my-zsh" ]; then
|
||||||
|
sh -c "$(curl -fsSL https://install.ohmyz.sh)" "" --unattended
|
||||||
|
else
|
||||||
|
echo "${INFO} Directory .oh-my-zsh already exists. Skipping re-installation." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the directories exist before cloning the repositories
|
||||||
|
if [ ! -d "$HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions" ]; then
|
||||||
|
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
||||||
|
else
|
||||||
|
echo "${INFO} Directory zsh-autosuggestions already exists. Cloning Skipped." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" ]; then
|
||||||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
|
||||||
|
else
|
||||||
|
echo "${INFO} Directory zsh-syntax-highlighting already exists. Cloning Skipped." 2>&1 | tee -a "$LOG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if ~/.zshrc and .zprofile exists, create a backup, and copy the new configuration
|
||||||
|
if [ -f "$HOME/.zshrc" ]; then
|
||||||
|
cp -b "$HOME/.zshrc" "$HOME/.zshrc-backup" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$HOME/.zprofile" ]; then
|
||||||
|
cp -b "$HOME/.zprofile" "$HOME/.zprofile-backup" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copying the preconfigured zsh themes and profile
|
||||||
|
cp -r 'assets/.zshrc' ~/
|
||||||
|
cp -r 'assets/.zprofile' ~/
|
||||||
|
|
||||||
|
# Check if the current shell is zsh
|
||||||
|
current_shell=$(basename "$SHELL")
|
||||||
|
if [ "$current_shell" != "zsh" ]; then
|
||||||
|
printf "${NOTE} Changing default shell to ${MAGENTA}zsh${RESET}..."
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
|
||||||
|
# Loop to ensure the chsh command succeeds
|
||||||
|
while ! chsh -s "$(command -v zsh)"; do
|
||||||
|
echo "${ERROR} Authentication failed. Please enter the correct password." 2>&1 | tee -a "$LOG"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "${INFO} Shell changed successfully to ${MAGENTA}zsh${RESET}" 2>&1 | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo "${NOTE} Your shell is already set to ${MAGENTA}zsh${RESET}."
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Installing core zsh packages
|
||||||
|
printf "\n%s - Installing ${SKY_BLUE}fzf${RESET} .... \n" "${NOTE}"
|
||||||
|
for ZSH2 in "${zsh_pkg2[@]}"; do
|
||||||
|
install_package "$ZSH2" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
# copy additional oh-my-zsh themes from assets
|
||||||
|
if [ -d "$HOME/.oh-my-zsh/themes" ]; then
|
||||||
|
cp -r assets/add_zsh_theme/* ~/.oh-my-zsh/themes >> "$LOG" 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
|||||||
40
install-scripts/zsh_pokemon.sh
Executable file
40
install-scripts/zsh_pokemon.sh
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# pokemon-color-scripts#
|
||||||
|
|
||||||
|
## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ##
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
# Change the working directory to the parent directory of the script
|
||||||
|
PARENT_DIR="$SCRIPT_DIR/.."
|
||||||
|
cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source the global functions script
|
||||||
|
if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then
|
||||||
|
echo "Failed to source Global_functions.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Set the name of the log file to include the current date and time
|
||||||
|
LOG="Install-Logs/install-$(date +%d-%H%M%S)_zsh_pokemon.log"
|
||||||
|
|
||||||
|
printf "${NOTE} Removing any traces of ${SKY_BLUE}Pokemon Color Scripts${RESET}\n"
|
||||||
|
|
||||||
|
# Install Pokemon Color Scripts
|
||||||
|
printf "${NOTE} Installing ${SKY_BLUE}Pokemon Color Scripts${RESET}\n"
|
||||||
|
for pok in "pokemon-colorscripts-git"; do
|
||||||
|
install_package_f "$pok" "$LOG"
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
# Check if ~/.zshrc exists
|
||||||
|
if [ -f "$HOME/.zshrc" ]; then
|
||||||
|
sed -i 's|^#pokemon-colorscripts --no-title -s -r \| fastfetch -c \$HOME/.config/fastfetch/config-pokemon.jsonc --logo-type file-raw --logo-height 10 --logo-width 5 --logo -|pokemon-colorscripts --no-title -s -r \| fastfetch -c \$HOME/.config/fastfetch/config-pokemon.jsonc --logo-type file-raw --logo-height 10 --logo-width 5 --logo -|' "$HOME/.zshrc" >> "$LOG" 2>&1
|
||||||
|
sed -i "s|^fastfetch -c \$HOME/.config/fastfetch/config-compact.jsonc|#fastfetch -c \$HOME/.config/fastfetch/config-compact.jsonc|" "$HOME/.zshrc" >> "$LOG" 2>&1
|
||||||
|
else
|
||||||
|
echo "$HOME/.zshrc not found. Cant enable ${YELLOW}Pokemon color scripts${RESET}" >> "$LOG" 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
589
install.sh
Normal file → Executable file
589
install.sh
Normal file → Executable file
@@ -1,89 +1,109 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# https://github.com/JaKooLit
|
||||||
|
|
||||||
clear
|
clear
|
||||||
|
|
||||||
# Welcome message
|
|
||||||
echo "$(tput setaf 6)Welcome to JaKooLit's Arch-Hyprland Install Script!$(tput sgr0)"
|
|
||||||
echo
|
|
||||||
echo "$(tput setaf 3)NOTE: You will be required to answer some questions during the installation! $(tput sgr0)"
|
|
||||||
echo
|
|
||||||
|
|
||||||
read -p "$(tput setaf 6)Would you like to proceed? (y/n): $(tput sgr0)" proceed
|
|
||||||
|
|
||||||
if [ "$proceed" != "y" ]; then
|
|
||||||
echo "Installation aborted."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if running as root. If root, script will exit
|
|
||||||
if [[ $EUID -eq 0 ]]; then
|
|
||||||
echo "This script should not be executed as root! Exiting......."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set some colors for output messages
|
# Set some colors for output messages
|
||||||
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
WARN="$(tput setaf 166)[WARN]$(tput sgr0)"
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
ORANGE=$(tput setaf 166)
|
MAGENTA="$(tput setaf 5)"
|
||||||
YELLOW=$(tput setaf 3)
|
ORANGE="$(tput setaf 214)"
|
||||||
RESET=$(tput sgr0)
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
GREEN="$(tput setaf 2)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
SKY_BLUE="$(tput setaf 6)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
# Function to colorize prompts
|
# Create Directory for Install Logs
|
||||||
colorize_prompt() {
|
if [ ! -d Install-Logs ]; then
|
||||||
local color="$1"
|
mkdir Install-Logs
|
||||||
local message="$2"
|
fi
|
||||||
echo -n "${color}${message}$(tput sgr0)"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set the name of the log file to include the current date and time
|
# Set the name of the log file to include the current date and time
|
||||||
LOG="install-$(date +%d-%H%M%S).log"
|
LOG="Install-Logs/01-Hyprland-Install-Scripts-$(date +%d-%H%M%S).log"
|
||||||
|
|
||||||
# Initialize variables to store user responses
|
# Check if running as root. If root, script will exit
|
||||||
aur_helper=""
|
if [[ $EUID -eq 0 ]]; then
|
||||||
bluetooth=""
|
echo "${ERROR} This script should ${WARNING}NOT${RESET} be executed as root!! Exiting......." | tee -a "$LOG"
|
||||||
dots=""
|
printf "\n%.0s" {1..2}
|
||||||
gtk_themes=""
|
exit 1
|
||||||
nvidia=""
|
fi
|
||||||
rog=""
|
|
||||||
sddm=""
|
|
||||||
thunar=""
|
|
||||||
xdph=""
|
|
||||||
zsh=""
|
|
||||||
|
|
||||||
# Define the directory where your scripts are located
|
# Check if PulseAudio package is installed
|
||||||
|
if pacman -Qq | grep -qw '^pulseaudio$'; then
|
||||||
|
echo "$ERROR PulseAudio is detected as installed. Uninstall it first or edit install.sh on line 211 (execute_script 'pipewire.sh')." | tee -a "$LOG"
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if base-devel is installed
|
||||||
|
if pacman -Q base-devel &> /dev/null; then
|
||||||
|
echo "base-devel is already installed."
|
||||||
|
else
|
||||||
|
echo "$NOTE Install base-devel.........."
|
||||||
|
|
||||||
|
if sudo pacman -S --noconfirm base-devel; then
|
||||||
|
echo "👌 ${OK} base-devel has been installed successfully." | tee -a "$LOG"
|
||||||
|
else
|
||||||
|
echo "❌ $ERROR base-devel not found nor cannot be installed." | tee -a "$LOG"
|
||||||
|
echo "$ACTION Please install base-devel manually before running this script... Exiting" | tee -a "$LOG"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install whiptails if detected not installed. Necessary for this version
|
||||||
|
if ! command -v whiptail >/dev/null; then
|
||||||
|
echo "${NOTE} - whiptail is not installed. Installing..." | tee -a "$LOG"
|
||||||
|
sudo pacman -S --noconfirm libnewt
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
echo -e "\e[35m
|
||||||
|
╦╔═┌─┐┌─┐╦ ╦ ╦┬ ┬┌─┐┬─┐┬ ┌─┐┌┐┌┌┬┐
|
||||||
|
╠╩╗│ ││ │║ ╠═╣└┬┘├─┘├┬┘│ ├─┤│││ ││ 2025
|
||||||
|
╩ ╩└─┘└─┘╩═╝ ╩ ╩ ┴ ┴ ┴└─┴─┘┴ ┴┘└┘─┴┘ Arch Linux
|
||||||
|
\e[0m"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Welcome message using whiptail (for displaying information)
|
||||||
|
whiptail --title "KooL Arch-Hyprland (2025) Install Script" \
|
||||||
|
--msgbox "Welcome to KooL Arch-Hyprland (2025) Install Script!!!\n\n\
|
||||||
|
ATTENTION: Run a full system update and Reboot first !!! (Highly Recommended)\n\n\
|
||||||
|
NOTE: If you are installing on a VM, ensure to enable 3D acceleration else Hyprland may NOT start!" \
|
||||||
|
15 80
|
||||||
|
|
||||||
|
# Ask if the user wants to proceed
|
||||||
|
if ! whiptail --title "Proceed with Installation?" \
|
||||||
|
--yesno "Would you like to proceed?" 7 50; then
|
||||||
|
echo -e "\n"
|
||||||
|
echo "❌ ${INFO} You 🫵 chose ${YELLOW}NOT${RESET} to proceed. ${YELLOW}Exiting...${RESET}" | tee -a "$LOG"
|
||||||
|
echo -e "\n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "👌 ${OK} 🇵🇭 ${MAGENTA}KooL..${RESET} ${SKY_BLUE}lets continue with the installation...${RESET}" | tee -a "$LOG"
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# install pciutils if detected not installed. Necessary for detecting GPU
|
||||||
|
if ! pacman -Qs pciutils > /dev/null; then
|
||||||
|
echo "${NOTE} - pciutils is not installed. Installing..." | tee -a "$LOG"
|
||||||
|
sudo pacman -S --noconfirm pciutils
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Path to the install-scripts directory
|
||||||
script_directory=install-scripts
|
script_directory=install-scripts
|
||||||
|
|
||||||
# Function to ask a yes/no question and set the response in a variable
|
|
||||||
ask_yes_no() {
|
|
||||||
while true; do
|
|
||||||
read -p "$(colorize_prompt "$CAT" "$1 (y/n): ")" choice
|
|
||||||
case "$choice" in
|
|
||||||
[Yy]* ) eval "$2='Y'"; return 0;;
|
|
||||||
[Nn]* ) eval "$2='N'"; return 1;;
|
|
||||||
* ) echo "Please answer with y or n.";;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to ask a custom question with specific options and set the response in a variable
|
|
||||||
ask_custom_option() {
|
|
||||||
local prompt="$1"
|
|
||||||
local valid_options="$2"
|
|
||||||
local response_var="$3"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
read -p "$(colorize_prompt "$CAT" "$prompt ($valid_options): ")" choice
|
|
||||||
if [[ " $valid_options " == *" $choice "* ]]; then
|
|
||||||
eval "$response_var='$choice'"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo "Please choose one of the provided options: $valid_options"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
# Function to execute a script if it exists and make it executable
|
# Function to execute a script if it exists and make it executable
|
||||||
execute_script() {
|
execute_script() {
|
||||||
local script="$1"
|
local script="$1"
|
||||||
@@ -91,7 +111,7 @@ execute_script() {
|
|||||||
if [ -f "$script_path" ]; then
|
if [ -f "$script_path" ]; then
|
||||||
chmod +x "$script_path"
|
chmod +x "$script_path"
|
||||||
if [ -x "$script_path" ]; then
|
if [ -x "$script_path" ]; then
|
||||||
"$script_path"
|
env "$script_path"
|
||||||
else
|
else
|
||||||
echo "Failed to make script '$script' executable."
|
echo "Failed to make script '$script' executable."
|
||||||
fi
|
fi
|
||||||
@@ -100,104 +120,387 @@ execute_script() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Collect user responses to all questions
|
|
||||||
printf "\n"
|
|
||||||
ask_custom_option "Select AUR helper" "paru or yay" aur_helper
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you have nvidia gpu?" nvidia
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to install GTK themes?" gtk_themes
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to configure Bluetooth?" bluetooth
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to install Thunar file manager?" thunar
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Installing in Asus ROG Laptops?" rog
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to install and configure SDDM?" sddm
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to install XDG-DESKTOP-PORTAL-HYPRLAND?" xdph
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to install zsh and oh-my-zsh?" zsh
|
|
||||||
printf "\n"
|
|
||||||
ask_yes_no "Do you want to copy dotfiles?" dots
|
|
||||||
printf "\n"
|
|
||||||
# Ensuring all in the scripts folder are made executable
|
|
||||||
chmod +x install-scripts/*
|
|
||||||
|
|
||||||
# Execute AUR helper script based on user choice
|
## Default values for the options (will be overwritten by preset file if available)
|
||||||
|
gtk_themes="OFF"
|
||||||
|
bluetooth="OFF"
|
||||||
|
thunar="OFF"
|
||||||
|
quickshell="OFF"
|
||||||
|
sddm="OFF"
|
||||||
|
sddm_theme="OFF"
|
||||||
|
xdph="OFF"
|
||||||
|
zsh="OFF"
|
||||||
|
pokemon="OFF"
|
||||||
|
rog="OFF"
|
||||||
|
dots="OFF"
|
||||||
|
input_group="OFF"
|
||||||
|
nvidia="OFF"
|
||||||
|
nouveau="OFF"
|
||||||
|
|
||||||
|
# Function to load preset file
|
||||||
|
load_preset() {
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
echo "✅ Loading preset: $1"
|
||||||
|
source "$1"
|
||||||
|
else
|
||||||
|
echo "⚠️ Preset file not found: $1. Using default values."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if --preset argument is passed
|
||||||
|
if [[ "$1" == "--preset" && -n "$2" ]]; then
|
||||||
|
load_preset "$2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if yay or paru is installed
|
||||||
|
echo "${INFO} - Checking if yay or paru is installed"
|
||||||
|
if ! command -v yay &>/dev/null && ! command -v paru &>/dev/null; then
|
||||||
|
echo "${CAT} - Neither yay nor paru found. Asking 🗣️ USER to select..."
|
||||||
|
while true; do
|
||||||
|
aur_helper=$(whiptail --title "Neither Yay nor Paru is installed" --checklist "Neither Yay nor Paru is installed. Choose one AUR.\n\nNOTE: Select only 1 AUR helper!\nINFO: spacebar to select" 12 60 2 \
|
||||||
|
"yay" "AUR Helper yay" "OFF" \
|
||||||
|
"paru" "AUR Helper paru" "OFF" \
|
||||||
|
3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "❌ ${INFO} You cancelled the selection. ${YELLOW}Goodbye!${RESET}" | tee -a "$LOG"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$aur_helper" ]; then
|
||||||
|
whiptail --title "Error" --msgbox "You must select at least one AUR helper to proceed." 10 60 2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${INFO} - You selected: $aur_helper as your AUR helper" | tee -a "$LOG"
|
||||||
|
|
||||||
|
aur_helper=$(echo "$aur_helper" | tr -d '"')
|
||||||
|
|
||||||
|
# Check if multiple helpers were selected
|
||||||
|
if [[ $(echo "$aur_helper" | wc -w) -ne 1 ]]; then
|
||||||
|
whiptail --title "Error" --msgbox "You must select exactly one AUR helper." 10 60 2
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "${NOTE} - AUR helper is already installed. Skipping AUR helper selection."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# List of services to check for active login managers
|
||||||
|
services=("gdm.service" "gdm3.service" "lightdm.service" "lxdm.service")
|
||||||
|
|
||||||
|
# Function to check if any login services are active
|
||||||
|
check_services_running() {
|
||||||
|
active_services=() # Array to store active services
|
||||||
|
for svc in "${services[@]}"; do
|
||||||
|
if systemctl is-active --quiet "$svc"; then
|
||||||
|
active_services+=("$svc")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#active_services[@]} -gt 0 ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if check_services_running; then
|
||||||
|
active_list=$(printf "%s\n" "${active_services[@]}")
|
||||||
|
|
||||||
|
# Display the active login manager(s) in the whiptail message box
|
||||||
|
whiptail --title "Active non-SDDM login manager(s) detected" \
|
||||||
|
--msgbox "The following login manager(s) are active:\n\n$active_list\n\nIf you want to install SDDM and SDDM theme, stop and disable the active services above, reboot before running this script\n\nYour option to install SDDM and SDDM theme has now been removed\n\n- Ja " 23 80
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if NVIDIA GPU is detected
|
||||||
|
nvidia_detected=false
|
||||||
|
if lspci | grep -i "nvidia" &> /dev/null; then
|
||||||
|
nvidia_detected=true
|
||||||
|
whiptail --title "NVIDIA GPU Detected" --msgbox "NVIDIA GPU detected in your system.\n\nNOTE: The script will install nvidia-dkms, nvidia-utils, and nvidia-settings if you chose to configure." 12 60
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the options array for whiptail checklist
|
||||||
|
options_command=(
|
||||||
|
whiptail --title "Select Options" --checklist "Choose options to install or configure\nNOTE: 'SPACEBAR' to select & 'TAB' key to change selection" 28 85 20
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add NVIDIA options if detected
|
||||||
|
if [ "$nvidia_detected" == "true" ]; then
|
||||||
|
options_command+=(
|
||||||
|
"nvidia" "Do you want script to configure NVIDIA GPU?" "OFF"
|
||||||
|
"nouveau" "Do you want Nouveau to be blacklisted?" "OFF"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add 'input_group' option if user is not in input group
|
||||||
|
input_group_detected=false
|
||||||
|
if ! groups "$(whoami)" | grep -q '\binput\b'; then
|
||||||
|
input_group_detected=true
|
||||||
|
whiptail --title "Input Group" --msgbox "You are not currently in the input group.\n\nAdding you to the input group might be necessary for the Waybar keyboard-state functionality." 12 60
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add 'input_group' option if necessary
|
||||||
|
if [ "$input_group_detected" == "true" ]; then
|
||||||
|
options_command+=(
|
||||||
|
"input_group" "Add your USER to input group for some waybar functionality?" "OFF"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Conditionally add SDDM and SDDM theme options if no active login manager is found
|
||||||
|
if ! check_services_running; then
|
||||||
|
options_command+=(
|
||||||
|
"sddm" "Install & configure SDDM login manager?" "OFF"
|
||||||
|
"sddm_theme" "Download & Install Additional SDDM theme?" "OFF"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add the remaining static options
|
||||||
|
options_command+=(
|
||||||
|
"gtk_themes" "Install GTK themes? (required for Dark/Light function)" "OFF"
|
||||||
|
"bluetooth" "Do you want script to configure Bluetooth?" "OFF"
|
||||||
|
"thunar" "Do you want Thunar file manager to be installed?" "OFF"
|
||||||
|
"quickshell" "Install quickshell for Desktop-Like Overview?" "OFF"
|
||||||
|
"xdph" "Install XDG-DESKTOP-PORTAL-HYPRLAND (for screen share)?" "OFF"
|
||||||
|
"zsh" "Install zsh shell with Oh-My-Zsh?" "OFF"
|
||||||
|
"pokemon" "Add Pokemon color scripts to your terminal?" "OFF"
|
||||||
|
"rog" "Are you installing on Asus ROG laptops?" "OFF"
|
||||||
|
"dots" "Download and install pre-configured KooL Hyprland dotfiles?" "OFF"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Capture the selected options before the while loop starts
|
||||||
|
while true; do
|
||||||
|
selected_options=$("${options_command[@]}" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
|
# Check if the user pressed Cancel (exit status 1)
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo -e "\n"
|
||||||
|
echo "❌ ${INFO} You 🫵 cancelled the selection. ${YELLOW}Goodbye!${RESET}" | tee -a "$LOG"
|
||||||
|
exit 0 # Exit the script if Cancel is pressed
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If no option was selected, notify and restart the selection
|
||||||
|
if [ -z "$selected_options" ]; then
|
||||||
|
whiptail --title "Warning" --msgbox "No options were selected. Please select at least one option." 10 60
|
||||||
|
continue # Return to selection if no options selected
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Strip the quotes and trim spaces if necessary (sanitize the input)
|
||||||
|
selected_options=$(echo "$selected_options" | tr -d '"' | tr -s ' ')
|
||||||
|
|
||||||
|
# Convert selected options into an array (preserving spaces in values)
|
||||||
|
IFS=' ' read -r -a options <<< "$selected_options"
|
||||||
|
|
||||||
|
# Check if the "dots" option was selected
|
||||||
|
dots_selected="OFF"
|
||||||
|
for option in "${options[@]}"; do
|
||||||
|
if [[ "$option" == "dots" ]]; then
|
||||||
|
dots_selected="ON"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# If "dots" is not selected, show a note and ask the user to proceed or return to choices
|
||||||
|
if [[ "$dots_selected" == "OFF" ]]; then
|
||||||
|
# Show a note about not selecting the "dots" option
|
||||||
|
if ! whiptail --title "KooL Hyprland Dot Files" --yesno \
|
||||||
|
"You have not selected to install the pre-configured KooL Hyprland dotfiles.\n\nKindly NOTE that if you proceed without Dots, Hyprland will start with default vanilla Hyprland configuration and I won't be able to give you support.\n\nWould you like to continue install without KooL Hyprland Dots or return to choices/options?" \
|
||||||
|
--yes-button "Continue" --no-button "Return" 15 90; then
|
||||||
|
echo "🔙 Returning to options..." | tee -a "$LOG"
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
# User chose to continue
|
||||||
|
echo "${INFO} ⚠️ Continuing WITHOUT the dotfiles installation..." | tee -a "$LOG"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prepare the confirmation message
|
||||||
|
confirm_message="You have selected the following options:\n\n"
|
||||||
|
for option in "${options[@]}"; do
|
||||||
|
confirm_message+=" - $option\n"
|
||||||
|
done
|
||||||
|
confirm_message+="\nAre you happy with these choices?"
|
||||||
|
|
||||||
|
# Confirmation prompt
|
||||||
|
if ! whiptail --title "Confirm Your Choices" --yesno "$(printf "%s" "$confirm_message")" 25 80; then
|
||||||
|
echo -e "\n"
|
||||||
|
echo "❌ ${SKY_BLUE}You're not 🫵 happy${RESET}. ${YELLOW}Returning to options...${RESET}" | tee -a "$LOG"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "👌 ${OK} You confirmed your choices. Proceeding with ${SKY_BLUE}KooL 🇵🇭 Hyprland Installation...${RESET}" | tee -a "$LOG"
|
||||||
|
break
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Ensuring base-devel is installed
|
||||||
|
execute_script "00-base.sh"
|
||||||
|
sleep 1
|
||||||
|
execute_script "pacman.sh"
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Execute AUR helper script after other installations if applicable
|
||||||
if [ "$aur_helper" == "paru" ]; then
|
if [ "$aur_helper" == "paru" ]; then
|
||||||
execute_script "paru.sh"
|
execute_script "paru.sh"
|
||||||
elif [ "$aur_helper" == "yay" ]; then
|
elif [ "$aur_helper" == "yay" ]; then
|
||||||
execute_script "yay.sh"
|
execute_script "yay.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install hyprland packages
|
sleep 1
|
||||||
execute_script "00-hypr-pkgs.sh"
|
|
||||||
|
|
||||||
if [ "$nvidia" == "Y" ]; then
|
# Run the Hyprland related scripts
|
||||||
execute_script "nvidia.sh"
|
echo "${INFO} Installing ${SKY_BLUE}KooL Hyprland additional packages...${RESET}" | tee -a "$LOG"
|
||||||
fi
|
sleep 1
|
||||||
|
execute_script "01-hypr-pkgs.sh"
|
||||||
|
|
||||||
if [ "$nvidia" == "N" ]; then
|
echo "${INFO} Installing ${SKY_BLUE}pipewire and pipewire-audio...${RESET}" | tee -a "$LOG"
|
||||||
|
sleep 1
|
||||||
|
execute_script "pipewire.sh"
|
||||||
|
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}necessary fonts...${RESET}" | tee -a "$LOG"
|
||||||
|
sleep 1
|
||||||
|
execute_script "fonts.sh"
|
||||||
|
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}Hyprland...${RESET}"
|
||||||
|
sleep 1
|
||||||
execute_script "hyprland.sh"
|
execute_script "hyprland.sh"
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$gtk_themes" == "Y" ]; then
|
# Clean up the selected options (remove quotes and trim spaces)
|
||||||
execute_script "gtk_themes.sh"
|
selected_options=$(echo "$selected_options" | tr -d '"' | tr -s ' ')
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$bluetooth" == "Y" ]; then
|
# Convert selected options into an array (splitting by spaces)
|
||||||
execute_script "bluetooth.sh"
|
IFS=' ' read -r -a options <<< "$selected_options"
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$thunar" == "Y" ]; then
|
# Loop through selected options
|
||||||
execute_script "thunar.sh"
|
for option in "${options[@]}"; do
|
||||||
fi
|
case "$option" in
|
||||||
|
sddm)
|
||||||
if [ "$rog" == "Y" ]; then
|
if check_services_running; then
|
||||||
execute_script "rog.sh"
|
active_list=$(printf "%s\n" "${active_services[@]}")
|
||||||
fi
|
whiptail --title "Error" --msgbox "One of the following login services is running:\n$active_list\n\nPlease stop & disable it or DO not choose SDDM." 12 60
|
||||||
|
exec "$0"
|
||||||
if [ "$sddm" == "Y" ]; then
|
else
|
||||||
|
echo "${INFO} Installing and configuring ${SKY_BLUE}SDDM...${RESET}" | tee -a "$LOG"
|
||||||
execute_script "sddm.sh"
|
execute_script "sddm.sh"
|
||||||
fi
|
fi
|
||||||
|
;;
|
||||||
if [ "$xdph" == "Y" ]; then
|
nvidia)
|
||||||
|
echo "${INFO} Configuring ${SKY_BLUE}nvidia stuff${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "nvidia.sh"
|
||||||
|
;;
|
||||||
|
nouveau)
|
||||||
|
echo "${INFO} blacklisting ${SKY_BLUE}nouveau${RESET}"
|
||||||
|
execute_script "nvidia_nouveau.sh" | tee -a "$LOG"
|
||||||
|
;;
|
||||||
|
gtk_themes)
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}GTK themes...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "gtk_themes.sh"
|
||||||
|
;;
|
||||||
|
input_group)
|
||||||
|
echo "${INFO} Adding user into ${SKY_BLUE}input group...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "InputGroup.sh"
|
||||||
|
;;
|
||||||
|
quickshell)
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}quickshell for Desktop Overview...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "quickshell.sh"
|
||||||
|
;;
|
||||||
|
xdph)
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}xdg-desktop-portal-hyprland...${RESET}" | tee -a "$LOG"
|
||||||
execute_script "xdph.sh"
|
execute_script "xdph.sh"
|
||||||
fi
|
;;
|
||||||
|
bluetooth)
|
||||||
if [ "$zsh" == "Y" ]; then
|
echo "${INFO} Configuring ${SKY_BLUE}Bluetooth...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "bluetooth.sh"
|
||||||
|
;;
|
||||||
|
thunar)
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}Thunar file manager...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "thunar.sh"
|
||||||
|
execute_script "thunar_default.sh"
|
||||||
|
;;
|
||||||
|
sddm_theme)
|
||||||
|
echo "${INFO} Downloading & Installing ${SKY_BLUE}Additional SDDM theme...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "sddm_theme.sh"
|
||||||
|
;;
|
||||||
|
zsh)
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}zsh with Oh-My-Zsh...${RESET}" | tee -a "$LOG"
|
||||||
execute_script "zsh.sh"
|
execute_script "zsh.sh"
|
||||||
fi
|
;;
|
||||||
|
pokemon)
|
||||||
if [ "$dots" == "Y" ]; then
|
echo "${INFO} Adding ${SKY_BLUE}Pokemon color scripts to terminal...${RESET}" | tee -a "$LOG"
|
||||||
execute_script "dotfiles.sh"
|
execute_script "zsh_pokemon.sh"
|
||||||
|
;;
|
||||||
|
rog)
|
||||||
|
echo "${INFO} Installing ${SKY_BLUE}ROG laptop packages...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "rog.sh"
|
||||||
|
;;
|
||||||
|
dots)
|
||||||
|
echo "${INFO} Installing pre-configured ${SKY_BLUE}KooL Hyprland dotfiles...${RESET}" | tee -a "$LOG"
|
||||||
|
execute_script "dotfiles-main.sh"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $option" | tee -a "$LOG"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
# copy fastfetch config if arch.png is not present
|
||||||
|
if [ ! -f "$HOME/.config/fastfetch/arch.png" ]; then
|
||||||
|
cp -r assets/fastfetch "$HOME/.config/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
clear
|
clear
|
||||||
|
|
||||||
printf "\n${OK} Yey! Installation Completed.\n"
|
# final check essential packages if it is installed
|
||||||
printf "\n"
|
execute_script "02-Final-Check.sh"
|
||||||
printf "\n${NOTE} NOTICE TO NVIDIA OWNERS! System will reboot your system!\n"
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Check if hyprland or hyprland-git is installed
|
||||||
|
if pacman -Q hyprland &> /dev/null || pacman -Q hyprland-git &> /dev/null; then
|
||||||
|
printf "\n ${OK} 👌 Hyprland is installed. However, some essential packages may not be installed. Please see above!"
|
||||||
|
printf "\n${CAT} Ignore this message if it states ${YELLOW}All essential packages${RESET} are installed as per above\n"
|
||||||
sleep 2
|
sleep 2
|
||||||
printf "\n${NOTE} You can start Hyprland by typing Hyprland (IF SDDM is not installed) (note the capital H!).\n"
|
printf "\n%.0s" {1..2}
|
||||||
printf "\n\n"
|
|
||||||
read -n1 -rep "${CAT} Would you like to start Hyprland now? (y,n)" HYP
|
|
||||||
|
|
||||||
if [[ $HYP =~ ^[Yy]$ ]]; then
|
printf "${SKY_BLUE}Thank you${RESET} 🫰 for using 🇵🇭 ${MAGENTA}KooL's Hyprland Dots${RESET}. ${YELLOW}Enjoy and Have a good day!${RESET}"
|
||||||
if [[ "$nvidia" == "Y" ]]; then
|
printf "\n%.0s" {1..2}
|
||||||
echo "${NOTE} NVIDIA GPU detected. Rebooting the system..."
|
|
||||||
|
printf "\n${NOTE} You can start Hyprland by typing ${SKY_BLUE}Hyprland${RESET} (IF SDDM is not installed) (note the capital H!).\n"
|
||||||
|
printf "\n${NOTE} However, it is ${YELLOW}highly recommended to reboot${RESET} your system.\n\n"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo -n "${CAT} Would you like to reboot now? (y/n): "
|
||||||
|
read HYP
|
||||||
|
HYP=$(echo "$HYP" | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
|
if [[ "$HYP" == "y" || "$HYP" == "yes" ]]; then
|
||||||
|
echo "${INFO} Rebooting now..."
|
||||||
systemctl reboot
|
systemctl reboot
|
||||||
elif command -v sddm >/dev/null; then
|
break
|
||||||
sudo systemctl start sddm 2>&1 | tee -a "$LOG"
|
elif [[ "$HYP" == "n" || "$HYP" == "no" ]]; then
|
||||||
else
|
echo "👌 ${OK} You chose NOT to reboot"
|
||||||
if command -v Hyprland >/dev/null; then
|
printf "\n%.0s" {1..1}
|
||||||
exec Hyprland
|
# Check if NVIDIA GPU is present
|
||||||
else
|
if lspci | grep -i "nvidia" &> /dev/null; then
|
||||||
echo "${ERROR} Hyprland not found. Please make sure Hyprland is installed by checking install logs"
|
echo "${INFO} HOWEVER ${YELLOW}NVIDIA GPU${RESET} detected. Reminder that you must REBOOT your SYSTEM..."
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
fi
|
fi
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "${WARN} Invalid response. Please answer with 'y' or 'n'."
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# Print error message if neither package is installed
|
||||||
|
printf "\n${WARN} Hyprland is NOT installed. Please check 00_CHECK-time_installed.log and other files in the Install-Logs/ directory..."
|
||||||
|
printf "\n%.0s" {1..3}
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
257
uninstall.sh
Executable file
257
uninstall.sh
Executable file
@@ -0,0 +1,257 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 💫 https://github.com/JaKooLit 💫 #
|
||||||
|
# KooL Arch-Hyprland uninstall script #
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
# Set some colors for output messages
|
||||||
|
OK="$(tput setaf 2)[OK]$(tput sgr0)"
|
||||||
|
ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)"
|
||||||
|
NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)"
|
||||||
|
INFO="$(tput setaf 4)[INFO]$(tput sgr0)"
|
||||||
|
WARN="$(tput setaf 1)[WARN]$(tput sgr0)"
|
||||||
|
CAT="$(tput setaf 6)[ACTION]$(tput sgr0)"
|
||||||
|
MAGENTA="$(tput setaf 5)"
|
||||||
|
ORANGE="$(tput setaf 214)"
|
||||||
|
WARNING="$(tput setaf 1)"
|
||||||
|
YELLOW="$(tput setaf 3)"
|
||||||
|
GREEN="$(tput setaf 2)"
|
||||||
|
BLUE="$(tput setaf 4)"
|
||||||
|
SKY_BLUE="$(tput setaf 6)"
|
||||||
|
RESET="$(tput sgr0)"
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..2}
|
||||||
|
echo -e "\e[35m
|
||||||
|
╦╔═┌─┐┌─┐╦ ╦ ╦┬ ┬┌─┐┬─┐┬ ┌─┐┌┐┌┌┬┐
|
||||||
|
╠╩╗│ ││ │║ ╠═╣└┬┘├─┘├┬┘│ ├─┤│││ ││ UNINSTALL
|
||||||
|
╩ ╩└─┘└─┘╩═╝ ╩ ╩ ┴ ┴ ┴└─┴─┘┴ ┴┘└┘─┴┘ Arch Linux
|
||||||
|
\e[0m"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
|
||||||
|
# Show welcome message using whiptail with Yes/No options
|
||||||
|
whiptail --title "Arch-Hyprland KooL Dots Uninstall Script" --yesno \
|
||||||
|
"Hello! This script will uninstall KooL Hyprland packages and configs.
|
||||||
|
|
||||||
|
You can choose packages and directories you want to remove.
|
||||||
|
NOTE: This will remove configs from ~/.config
|
||||||
|
|
||||||
|
WARNING: After uninstallation, your system may become unstable.
|
||||||
|
|
||||||
|
Shall we Proceed?" 20 80
|
||||||
|
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
echo "$INFO uninstall process canceled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Function to remove selected packages
|
||||||
|
remove_packages() {
|
||||||
|
local selected_packages_file=$1
|
||||||
|
while read -r package; do
|
||||||
|
if pacman -Qi "$package" &> /dev/null; then
|
||||||
|
echo "Removing package: $package"
|
||||||
|
if ! sudo pacman -Rs --noconfirm "$package"; then
|
||||||
|
echo "$ERROR Failed to remove package: $package"
|
||||||
|
else
|
||||||
|
echo "$OK Successfully removed package: $package"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$INFO Package ${YELLOW}$package${RESET} not found. Skipping."
|
||||||
|
fi
|
||||||
|
done < "$selected_packages_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove selected directories
|
||||||
|
remove_directories() {
|
||||||
|
local selected_dirs_file=$1
|
||||||
|
while read -r dir; do
|
||||||
|
pattern="$HOME/.config/$dir*"
|
||||||
|
# Loop through directories matching the pattern
|
||||||
|
for dir_to_remove in $pattern; do
|
||||||
|
if [ -d "$dir_to_remove" ]; then
|
||||||
|
echo "Removing directory: $dir_to_remove"
|
||||||
|
if ! rm -rf "$dir_to_remove"; then
|
||||||
|
echo "$ERROR Failed to remove directory: $dir_to_remove"
|
||||||
|
else
|
||||||
|
echo "$OK Successfully removed directory: $dir_to_remove"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$INFO Directory ${YELLOW}$dir_to_remove${RESET} not found. Skipping."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done < "$selected_dirs_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define the list of packages to choose from (with options_command tags)
|
||||||
|
packages=(
|
||||||
|
"btop" "resource monitor" "off"
|
||||||
|
"brightnessctl" "brightnessctl" "off"
|
||||||
|
"cava" "Cross-platform Audio Visualizer" "off"
|
||||||
|
"cliphist" "clipboard manager" "off"
|
||||||
|
"fastfetch" "fastfetch" "off"
|
||||||
|
"ffmpegthumbnailer" "FFmpeg Thumbnailer" "off"
|
||||||
|
"grim" "screenshot tool" "off"
|
||||||
|
"imagemagick" "Image manipulation tool" "off"
|
||||||
|
"kitty" "kitty-terminal" "off"
|
||||||
|
"kvantum" "QT apps theming" "off"
|
||||||
|
"mousepad" "simple text editor" "off"
|
||||||
|
"mpv" "multi-media player" "off"
|
||||||
|
"mpv-mpris" "mpv-plugin" "off"
|
||||||
|
"network-manager-applet" "network-manager-applet" "off"
|
||||||
|
"nvtop" "gpu resource monitor" "off"
|
||||||
|
"nwg-displays" "display monitor configuration app" "off"
|
||||||
|
"nwg-look" "gtk settings app" "off"
|
||||||
|
"pamixer" "pamixer" "off"
|
||||||
|
"pokemon-colorscripts-git" "terminal colorscripts" "off"
|
||||||
|
"pavucontrol" "pavucontrol" "off"
|
||||||
|
"playerctl" "playerctl" "off"
|
||||||
|
"pyprland" "pyprland" "off"
|
||||||
|
"qalculate-gtk" "calculator - QT" "off"
|
||||||
|
"qt5ct" "qt5ct" "off"
|
||||||
|
"qt6ct" "qt6ct" "off"
|
||||||
|
"quickshell" "quickshell" "off"
|
||||||
|
"rofi-wayland" "rofi-wayland" "off"
|
||||||
|
"slurp" "screenshot tool" "off"
|
||||||
|
"swappy" "screenshot tool" "off"
|
||||||
|
"swaync" "notification agent" "off"
|
||||||
|
"swww" "wallpaper engine" "off"
|
||||||
|
"thunar" "File Manager" "off"
|
||||||
|
"thunar-archive-plugin" "Archive Plugin" "off"
|
||||||
|
"thunar-volman" "Volume Management" "off"
|
||||||
|
"tumbler" "Thumbnail Service" "off"
|
||||||
|
"wallust" "color pallete generator" "off"
|
||||||
|
"waybar" "wayland bar" "off"
|
||||||
|
"wl-clipboard" "clipboard manager" "off"
|
||||||
|
"wlogout" "logout menu" "off"
|
||||||
|
"xdg-desktop-portal-hyprland" "hyprland file picker" "off"
|
||||||
|
"yad" "dialog box" "off"
|
||||||
|
"yt-dlp" "video downloader" "off"
|
||||||
|
"xarchiver" "Archive Manager" "off"
|
||||||
|
"hypridle" "hyprland idling agent" "off"
|
||||||
|
"hyprlock" "lockscreen" "off"
|
||||||
|
"hyprpolkitagent" "hyprland polkit agent" "off"
|
||||||
|
"hyprland" "hyprland main package" "off"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Define the list of directories to choose from (with options_command tags)
|
||||||
|
directories=(
|
||||||
|
"btop" "btop configuration" "off"
|
||||||
|
"cava" "cava configuration" "off"
|
||||||
|
"fastfetch" "fastfetch configuration" "off"
|
||||||
|
"hypr" "main hyprland configuration" "off"
|
||||||
|
"kitty" "kitty terminal configuration" "off"
|
||||||
|
"Kvantum" "Kvantum-manager configuration" "off"
|
||||||
|
"quickshell" "quickshell desktop overview configuration" "off"
|
||||||
|
"qt5ct" "qt5ct configuration" "off"
|
||||||
|
"qt6ct" "qt6ct configuration" "off"
|
||||||
|
"rofi" "rofi configuration" "off"
|
||||||
|
"swappy" "swappy (screenshot tool) configuration" "off"
|
||||||
|
"swaync" "swaync (notification agent) configuration" "off"
|
||||||
|
"Thunar" "Thunar file manager configuration" "off"
|
||||||
|
"wallust" "wallust (color pallete) configuration" "off"
|
||||||
|
"waybar" "waybar configuration" "off"
|
||||||
|
"wlogout" "wlogout (logout menu) configuration" "off"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Loop for package selection until user selects something or cancels
|
||||||
|
while true; do
|
||||||
|
package_choices=$(whiptail --title "Select Packages to Uninstall" --checklist \
|
||||||
|
"Select the packages you want to remove\nNOTE: 'SPACEBAR' to select & 'TAB' key to change selection" 35 90 25 \
|
||||||
|
"${packages[@]}" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
|
# Check if the user canceled the operation
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
echo "$INFO uninstall process canceled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If no packages are selected, ask again
|
||||||
|
if [[ -z "$package_choices" ]]; then
|
||||||
|
echo "$NOTE No packages selected. Please select at least one package."
|
||||||
|
else
|
||||||
|
echo "$package_choices" | tr -d '"' | tr ' ' '\n' > /tmp/selected_packages.txt
|
||||||
|
echo "Packages to remove: $package_choices"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Loop for directory selection until user selects something or cancels
|
||||||
|
while true; do
|
||||||
|
dir_choices=$(whiptail --title "Select Directories to Remove" --checklist \
|
||||||
|
"Select the directories you want to remove\nNOTE: This will remove configs from ~/.config\n\nNOTE: 'SPACEBAR' to select & 'TAB' key to change selection" 28 90 18 \
|
||||||
|
"${directories[@]}" 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
|
# Check if the user canceled the operation
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
echo "$INFO uninstall process canceled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If no directories are selected, ask again
|
||||||
|
if [[ -z "$dir_choices" ]]; then
|
||||||
|
echo "$NOTE No directories selected. Please select at least one directory."
|
||||||
|
else
|
||||||
|
# Save each selected directory to a new line in the temporary file
|
||||||
|
echo "$dir_choices" | tr -d '"' | tr ' ' '\n' > /tmp/selected_directories.txt
|
||||||
|
echo "Directories to remove: $dir_choices"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# First confirmation - Warning about potential instability
|
||||||
|
if ! whiptail --title "Warning" --yesno \
|
||||||
|
"Warning: Removing these packages and directories may cause your system to become unstable and you may not be able to recover it.\n\nAre you sure you want to proceed?" \
|
||||||
|
10 80; then
|
||||||
|
echo "$INFO uninstall process canceled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Second confirmation - Final confirmation to proceed
|
||||||
|
if ! whiptail --title "Final Confirmation" --yesno \
|
||||||
|
"Are you absolutely sure you want to remove the selected packages and directories?\n\nWARNING! This action is irreversible." \
|
||||||
|
10 80; then
|
||||||
|
echo "$INFO uninstall process canceled."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "\n%s${SKY_BLUE}Attempting to remove selected packages${RESET}\n" "${NOTE}"
|
||||||
|
MAX_ATTEMPTS=2
|
||||||
|
ATTEMPT=0
|
||||||
|
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
||||||
|
# Remove packages
|
||||||
|
remove_packages /tmp/selected_packages.txt
|
||||||
|
|
||||||
|
# Check if any packages still need to be removed, retry if needed
|
||||||
|
MISSING_PACKAGE_COUNT=0
|
||||||
|
while read -r package; do
|
||||||
|
if pacman -Qi "$package" &> /dev/null; then
|
||||||
|
MISSING_PACKAGE_COUNT=$((MISSING_PACKAGE_COUNT + 1))
|
||||||
|
fi
|
||||||
|
done < /tmp/selected_packages.txt
|
||||||
|
|
||||||
|
if [ $MISSING_PACKAGE_COUNT -gt 0 ]; then
|
||||||
|
ATTEMPT=$((ATTEMPT + 1))
|
||||||
|
echo "Attempt #$ATTEMPT failed, retrying..."
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "\n%s${SKY_BLUE}Attempting to remove locally installed packages${RESET}\n" "${NOTE}"
|
||||||
|
for file in ags pokemon-colorscripts; do
|
||||||
|
if [ -f "/usr/local/bin/$file" ]; then
|
||||||
|
sudo rm "/usr/local/bin/$file"
|
||||||
|
echo "$file removed."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
printf "\n%s${SKY_BLUE}Attempting to remove selected directories${RESET}\n" "${NOTE}"
|
||||||
|
remove_directories /tmp/selected_directories.txt
|
||||||
|
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
|
echo -e "$MAGENTA Hyprland and related components have been uninstalled.$RESET"
|
||||||
|
echo -e "$YELLOW It is recommended to reboot your system now.$RESET"
|
||||||
|
printf "\n%.0s" {1..1}
|
||||||
Reference in New Issue
Block a user