Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
75a9e6d953 | ||
|
|
85f3db3616 | ||
|
|
fc51bb593a | ||
|
|
14ef414781 | ||
|
|
205e667343 | ||
|
|
b7e431b3fa | ||
|
|
9602c673e5 | ||
|
|
e73e7b2353 | ||
|
|
820e4c9982 | ||
|
|
4b9bbde225 | ||
|
|
82f375794b | ||
|
|
a87f908b4d | ||
|
|
e44f8728a8 | ||
|
|
bb737e524e | ||
|
|
fe14b2c78f | ||
|
|
50012b04bc | ||
|
|
5e8f2e8930 | ||
|
|
af675c0683 | ||
|
|
e03eb2ddd9 | ||
|
|
9816e79eec | ||
|
|
3600c5bcd3 | ||
|
|
42800f5803 | ||
|
|
bd46b4d609 | ||
|
|
79e23782cc | ||
|
|
aec0f4efd1 | ||
|
|
35cc75ee2e | ||
|
|
53d90fc8f5 | ||
|
|
5f1f69a6db | ||
|
|
c37a641060 | ||
|
|
d6a6d62ad6 | ||
|
|
01ed1dbdda | ||
|
|
2ac5a4af14 | ||
|
|
e7b418007f | ||
|
|
0b896e404c | ||
|
|
c38907ec39 | ||
|
|
1721651319 | ||
|
|
e4692c456c | ||
|
|
6ee881c7dc | ||
|
|
2649ee4b56 | ||
|
|
4024b9e830 | ||
|
|
11767c3009 | ||
|
|
c2cd216dac | ||
|
|
5c245f9c35 | ||
|
|
54fb71eeae | ||
|
|
44642960ad | ||
|
|
f8b7f00f44 | ||
|
|
069139641f | ||
|
|
17689ac0e8 | ||
|
|
5581267a73 | ||
|
|
e2fd60187a | ||
|
|
37ff1af0ed | ||
|
|
37849dee8f | ||
|
|
fe36f97774 | ||
|
|
e9399cf7bb | ||
|
|
c453e7aa90 | ||
|
|
5c069beb2b | ||
|
|
0a555e9e5a | ||
|
|
c7e82042af | ||
|
|
c421ea2cb3 | ||
|
|
84b008e29c | ||
|
|
007c3d0bf0 | ||
|
|
8872abecbd | ||
|
|
841575d4e3 | ||
|
|
befe9696b0 | ||
|
|
4b12ae2c12 | ||
|
|
5227e5f05e | ||
|
|
b8098eac8b | ||
|
|
5b610643c7 | ||
|
|
4fce8c955c | ||
|
|
eabb972cb8 | ||
|
|
688b94c3ad | ||
|
|
d4689d66cd | ||
|
|
e28e3e6207 | ||
|
|
b45b3d60d1 | ||
|
|
8d2e3cea85 | ||
|
|
8a42f9bfa2 | ||
|
|
09916ae68e | ||
|
|
5b5fa9ad4e | ||
|
|
814b975533 | ||
|
|
d0a450d4e8 | ||
|
|
786d5c5fe0 | ||
|
|
5ba2894101 | ||
|
|
499bf793b2 | ||
|
|
f1c57b8ecc | ||
|
|
20cc042b64 | ||
|
|
ae9dcaa074 | ||
|
|
21b68b1e68 | ||
|
|
fa4929a94b | ||
|
|
6b4d0e22b1 | ||
|
|
d5615892e7 | ||
|
|
81d0df6023 | ||
|
|
9cf14d3b55 | ||
|
|
06325b09b8 | ||
|
|
539ec34b4c | ||
|
|
00d4f101fc | ||
|
|
c9a89cf545 | ||
|
|
7ba9a65f19 | ||
|
|
52ced69697 | ||
|
|
47bbdd9f85 | ||
|
|
94a57be9f7 | ||
|
|
9d779269eb | ||
|
|
da61dc869d | ||
|
|
e44cc65f1f | ||
|
|
0392f8fc0f | ||
|
|
3c76f0412a | ||
|
|
627c005fe3 | ||
|
|
6540bda07a | ||
|
|
a9c73ba9d9 | ||
|
|
30488edaed | ||
|
|
8ed711d300 | ||
|
|
a8043a9899 | ||
|
|
aa9ebaf22b | ||
|
|
2314a17066 | ||
|
|
7051688fa5 | ||
|
|
0f4f601a2d | ||
|
|
f38e2ff94f | ||
|
|
50c5cf945d | ||
|
|
903da245ac | ||
|
|
2d15296597 | ||
|
|
3a619cbf92 | ||
|
|
530022ee59 | ||
|
|
5c01a5f806 | ||
|
|
b6f5ad9bcf | ||
|
|
92dc644ee2 | ||
|
|
ddc39f4928 | ||
|
|
a93d7494d3 | ||
|
|
706cff40b3 | ||
|
|
e35845099a | ||
|
|
c44ef61cf2 | ||
|
|
ef65f827a2 | ||
|
|
6b8f415703 | ||
|
|
f7004d9f25 | ||
|
|
58d5b6cf69 | ||
|
|
c55f70b852 | ||
|
|
97e02d81af | ||
|
|
a545bb0066 | ||
|
|
35d51f80df | ||
|
|
d638aa0434 | ||
|
|
258fc61669 | ||
|
|
6dc15047d4 | ||
|
|
0725763b95 | ||
|
|
29b8f188e9 | ||
|
|
959732ffd1 | ||
|
|
be3497de77 | ||
|
|
17d83a53b7 | ||
|
|
122f3ab070 | ||
|
|
46a732e8f7 | ||
|
|
3373ae3b8c | ||
|
|
edd2db313c | ||
|
|
ecfd517a4a | ||
|
|
25419067d4 | ||
|
|
36faff6b5f | ||
|
|
ffe516175c | ||
|
|
f58f22cadd | ||
|
|
7e9faff6d6 | ||
|
|
ffa25045e5 | ||
|
|
66dcd82952 | ||
|
|
40013a61d1 | ||
|
|
ee26c0c5c2 | ||
|
|
02a351768f | ||
|
|
9539f09e83 | ||
|
|
25a78f126e | ||
|
|
e0c339785d | ||
|
|
e6f57831b1 | ||
|
|
4e323d932f | ||
|
|
64d8ca7ab4 | ||
|
|
7de17aaeb7 | ||
|
|
4f0c6a45cf | ||
|
|
a2dbdd78d3 | ||
|
|
e4a76c494c | ||
|
|
1ee3f01883 | ||
|
|
a89ed00a17 | ||
|
|
64e671119d | ||
|
|
7b7955ac29 | ||
|
|
823a8d8fbc | ||
|
|
088562cd53 | ||
|
|
e9b8c35b52 | ||
|
|
5a1811979e | ||
|
|
274890281c | ||
|
|
0606ec06f5 | ||
|
|
f22f8da68c | ||
|
|
409078edf9 | ||
|
|
2840c9aa70 | ||
|
|
f4aedf7b5e | ||
|
|
f51cc0049a | ||
|
|
c01529a599 | ||
|
|
121f02c785 | ||
|
|
f6cd98e458 | ||
|
|
cc9f38c71c | ||
|
|
606a1fec1b | ||
|
|
d3bf33a142 | ||
|
|
91a6566d68 | ||
|
|
ce0d951a54 | ||
|
|
106fe9cd9e | ||
|
|
a199569aac | ||
|
|
80d16ab6ff | ||
|
|
1c8b72867e | ||
|
|
9d59b24995 | ||
|
|
e78d07b25b | ||
|
|
a2c11e5cd1 | ||
|
|
70aceee3ca | ||
|
|
8e6340e4c7 | ||
|
|
46a4d7628d | ||
|
|
2ec9356aca | ||
|
|
3c19159c23 | ||
|
|
f6afd785fd | ||
|
|
e20a33e132 | ||
|
|
4683a171b9 | ||
|
|
4189258def | ||
|
|
2e8f1ec9ae | ||
|
|
78c97c5d84 | ||
|
|
4540dc00e7 | ||
|
|
294d7a9a98 | ||
|
|
77dd4b4ca8 | ||
|
|
7394ab63bf | ||
|
|
7f851fac73 | ||
|
|
a5a6d9a916 | ||
|
|
3967a4cd5c | ||
|
|
f684f52d8f | ||
|
|
1079f62c06 | ||
|
|
1f460ccc38 | ||
|
|
8b7f15eddf | ||
|
|
0750c45111 | ||
|
|
0db1815665 | ||
|
|
d028b027c5 | ||
|
|
e91f5aa5d6 | ||
|
|
6105341234 | ||
|
|
6a362a963f | ||
|
|
9005bd089a | ||
|
|
1921545d08 | ||
|
|
05b463699f | ||
|
|
6f33358f4a | ||
|
|
909983d069 | ||
|
|
a259206de8 | ||
|
|
3f058cbfd3 | ||
|
|
318fc39b61 | ||
|
|
6b1c8dec58 | ||
|
|
3541ec68e7 | ||
|
|
3a3674670b | ||
|
|
b2c6d72a2f | ||
|
|
b9c68535d4 | ||
|
|
ae5226202a | ||
|
|
580aee4ad5 | ||
|
|
a8bf678d45 | ||
|
|
73feae1142 | ||
|
|
b26b870bb2 | ||
|
|
2d3a6ad33f | ||
|
|
ef9439b92c | ||
|
|
c635f3bfa9 | ||
|
|
7c3eb71150 | ||
|
|
4fef18041f | ||
|
|
df3384c667 | ||
|
|
7a97d7425e | ||
|
|
73ca687358 | ||
|
|
88441958d9 | ||
|
|
e59af388b1 | ||
|
|
39da9176ad | ||
|
|
e4ee9c9dc8 | ||
|
|
feef8452f4 | ||
|
|
c3ff5a58d6 | ||
|
|
a005189aef | ||
|
|
e98f5c2bd7 | ||
|
|
e7f6be4291 | ||
|
|
4fa7dc3c1a | ||
|
|
2ccb49f24b | ||
|
|
ec04ebee66 | ||
|
|
2b2f1c2b66 | ||
|
|
21f7e53b2b | ||
|
|
5f09b7b915 | ||
|
|
688013a6b8 | ||
|
|
4e7c3ceee8 | ||
|
|
390874374e | ||
|
|
7f7a755e32 | ||
|
|
ac6b47449a | ||
|
|
ce5f530ed2 | ||
|
|
62789224a7 | ||
|
|
0b849bad4f | ||
|
|
0022880936 | ||
|
|
1d5240b7c6 | ||
|
|
0b0e83f505 | ||
|
|
f4cfa20dea | ||
|
|
d866102fcc | ||
|
|
921373f049 | ||
|
|
1c39478650 | ||
|
|
a845e086fd | ||
|
|
b363438f6a | ||
|
|
7d9da82b6c | ||
|
|
c52c5b5a42 | ||
|
|
97c49f17e6 | ||
|
|
134519558a | ||
|
|
9e5ae7db83 | ||
|
|
a31b3481c3 | ||
|
|
1c757d1173 | ||
|
|
89b97c4ba1 | ||
|
|
2ba627a370 | ||
|
|
995de3617c | ||
|
|
a477078f16 | ||
|
|
f93eeb5d87 | ||
|
|
5b0e3767bd | ||
|
|
51962c424b | ||
|
|
a6ce7ccdce | ||
|
|
0f0e0e8671 | ||
|
|
c6061e0f12 | ||
|
|
cac0e41a2e | ||
|
|
c4797dd592 | ||
|
|
8986ad894e | ||
|
|
f127ea8a41 | ||
|
|
bb75cfabaf |
No files matched your search
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"workspace": {
|
||||
"library": [
|
||||
"/usr/share/hypr/stubs"
|
||||
]
|
||||
},
|
||||
"diagnostics": {
|
||||
"globals": ["hl"]
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,44 @@
|
||||
# janishutz Hyprland
|
||||
<div id="title" align="center">
|
||||
<img src="https://static.janishutz.com/logo.jpg" width="300">
|
||||
<h1>janishutz Hyprland</h1>
|
||||
</div>
|
||||
|
||||
Collection of dotfiles for my personal Hyprland setup, running on Arch Linux.
|
||||
Includes a setup and install script (that one is not complete yet though).
|
||||
For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
|
||||
|
||||

|
||||
|
||||
# New Version
|
||||
This version of the dotfiles (and all branches apart from `new`) are deprecated and in maintenance mode only,
|
||||
while a new version is developed on the [new branch](https://git.janishutz.com/janishutz/dotfiles/src/branch/new)
|
||||
|
||||
## Features
|
||||
- Astal4 based Status Bar and Quick Actions menu
|
||||
- System info
|
||||
- Hyprland info
|
||||
- Date & Time
|
||||
- Bluetooth picker
|
||||
- some networking settings (more coming later)
|
||||
- Audio and brightness control
|
||||
- battery monitoring
|
||||
- Logout, Reboot, Shutdown, etc
|
||||
- Rofi config for App launcher
|
||||
- Wlogout config
|
||||
- Theming script that generates a GTK theme and theming for bar, Hyprland, etc
|
||||
- Fish config (with some handy aliases, based on one from ohh-my-fish)
|
||||
- Fastfetch config
|
||||
- kitty config with cursor trail
|
||||
- Linter configs (currently only eslint, which is not complete yet)
|
||||
- mpv config
|
||||
- zathura configs
|
||||
- yazi configs with links to various directories I use commonly plus a few plugins and themes that are applied by the script
|
||||
- Astal3 based Notifications (due to be migrated to Astal4)
|
||||
|
||||
## Installing
|
||||
Clone your repo to any folder and adapt what you need. Some folders are still hard-coded, which I will be changing later on, so you will likely run into issues.
|
||||
|
||||
You may then run the `setup` script. That won't install all dependencies though. The `install` script is what serves that purpose, but that is not complete yet
|
||||
|
||||
|
||||
## Setting up to develop
|
||||
|
||||
|
After Width: | Height: | Size: 1.9 MiB |
@@ -9,7 +9,9 @@ const renderColourAsHex = util.renderColourAsHex;
|
||||
// │ Theme generator (returns theme as object) │
|
||||
// ╰───────────────────────────────────────────────╯
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
module.exports.generateTheme = ( theme, wallpaper, lockpaper, palette ) => {
|
||||
module.exports.generateTheme = (
|
||||
theme, wallpaper, lockpaper, palette
|
||||
) => {
|
||||
return {
|
||||
'wallpaper-path': wallpaper,
|
||||
'lockpaper-path': lockpaper,
|
||||
@@ -49,14 +51,30 @@ module.exports.generateTheme = ( theme, wallpaper, lockpaper, palette ) => {
|
||||
'colour-accent-rgba-007': renderColourAsRGBA( palette[ 0 ], 0.07 ),
|
||||
'colour-accent-hyprland': util.renderColourAsRGBAHex( palette[ 0 ], 0.8 ),
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
'colour-accent-gradient-1-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 1, gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-2-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 2, gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-3-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 3, gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-4-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 4, gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-5-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 5, gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-inverse-1-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 1, 1 / gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-inverse-2-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 1, 1 / gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-inverse-3-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 1, 1 / gradientMultipliers[ theme ] ) ),
|
||||
'colour-accent-gradient-1-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 1, gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-2-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 2, gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-3-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 3, gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-4-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 4, gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-5-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 5, gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-inverse-1-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 1, 1 / gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-inverse-2-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 1, 1 / gradientMultipliers[ theme ]
|
||||
) ),
|
||||
'colour-accent-gradient-inverse-3-hex': renderColourAsHex( util.getGradientColour(
|
||||
palette[ 0 ], 1, 1 / gradientMultipliers[ theme ]
|
||||
) ),
|
||||
|
||||
// ── Secondary accent ─────────────────────────────────────────────
|
||||
'colour-accent-2-hex': renderColourAsHex( palette[ 1 ] ),
|
||||
@@ -154,9 +172,9 @@ module.exports.generateTheme = ( theme, wallpaper, lockpaper, palette ) => {
|
||||
// ┌ ┐
|
||||
// │ Path to this repo on disk │
|
||||
// └ ┘
|
||||
'path-to-dotfiles': __dirname.slice(0, __dirname.length - 5),
|
||||
}
|
||||
}
|
||||
'path-to-dotfiles': __dirname.slice( 0, __dirname.length - 5 ),
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
@@ -171,74 +189,265 @@ const gradientMultipliers = {
|
||||
'light': 1.1,
|
||||
'bright': 1.15,
|
||||
'test': 0.75
|
||||
}
|
||||
};
|
||||
const colours = {
|
||||
foreground: {
|
||||
'nordic': [ 200, 220, 255 ],
|
||||
'deep-dark': [ 230, 230, 230 ],
|
||||
'material': [ 255, 255, 255 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 40, 40, 40 ],
|
||||
'bright': [ 0, 0, 0 ],
|
||||
'test': [ 0, 0, 0 ],
|
||||
'foreground': {
|
||||
'nordic': [
|
||||
200,
|
||||
220,
|
||||
255
|
||||
],
|
||||
'deep-dark': [
|
||||
230,
|
||||
230,
|
||||
230
|
||||
],
|
||||
'material': [
|
||||
255,
|
||||
255,
|
||||
255
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
40,
|
||||
40,
|
||||
40
|
||||
],
|
||||
'bright': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
'test': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
},
|
||||
'foreground-accent': {
|
||||
'nordic': [ 255, 255, 255 ],
|
||||
'deep-dark': [ 255, 255, 255 ],
|
||||
'material': [ 200, 200, 200 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 0, 0, 0 ],
|
||||
'bright': [ 50, 50, 50 ],
|
||||
'test': [ 0, 0, 0 ],
|
||||
'nordic': [
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
'deep-dark': [
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
'material': [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
'bright': [
|
||||
50,
|
||||
50,
|
||||
50
|
||||
],
|
||||
'test': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
},
|
||||
background: {
|
||||
'nordic': [ 10, 10, 15 ],
|
||||
'deep-dark': [ 20, 20, 20 ],
|
||||
'material': [ 30, 30, 30 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 230, 230, 230 ],
|
||||
'bright': [ 255, 255, 255 ],
|
||||
'test': [ 255, 255, 255 ],
|
||||
'background': {
|
||||
'nordic': [
|
||||
10,
|
||||
10,
|
||||
15
|
||||
],
|
||||
'deep-dark': [
|
||||
20,
|
||||
20,
|
||||
20
|
||||
],
|
||||
'material': [
|
||||
30,
|
||||
30,
|
||||
30
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
230,
|
||||
230,
|
||||
230
|
||||
],
|
||||
'bright': [
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
'test': [
|
||||
255,
|
||||
255,
|
||||
255
|
||||
],
|
||||
},
|
||||
'background-alternative': {
|
||||
'nordic': [ 20, 20, 25 ],
|
||||
'deep-dark': [ 30, 30, 30 ],
|
||||
'material': [ 40, 40, 40 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 210, 210, 210 ],
|
||||
'bright': [ 230, 230, 230 ],
|
||||
'test': [ 255, 255, 0 ] // brown
|
||||
'nordic': [
|
||||
20,
|
||||
20,
|
||||
25
|
||||
],
|
||||
'deep-dark': [
|
||||
30,
|
||||
30,
|
||||
30
|
||||
],
|
||||
'material': [
|
||||
40,
|
||||
40,
|
||||
40
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
210,
|
||||
210,
|
||||
210
|
||||
],
|
||||
'bright': [
|
||||
230,
|
||||
230,
|
||||
230
|
||||
],
|
||||
'test': [
|
||||
255,
|
||||
255,
|
||||
0
|
||||
] // brown
|
||||
},
|
||||
'background-tertiary': {
|
||||
'nordic': [ 0, 0, 0 ],
|
||||
'deep-dark': [ 45, 45, 45 ],
|
||||
'material': [ 0, 0, 0 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 180, 180, 180 ],
|
||||
'bright': [ 200, 200, 200 ],
|
||||
'test': [ 255, 0, 255 ] // purple
|
||||
'nordic': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
'deep-dark': [
|
||||
45,
|
||||
45,
|
||||
45
|
||||
],
|
||||
'material': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
180,
|
||||
180,
|
||||
180
|
||||
],
|
||||
'bright': [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
],
|
||||
'test': [
|
||||
255,
|
||||
0,
|
||||
255
|
||||
] // purple
|
||||
},
|
||||
shadow: {
|
||||
'nordic': [ 0, 0, 2 ],
|
||||
'deep-dark': [ 40, 40, 40 ],
|
||||
'material': [ 30, 30, 30 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 190, 190, 190 ],
|
||||
'bright': [ 150, 150, 150 ],
|
||||
'test': [ 120, 0, 0 ] // dark red
|
||||
'shadow': {
|
||||
'nordic': [
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
'deep-dark': [
|
||||
40,
|
||||
40,
|
||||
40
|
||||
],
|
||||
'material': [
|
||||
30,
|
||||
30,
|
||||
30
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
190,
|
||||
190,
|
||||
190
|
||||
],
|
||||
'bright': [
|
||||
150,
|
||||
150,
|
||||
150
|
||||
],
|
||||
'test': [
|
||||
120,
|
||||
0,
|
||||
0
|
||||
] // dark red
|
||||
},
|
||||
inactive: {
|
||||
'nordic': [ 200, 200, 200 ],
|
||||
'deep-dark': [ 200, 200, 200 ],
|
||||
'material': [ 200, 200, 200 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 65, 65, 65 ],
|
||||
'bright': [ 60, 60, 60 ],
|
||||
'test': [ 150, 150, 150 ]
|
||||
'inactive': {
|
||||
'nordic': [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
],
|
||||
'deep-dark': [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
],
|
||||
'material': [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
65,
|
||||
65,
|
||||
65
|
||||
],
|
||||
'bright': [
|
||||
60,
|
||||
60,
|
||||
60
|
||||
],
|
||||
'test': [
|
||||
150,
|
||||
150,
|
||||
150
|
||||
]
|
||||
},
|
||||
'inactive-background': {
|
||||
'nordic': [ 0, 0, 0 ],
|
||||
'deep-dark': [ 0, 0, 0 ],
|
||||
'material': [ 255, 255, 255 ], // TODO: Will be calculated by material theme generator
|
||||
'light': [ 80, 80, 80 ],
|
||||
'bright': [ 60, 60, 60 ],
|
||||
'test': [ 60, 60, 60 ]
|
||||
'nordic': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
'deep-dark': [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
'material': [
|
||||
255,
|
||||
255,
|
||||
255
|
||||
], // TODO: Will be calculated by material theme generator
|
||||
'light': [
|
||||
80,
|
||||
80,
|
||||
80
|
||||
],
|
||||
'bright': [
|
||||
60,
|
||||
60,
|
||||
60
|
||||
],
|
||||
'test': [
|
||||
60,
|
||||
60,
|
||||
60
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
const fonts = {
|
||||
'primary': {
|
||||
'nordic': 'Comfortaa',
|
||||
@@ -261,20 +470,18 @@ const fonts = {
|
||||
'light': 'Jetbrains Mono',
|
||||
'bright': 'Jetbrains Mono',
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
const iconTheme = {
|
||||
'nordic': 'Candy',
|
||||
'deep-dark': 'Candy',
|
||||
'material': 'Candy',
|
||||
'light': 'Candy',
|
||||
'bright': 'Candy'
|
||||
}
|
||||
|
||||
};
|
||||
const yaziThemes = {
|
||||
'nordic': 'tokyo-night',
|
||||
'deep-dark': 'vscode-dark-modern',
|
||||
'deep-dark': 'dracula',
|
||||
'material': 'dracula',
|
||||
'light': 'vscode-light-modern',
|
||||
'bright': 'vscode-light-modern',
|
||||
}
|
||||
'light': 'catppuccin-latte',
|
||||
'bright': 'catppuccin-latte',
|
||||
};
|
||||
@@ -10,7 +10,7 @@ const inquirer = require( 'inquirer' ).default;
|
||||
const build = ( wallpaper, lockpaper, theme ) => {
|
||||
console.log( '\n=> Extracting colours' );
|
||||
// Extract colour palette from chosen wallpaper using Color-Thief
|
||||
colorThief.getPalette( wallpaper ).then( palette => {
|
||||
colorThief.getPalette( wallpaper, 20 ).then( palette => {
|
||||
palette = util.removeUselessColours( palette );
|
||||
// Define view options (for rendering with mustache)
|
||||
if ( theme === 'test' ) {
|
||||
@@ -30,7 +30,7 @@ const build = ( wallpaper, lockpaper, theme ) => {
|
||||
name: 'confirm-proceed-build',
|
||||
message: 'Okay to proceed with these colours?'
|
||||
} ] ).then( answer => {
|
||||
if ( answer ) proceedWithBuild( wallpaper, lockpaper, theme, palette );
|
||||
if ( answer['confirm-proceed-build'] ) proceedWithBuild( wallpaper, lockpaper, theme, palette );
|
||||
else {
|
||||
// Have the user pick any other of the extracted colours instead
|
||||
let counter = -1;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
const convert = require( 'color-convert' );
|
||||
|
||||
const fs = require( 'fs' );
|
||||
|
||||
const path = require( 'path' );
|
||||
|
||||
/**
|
||||
@@ -8,15 +10,21 @@ const path = require( 'path' );
|
||||
* @param {string} extension The file extension to look for
|
||||
* @returns {string[]} returns a list of html files with their full path
|
||||
*/
|
||||
const treeWalker = ( dir, extension, ignoreList ) => {
|
||||
const treeWalker = (
|
||||
dir, extension, ignoreList
|
||||
) => {
|
||||
const ls = fs.readdirSync( dir );
|
||||
const fileList = [];
|
||||
|
||||
for ( let file in ls ) {
|
||||
if ( fs.statSync( path.join( dir, ls[ file ] ) ).isDirectory() ) {
|
||||
// Filter ignored directories
|
||||
if ( ignoreList === undefined || !ignoreList.includes( ls[ file ] ) ) {
|
||||
const newFiles = treeWalker( path.join( dir, ls[ file ] ), extension, ignoreList );
|
||||
for (let file = 0; file < newFiles.length; file++) {
|
||||
const newFiles = treeWalker(
|
||||
path.join( dir, ls[ file ] ), extension, ignoreList
|
||||
);
|
||||
|
||||
for ( let file = 0; file < newFiles.length; file++ ) {
|
||||
fileList.push( newFiles[ file ] );
|
||||
}
|
||||
}
|
||||
@@ -28,50 +36,69 @@ const treeWalker = ( dir, extension, ignoreList ) => {
|
||||
}
|
||||
|
||||
return fileList;
|
||||
}
|
||||
};
|
||||
|
||||
const renderColourAsHex = ( colour ) => {
|
||||
return '#' + convert.default.rgb.hex( colour[ 0 ], colour[ 1 ], colour[ 2 ] );
|
||||
}
|
||||
const renderColourAsHex = colour => {
|
||||
return '#' + convert.default.rgb.hex(
|
||||
colour[ 0 ], colour[ 1 ], colour[ 2 ]
|
||||
);
|
||||
};
|
||||
|
||||
const renderColourAsRGB = ( colour ) => {
|
||||
return `rgb(${ colour[ 0 ] }, ${ colour[ 1 ] }, ${ colour[ 2 ] })`
|
||||
}
|
||||
const renderColourAsRGB = colour => {
|
||||
return `rgb(${ colour[ 0 ] }, ${ colour[ 1 ] }, ${ colour[ 2 ] })`;
|
||||
};
|
||||
|
||||
const renderColourAsRGBA = ( colour, ambiance ) => {
|
||||
return `rgba(${ colour[ 0 ] }, ${ colour[ 1 ] }, ${ colour[ 2 ] }, ${ ambiance })`
|
||||
}
|
||||
return `rgba(${ colour[ 0 ] }, ${ colour[ 1 ] }, ${ colour[ 2 ] }, ${ ambiance })`;
|
||||
};
|
||||
|
||||
const renderColourAsRGBHex = ( colour ) => {
|
||||
const hexCol = convert.default.rgb.hex( colour[ 0 ], colour[ 1 ], colour[ 2 ] );
|
||||
return `rgb(${hexCol})`.toLowerCase();
|
||||
}
|
||||
const renderColourAsRGBHex = colour => {
|
||||
const hexCol = convert.default.rgb.hex(
|
||||
colour[ 0 ], colour[ 1 ], colour[ 2 ]
|
||||
);
|
||||
|
||||
function decimalToHex(decimal) {
|
||||
const hexValue = Math.round(decimal * 255);
|
||||
return hexValue.toString(16).padStart(2, '0');
|
||||
return `rgb(${ hexCol })`.toLowerCase();
|
||||
};
|
||||
|
||||
function decimalToHex ( decimal ) {
|
||||
const hexValue = Math.round( decimal * 255 );
|
||||
|
||||
return hexValue.toString( 16 ).padStart( 2, '0' );
|
||||
}
|
||||
|
||||
const renderColourAsRGBAHex = ( colour, ambiance ) => {
|
||||
const hexCol = convert.default.rgb.hex( colour[ 0 ], colour[ 1 ], colour[ 2 ] );
|
||||
return `rgba(${hexCol}${decimalToHex(ambiance)})`.toLowerCase();
|
||||
}
|
||||
const hexCol = convert.default.rgb.hex(
|
||||
colour[ 0 ], colour[ 1 ], colour[ 2 ]
|
||||
);
|
||||
|
||||
const removeUselessColours = ( palette ) => {
|
||||
return `rgba(${ hexCol }${ decimalToHex( ambiance ) })`.toLowerCase();
|
||||
};
|
||||
|
||||
const removeUselessColours = palette => {
|
||||
const p = [];
|
||||
|
||||
for ( let i = 0; i < palette.length; i++ ) {
|
||||
const el = palette[ i ];
|
||||
const luminance = calculateLuminance( palette[ i ] );
|
||||
if ( luminance < 215 && luminance > 40 ) {
|
||||
|
||||
if ( luminance < 210 && luminance > 40 ) {
|
||||
p.push( palette[ i ] );
|
||||
}
|
||||
|
||||
for ( let j = 0; j < el.length; j++ ) {
|
||||
if ( el[j] > 70 ) {
|
||||
p.push( palette[ i ] );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
};
|
||||
|
||||
const calculateLuminance = ( colour ) => {
|
||||
const calculateLuminance = colour => {
|
||||
return colour[ 0 ] + colour[ 1 ] + colour[ 2 ] / 3;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
@@ -129,33 +156,54 @@ const replacements = {
|
||||
'rgba(158, 158, 158, 0.2)': '@fg_rgba_02',
|
||||
'rgba(158, 158, 158, 0.1168)': '@fg_rgba_01'
|
||||
};
|
||||
const themePreProcessor = ( file, replacement, out ) => {
|
||||
|
||||
const themePreProcessor = (
|
||||
file, replacement, out
|
||||
) => {
|
||||
const colours = Object.keys( replacements );
|
||||
|
||||
let data = '' + fs.readFileSync( file );
|
||||
for (let index = 0; index < colours.length; index++) {
|
||||
|
||||
for ( let index = 0; index < colours.length; index++ ) {
|
||||
const colour = colours[index];
|
||||
data = data.replaceAll(colour, replacements[ colour ]);
|
||||
|
||||
data = data.replaceAll( colour, replacements[ colour ] );
|
||||
}
|
||||
|
||||
const outPath = file.replace( replacement, out );
|
||||
|
||||
try {
|
||||
fs.mkdirSync( path.dirname( outPath ), {
|
||||
recursive: true,
|
||||
'recursive': true,
|
||||
} );
|
||||
} catch ( e ) {
|
||||
console.error( e );
|
||||
}
|
||||
|
||||
fs.writeFileSync( outPath, data );
|
||||
}
|
||||
};
|
||||
|
||||
const getGradientColour = ( colour, index, multiplier ) => {
|
||||
const getGradientColour = (
|
||||
colour, index, multiplier
|
||||
) => {
|
||||
if ( index === 0 ) {
|
||||
return [ colour[ 0 ] * multiplier, colour[ 1 ] * multiplier, colour[ 2 ] * multiplier ];
|
||||
return [
|
||||
colour[ 0 ] * multiplier,
|
||||
colour[ 1 ] * multiplier,
|
||||
colour[ 2 ] * multiplier
|
||||
];
|
||||
}
|
||||
const gradient = getGradientColour( colour, index - 1, multiplier );
|
||||
return [ Math.min( 255, gradient[ 0 ] * multiplier ), Math.min( 255, gradient[ 1 ] * multiplier ), Math.min( 255, gradient[ 2 ] * multiplier ) ];
|
||||
}
|
||||
|
||||
const gradient = getGradientColour(
|
||||
colour, index - 1, multiplier
|
||||
);
|
||||
|
||||
return [
|
||||
Math.min( 255, gradient[ 0 ] * multiplier ),
|
||||
Math.min( 255, gradient[ 1 ] * multiplier ),
|
||||
Math.min( 255, gradient[ 2 ] * multiplier )
|
||||
];
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
treeWalker,
|
||||
@@ -167,4 +215,4 @@ module.exports = {
|
||||
themePreProcessor,
|
||||
getGradientColour,
|
||||
removeUselessColours
|
||||
}
|
||||
};
|
||||
@@ -1,11 +1,14 @@
|
||||
const fs = require( 'fs' );
|
||||
|
||||
const path = require( 'path' );
|
||||
|
||||
const data = '' + fs.readFileSync( '/usr/share/themes/Material-Black-Blueberry/gtk-4.0/gtk.css' );
|
||||
|
||||
let lineNumber = 1;
|
||||
|
||||
const indexer = {};
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
|
||||
for ( let i = 0; i < data.length; i++ ) {
|
||||
const char = data[i];
|
||||
|
||||
if ( char === '\n' ) {
|
||||
@@ -13,17 +16,22 @@ for (let i = 0; i < data.length; i++) {
|
||||
} else if ( char === '#' ) {
|
||||
const extract = data.substring( i );
|
||||
const col = extract.slice( 0, extract.indexOf( '\n' ) );
|
||||
|
||||
if ( !indexer[ col ] ) {
|
||||
indexer[ col ] = [];
|
||||
}
|
||||
|
||||
indexer[ col ].push( lineNumber );
|
||||
} else if ( char === 'r' ) {
|
||||
const extract = data.substring( i );
|
||||
|
||||
if ( extract.slice( 0, 3 ) === 'rgb' ) {
|
||||
const col = extract.slice( 0, extract.indexOf( '\n' ) );
|
||||
|
||||
if ( !indexer[ col ] ) {
|
||||
indexer[ col ] = [];
|
||||
}
|
||||
|
||||
indexer[ col ].push( lineNumber );
|
||||
}
|
||||
}
|
||||
@@ -32,7 +40,8 @@ for (let i = 0; i < data.length; i++) {
|
||||
|
||||
// Output
|
||||
const keys = Object.keys( indexer );
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
|
||||
for ( let i = 0; i < keys.length; i++ ) {
|
||||
const element = keys[i];
|
||||
|
||||
if ( element.length <= 25 ) {
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"gen": {
|
||||
"overrides": {}
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,31 @@
|
||||
import { App } from "astal/gtk4"
|
||||
import style from "./style.scss"
|
||||
import Bar from "./components/bar/Bar";
|
||||
import AstalHyprland from "gi://AstalHyprland?version=0.1";
|
||||
import { hyprToGdk } from "./util/hyprland";
|
||||
import Brightness from "./util/brightness";
|
||||
import {
|
||||
App
|
||||
} from 'astal/gtk4';
|
||||
import AstalHyprland from 'gi://AstalHyprland?version=0.1';
|
||||
import Bar from './components/bar/Bar';
|
||||
import Brightness from './util/brightness';
|
||||
import {
|
||||
hyprToGdk
|
||||
} from './util/hyprland';
|
||||
import style from './style.scss';
|
||||
|
||||
App.start({
|
||||
instanceName: "runner",
|
||||
css: style,
|
||||
main() {
|
||||
App.start( {
|
||||
'instanceName': 'runner',
|
||||
'css': style,
|
||||
main () {
|
||||
const hypr = AstalHyprland.get_default();
|
||||
const bars = new Map<number, string>();
|
||||
|
||||
const barCreator = ( monitor: AstalHyprland.Monitor ) => {
|
||||
const gdkMonitor = hyprToGdk( monitor );
|
||||
|
||||
if ( gdkMonitor ) {
|
||||
print( 'Bar added for screen ' + monitor.get_id() );
|
||||
bars.set( monitor.get_id(), Bar.BarLauncher( gdkMonitor ) );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (const monitor of hypr.monitors) {
|
||||
for ( const monitor of hypr.monitors ) {
|
||||
barCreator( monitor );
|
||||
}
|
||||
|
||||
@@ -30,14 +35,17 @@ App.start({
|
||||
|
||||
hypr.connect( 'monitor-removed', ( _, monitor ) => {
|
||||
const windowName = bars.get( monitor );
|
||||
|
||||
if ( windowName ) {
|
||||
const win = App.get_window( windowName );
|
||||
|
||||
if ( win ) {
|
||||
App.toggle_window( windowName );
|
||||
win.set_child( null );
|
||||
App.remove_window( win );
|
||||
print( 'Bar removed for screen', monitor );
|
||||
}
|
||||
|
||||
bars.delete( monitor );
|
||||
}
|
||||
} );
|
||||
@@ -49,7 +57,7 @@ App.start({
|
||||
// }
|
||||
// Launcher();
|
||||
},
|
||||
requestHandler(request, res) {
|
||||
requestHandler ( request, res ) {
|
||||
const args = request.trimStart().split( ' ' );
|
||||
|
||||
if ( args[ 0 ] === 'notifier' ) {
|
||||
@@ -60,6 +68,7 @@ App.start({
|
||||
} else if ( args[ 0 ] === 'brightness' ) {
|
||||
try {
|
||||
const brightness = Brightness.get_default();
|
||||
|
||||
if ( brightness.screenAvailable ) {
|
||||
if ( args[ 1 ] === 'increase' ) {
|
||||
brightness.screen += args.length > 1 ? parseInt( args[ 2 ] ) / 100 : 1;
|
||||
@@ -70,19 +79,27 @@ App.start({
|
||||
brightness.screen = parseInt( args[ 2 ] ) / 100;
|
||||
} else {
|
||||
res( 'Argument <brightness> unspecified' );
|
||||
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
res( 'Unknown command ' + args[ 1 ] );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
res( 'Ok' );
|
||||
} else {
|
||||
res( 'No controllable screen available' );
|
||||
}
|
||||
} catch ( e ) {
|
||||
print( e );
|
||||
res( 'Error running brightness change' );
|
||||
}
|
||||
} else if ( args[ 0 ] === 'reload-style' ) {
|
||||
res( 'Reloading style sheets' );
|
||||
App.apply_css( '', true );
|
||||
// TODO: Compile scss and then load it
|
||||
}
|
||||
// } else if ( args[ 0 ] === 'launcher' ) {
|
||||
// if ( args[ 1 ] === 'show' ) {
|
||||
@@ -99,5 +116,4 @@ App.start({
|
||||
// }
|
||||
// }
|
||||
},
|
||||
})
|
||||
|
||||
} );
|
||||
@@ -1,44 +1,58 @@
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import Power from "./modules/Power";
|
||||
import Audio from "./modules/Audio/Audio";
|
||||
import Bluetooth from "./modules/Bluetooth/Bluetooth";
|
||||
import Brightness from "./modules/Brightness/Brightness";
|
||||
import Player from "./modules/Player/Player";
|
||||
import { BatteryBox } from "./modules/Battery";
|
||||
import { exec } from "astal";
|
||||
import Network from "./modules/Networking/Network";
|
||||
import Audio from './modules/Audio/Audio';
|
||||
import {
|
||||
BatteryBox
|
||||
} from './modules/Battery';
|
||||
import Bluetooth from './modules/Bluetooth/Bluetooth';
|
||||
import Brightness from './modules/Brightness/Brightness';
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
import Network from './modules/Networking/Network';
|
||||
import Player from './modules/Player/Player';
|
||||
import Power from './modules/Power';
|
||||
import SysTray from './modules/SysTray';
|
||||
import {
|
||||
exec
|
||||
} from 'astal';
|
||||
|
||||
const QuickActions = () => {
|
||||
const popover = new Gtk.Popover({ cssClasses: ["quick-actions-wrapper"] });
|
||||
popover.set_child(renderQuickActions());
|
||||
const popover = new Gtk.Popover( {
|
||||
'cssClasses': [ 'quick-actions-wrapper' ]
|
||||
} );
|
||||
|
||||
popover.set_child( renderQuickActions() );
|
||||
|
||||
return popover;
|
||||
};
|
||||
|
||||
const renderQuickActions = () => {
|
||||
const user = exec("/bin/sh -c whoami");
|
||||
const profile = exec("/bin/fish -c get-profile-picture");
|
||||
const cwd = exec("pwd");
|
||||
const user = exec( '/bin/sh -c whoami' );
|
||||
const profile = exec( '/bin/fish -c get-profile-picture' );
|
||||
const cwd = exec( 'pwd' );
|
||||
const um = Power.UserMenu();
|
||||
|
||||
return (
|
||||
<box visible cssClasses={["quick-actions", "popover-box"]} vertical>
|
||||
<box visible cssClasses={[
|
||||
'quick-actions',
|
||||
'popover-box'
|
||||
]} vertical>
|
||||
<centerbox
|
||||
startWidget={
|
||||
<button
|
||||
onClicked={() => um.popup()}
|
||||
cssClasses={["stealthy-button"]}
|
||||
cssClasses={[ 'stealthy-button' ]}
|
||||
child={
|
||||
<box>
|
||||
{um}
|
||||
<Gtk.Frame
|
||||
cssClasses={["avatar-icon"]}
|
||||
cssClasses={[ 'avatar-icon' ]}
|
||||
child={
|
||||
<image
|
||||
file={
|
||||
profile !== ""
|
||||
profile !== ''
|
||||
? profile
|
||||
: cwd +
|
||||
"/no-avatar-icon.jpg"
|
||||
: cwd
|
||||
+ '/no-avatar-icon.jpg'
|
||||
}
|
||||
></image>
|
||||
}
|
||||
@@ -53,6 +67,7 @@ const renderQuickActions = () => {
|
||||
hexpand={false}
|
||||
>
|
||||
<BatteryBox></BatteryBox>
|
||||
<SysTray.SystemTray></SysTray.SystemTray>
|
||||
<Power.Power></Power.Power>
|
||||
</box>
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { bind, Binding } from "astal";
|
||||
import { bind } from "astal";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import AstalWp from "gi://AstalWp";
|
||||
|
||||
@@ -13,8 +13,8 @@ const AudioModule = () => {
|
||||
wp.defaultMicrophone.set_volume(volume / 100);
|
||||
};
|
||||
|
||||
const speakerSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SPEAKER);
|
||||
const micSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_MICROPHONE);
|
||||
const speakerSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SINK);
|
||||
const micSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SOURCE);
|
||||
|
||||
return (
|
||||
<box cssClasses={["audio-box"]} vertical>
|
||||
@@ -107,12 +107,18 @@ const AudioModule = () => {
|
||||
};
|
||||
|
||||
const SinkPicker = (type: AstalWp.MediaClass) => {
|
||||
const devices = bind(wp, "endpoints");
|
||||
const devices = bind(wp, "nodes");
|
||||
wp.connect("ready", () => {
|
||||
const dev = wp.get_nodes()!
|
||||
for (let i = 0; i < dev.length; i++) {
|
||||
const d = dev[i];
|
||||
}
|
||||
})
|
||||
|
||||
return (
|
||||
<box vertical>
|
||||
<label
|
||||
label={`Available Audio ${type === AstalWp.MediaClass.AUDIO_SPEAKER ? "Output" : type === AstalWp.MediaClass.AUDIO_MICROPHONE ? "Input" : ""} Devices`}
|
||||
label={`Available Audio ${type === AstalWp.MediaClass.AUDIO_SINK ? "Output" : type === AstalWp.MediaClass.AUDIO_SOURCE ? "Input" : ""} Devices`}
|
||||
cssClasses={[ 'title-2' ]}
|
||||
></label>
|
||||
<Gtk.Separator marginBottom={5} marginTop={3}></Gtk.Separator>
|
||||
@@ -128,11 +134,11 @@ const SinkPicker = (type: AstalWp.MediaClass) => {
|
||||
if (
|
||||
id ===
|
||||
(type ===
|
||||
AstalWp.MediaClass.AUDIO_SPEAKER
|
||||
AstalWp.MediaClass.AUDIO_SINK
|
||||
? wp.defaultSpeaker.id
|
||||
: type ===
|
||||
AstalWp.MediaClass
|
||||
.AUDIO_MICROPHONE
|
||||
.AUDIO_SOURCE
|
||||
? wp.defaultMicrophone.id
|
||||
: "")
|
||||
) {
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
|
||||
{devices.as(d => {
|
||||
return d.map(device => {
|
||||
if (device.get_media_class() !== type) {
|
||||
return <box cssClasses={[ 'empty' ]}></box>;
|
||||
}
|
||||
return (
|
||||
<button
|
||||
cssClasses={bind(device, "id").as(id => {
|
||||
if (
|
||||
id ===
|
||||
(type ===
|
||||
AstalWp.MediaClass.AUDIO_SPEAKER
|
||||
? wp.defaultSpeaker.id
|
||||
: type ===
|
||||
AstalWp.MediaClass
|
||||
.AUDIO_MICROPHONE
|
||||
? wp.defaultMicrophone.id
|
||||
: "")
|
||||
) {
|
||||
return [
|
||||
"sink-option",
|
||||
"currently-selected-sink-option",
|
||||
];
|
||||
} else {
|
||||
return ["sink-option"];
|
||||
}
|
||||
})}
|
||||
child={
|
||||
<box halign={Gtk.Align.START}>
|
||||
<image
|
||||
iconName={bind(device, "icon").as(
|
||||
icon => icon,
|
||||
)}
|
||||
marginEnd={3}
|
||||
></image>
|
||||
<label
|
||||
label={bind(
|
||||
device,
|
||||
"description",
|
||||
).as(t => t ?? "")}
|
||||
></label>
|
||||
</box>
|
||||
}
|
||||
onClicked={() => {
|
||||
device.set_is_default(true);
|
||||
}}
|
||||
></button>
|
||||
);
|
||||
});
|
||||
})}
|
||||
@@ -29,21 +29,23 @@ export const BatteryBox = () => {
|
||||
cssClasses={["battery-time"]}
|
||||
visible={bind(battery, "charging").as(c => !c)}
|
||||
label={bind(battery, "timeToEmpty").as(t => `(${toTime(t)})`)}
|
||||
tooltipText={bind(battery, 'energyRate').as(er => `Time to empty. Power usage: ${batteryEnergy(er)}`)}
|
||||
/>
|
||||
<label
|
||||
cssClasses={["battery-time"]}
|
||||
visible={bind(battery, "charging")}
|
||||
label={bind(battery, "timeToFull").as(t => `(${toTime(t)})`)}
|
||||
tooltipText={bind(battery, 'energyRate').as(er => `Time to full. Charge rate: ${batteryEnergy(er)}`)}
|
||||
/>
|
||||
</box>
|
||||
);
|
||||
};
|
||||
|
||||
const MINUTE = 60;
|
||||
const HOUR = MINUTE * 60;
|
||||
const toTime = (time: number) => {
|
||||
const MINUTE = 60;
|
||||
const HOUR = MINUTE * 60;
|
||||
|
||||
if (time > 24 * HOUR) return "";
|
||||
if (!time) return "Waiting on BIOS"
|
||||
if (time > 24 * HOUR) return "24h+";
|
||||
|
||||
const hours = Math.round(time / HOUR);
|
||||
const minutes = Math.round((time - hours * HOUR) / MINUTE);
|
||||
|
||||
@@ -4,10 +4,10 @@ import Brightness from "../../../../util/brightness";
|
||||
const brightness = Brightness.get_default();
|
||||
|
||||
const BrightnessModule = () => {
|
||||
print( brightness.screen * 100 );
|
||||
const setBrightness = (value: number) => {
|
||||
brightness.screen = value;
|
||||
}
|
||||
|
||||
return (
|
||||
<box visible={bind(brightness, 'screenAvailable')}>
|
||||
<image iconName={"brightness-high-symbolic"}></image>
|
||||
@@ -17,7 +17,7 @@ const BrightnessModule = () => {
|
||||
hexpand
|
||||
max={1}
|
||||
min={0.01}
|
||||
step={0.01}
|
||||
step={0.05}
|
||||
vexpand
|
||||
onChangeValue={self => setBrightness(self.value)}
|
||||
></slider>
|
||||
|
||||
@@ -135,8 +135,9 @@ const PlayerItem = ({ player }: { player: AstalMpris.Player }) => {
|
||||
};
|
||||
|
||||
const secondsToFriendlyTime = (time: number) => {
|
||||
const minutes = Math.floor(time / 60);
|
||||
const hours = Math.floor(minutes / 60);
|
||||
const m = Math.floor(time / 60);
|
||||
const minutes = Math.floor(m % 60);
|
||||
const hours = Math.floor(m / 60 % 24);
|
||||
const seconds = Math.floor(time % 60);
|
||||
if (hours > 0) {
|
||||
return `${hours}:${expandTime(minutes)}:${expandTime(seconds)}`;
|
||||
|
||||
@@ -1,48 +1,56 @@
|
||||
import { exec } from "astal";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import {
|
||||
exec
|
||||
} from 'astal';
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
|
||||
const PowerMenu = (): Gtk.Popover => {
|
||||
const popover = new Gtk.Popover({ cssClasses: ["PowerMenu"] });
|
||||
const popover = new Gtk.Popover( {
|
||||
'cssClasses': [ 'PowerMenu' ]
|
||||
} );
|
||||
|
||||
const powerMenuBox = () => {
|
||||
return (
|
||||
<box>
|
||||
<button
|
||||
cssClasses={["power-button"]}
|
||||
cssClasses={[ 'power-button' ]}
|
||||
child={
|
||||
<image iconName={"system-shutdown-symbolic"}></image>
|
||||
<image iconName={'system-shutdown-symbolic'}></image>
|
||||
}
|
||||
onClicked={() => exec("/bin/sh -c 'shutdown now'")}
|
||||
onClicked={() => exec( '/bin/sh -c \'shutdown now\'' )}
|
||||
></button>
|
||||
<button
|
||||
cssClasses={["power-button"]}
|
||||
child={<image iconName={"system-reboot-symbolic"}></image>}
|
||||
onClicked={() => exec("/bin/sh -c 'reboot'")}
|
||||
cssClasses={[ 'power-button' ]}
|
||||
child={<image iconName={'system-reboot-symbolic'}></image>}
|
||||
onClicked={() => exec( '/bin/sh -c \'reboot\'' )}
|
||||
></button>
|
||||
<button
|
||||
cssClasses={["power-button"]}
|
||||
child={<image iconName={"system-suspend-symbolic"}></image>}
|
||||
onClicked={() => exec("/bin/sh -c 'systemctl suspend'")}
|
||||
cssClasses={[ 'power-button' ]}
|
||||
child={<image iconName={'system-suspend-symbolic'}></image>}
|
||||
onClicked={() => exec( '/bin/sh -c \'systemctl suspend\'' )}
|
||||
></button>
|
||||
</box>
|
||||
);
|
||||
};
|
||||
|
||||
popover.set_child(powerMenuBox());
|
||||
popover.set_child( powerMenuBox() );
|
||||
|
||||
return popover;
|
||||
};
|
||||
|
||||
const Power = () => {
|
||||
const pm = PowerMenu();
|
||||
|
||||
return (
|
||||
<button
|
||||
widthRequest={0}
|
||||
hexpand={false}
|
||||
vexpand={false}
|
||||
cssClasses={["power-menu-button"]}
|
||||
cssClasses={[ 'power-menu-button' ]}
|
||||
child={
|
||||
<box>
|
||||
<image iconName={"system-shutdown-symbolic"}></image>
|
||||
<image iconName={'system-shutdown-symbolic'}></image>
|
||||
{pm}
|
||||
</box>
|
||||
}
|
||||
@@ -58,24 +66,24 @@ const UserMenu = (): Gtk.Popover => {
|
||||
return (
|
||||
<box>
|
||||
<button
|
||||
cssClasses={["power-button"]}
|
||||
cssClasses={[ 'power-button' ]}
|
||||
child={
|
||||
<image iconName={"system-lock-screen-symbolic"}></image>
|
||||
<image iconName={'system-lock-screen-symbolic'}></image>
|
||||
}
|
||||
onClicked={() => exec("/bin/sh -c 'hyprlock'")}
|
||||
onClicked={() => exec( '/bin/sh -c \'hyprlock\'' )}
|
||||
></button>
|
||||
<button
|
||||
cssClasses={["power-button"]}
|
||||
child={<image iconName={"system-log-out-symbolic"}></image>}
|
||||
onClicked={() =>
|
||||
exec("/bin/sh -c 'hyprctl dispatch exit 0'")
|
||||
cssClasses={[ 'power-button' ]}
|
||||
child={<image iconName={'system-log-out-symbolic'}></image>}
|
||||
onClicked={() => exec( '/bin/sh -c \'hyprctl dispatch exit 0\'' )
|
||||
}
|
||||
></button>
|
||||
</box>
|
||||
);
|
||||
};
|
||||
|
||||
popover.set_child(powerMenuBox());
|
||||
popover.set_child( powerMenuBox() );
|
||||
|
||||
return popover;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
import AstalTray from 'gi://AstalTray';
|
||||
import {
|
||||
GObject
|
||||
} from 'astal';
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
|
||||
const SYNC = GObject.BindingFlags.SYNC_CREATE;
|
||||
|
||||
const SysTray = () => {
|
||||
const trayBox = new Gtk.Box( {
|
||||
'cssClasses': [ '' ]
|
||||
} );
|
||||
const tray = AstalTray.get_default();
|
||||
const trayItems = new Map<string, Gtk.MenuButton>();
|
||||
const trayAddedHandler = tray.connect( 'item-added', ( _, id ) => {
|
||||
const item = tray.get_item( id );
|
||||
const popover = Gtk.PopoverMenu.new_from_model( item.menu_model );
|
||||
const icon = new Gtk.Image();
|
||||
const button = new Gtk.MenuButton( {
|
||||
popover,
|
||||
'child': icon,
|
||||
'cssClasses': [ 'tray-item' ],
|
||||
} );
|
||||
|
||||
item.bind_property(
|
||||
'gicon', icon, 'gicon', SYNC
|
||||
);
|
||||
popover.insert_action_group( 'dbusmenu', item.action_group );
|
||||
item.connect( 'notify::action-group', () => {
|
||||
popover.insert_action_group( 'dbusmenu', item.action_group );
|
||||
} );
|
||||
|
||||
trayItems.set( id, button );
|
||||
trayBox.append( button );
|
||||
} );
|
||||
const trayRemovedHandler = tray.connect( 'item-removed', ( _, id ) => {
|
||||
const button = trayItems.get( id );
|
||||
|
||||
if ( button ) {
|
||||
trayBox.remove( button );
|
||||
button.run_dispose();
|
||||
trayItems.delete( id );
|
||||
}
|
||||
} );
|
||||
|
||||
trayBox.connect( 'destroy', () => {
|
||||
tray.disconnect( trayAddedHandler );
|
||||
tray.disconnect( trayRemovedHandler );
|
||||
} );
|
||||
|
||||
return trayBox;
|
||||
};
|
||||
|
||||
const TrayPopover = () => {
|
||||
const popover = new Gtk.Popover( {
|
||||
'cssClasses': [ 'TrayPopover' ]
|
||||
} );
|
||||
|
||||
popover.set_child( SysTray() );
|
||||
|
||||
return popover;
|
||||
};
|
||||
|
||||
const SystemTray = () => {
|
||||
const systray = TrayPopover();
|
||||
|
||||
return (
|
||||
<button
|
||||
widthRequest={0}
|
||||
hexpand={false}
|
||||
vexpand={false}
|
||||
cssClasses={[ 'power-menu-button' ]}
|
||||
child={
|
||||
<box>
|
||||
<image iconName={'systemtray'}></image>
|
||||
{systray}
|
||||
</box>
|
||||
}
|
||||
onClicked={() => systray.popup()}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default {
|
||||
SystemTray
|
||||
};
|
||||
@@ -1,19 +1,30 @@
|
||||
import { App, Astal, Gdk, Gtk } from "astal/gtk4";
|
||||
import Hyprland from "./modules/Hyprland";
|
||||
import Calendar from "./modules/Calendar";
|
||||
import QuickView from "./modules/QuickView";
|
||||
import SystemInfo from "./modules/SystemInfo";
|
||||
import { CenterBox } from "astal/gtk4/widget";
|
||||
import {
|
||||
App, Astal, Gdk, Gtk
|
||||
} from 'astal/gtk4';
|
||||
import Calendar from './modules/Calendar';
|
||||
import {
|
||||
CenterBox
|
||||
} from 'astal/gtk4/widget';
|
||||
import Hyprland from './modules/Hyprland';
|
||||
import QuickView from './modules/QuickView';
|
||||
import SystemInfo from './modules/SystemInfo';
|
||||
|
||||
const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } ) => {
|
||||
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;
|
||||
const Bar = ( {
|
||||
gdkmonitor, name
|
||||
}: {
|
||||
'gdkmonitor': Gdk.Monitor,
|
||||
'name': string
|
||||
} ) => {
|
||||
const {
|
||||
TOP, LEFT, RIGHT
|
||||
} = Astal.WindowAnchor;
|
||||
|
||||
return (
|
||||
<window
|
||||
gdkmonitor={gdkmonitor}
|
||||
cssClasses={["Bar"]}
|
||||
cssClasses={[ 'Bar' ]}
|
||||
name={name}
|
||||
namespace={"bar"}
|
||||
namespace={'bar'}
|
||||
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
||||
anchor={TOP | LEFT | RIGHT}
|
||||
visible
|
||||
@@ -21,13 +32,13 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
||||
child={
|
||||
<CenterBox
|
||||
orientation={Gtk.Orientation.HORIZONTAL}
|
||||
start_widget={
|
||||
startWidget={
|
||||
<box
|
||||
hexpand
|
||||
halign={Gtk.Align.START}
|
||||
>
|
||||
<Hyprland.ModeStatus />
|
||||
<Calendar.Time />
|
||||
<SystemInfo.SystemInfo />
|
||||
<Hyprland.Workspace />
|
||||
</box>
|
||||
}
|
||||
@@ -36,9 +47,9 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
||||
<box
|
||||
hexpand
|
||||
halign={Gtk.Align.END}
|
||||
cssClasses={["BarRight"]}
|
||||
cssClasses={[ 'BarRight' ]}
|
||||
>
|
||||
<Hyprland.SysTray />
|
||||
<SystemInfo.SystemInfo />
|
||||
<QuickView.QuickView />
|
||||
</box>
|
||||
}
|
||||
@@ -48,21 +59,24 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
||||
);
|
||||
};
|
||||
|
||||
const cliHandler = (args: string[]): string => {
|
||||
return "Not implemented";
|
||||
const cliHandler = ( args: string[] ): string => {
|
||||
console.debug( args );
|
||||
|
||||
return 'Not implemented';
|
||||
};
|
||||
|
||||
const BarLauncher = ( monitor: Gdk.Monitor ) => {
|
||||
const windowName = `bar-${monitor.get_connector()}`
|
||||
const windowName = `bar-${ monitor.get_connector() }`;
|
||||
|
||||
const createBar = () => {
|
||||
return <Bar gdkmonitor={monitor} name={windowName}></Bar>
|
||||
}
|
||||
return <Bar gdkmonitor={monitor} name={windowName}></Bar>;
|
||||
};
|
||||
|
||||
// Actually start the bar
|
||||
createBar();
|
||||
|
||||
return windowName;
|
||||
}
|
||||
};
|
||||
|
||||
export default {
|
||||
BarLauncher,
|
||||
|
||||
@@ -11,6 +11,50 @@ window.Bar {
|
||||
/* border-radius: 10px; */
|
||||
/* margin: 8px; */
|
||||
/* } */
|
||||
.mode-status {
|
||||
color: white;
|
||||
background-color: #00002dff;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
margin-left: 5px;
|
||||
border-radius: 20px;
|
||||
font-family: $monospace-font;
|
||||
|
||||
&.command-mode {
|
||||
background-color: darkslategray;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.windowing-mode {
|
||||
background-color: darkslategray;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.workspace-mode {
|
||||
background-color: darkblue;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.launch-mode {
|
||||
background-color: darkgreen;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.device-mode {
|
||||
background-color: darkred;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.screenshotting-mode {
|
||||
background-color: purple;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.notifications-mode {
|
||||
background-color: darkorange;
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.bar-button {
|
||||
border-radius: 20px;
|
||||
@@ -54,6 +98,7 @@ window.Bar {
|
||||
.time {
|
||||
min-width: 11rem;
|
||||
padding: 3px;
|
||||
|
||||
& button {
|
||||
box-shadow: none;
|
||||
padding: 0;
|
||||
|
||||
@@ -1,75 +1,34 @@
|
||||
import AstalTray from "gi://AstalTray";
|
||||
import { bind, GObject } from "astal";
|
||||
import AstalHyprland from "gi://AstalHyprland";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import {
|
||||
bind,
|
||||
exec,
|
||||
readFile
|
||||
} from 'astal';
|
||||
import AstalHyprland from 'gi://AstalHyprland';
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
import Pango from 'gi://Pango?version=1.0';
|
||||
|
||||
const hypr = AstalHyprland.get_default();
|
||||
const SYNC = GObject.BindingFlags.SYNC_CREATE;
|
||||
|
||||
const SysTray = () => {
|
||||
const trayBox = new Gtk.Box({ cssClasses: ["bar-button"] });
|
||||
const tray = AstalTray.get_default();
|
||||
|
||||
const trayItems = new Map<string, Gtk.MenuButton>();
|
||||
const trayAddedHandler = tray.connect("item-added", (_, id) => {
|
||||
const item = tray.get_item(id);
|
||||
const popover = Gtk.PopoverMenu.new_from_model(item.menu_model);
|
||||
const icon = new Gtk.Image();
|
||||
const button = new Gtk.MenuButton({
|
||||
popover,
|
||||
child: icon,
|
||||
cssClasses: ["tray-item"],
|
||||
});
|
||||
|
||||
item.bind_property("gicon", icon, "gicon", SYNC);
|
||||
popover.insert_action_group("dbusmenu", item.action_group);
|
||||
item.connect("notify::action-group", () => {
|
||||
popover.insert_action_group("dbusmenu", item.action_group);
|
||||
});
|
||||
|
||||
trayItems.set(id, button);
|
||||
trayBox.append(button);
|
||||
});
|
||||
|
||||
const trayRemovedHandler = tray.connect("item-removed", (_, id) => {
|
||||
const button = trayItems.get(id);
|
||||
if (button) {
|
||||
trayBox.remove(button);
|
||||
button.run_dispose();
|
||||
trayItems.delete(id);
|
||||
}
|
||||
});
|
||||
|
||||
trayBox.connect("destroy", () => {
|
||||
tray.disconnect(trayAddedHandler);
|
||||
tray.disconnect(trayRemovedHandler);
|
||||
});
|
||||
|
||||
return trayBox;
|
||||
};
|
||||
|
||||
const Workspace = () => {
|
||||
return (
|
||||
<box>
|
||||
{bind(hypr, "workspaces").as(wss =>
|
||||
wss
|
||||
.filter(ws => !(ws.id >= -99 && ws.id <= -2)) // filter out special workspaces
|
||||
.sort((a, b) => a.id - b.id)
|
||||
.map(ws => (
|
||||
{bind( hypr, 'workspaces' ).as( wss => wss
|
||||
.filter( ws => !( ws.id >= -99 && ws.id <= -2 ) ) // filter out special workspaces
|
||||
.sort( ( a, b ) => a.id - b.id )
|
||||
.map( ws => (
|
||||
<button
|
||||
cssClasses={bind(hypr, "focusedWorkspace").as(fw =>
|
||||
ws === fw
|
||||
cssClasses={bind( hypr, 'focusedWorkspace' ).as( fw => ws === fw
|
||||
? [
|
||||
"focused-workspace-button",
|
||||
"workspace-button",
|
||||
'focused-workspace-button',
|
||||
'workspace-button',
|
||||
]
|
||||
: ["workspace-button"],
|
||||
)}
|
||||
: [ 'workspace-button' ], )}
|
||||
onButtonPressed={() => ws.focus()}
|
||||
child={<label label={String(ws.id)}></label>}
|
||||
child={<label label={String( ws.id )}></label>}
|
||||
></button>
|
||||
)),
|
||||
)}
|
||||
) ), )}
|
||||
</box>
|
||||
);
|
||||
};
|
||||
@@ -79,15 +38,15 @@ const Workspace = () => {
|
||||
* displaying all available clients
|
||||
*/
|
||||
const ActiveWindow = () => {
|
||||
const focused = bind(hypr, "focusedClient");
|
||||
const focused = bind( hypr, 'focusedClient' );
|
||||
|
||||
const WindowPopover = (): Gtk.Popover => {
|
||||
// Set up boxes + Popover
|
||||
const popover = new Gtk.Popover();
|
||||
|
||||
const popoverBox = WindowPopoverBox();
|
||||
|
||||
popover.set_child(popoverBox);
|
||||
popover.set_child( popoverBox );
|
||||
|
||||
return popover;
|
||||
};
|
||||
|
||||
@@ -97,47 +56,91 @@ const ActiveWindow = () => {
|
||||
// Return fully assembled HyprlandFocusedClient box
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
return (
|
||||
<box visible={focused.as(Boolean)}>
|
||||
<box visible={focused.as( Boolean )}>
|
||||
<button
|
||||
onClicked={() => windowPopover.popup()}
|
||||
cssClasses={["bar-button"]}
|
||||
cssClasses={[ 'bar-button' ]}
|
||||
child={
|
||||
focused.as(
|
||||
client =>
|
||||
client && (
|
||||
<label label={bind(client, "title").as(String)} />
|
||||
),
|
||||
)
|
||||
focused.as( client => client && (
|
||||
<label
|
||||
maxWidthChars={70}
|
||||
ellipsize={Pango.EllipsizeMode.END}
|
||||
label={bind( client, 'title' ).as( String )} />
|
||||
), )
|
||||
}></button>
|
||||
{windowPopover}
|
||||
</box >
|
||||
);
|
||||
};
|
||||
|
||||
type submaps = 'device' | 'launch' | 'workspace' | 'windowing' | 'screenshotting' | 'notifications' | '';
|
||||
|
||||
const ModeStatus = () => {
|
||||
let isUsingHyprvim = false;
|
||||
|
||||
try {
|
||||
const path = exec( 'bash -c "cd ~ && pwd"' ) + '/.config/hyprvim';
|
||||
|
||||
isUsingHyprvim = readFile( path ).trim() === 'y';
|
||||
} catch ( e ) {
|
||||
printerr( 'Failed to read hyprvim config', e );
|
||||
}
|
||||
|
||||
const label = new Gtk.Label();
|
||||
|
||||
if ( !isUsingHyprvim ) return label;
|
||||
|
||||
print( '==> Using hyprvim config' );
|
||||
|
||||
const map = {
|
||||
'device': 'DEV',
|
||||
'launch': 'LNC',
|
||||
'workspace': 'WSP',
|
||||
'windowing': 'WIN',
|
||||
'screenshotting': 'SCS',
|
||||
'notifications': 'NOT',
|
||||
'': 'NRM'
|
||||
};
|
||||
|
||||
label.label = map[''];
|
||||
label.cssClasses = [ 'mode-status' ];
|
||||
|
||||
// TODO: Possibly add popover to it that lists binds
|
||||
hypr.connect( 'submap', ( _, name: submaps ) => {
|
||||
label.label = map[name];
|
||||
label.cssClasses = [
|
||||
'mode-status',
|
||||
name + '-mode'
|
||||
];
|
||||
} );
|
||||
|
||||
return label;
|
||||
};
|
||||
|
||||
const WindowPopoverBox = () => {
|
||||
return <box vertical>
|
||||
<label label={"Available Windows"} cssClasses={['title-2']}></label>
|
||||
<label label={'Available Windows'} cssClasses={[ 'title-2' ]}></label>
|
||||
<Gtk.Separator marginTop={5} marginBottom={5}></Gtk.Separator>
|
||||
<box vertical>
|
||||
{bind(hypr, 'clients').as(clients => {
|
||||
return clients.map(client => {
|
||||
{bind( hypr, 'clients' ).as( clients => {
|
||||
return clients.map( client => {
|
||||
return <button child={
|
||||
<box>
|
||||
<label label={bind(client, 'workspace').as(w => `(WS ${w.name})`)}></label>
|
||||
<label label={bind(client, 'initialClass').as(c => `[${c}]`)}></label>
|
||||
<label label={bind(client, 'title')}></label>
|
||||
<label label={bind( client, 'workspace' ).as( w => `(WS ${ w.name })` )}></label>
|
||||
<label label={bind( client, 'initialClass' ).as( c => `[${ c }]` )}></label>
|
||||
<label label={bind( client, 'title' )}></label>
|
||||
</box>
|
||||
}
|
||||
onClicked={() => client.focus()}
|
||||
></button>
|
||||
})
|
||||
})}
|
||||
></button>;
|
||||
} );
|
||||
} )}
|
||||
</box>
|
||||
</box>
|
||||
}
|
||||
</box>;
|
||||
};
|
||||
|
||||
export default {
|
||||
Workspace,
|
||||
ActiveWindow,
|
||||
SysTray,
|
||||
ModeStatus
|
||||
};
|
||||
@@ -1,16 +1,24 @@
|
||||
import { bind } from "astal";
|
||||
import AstalBattery from "gi://AstalBattery";
|
||||
import AstalBluetooth from "gi://AstalBluetooth";
|
||||
import AstalNetwork from "gi://AstalNetwork";
|
||||
import AstalWp from "gi://AstalWp";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import Brightness from "../../../util/brightness";
|
||||
import QuickActions from "../../QuickActions/QuickActions";
|
||||
import AstalBattery from 'gi://AstalBattery';
|
||||
import AstalBluetooth from 'gi://AstalBluetooth';
|
||||
import AstalNetwork from 'gi://AstalNetwork';
|
||||
import AstalWp from 'gi://AstalWp';
|
||||
import Brightness from '../../../util/brightness';
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
import QuickActions from '../../QuickActions/QuickActions';
|
||||
import {
|
||||
bind
|
||||
} from 'astal';
|
||||
import {
|
||||
execAsync
|
||||
} from 'astal';
|
||||
|
||||
const STATE = AstalNetwork.DeviceState;
|
||||
|
||||
const QuickView = () => {
|
||||
const qa = QuickActions.QuickActions();
|
||||
|
||||
const showQuickActions = () => {
|
||||
qa.popup();
|
||||
};
|
||||
@@ -18,14 +26,14 @@ const QuickView = () => {
|
||||
return (
|
||||
<button
|
||||
onClicked={() => showQuickActions()}
|
||||
cssClasses={["quick-action-button"]}
|
||||
cssClasses={[ 'quick-action-button' ]}
|
||||
child={
|
||||
<box>
|
||||
<BatteryWidget></BatteryWidget>
|
||||
<Audio></Audio>
|
||||
<BluetoothWidget></BluetoothWidget>
|
||||
<NetworkWidget></NetworkWidget>
|
||||
<image iconName={"system-shutdown-symbolic"}></image>
|
||||
<image iconName={'system-shutdown-symbolic'}></image>
|
||||
{qa}
|
||||
</box>
|
||||
}
|
||||
@@ -39,37 +47,39 @@ const NetworkWidget = () => {
|
||||
return (
|
||||
<box>
|
||||
<image
|
||||
iconName={bind(network, "state").as(state => {
|
||||
if (state === AstalNetwork.State.CONNECTING) {
|
||||
return "chronometer-reset-symbolic";
|
||||
iconName={bind( network, 'state' ).as( state => {
|
||||
if ( state === AstalNetwork.State.CONNECTING ) {
|
||||
return 'chronometer-reset-symbolic';
|
||||
} else if (
|
||||
state === AstalNetwork.State.CONNECTED_LOCAL ||
|
||||
state === AstalNetwork.State.CONNECTED_SITE ||
|
||||
state === AstalNetwork.State.CONNECTED_GLOBAL
|
||||
state === AstalNetwork.State.CONNECTED_LOCAL
|
||||
|| state === AstalNetwork.State.CONNECTED_SITE
|
||||
|| state === AstalNetwork.State.CONNECTED_GLOBAL
|
||||
) {
|
||||
return "network-wired-activated-symbolic";
|
||||
return 'network-wired-activated-symbolic';
|
||||
} else {
|
||||
return "paint-unknown-symbolic";
|
||||
return 'paint-unknown-symbolic';
|
||||
}
|
||||
})}
|
||||
cssClasses={["network-widget", "quick-view-symbol"]}
|
||||
visible={bind(network.wifi, "state").as(
|
||||
state => state !== STATE.ACTIVATED,
|
||||
)}
|
||||
} )}
|
||||
cssClasses={[
|
||||
'network-widget',
|
||||
'quick-view-symbol'
|
||||
]}
|
||||
visible={bind( network.wifi, 'state' ).as( state => state !== STATE.ACTIVATED, )}
|
||||
></image>
|
||||
<image
|
||||
iconName={bind(network.wifi, "state").as(state => {
|
||||
if (state === STATE.ACTIVATED) {
|
||||
iconName={bind( network.wifi, 'state' ).as( state => {
|
||||
if ( state === STATE.ACTIVATED ) {
|
||||
return network.wifi.iconName;
|
||||
} else {
|
||||
return "";
|
||||
return '';
|
||||
}
|
||||
})}
|
||||
tooltipText={bind(network.wifi, 'ssid')}
|
||||
cssClasses={["network-widget", "quick-view-symbol"]}
|
||||
visible={bind(network.wifi, "state").as(
|
||||
state => state === STATE.ACTIVATED,
|
||||
)}
|
||||
} )}
|
||||
tooltipText={bind( network.wifi, 'ssid' )}
|
||||
cssClasses={[
|
||||
'network-widget',
|
||||
'quick-view-symbol'
|
||||
]}
|
||||
visible={bind( network.wifi, 'state' ).as( state => state === STATE.ACTIVATED, )}
|
||||
></image>
|
||||
</box>
|
||||
);
|
||||
@@ -77,57 +87,66 @@ const NetworkWidget = () => {
|
||||
|
||||
const BluetoothWidget = () => {
|
||||
const bluetooth = AstalBluetooth.get_default();
|
||||
const enabled = bind(bluetooth, "isPowered");
|
||||
const connected = bind(bluetooth, "isConnected");
|
||||
const enabled = bind( bluetooth, 'isPowered' );
|
||||
const connected = bind( bluetooth, 'isConnected' );
|
||||
|
||||
// For each connected BT device, render status
|
||||
return (
|
||||
<box>
|
||||
<box visible={enabled.as(e => e)}>
|
||||
<box visible={enabled.as( e => e )}>
|
||||
<image
|
||||
iconName={"bluetooth-active-symbolic"}
|
||||
visible={connected.as(c => c)}
|
||||
iconName={'bluetooth-active-symbolic'}
|
||||
visible={connected.as( c => c )}
|
||||
></image>
|
||||
<image
|
||||
iconName={"bluetooth-disconnected-symbolic"}
|
||||
visible={connected.as(c => !c)}
|
||||
iconName={'bluetooth-disconnected-symbolic'}
|
||||
visible={connected.as( c => !c )}
|
||||
></image>
|
||||
</box>
|
||||
<image
|
||||
iconName={"bluetooth-disabled-symbolic"}
|
||||
visible={enabled.as(e => !e)}
|
||||
iconName={'bluetooth-disabled-symbolic'}
|
||||
visible={enabled.as( e => !e )}
|
||||
></image>
|
||||
<box>
|
||||
{bind(bluetooth, "devices").as(devices => {
|
||||
return devices.map(device => {
|
||||
{bind( bluetooth, 'devices' ).as( devices => {
|
||||
return devices.map( device => {
|
||||
return (
|
||||
<image
|
||||
iconName={bind(device, "icon").as(
|
||||
icon => icon,
|
||||
)}
|
||||
visible={bind(device, "connected")}
|
||||
tooltipText={bind(device, "batteryPercentage").as(
|
||||
n => {
|
||||
return device.get_name() + ': ' + n + "%";
|
||||
},
|
||||
)}
|
||||
iconName={bind( device, 'icon' ).as( icon => icon, )}
|
||||
visible={bind( device, 'connected' )}
|
||||
tooltipText={bind( device, 'batteryPercentage' ).as( n => {
|
||||
return device.get_name() + ': ' + n + '%';
|
||||
}, )}
|
||||
></image>
|
||||
);
|
||||
});
|
||||
})}
|
||||
} );
|
||||
} )}
|
||||
</box>
|
||||
</box>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
let hasSentNotification = false;
|
||||
|
||||
const BatteryWidget = () => {
|
||||
const battery = AstalBattery.get_default();
|
||||
if (battery.get_is_present()) {
|
||||
|
||||
if ( battery.get_is_present() ) {
|
||||
return (
|
||||
<image
|
||||
iconName={bind(battery, "iconName").as(icon => icon)}
|
||||
cssClasses={["quick-view-symbol"]}
|
||||
tooltipText={bind(battery, 'percentage').as(p => `${Math.round(p * 100)}%`)}
|
||||
iconName={bind( battery, 'batteryIconName' ).as( icon => icon )}
|
||||
cssClasses={[ 'quick-view-symbol' ]}
|
||||
tooltipText={bind( battery, 'percentage' ).as( p => {
|
||||
const level = Math.round( p * 100 );
|
||||
|
||||
if ( level < 20 && !hasSentNotification ) {
|
||||
hasSentNotification = true;
|
||||
execAsync( 'bash -c "notify-send \'Battery level below 20%\'"' );
|
||||
}
|
||||
|
||||
return `Battery Level: ${ level }%`;
|
||||
} )}
|
||||
></image>
|
||||
);
|
||||
} else {
|
||||
@@ -138,14 +157,14 @@ const BatteryWidget = () => {
|
||||
|
||||
const BrightnessWidget = () => {
|
||||
const brightness = Brightness.get_default();
|
||||
const screen_brightness = bind(brightness, "screen");
|
||||
const screen_brightness = bind( brightness, 'screen' );
|
||||
|
||||
return (
|
||||
<box cssClasses={["quick-view-symbol"]}>
|
||||
<image iconName={"brightness-high-symbolic"}></image>
|
||||
<box cssClasses={[ 'quick-view-symbol' ]}>
|
||||
<image iconName={'brightness-high-symbolic'}></image>
|
||||
<label
|
||||
label={screen_brightness.as(b => '' + Math.round(100 * b))}
|
||||
visible={bind(brightness, "screenAvailable")}
|
||||
label={screen_brightness.as( b => '' + Math.round( 100 * b ) )}
|
||||
visible={bind( brightness, 'screenAvailable' )}
|
||||
></label>
|
||||
</box>
|
||||
);
|
||||
@@ -153,31 +172,27 @@ const BrightnessWidget = () => {
|
||||
|
||||
const Audio = () => {
|
||||
const wireplumber = AstalWp.get_default();
|
||||
if (wireplumber) {
|
||||
|
||||
if ( wireplumber ) {
|
||||
return (
|
||||
<box orientation={Gtk.Orientation.HORIZONTAL}>
|
||||
<image
|
||||
iconName={bind(wireplumber.defaultSpeaker, "volumeIcon").as(
|
||||
icon => icon,
|
||||
)}
|
||||
cssClasses={["quick-view-symbol"]}
|
||||
tooltipText={bind(wireplumber.defaultSpeaker, 'volume').as(v => Math.round(100 * v) + '%')}
|
||||
iconName={bind( wireplumber.defaultSpeaker, 'volumeIcon' ).as( icon => icon, )}
|
||||
cssClasses={[ 'quick-view-symbol' ]}
|
||||
tooltipText={bind( wireplumber.defaultSpeaker, 'volume' ).as( v => Math.round( 100 * v ) + '%' )}
|
||||
></image>
|
||||
<image
|
||||
iconName={bind(
|
||||
wireplumber.defaultMicrophone,
|
||||
"volumeIcon",
|
||||
).as(icon => icon)}
|
||||
cssClasses={["quick-view-symbol"]}
|
||||
tooltipText={bind(wireplumber.defaultMicrophone, 'volume').as(v => Math.round(100 * v) + '%')}
|
||||
iconName={bind( wireplumber.defaultMicrophone,
|
||||
'volumeIcon', ).as( icon => icon )}
|
||||
cssClasses={[ 'quick-view-symbol' ]}
|
||||
tooltipText={bind( wireplumber.defaultMicrophone, 'volume' ).as( v => Math.round( 100 * v ) + '%' )}
|
||||
></image>
|
||||
</box>
|
||||
);
|
||||
} else {
|
||||
print(
|
||||
"[ WirePlumber ] Could not connect, Audio support in bar will be missing",
|
||||
);
|
||||
return <image iconName={"action-unavailable-symbolic"}></image>;
|
||||
print( '[ WirePlumber ] Could not connect, Audio support in bar will be missing', );
|
||||
|
||||
return <image iconName={'action-unavailable-symbolic'}></image>;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -185,4 +200,5 @@ const Audio = () => {
|
||||
|
||||
export default {
|
||||
QuickView,
|
||||
BrightnessWidget
|
||||
};
|
||||
@@ -1,35 +1,39 @@
|
||||
import { execAsync } from "astal";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import sysinfo from "../sysinfo";
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
import {
|
||||
execAsync
|
||||
} from 'astal';
|
||||
import sysinfo from '../sysinfo';
|
||||
|
||||
const info = () => {
|
||||
return (
|
||||
<box vertical>
|
||||
<label
|
||||
label={"System Information"}
|
||||
cssClasses={["title-2"]}
|
||||
label={'System Information'}
|
||||
cssClasses={[ 'title-2' ]}
|
||||
></label>
|
||||
<Gtk.Separator marginTop={5} marginBottom={10}></Gtk.Separator>
|
||||
<label
|
||||
vexpand
|
||||
halign={Gtk.Align.START}
|
||||
hexpand
|
||||
label={sysinfo.ramUsed(used => {
|
||||
return "RAM: " + used + ` (${sysinfo.ramUtil.get()}%)`;
|
||||
})}
|
||||
label={sysinfo.ramUsed( used => {
|
||||
return 'RAM: ' + used + ` (${ sysinfo.ramUtil.get() }%)`;
|
||||
} )}
|
||||
></label>
|
||||
<label
|
||||
label={sysinfo.systemStats(stats => {
|
||||
return `CPU: ${stats.cpuTemp}, ${stats.cpuClk}
|
||||
GPU: ${stats.gpuTemp}, ${stats.gpuClk} (${stats.vram} / ${stats.availableVRAM})
|
||||
Kernel: ${stats.kernel}`;
|
||||
})}
|
||||
label={sysinfo.systemStats( stats => {
|
||||
return `CPU: ${ stats.cpuTemp }, ${ stats.cpuClk }
|
||||
GPU: ${ stats.gpuTemp }, ${ stats.gpuClk } (${ stats.vram } / ${ stats.availableVRAM })
|
||||
Kernel: ${ stats.kernel }`;
|
||||
} )}
|
||||
></label>
|
||||
<Gtk.Separator marginTop={10}></Gtk.Separator>
|
||||
<button
|
||||
onClicked={() => execAsync(`/bin/sh -c "kitty --hold fish -c 'fastfetch'"`)}
|
||||
onClicked={() => execAsync( '/bin/sh -c "kitty --hold fish -c \'fastfetch\'"' )}
|
||||
child={
|
||||
<label label={"View FastFetch"}></label>
|
||||
<label label={'View FastFetch'}></label>
|
||||
}></button>
|
||||
</box>
|
||||
);
|
||||
@@ -38,7 +42,7 @@ Kernel: ${stats.kernel}`;
|
||||
const SystemInformationPanel = () => {
|
||||
const popover = new Gtk.Popover();
|
||||
|
||||
popover.set_child(info());
|
||||
popover.set_child( info() );
|
||||
|
||||
return popover;
|
||||
};
|
||||
@@ -54,44 +58,44 @@ const SystemInfo = () => {
|
||||
sysinfo.refreshStats();
|
||||
};
|
||||
|
||||
if (sysinfo.enabled) {
|
||||
if ( sysinfo.enabled ) {
|
||||
return (
|
||||
<button
|
||||
onClicked={() => openSysInfo()}
|
||||
child={
|
||||
<box tooltipText={sysinfo.ramUsed(v => v)}>
|
||||
<box tooltipText={sysinfo.ramUsed( v => v )}>
|
||||
<box
|
||||
cssClasses={[ 'quick-view-symbol' ]}
|
||||
>
|
||||
<image
|
||||
iconName={"power-profile-performance-symbolic"}
|
||||
iconName={'power-profile-performance-symbolic'}
|
||||
marginEnd={1}
|
||||
></image>
|
||||
<label
|
||||
label={sysinfo.cpuUtil(util => util)}
|
||||
label={sysinfo.cpuUtil( util => util )}
|
||||
marginEnd={5}
|
||||
></label>
|
||||
</box>
|
||||
<box
|
||||
cssClasses={[ 'quick-view-symbol' ]}
|
||||
>
|
||||
<image iconName={"histogram-symbolic"}></image>
|
||||
<label label={sysinfo.ramUtil(util => util)}></label>
|
||||
<image iconName={'memory'}></image>
|
||||
<label label={sysinfo.ramUtil( util => util )}></label>
|
||||
</box>
|
||||
<box
|
||||
cssClasses={[ 'quick-view-symbol' ]}
|
||||
>
|
||||
<image iconName={"show-gpu-effects-symbolic"}></image>
|
||||
<label label={sysinfo.gpuUtil(util => util)}></label>
|
||||
<image iconName={'show-gpu-effects-symbolic'}></image>
|
||||
<label label={sysinfo.gpuUtil( util => util )}></label>
|
||||
</box>
|
||||
{panel}
|
||||
</box>
|
||||
}
|
||||
cssClasses={["bar-button"]}
|
||||
cssClasses={[ 'bar-button' ]}
|
||||
></button>
|
||||
);
|
||||
} else {
|
||||
return <image iconName={"action-unavailable-symbolic"}></image>;
|
||||
return <image iconName={'action-unavailable-symbolic'}></image>;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { bind } from "astal";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import Notifd from "gi://AstalNotifd";
|
||||
import { NotificationIcon } from "./Icon";
|
||||
import { createTimeoutManager } from "../../../util/notifd";
|
||||
import { createTimeoutManager, time, urgency } from "../../../util/notifd";
|
||||
|
||||
export function NotificationWidget({
|
||||
notification,
|
||||
@@ -81,8 +81,8 @@ export function NotificationWidget({
|
||||
halign={CENTER}
|
||||
valign={CENTER}
|
||||
vexpand={true}
|
||||
child={NotificationIcon(notification)!}
|
||||
>
|
||||
{NotificationIcon(notification)}
|
||||
</box>
|
||||
<box
|
||||
vertical
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
import AstalNotifd from "gi://AstalNotifd"
|
||||
|
||||
const notifd = AstalNotifd.get_default()
|
||||
const getNotifications = () => {
|
||||
|
||||
}
|
||||
@@ -1,299 +0,0 @@
|
||||
/*
|
||||
* dotfiles - handler.ts
|
||||
*
|
||||
* Created by Janis Hutz 03/21/2025, Licensed under the GPL V3 License
|
||||
* https://janishutz.com, development@janishutz.com
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
import { App, Astal, Gdk } from "astal/gtk4"
|
||||
import Notifd from "gi://AstalNotifd";
|
||||
import Notification from "./notifications";
|
||||
import { timeout, Variable } from "astal"
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
// Config
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
const TIMEOUT_DELAY = 5000;
|
||||
let isRunning = false;
|
||||
let notificationMenuOpen = false;
|
||||
|
||||
interface NotificationDetails {
|
||||
notification: Notifd.Notification;
|
||||
backendID: number;
|
||||
notifdID: number;
|
||||
}
|
||||
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
// ╭───────────────────────────────────────────────╮
|
||||
// │ Handler │
|
||||
// ╰───────────────────────────────────────────────╯
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
let ShownNotifications: Variable<number[]> = Variable( [] );
|
||||
let Notifications: NotificationDetails[] = [];
|
||||
|
||||
const notifd = Notifd.get_default();
|
||||
notifd.ignoreTimeout = true;
|
||||
|
||||
|
||||
/**
|
||||
* Delete a notification by its internal ID
|
||||
* @param index The notifd ID of the notification
|
||||
*/
|
||||
const deleteNotification = ( index: number ): void => {
|
||||
hideNotification( index );
|
||||
Notifications.splice( index, 1 );
|
||||
if ( Notifications.length === 0 ) {
|
||||
notificationMenuOpen = false;
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Delete a notification by notifd id
|
||||
* @param id The notifd ID of the notification
|
||||
*/
|
||||
const deleteNotificationByNotificationID = ( id: number ): void => {
|
||||
const index = findNotificationByNotificationID( id );
|
||||
if ( index > -1 ) {
|
||||
deleteNotification( index );
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Find the internal ID from the notifd id for a notification (helper function)
|
||||
* @param id The notifd ID of the notification
|
||||
* @returns The internal ID or -1 if not found
|
||||
*/
|
||||
const findNotificationByNotificationID = ( id: number ): number => {
|
||||
// Find index in Notifications array
|
||||
for (let index = 0; index < Notifications.length; index++) {
|
||||
if ( Notifications[ index ].notifdID === id ) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Add a notification to the notification handler
|
||||
* @param id The notifd ID of the notification
|
||||
*/
|
||||
const addNotification = ( id: number ): void => {
|
||||
const currIndex = Notifications.length;
|
||||
Notifications.push( {
|
||||
notifdID: id,
|
||||
backendID: currIndex,
|
||||
notification: notifd.get_notification( id )
|
||||
} );
|
||||
|
||||
showNotification( currIndex );
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Start the notifd runner and handle notifications.
|
||||
*/
|
||||
const hookToNotificationDaemon = (): void => {
|
||||
if ( isRunning ) {
|
||||
printerr( '[ Notifications ] Error: Already running' );
|
||||
return;
|
||||
}
|
||||
isRunning = true;
|
||||
|
||||
notifd.connect( 'notified', ( _, id ) => {
|
||||
addNotification( id );
|
||||
} );
|
||||
|
||||
notifd.connect( 'resolved', ( _, id ) => {
|
||||
deleteNotificationByNotificationID( id );
|
||||
} );
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Show a notification. It will stay on screen (regardless of removeAgain passed in), if
|
||||
* critical urgency
|
||||
* @param id The internal id (index in Notifications array)
|
||||
* @param removeAgain = true If to remove the notification from the screen again automatically
|
||||
*/
|
||||
const showNotification = ( id: number, removeAgain: boolean = true ) => {
|
||||
// Add notification to UI for display
|
||||
const not = [...ShownNotifications.get()].reverse();
|
||||
not.push( id );
|
||||
ShownNotifications.set( not.reverse() );
|
||||
|
||||
// Set delay to remove the notification again
|
||||
if ( removeAgain && Notifications[ id ].notification.get_urgency() !== Notifd.Urgency.CRITICAL ) {
|
||||
timeout( TIMEOUT_DELAY, () => {
|
||||
hideNotification( id );
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Stop displaying notification
|
||||
* @param id The internal id (index in the Notifications array)
|
||||
*/
|
||||
const hideNotification = ( id: number ) => {
|
||||
if ( !notificationMenuOpen ) {
|
||||
const not = [...ShownNotifications.get()];
|
||||
not.splice( not.indexOf( id ), 1 );
|
||||
ShownNotifications.set( not );
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Open the notification menu. Called by toggleNotificationMenu too
|
||||
*/
|
||||
const openNotificationMenu = () => {
|
||||
// Simply show all notifications
|
||||
notificationMenuOpen = true;
|
||||
const not = [];
|
||||
for (let index = 0; index < Notifications.length; index++) {
|
||||
not.push( index );
|
||||
}
|
||||
ShownNotifications.set( not.reverse() );
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Close the notification menu. Called by toggleNotificationMenu too
|
||||
*/
|
||||
const closeNotificationMenu = () => {
|
||||
// Hide all notifications
|
||||
notificationMenuOpen = true;
|
||||
ShownNotifications.set( [] );
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Toggle the notification menu (i.e. show all notifications)
|
||||
*/
|
||||
const toggleNotificationMenu = (): string => {
|
||||
if ( notificationMenuOpen ) {
|
||||
closeNotificationMenu();
|
||||
return 'Toggle notification menu closed';
|
||||
} else {
|
||||
openNotificationMenu();
|
||||
return 'Toggled notification menu open';
|
||||
}
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Delete all notifications
|
||||
*/
|
||||
const clearAllNotifications = () => {
|
||||
Notifications = [];
|
||||
ShownNotifications.set( [] );
|
||||
// TODO: Hiding for each individual deleteNotification
|
||||
notificationMenuOpen = false;
|
||||
}
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
/**
|
||||
* Delete the newest notifications
|
||||
*/
|
||||
const clearNewestNotifications = () => {
|
||||
const not = [...ShownNotifications.get()];
|
||||
not.splice( 0, 1 );
|
||||
ShownNotifications.set( not );
|
||||
|
||||
Notifications.splice( Notifications.length - 1, 1 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
// ╭───────────────────────────────────────────────╮
|
||||
// │ User Interface │
|
||||
// ╰───────────────────────────────────────────────╯
|
||||
// ───────────────────────────────────────────────────────────────────
|
||||
const startNotificationHandler = (gdkmonitor: Gdk.Monitor) => {
|
||||
const { TOP, RIGHT } = Astal.WindowAnchor
|
||||
|
||||
hookToNotificationDaemon();
|
||||
|
||||
return <window
|
||||
cssClasses={["NotificationHandler"]}
|
||||
gdkmonitor={gdkmonitor}
|
||||
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
||||
anchor={TOP | RIGHT}
|
||||
visible={ShownNotifications( list => list.length > 0 )}
|
||||
application={App}>
|
||||
<box vertical>
|
||||
{ShownNotifications( list => list.map( i => {
|
||||
// i is index in ShownNotifications array
|
||||
return <Notification id={i} delete={deleteNotification} notification={Notifications[ i ].notification}></Notification>
|
||||
} ) ) }
|
||||
</box>
|
||||
</window>
|
||||
}
|
||||
|
||||
const cliHandler = ( args: string[] ): string => {
|
||||
if ( args[ 1 ] == 'show' ) {
|
||||
openNotificationMenu();
|
||||
return 'Showing all open notifications';
|
||||
} else if ( args[ 1 ] == 'hide' ) {
|
||||
closeNotificationMenu();
|
||||
return 'Hid all notifications';
|
||||
} else if ( args[ 1 ] == 'clear' ) {
|
||||
clearAllNotifications();
|
||||
return 'Cleared all notifications';
|
||||
} else if ( args[ 1 ] == 'clear-newest' ) {
|
||||
clearNewestNotifications();
|
||||
return 'Cleared newest notification';
|
||||
} else if ( args[ 1 ] == 'toggle' ) {
|
||||
return toggleNotificationMenu();
|
||||
} else if ( args[ 1 ] == 'list' ){
|
||||
if ( Notifications.length > 0 ) {
|
||||
let list = 'Currently unviewed notifications: ';
|
||||
for (let index = 0; index < Notifications.length; index++) {
|
||||
const element = Notifications[index];
|
||||
|
||||
list += `\n - (${element.notifdID}) ${element.notification.get_app_name()}: ${element.notification.get_summary()}`;
|
||||
}
|
||||
return list;
|
||||
} else {
|
||||
return 'No currently unviewed notifications'
|
||||
}
|
||||
} else {
|
||||
return 'Unknown command!';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default {
|
||||
startNotificationHandler,
|
||||
cliHandler
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
import { Gtk, Gdk } from "astal/gtk4";
|
||||
import { GLib } from "astal";
|
||||
|
||||
export const isIcon = (icon: string) => {
|
||||
const display = Gdk.Display.get_default();
|
||||
if (!display) return false;
|
||||
const iconTheme = Gtk.IconTheme.get_for_display(display);
|
||||
return iconTheme.has_icon(icon);
|
||||
};
|
||||
|
||||
export const fileExists = (path: string) =>
|
||||
GLib.file_test(path, GLib.FileTest.EXISTS);
|
||||
@@ -8,14 +8,16 @@ export function NotificationIcon(notification: Notifd.Notification) {
|
||||
const icon = notification.image || notification.appIcon || notification.desktopEntry;
|
||||
if (fileExists(icon)) {
|
||||
return (
|
||||
<box expand={false} valign={Gtk.Align.CENTER}>
|
||||
<box hexpand={false} valign={Gtk.Align.CENTER} child={
|
||||
<image file={icon} />
|
||||
}>
|
||||
</box>
|
||||
);
|
||||
} else if (isIcon(icon)) {
|
||||
return (
|
||||
<box expand={false} valign={Gtk.Align.CENTER}>
|
||||
<box hexpand={false} valign={Gtk.Align.CENTER} child={
|
||||
<image iconName={icon} />
|
||||
}>
|
||||
</box>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import { Astal } from "astal/gtk4";
|
||||
import Notifd from "gi://AstalNotifd";
|
||||
import Hyprland from "gi://AstalHyprland";
|
||||
import { bind } from "astal";
|
||||
import { NotificationWidget } from "./modules/Notification";
|
||||
import { hyprToGdk } from "../../util/hyprland";
|
||||
|
||||
export default function Notifications() {
|
||||
const notifd = Notifd.get_default();
|
||||
const hyprland = Hyprland.get_default();
|
||||
const { TOP, RIGHT } = Astal.WindowAnchor;
|
||||
|
||||
return (
|
||||
<window
|
||||
name="notifications"
|
||||
gdkmonitor={bind(hyprland, "focusedMonitor").as(
|
||||
(focused: Hyprland.Monitor) => hyprToGdk(focused),
|
||||
)}
|
||||
anchor={TOP | RIGHT}
|
||||
visible={bind(notifd, "notifications").as(
|
||||
(notifications) => notifications.length > 0,
|
||||
)}
|
||||
child={
|
||||
<box vertical={true} cssClasses={["notifications"]}>
|
||||
{bind(notifd, "notifications").as((notifications) =>
|
||||
notifications.map((n) => <NotificationWidget notification={n} />),
|
||||
)}
|
||||
</box>
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -1,113 +0,0 @@
|
||||
// From astal examples
|
||||
|
||||
import { bind, GLib } from "astal";
|
||||
import { Gtk } from "astal/gtk4";
|
||||
import Notifd from "gi://AstalNotifd";
|
||||
import { NotificationIcon } from "./icon";
|
||||
// import Pango from "gi://Pango?version=1.0"
|
||||
|
||||
const fileExists = (path: string) => GLib.file_test(path, GLib.FileTest.EXISTS);
|
||||
|
||||
const time = (time: number, format = "%H:%M") =>
|
||||
GLib.DateTime.new_from_unix_local(time).format(format)!;
|
||||
|
||||
const urgency = (n: Notifd.Notification) => {
|
||||
const { LOW, NORMAL, CRITICAL } = Notifd.Urgency;
|
||||
// match operator when?
|
||||
switch (n.urgency) {
|
||||
case LOW:
|
||||
return "low";
|
||||
case CRITICAL:
|
||||
return "critical";
|
||||
case NORMAL:
|
||||
default:
|
||||
return "normal";
|
||||
}
|
||||
};
|
||||
|
||||
type Props = {
|
||||
delete: (id: number) => void;
|
||||
notification: Notifd.Notification;
|
||||
id: number;
|
||||
};
|
||||
|
||||
export default function Notification(props: Props) {
|
||||
const { notification: n, id: id, delete: del } = props;
|
||||
const { START, CENTER, END } = Gtk.Align;
|
||||
|
||||
return (
|
||||
<box vertical cssClasses={["notification", `${urgency(n)}`]}>
|
||||
<box cssClasses={["header"]}>
|
||||
{n.appIcon || n.desktopEntry ? (
|
||||
<Gtk.Image
|
||||
cssClasses={["app-icon"]}
|
||||
visible={Boolean(n.appIcon || n.desktopEntry)}
|
||||
iconName={n.appIcon || n.desktopEntry}
|
||||
/>
|
||||
) : (
|
||||
<image iconName={"window-close-symbolic"}></image>
|
||||
)}
|
||||
<label
|
||||
cssClasses={["app-name"]}
|
||||
halign={START}
|
||||
// ellipsize={Pango.EllipsizeMode.END}
|
||||
label={n.appName || "Unknown"}
|
||||
/>
|
||||
<label
|
||||
cssClasses={["time"]}
|
||||
hexpand
|
||||
halign={END}
|
||||
label={time(n.time)}
|
||||
/>
|
||||
<button
|
||||
onClicked={() => {
|
||||
del(id);
|
||||
}}
|
||||
child={<image iconName="window-close-symbolic" />}
|
||||
></button>
|
||||
</box>
|
||||
<Gtk.Separator visible />
|
||||
<box cssClasses={["content"]}>
|
||||
<box
|
||||
cssClasses={["image"]}
|
||||
visible={Boolean(NotificationIcon(n))}
|
||||
halign={CENTER}
|
||||
valign={CENTER}
|
||||
vexpand={true}
|
||||
>
|
||||
{NotificationIcon(n)}
|
||||
</box>
|
||||
<box vertical>
|
||||
<label
|
||||
cssClasses={["summary"]}
|
||||
halign={START}
|
||||
xalign={0}
|
||||
useMarkup
|
||||
label={bind(n, "summary")}
|
||||
// ellipsize={Pango.EllipsizeMode.END}
|
||||
/>
|
||||
{n.body && (
|
||||
<label
|
||||
cssClasses={["body"]}
|
||||
valign={CENTER}
|
||||
wrap={true}
|
||||
maxWidthChars={50}
|
||||
label={bind(n, "body")}
|
||||
/>
|
||||
)}
|
||||
</box>
|
||||
</box>
|
||||
{n.get_actions().length > 0 ? (
|
||||
<box cssClasses={["actions"]}>
|
||||
{n.get_actions().map(({ label, id }) => (
|
||||
<button hexpand onClicked={() => n.invoke(id)}>
|
||||
<label label={label} halign={CENTER} hexpand />
|
||||
</button>
|
||||
))}
|
||||
</box>
|
||||
) : (
|
||||
<box></box>
|
||||
)}
|
||||
</box>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,744 @@
|
||||
import eslint from '@eslint/js';
|
||||
import globals from 'globals';
|
||||
import stylistic from '@stylistic/eslint-plugin';
|
||||
import tseslint from 'typescript-eslint';
|
||||
import typescript from '@typescript-eslint/eslint-plugin';
|
||||
import vue from 'eslint-plugin-vue';
|
||||
|
||||
const style = {
|
||||
'plugins': {
|
||||
'@stylistic': stylistic,
|
||||
'@stylistic/js': stylistic,
|
||||
'@stylistic/ts': stylistic
|
||||
},
|
||||
'files': [
|
||||
'**/*.ts',
|
||||
'**/*.js',
|
||||
'**/*.mjs',
|
||||
'**/*.cjs',
|
||||
'**/*.tsx',
|
||||
'**/*.jsx'
|
||||
],
|
||||
'rules': {
|
||||
'sort-imports': [
|
||||
'warn',
|
||||
{
|
||||
'ignoreCase': false,
|
||||
'ignoreDeclarationSort': false,
|
||||
'ignoreMemberSort': false,
|
||||
'memberSyntaxSortOrder': [
|
||||
'none',
|
||||
'all',
|
||||
'multiple',
|
||||
'single'
|
||||
],
|
||||
'allowSeparatedGroups': false
|
||||
}
|
||||
],
|
||||
// Formatting
|
||||
'@stylistic/array-bracket-newline': [
|
||||
'error',
|
||||
{
|
||||
'multiline': false,
|
||||
'minItems': 2
|
||||
}
|
||||
],
|
||||
'@stylistic/array-bracket-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/array-element-newline': [
|
||||
'error',
|
||||
{
|
||||
'consistent': false,
|
||||
'multiline': false,
|
||||
'minItems': 2
|
||||
}
|
||||
],
|
||||
'@stylistic/arrow-parens': [
|
||||
'error',
|
||||
'as-needed'
|
||||
],
|
||||
'@stylistic/arrow-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': true,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/block-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/brace-style': [
|
||||
'error',
|
||||
'1tbs',
|
||||
{
|
||||
'allowSingleLine': false
|
||||
}
|
||||
],
|
||||
'@stylistic/comma-dangle': [
|
||||
'error',
|
||||
'never'
|
||||
],
|
||||
'@stylistic/comma-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': false,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/comma-style': [
|
||||
'error',
|
||||
'last'
|
||||
],
|
||||
'@stylistic/dot-location': [
|
||||
'error',
|
||||
'property'
|
||||
],
|
||||
'@stylistic/function-call-argument-newline': [
|
||||
'error',
|
||||
'consistent'
|
||||
],
|
||||
'@stylistic/function-call-spacing': [
|
||||
'error',
|
||||
'never'
|
||||
],
|
||||
'@stylistic/function-paren-newline': [
|
||||
'error',
|
||||
'multiline-arguments'
|
||||
],
|
||||
'@stylistic/implicit-arrow-linebreak': [
|
||||
'error',
|
||||
'beside'
|
||||
],
|
||||
'@stylistic/indent': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'@stylistic/indent-binary-ops': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'@stylistic/key-spacing': [
|
||||
'error',
|
||||
{
|
||||
'beforeColon': false,
|
||||
'afterColon': true
|
||||
}
|
||||
],
|
||||
'@stylistic/keyword-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': true,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/lines-between-class-members': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/max-len': [
|
||||
'warn',
|
||||
{
|
||||
'code': 140,
|
||||
'comments': 160,
|
||||
'ignoreComments': false,
|
||||
'ignoreUrls': true,
|
||||
'ignoreStrings': true,
|
||||
'ignoreTemplateLiterals': true,
|
||||
'ignoreRegExpLiterals': true
|
||||
}
|
||||
],
|
||||
'@stylistic/max-statements-per-line': [
|
||||
'error',
|
||||
{
|
||||
'max': 1
|
||||
}
|
||||
],
|
||||
'@stylistic/multiline-ternary': [
|
||||
'error',
|
||||
'always-multiline'
|
||||
],
|
||||
'@stylistic/new-parens': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/newline-per-chained-call': 'error',
|
||||
'@stylistic/no-confusing-arrow': 'error',
|
||||
'@stylistic/no-extra-parens': [
|
||||
'error',
|
||||
'all',
|
||||
{
|
||||
'nestedBinaryExpressions': false,
|
||||
'ternaryOperandBinaryExpressions': false,
|
||||
'ignoreJSX': 'multi-line',
|
||||
'nestedConditionalExpressions': false
|
||||
}
|
||||
],
|
||||
'@stylistic/no-extra-semi': 'error',
|
||||
'@stylistic/no-floating-decimal': 'error',
|
||||
'@stylistic/no-mixed-operators': 'error',
|
||||
'@stylistic/no-mixed-spaces-and-tabs': 'error',
|
||||
'@stylistic/no-multi-spaces': 'error',
|
||||
'@stylistic/no-multiple-empty-lines': [
|
||||
'error',
|
||||
{
|
||||
'max': 3,
|
||||
'maxEOF': 2
|
||||
}
|
||||
],
|
||||
'@stylistic/no-tabs': 'error',
|
||||
'@stylistic/no-trailing-spaces': 'error',
|
||||
'@stylistic/no-whitespace-before-property': 'error',
|
||||
'@stylistic/object-curly-newline': [
|
||||
'error',
|
||||
{
|
||||
'multiline': true,
|
||||
'minProperties': 1
|
||||
}
|
||||
],
|
||||
'@stylistic/object-curly-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/object-property-newline': 'error',
|
||||
'@stylistic/one-var-declaration-per-line': 'error',
|
||||
'@stylistic/operator-linebreak': [
|
||||
'error',
|
||||
'before'
|
||||
],
|
||||
'@stylistic/padded-blocks': [
|
||||
'error',
|
||||
{
|
||||
'blocks': 'never',
|
||||
'classes': 'always',
|
||||
'switches': 'never'
|
||||
}
|
||||
],
|
||||
|
||||
// Padding lines. The most in-depth part of this config
|
||||
'@stylistic/padding-line-between-statements': [
|
||||
'error',
|
||||
// Variables, Constants
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'var',
|
||||
'next': 'var'
|
||||
},
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'let',
|
||||
'next': 'let'
|
||||
},
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'const',
|
||||
'next': 'const'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'var',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'cjs-import',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'import',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'let',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'cjs-import',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'import',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'const',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'cjs-import',
|
||||
'class',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'import',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
// Import
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'import',
|
||||
'next': 'import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'cjs-import',
|
||||
'next': 'cjs-import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
],
|
||||
'next': 'cjs-import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'cjs-import',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
],
|
||||
'next': 'import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'import',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
// If
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'if'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'if',
|
||||
'next': '*'
|
||||
},
|
||||
// For
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'for'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'for',
|
||||
'next': '*'
|
||||
},
|
||||
// While
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'while'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'while',
|
||||
'next': '*'
|
||||
},
|
||||
// Functions
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'function'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'function',
|
||||
'next': '*'
|
||||
},
|
||||
// Block Statements
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'block-like'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'block-like',
|
||||
'next': '*'
|
||||
},
|
||||
// Switch
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'switch'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'switch',
|
||||
'next': '*'
|
||||
},
|
||||
// Try-Catch
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'try'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'try',
|
||||
'next': '*'
|
||||
},
|
||||
// Throw
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'throw'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'throw',
|
||||
'next': '*'
|
||||
},
|
||||
// Return
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'return',
|
||||
'next': '*'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'return'
|
||||
},
|
||||
// Export
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'export'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'export',
|
||||
'next': '*'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'cjs-export'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'cjs-export',
|
||||
'next': '*'
|
||||
},
|
||||
// Classes
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'class'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'class',
|
||||
'next': '*'
|
||||
}
|
||||
],
|
||||
'@stylistic/quote-props': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/quotes': [
|
||||
'error',
|
||||
'single'
|
||||
],
|
||||
'@stylistic/rest-spread-spacing': [
|
||||
'error',
|
||||
'never'
|
||||
],
|
||||
'@stylistic/semi': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/semi-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': false,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/semi-style': [
|
||||
'error',
|
||||
'last'
|
||||
],
|
||||
'@stylistic/space-before-blocks': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/space-before-function-paren': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/space-in-parens': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/space-infix-ops': [
|
||||
'error',
|
||||
{
|
||||
'int32Hint': false
|
||||
}
|
||||
],
|
||||
'@stylistic/space-unary-ops': 'error',
|
||||
'@stylistic/spaced-comment': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/switch-colon-spacing': 'error',
|
||||
'@stylistic/template-curly-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/template-tag-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/type-generic-spacing': 'error',
|
||||
'@stylistic/type-named-tuple-spacing': 'error',
|
||||
'@stylistic/wrap-iife': [
|
||||
'error',
|
||||
'inside'
|
||||
],
|
||||
'@stylistic/wrap-regex': 'error',
|
||||
'@stylistic/ts/type-annotation-spacing': 'error'
|
||||
}
|
||||
};
|
||||
|
||||
/** @type {import('eslint').Linter.Config} */
|
||||
export default tseslint.config(
|
||||
// Base JavaScript rules
|
||||
eslint.configs.recommended,
|
||||
tseslint.configs.recommended,
|
||||
style,
|
||||
|
||||
// Vue support (including TS and JSX inside SFCs)
|
||||
{
|
||||
'files': [ '**/*.vue' ],
|
||||
'languageOptions': {
|
||||
'sourceType': 'module',
|
||||
'ecmaVersion': 'latest',
|
||||
'globals': globals.browser,
|
||||
'parserOptions': {
|
||||
'parser': tseslint.parser
|
||||
}
|
||||
},
|
||||
'plugins': {
|
||||
'vue': vue,
|
||||
'@stylistic': stylistic,
|
||||
'@stylistic/js': stylistic,
|
||||
'@stylistic/ts': stylistic,
|
||||
'@typescript-eslint': typescript
|
||||
},
|
||||
'extends': [
|
||||
eslint.configs.recommended,
|
||||
...vue.configs['flat/recommended']
|
||||
],
|
||||
'rules': {
|
||||
...typescript.configs.recommended.rules,
|
||||
...style.rules,
|
||||
|
||||
// Vue specific rules
|
||||
'@stylistic/indent': 'off',
|
||||
'vue/html-indent': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'vue/html-comment-indent': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'vue/script-indent': [
|
||||
'error',
|
||||
4,
|
||||
{
|
||||
'baseIndent': 1,
|
||||
'switchCase': 1
|
||||
}
|
||||
],
|
||||
'vue/html-self-closing': [
|
||||
'error',
|
||||
{
|
||||
'html': {
|
||||
'void': 'never',
|
||||
'normal': 'never',
|
||||
'component': 'always'
|
||||
},
|
||||
'svg': 'always',
|
||||
'math': 'never'
|
||||
}
|
||||
],
|
||||
'vue/max-attributes-per-line': [
|
||||
'error',
|
||||
{
|
||||
'singleline': 3,
|
||||
'multiline': 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -1,5 +1,6 @@
|
||||
$fg-color: #E6E6E6;
|
||||
$bg-color: #141414;
|
||||
$accent-color: #591641;
|
||||
$accent-color-2: #97103A;
|
||||
$accent-color: #5C9B3F;
|
||||
$accent-color-2: #1674B9;
|
||||
$shadow-color: rgba(40, 40, 40, 0.3);
|
||||
$monospace-font: Source Code Pro
|
||||
@@ -4,134 +4,134 @@
|
||||
"padding": {
|
||||
"top": 2,
|
||||
"left": 1,
|
||||
"right": 2,
|
||||
},
|
||||
"right": 2
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"separator": " ",
|
||||
"separator": " "
|
||||
},
|
||||
"modules": [
|
||||
// Title
|
||||
{
|
||||
"type": "title",
|
||||
"format": "{#1}╭───────────── {#}{user-name-colored}",
|
||||
"format": "{#1}╭───────────── {#}{user-name-colored}"
|
||||
},
|
||||
// System Information
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│ {#}System Information",
|
||||
"format": "{#1}│ {#}System Information"
|
||||
},
|
||||
{
|
||||
"type": "os",
|
||||
"key": "{#separator}│ {#keys} OS",
|
||||
"key": "{#separator}│ {#keys} OS"
|
||||
},
|
||||
{
|
||||
"type": "kernel",
|
||||
"key": "{#separator}│ {#keys} Kernel",
|
||||
"key": "{#separator}│ {#keys} Kernel"
|
||||
},
|
||||
{
|
||||
"type": "uptime",
|
||||
"key": "{#separator}│ {#keys} Uptime",
|
||||
"key": "{#separator}│ {#keys} Uptime"
|
||||
},
|
||||
{
|
||||
"type": "packages",
|
||||
"key": "{#separator}│ {#keys} Packages",
|
||||
"format": "{all}",
|
||||
"format": "{all}"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│",
|
||||
"format": "{#1}│"
|
||||
},
|
||||
// Desktop Environment
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│ {#}Desktop Environment",
|
||||
"format": "{#1}│ {#}Desktop Environment"
|
||||
},
|
||||
{
|
||||
"type": "de",
|
||||
"key": "{#separator}│ {#keys} DE",
|
||||
"key": "{#separator}│ {#keys} DE"
|
||||
},
|
||||
{
|
||||
"type": "wm",
|
||||
"key": "{#separator}│ {#keys} WM",
|
||||
"key": "{#separator}│ {#keys} WM"
|
||||
},
|
||||
{
|
||||
"type": "wmtheme",
|
||||
"key": "{#separator}│ {#keys} Theme",
|
||||
"key": "{#separator}│ {#keys} Theme"
|
||||
},
|
||||
{
|
||||
"type": "display",
|
||||
"key": "{#separator}│ {#keys} Resolution",
|
||||
"key": "{#separator}│ {#keys} Resolution"
|
||||
},
|
||||
{
|
||||
"type": "shell",
|
||||
"key": "{#separator}│ {#keys} Shell",
|
||||
"key": "{#separator}│ {#keys} Shell"
|
||||
},
|
||||
{
|
||||
"type": "terminalfont",
|
||||
"key": "{#separator}│ {#keys} Font",
|
||||
"key": "{#separator}│ {#keys} Font"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│",
|
||||
"format": "{#1}│"
|
||||
},
|
||||
// Hardware Information
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│ {#}Hardware Information",
|
||||
"format": "{#1}│ {#}Hardware Information"
|
||||
},
|
||||
{
|
||||
"type": "cpu",
|
||||
"key": "{#separator}│ {#keys} CPU",
|
||||
"key": "{#separator}│ {#keys} CPU"
|
||||
},
|
||||
{
|
||||
"type": "gpu",
|
||||
"key": "{#separator}│ {#keys} GPU",
|
||||
"key": "{#separator}│ {#keys} GPU"
|
||||
},
|
||||
{
|
||||
"type": "memory",
|
||||
"key": "{#separator}│ {#keys} Memory",
|
||||
"key": "{#separator}│ {#keys} Memory"
|
||||
},
|
||||
{
|
||||
"type": "disk",
|
||||
"key": "{#separator}│ {#keys} Disk (/)",
|
||||
"folders": "/",
|
||||
"folders": "/"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│",
|
||||
"format": "{#1}│"
|
||||
},
|
||||
// Network
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│ {#}Network",
|
||||
"format": "{#1}│ {#}Network"
|
||||
},
|
||||
{
|
||||
"type": "wifi",
|
||||
"key": "{#separator}│ {#keys}⮃ WiFi",
|
||||
"key": "{#separator}│ {#keys}⮃ WiFi"
|
||||
},
|
||||
{
|
||||
"type": "dns",
|
||||
"key": "{#separator}│ {#keys}🖧 DNS",
|
||||
"key": "{#separator}│ {#keys}🖧 DNS"
|
||||
},
|
||||
{
|
||||
"type": "localip",
|
||||
"key": "{#separator}│ {#keys}⍰ IP",
|
||||
"key": "{#separator}│ {#keys}⍰ IP"
|
||||
},
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}│",
|
||||
"format": "{#1}│"
|
||||
},
|
||||
// Colors
|
||||
{
|
||||
"type": "colors",
|
||||
"key": "{#separator}│",
|
||||
"symbol": "circle",
|
||||
"symbol": "circle"
|
||||
},
|
||||
// Footer
|
||||
{
|
||||
"type": "custom",
|
||||
"format": "{#1}╰───────────────────────────────╯",
|
||||
},
|
||||
],
|
||||
"format": "{#1}╰───────────────────────────────╯"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,30 +1,38 @@
|
||||
alias ls='ls -l --color'
|
||||
alias ll='ls -la --color'
|
||||
alias v='nvim'
|
||||
alias i='vimiv'
|
||||
alias c='clear'
|
||||
alias cv='clear && nvim'
|
||||
alias zs='zathura-sandbox'
|
||||
alias bt='bluetui'
|
||||
alias vicfg='cd ~/.config/nvim/ && nvim'
|
||||
alias z='zathura'
|
||||
alias bt='bashtop'
|
||||
alias vicfg='nvim ~/projects/nvim/'
|
||||
alias fm='thunar .'
|
||||
alias gl='git ls-files --others --exclude-standard'
|
||||
alias gm='gti ls-files -m'
|
||||
alias gm='git ls-files -m'
|
||||
alias gpu='git push'
|
||||
alias gp='git pull'
|
||||
alias gpr='git pull --rebase'
|
||||
alias gc='git commit -a -m'
|
||||
alias ga='git add ./*'
|
||||
alias cfh='nvim ~/projects/active/dotfiles/config/hypr/'
|
||||
alias cfn='nvim ~/projects/active/nvim/'
|
||||
alias cff='nvim ~/projects/active/dotfiles/config/fish/'
|
||||
alias cfw='nvim ~/projects/archive/dotfiles-old/pc/configs/waybar/'
|
||||
alias cfa='nvim ~/projects/active/dotfiles/config/ags/'
|
||||
alias cf='nvim ~/projects/active/dotfiles/'
|
||||
alias cfh='nvim ~/projects/dotfiles/config/hypr/'
|
||||
alias cfn='nvim ~/projects/nvim/'
|
||||
alias cff='nvim ~/projects/dotfiles/config/fish/'
|
||||
alias cfa='nvim ~/projects/dotfiles/config/astal/'
|
||||
alias cf='nvim ~/projects/dotfiles/'
|
||||
alias g='lazygit'
|
||||
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
|
||||
alias ai='ollama serve'
|
||||
alias ff='fastfetch'
|
||||
alias p='nvimpager -p'
|
||||
alias latexdocs='zathura ~/projects/latex/docs/docs.pdf &>> /dev/null & disown'
|
||||
alias gccerr='gcc -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes -std=c99'
|
||||
alias linecount='cloc --vcs git .'
|
||||
alias flutter='fvm flutter'
|
||||
|
||||
# Add scripts in ~/projects/active/dotfiles/general/scripts/ to path
|
||||
fish_add_path -P ~/projects/active/dotfiles/scripts/
|
||||
# Add scripts in ~/projects/dotfiles/scripts/ to path
|
||||
fish_add_path -P ~/projects/dotfiles/scripts/
|
||||
|
||||
function y
|
||||
set tmp (mktemp -t "yazi-cwd.XXXXXX")
|
||||
@@ -36,7 +44,6 @@ function y
|
||||
end
|
||||
|
||||
zoxide init --cmd j fish | source
|
||||
# [ -f /usr/share/autojump/autojump.fish ]; and source /usr/share/autojump/autojump.fish
|
||||
|
||||
if status is-interactive
|
||||
function fish_prompt
|
||||
@@ -124,3 +131,5 @@ end
|
||||
|
||||
|
||||
end
|
||||
|
||||
set -g fish_greeting ""
|
||||
@@ -0,0 +1,37 @@
|
||||
# This file was created by fish when upgrading to version 4.3, to migrate
|
||||
# theme variables from universal to global scope.
|
||||
# Don't edit this file, as it will be written by the web-config tool (`fish_config`).
|
||||
# To customize your theme, delete this file and see
|
||||
# help interactive#syntax-highlighting
|
||||
# or
|
||||
# man fish-interactive | less +/^SYNTAX.HIGHLIGHTING
|
||||
# for appropriate commands to add to ~/.config/fish/config.fish instead.
|
||||
# See also the release notes for fish 4.3.0 (run `help relnotes`).
|
||||
|
||||
set --global fish_color_autosuggestion 555 brblack
|
||||
set --global fish_color_cancel -r
|
||||
set --global fish_color_command blue
|
||||
set --global fish_color_comment red
|
||||
set --global fish_color_cwd green
|
||||
set --global fish_color_cwd_root red
|
||||
set --global fish_color_end green
|
||||
set --global fish_color_error brred
|
||||
set --global fish_color_escape brcyan
|
||||
set --global fish_color_history_current --bold
|
||||
set --global fish_color_host normal
|
||||
set --global fish_color_host_remote yellow
|
||||
set --global fish_color_normal normal
|
||||
set --global fish_color_operator brcyan
|
||||
set --global fish_color_param cyan
|
||||
set --global fish_color_quote yellow
|
||||
set --global fish_color_redirection cyan --bold
|
||||
set --global fish_color_search_match white --background=brblack
|
||||
set --global fish_color_selection white --bold --background=brblack
|
||||
set --global fish_color_status red
|
||||
set --global fish_color_user brgreen
|
||||
set --global fish_color_valid_path --underline
|
||||
set --global fish_pager_color_completion normal
|
||||
set --global fish_pager_color_description B3A06D yellow -i
|
||||
set --global fish_pager_color_prefix normal --bold --underline
|
||||
set --global fish_pager_color_progress brwhite --background=cyan
|
||||
set --global fish_pager_color_selected_background -r
|
||||
@@ -0,0 +1,7 @@
|
||||
file:///mnt/storage/NextCloud/Documents/ETH/Semester4
|
||||
file:///home/janis/projects/active/eth
|
||||
file:///mnt/storage/NextCloud
|
||||
file:///mnt/storage/SORTED
|
||||
file:///home/janis/projects
|
||||
file:///mnt
|
||||
file:///mnt/janis
|
||||
@@ -0,0 +1,17 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Adaptive-Theme
|
||||
gtk-icon-theme-name=Papirus-Dark
|
||||
gtk-font-name=Comfortaa 11
|
||||
gtk-cursor-theme-name=oreo_spark_blue_cursors
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-toolbar-style=GTK_TOOLBAR_BOTH
|
||||
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
|
||||
@@ -0,0 +1 @@
|
||||
/usr/share/themes/Adaptive-Theme/gtk-4.0/assets
|
||||
@@ -0,0 +1,7 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Adaptive-Theme
|
||||
gtk-icon-theme-name=Papirus-Dark
|
||||
gtk-font-name=Comfortaa 11
|
||||
gtk-cursor-theme-name=oreo_spark_blue_cursors
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-application-prefer-dark-theme=1
|
||||
@@ -9,30 +9,19 @@
|
||||
#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||
|
||||
general {
|
||||
lock_cmd = hyprlock --immediate
|
||||
lock_cmd = hyprlock
|
||||
unlock_cmd = loginctl unlock-session
|
||||
before_sleep_cmd = hyprlock --immediate
|
||||
after_sleep_cmd = hyprlock --immediate
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 100
|
||||
on-timeout = notify-send "Entering idle state... (200s to screen off)"
|
||||
on-resume = notify-send "Welcome back!"
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 200
|
||||
on-timeout = notify-send "100s to screen off"
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 210
|
||||
on-timeout = hyprlock
|
||||
before_sleep_cmd = hyprlock
|
||||
inhibit_sleep = 3
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 300
|
||||
on-timeout = hyprlock --grace 15
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 360
|
||||
on-timeout = hyprctl dispatch dpms off
|
||||
on-resume = hyprctl dispatch dpms on
|
||||
}
|
||||
|
||||
@@ -8,9 +8,7 @@ $mainMod = SUPER
|
||||
# These key-binds are non-specific, laptop config has a separate file that includes
|
||||
# extra config for it specifically
|
||||
bind = $mainMod, Q, killactive
|
||||
# bind = $mainMod SHIFT, Q, exit
|
||||
bind = $mainMod, Return, exec, kitty
|
||||
# bind = $mainMod, E, exec, thunar
|
||||
bind = $mainMod SHIFT, E, exec, thunar
|
||||
bind = $mainMod, E, exec, kitty --hold fish -c "y"
|
||||
bind = $mainMod, V, togglefloating,
|
||||
@@ -46,13 +44,11 @@ bind = $mainMod SHIFT, L, exec, librewolf
|
||||
bind = $mainMod SHIFT, D, exec, vesktop
|
||||
bind = $mainMod SHIFT, V, exec, vscodium
|
||||
bind = $mainMod SHIFT, T, exec, thunderbird
|
||||
bind = $mainMod SHIFT, H, exec, heroic
|
||||
bind = $mainMod CTRL, H, exec, heroic
|
||||
bind = $mainMod SHIFT, Z, exec, zathura
|
||||
bind = $mainMod SHIFT, I, exec, notify-send 'AirPlay video server starting...' --app-name="AirPlay Video" && terminator -e "systemctl start avahi-daemon && sleep 5 && uxplay -n LinuxVideoPlay -nh"
|
||||
bind = $mainMod SHIFT, A, exec, notify-send 'AirPlay server starting...' --app-name="AirPlay Audio" && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && shairport-sync -a LinuxPlay"
|
||||
bind = $mainMod SHIFT, G, exec, notify-send 'Preparing system for gaming...' --app-name="Util" && corectrl
|
||||
bind = $mainMod SHIFT, P, exec, notify-send 'Steam is launching...' --app-name="Steam" && steam
|
||||
bind = $mainMod SHIFT, R, exec, notify-send 'Launching in Remoteplay optimised session' --app-name="Steam" && steam -pipewire
|
||||
bind = $mainMod CTRL, K, exec, notify-send 'Insta-Kill activated' --app-name="Hyprctl" && hyprctl kill
|
||||
bind = $mainMod SHIFT, O, exec, terminator -e "~/projects/dotfiles/ai.sh"
|
||||
|
||||
@@ -70,12 +66,12 @@ bind = SHIFT, PRINT, exec, grimblast --notify save screen
|
||||
# │ Rofi commands │
|
||||
# └ ┘
|
||||
bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run"
|
||||
bind = $mainMod SHIFT, H, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
||||
|
||||
# ┌ ┐
|
||||
# │ Logout commands │
|
||||
# └ ┘
|
||||
bind = $mainMod, escape, exec, wlogout
|
||||
bind = $mainMod ALT CTRL, L, exec, hyprlock --immediate
|
||||
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -85,14 +81,6 @@ bind = $mainMod ALT CTRL, L, exec, hyprlock --immediate
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Move focus with mainMod + arrow keys │
|
||||
# └ ┘
|
||||
bind = $mainMod, left, movefocus, l
|
||||
bind = $mainMod, right, movefocus, r
|
||||
bind = $mainMod, up, movefocus, u
|
||||
bind = $mainMod, down, movefocus, d
|
||||
|
||||
# ┌ ┐
|
||||
# │ Same with vim-motions │
|
||||
# └ ┘
|
||||
@@ -140,6 +128,12 @@ bind = $mainMod SHIFT, j, movetoworkspace, e-1
|
||||
bind = $mainMod SHIFT, k, movetoworkspace, e+1
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Special workspace │
|
||||
# └ ┘
|
||||
bind = $mainMod SHIFT, M, movetoworkspace, special
|
||||
bind = $mainMod, M, togglespecialworkspace
|
||||
|
||||
# ┌ ┐
|
||||
# │ Scroll through existing workspaces with │
|
||||
# │ mainMod + scroll │
|
||||
@@ -148,30 +142,18 @@ bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Tile window to a part of the screen │
|
||||
# └ ┘
|
||||
# bind = $mainMod CTRL, left, movewindow, left
|
||||
# bind = $mainMod CTRL, right, movewindow, right
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ move to next window / previous window with │
|
||||
# │ ALT + Tab / SHIFT + ALT + Tab │
|
||||
# └ ┘
|
||||
bind = ALT SHIFT, tab, cyclenext, prev
|
||||
# bind = ALT, tab, cyclenext, next
|
||||
# bind = ALT CTRL, tab, focusurgentorlast
|
||||
bind = ALT, tab, focusurgentorlast
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Master layout commands │
|
||||
# │ Dwindle layout commands │
|
||||
# └ ┘
|
||||
bind = $mainMod CTRL, M, layoutmsg, swapwithmaster
|
||||
bind = $mainMod SHIFT, A, layoutmsg, addmaster
|
||||
bind = $mainMod SHIFT CTRL, right, layoutmsg, orientationnext
|
||||
bind = $mainMod SHIFT CTRL, left, layoutmsg, orientationprev
|
||||
bind = $mainMod CTRL, M, layoutmsg, swapsplit
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
@@ -182,6 +164,39 @@ bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Resize window with keybinds (change split) │
|
||||
# └ ┘
|
||||
bind = $mainMod ALT, T, submap, split
|
||||
|
||||
# Submap for split
|
||||
submap = split
|
||||
binde = , H, splitratio, -0.01
|
||||
binde = , L, splitratio, +0.01
|
||||
|
||||
# Reset bind
|
||||
bind = , escape, submap, reset
|
||||
|
||||
submap = reset
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Truly resize window with keybind (submap) │
|
||||
# └ ┘
|
||||
bind = $mainMod ALT, R, submap, resize
|
||||
|
||||
# Submap for resize
|
||||
submap = resize
|
||||
binde = , L, resizeactive, 10 0
|
||||
binde = , H, resizeactive, -10 0
|
||||
binde = , K, resizeactive, 0 -10
|
||||
binde = , J, resizeactive, 0 10
|
||||
|
||||
# Reset bind
|
||||
bind = , escape, submap, reset
|
||||
|
||||
submap = reset
|
||||
|
||||
# ┌ ┐
|
||||
# │ Freeze │
|
||||
# └ ┘
|
||||
@@ -199,8 +214,8 @@ bind = ,code:121, exec, pamixer -t
|
||||
# ┌ ┐
|
||||
# │ Brightness-Control │
|
||||
# └ ┘
|
||||
bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%' --app-name="Brightness"
|
||||
bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%' --app-name="Brightness"
|
||||
bind = ,code:232, exec, light -U 5
|
||||
bind = ,code:233, exec, light -A 5
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
@@ -208,3 +223,17 @@ bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased
|
||||
# └ ┘
|
||||
bind = $mainMod CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 1920x0, 1, mirror, DP-1 && notify-send 'Set FPV goggles to mirror main screen' --app-name="Hyprctl"
|
||||
bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 3840x0, 1 && notify-send 'Set to expand FPV goggles' --app-name="Hyprctl"
|
||||
|
||||
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Funny windows user trolling binds │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
bind = CTRL ALT, Delete, exec, notify-send 'I am not Windows' 'Did ya really think that was gonna do anything? Only an eternally broken OS could need such a stupid keybind'
|
||||
bind = ALT, F4, exec, notify-send 'I am not Windows' 'That just feels like a way too unergonomic keybind to be used for such a common action'
|
||||
bind = $mainMod, left, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
bind = $mainMod, right, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
bind = $mainMod, up, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
bind = $mainMod, down, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
@@ -4,10 +4,10 @@
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
|
||||
exec = swaybg -m fill -i /home/janis/NextCloud/Wallpapers/dark/colour-explosion.jpg
|
||||
exec = swaybg -m fill -i /home/janis/NextCloud/Wallpapers/nvim/nvim-simple.png
|
||||
|
||||
general {
|
||||
col.active_border = rgba(591641cc) rgba(97103acc) rgba(2d2057cc) 45deg
|
||||
col.active_border = rgba(5c9b3fcc) rgba(1674b9cc) rgba(282828cc) 45deg
|
||||
col.inactive_border = rgb(000000)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
return function()
|
||||
return {
|
||||
gaps_in = 3,
|
||||
gaps_out = 4,
|
||||
border_size = 2,
|
||||
|
||||
layout = "dwindle",
|
||||
}
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
--- @param swap_escape boolean
|
||||
return function(swap_escape)
|
||||
return {
|
||||
kb_options = swap_escape and "caps:swapescape" or "",
|
||||
kb_layout = "us",
|
||||
kb_variant = "altgr-intl",
|
||||
natural_scroll = "true",
|
||||
|
||||
numlock_by_default = true,
|
||||
repeat_delay = 400,
|
||||
|
||||
follow_mouse = 2,
|
||||
mouse_refocus = true,
|
||||
scroll_factor = 2,
|
||||
accel_profile = "flat",
|
||||
|
||||
touchpad = {
|
||||
disable_while_typing = true,
|
||||
natural_scroll = true,
|
||||
scroll_factor = 4,
|
||||
},
|
||||
|
||||
focus_on_close = 1,
|
||||
|
||||
sensitivity = 0,
|
||||
}
|
||||
end
|
||||
@@ -9,18 +9,18 @@ exec-once = ~/.config/hypr/xdg-portal-hyprland
|
||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY
|
||||
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
# exec-once = waybar
|
||||
exec-once = hypridle
|
||||
exec-once = nm-applet
|
||||
exec-once = nextcloud --background
|
||||
# exec-once = sleep 2 && bash -c "ags run -d ~/projects/active/dotfiles/config/astal/ --gtk4 >> ~/log 2>&1"
|
||||
exec-once = sleep 2 && bash -c "ags run -d ~/projects/active/dotfiles/config/astal/ --gtk4"
|
||||
# exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/ >> ~/logn 2>&1"
|
||||
exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/"
|
||||
exec-once = sleep 2 && bash -c "ags run -d ~/projects/dotfiles/config/astal/ --gtk 4 >> /tmp/runner-log 2>&1"
|
||||
exec-once = bash -c "ags run -d ~/projects/dotfiles/config/ags/notifications/ --gtk 3 >> /tmp/notifier-log 2>&1"
|
||||
|
||||
|
||||
# ── wlhist ──────────────────────────────────────────────────────────
|
||||
exec-once = wl-paste --type text --watch cliphist store # Stores only text data
|
||||
exec-once = wl-paste --type image --watch cliphist store # Stores only image data
|
||||
|
||||
|
||||
exec = hyprctl setcursor oreo_spark_blue_cursors 24
|
||||
env = QT_QPA_PLATFORM,wayland
|
||||
env = QT_QPA_PLATFORM_THEME,qt6ct
|
||||
env = OLLAMA_HOST,0.0.0.0
|
||||
@@ -31,29 +31,45 @@ env = OLLAMA_HOST,0.0.0.0
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
input {
|
||||
kb_layout = ch
|
||||
kb_options = caps:swapescape
|
||||
kb_layout = us
|
||||
kb_variant = altgr-intl
|
||||
natural_scroll = true
|
||||
|
||||
numlock_by_default = true
|
||||
repeat_delay = 400
|
||||
|
||||
follow_mouse = 2
|
||||
mouse_refocus = true
|
||||
scroll_factor = 2
|
||||
accel_profile = flat
|
||||
|
||||
touchpad {
|
||||
disable_while_typing = true
|
||||
natural_scroll = true
|
||||
scroll_factor = 4
|
||||
}
|
||||
|
||||
focus_on_close = 1
|
||||
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
sensitivity = 0
|
||||
}
|
||||
|
||||
gestures {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
workspace_swipe = true
|
||||
workspace_swipe_distance = 300
|
||||
device {
|
||||
name = pnp0c50:00-093a:0255-touchpad
|
||||
enabled = true
|
||||
}
|
||||
|
||||
|
||||
# ── Cursors ─────────────────────────────────────────────────────────
|
||||
cursor {
|
||||
no_warps = false
|
||||
inactive_timeout = 5
|
||||
}
|
||||
|
||||
|
||||
# ── Bind config ─────────────────────────────────────────────────────
|
||||
binds {
|
||||
workspace_back_and_forth = true
|
||||
}
|
||||
|
||||
|
||||
@@ -63,27 +79,26 @@ gestures {
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
general {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
gaps_in = 3
|
||||
gaps_out = 4
|
||||
border_size = 1
|
||||
# col.active_border = rgba(cc5c00ff) rgba(cc5c00ff) rgba(ff0000ff) 45deg
|
||||
# col.inactive_border = rgba(595959aa)
|
||||
border_size = 2
|
||||
|
||||
layout = master
|
||||
no_border_on_floating = false
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Style │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
decoration {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
inactive_opacity = 1
|
||||
rounding = 10
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
range = 4
|
||||
# color = rgba(1a1a1aee)
|
||||
}
|
||||
|
||||
blur {
|
||||
@@ -100,38 +115,26 @@ decoration {
|
||||
animations {
|
||||
enabled = yes
|
||||
|
||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||
|
||||
animation = windows, 1, 7, myBezier
|
||||
animation = windowsOut, 1, 7, default, popin 80%
|
||||
animation = border, 1, 10, default
|
||||
animation = fade, 1, 7, default
|
||||
animation = workspaces, 1, 6, default
|
||||
animation = windows, 1, 3, myBezier
|
||||
animation = windowsOut, 1, 4, default, popin 80%
|
||||
animation = border, 1, 8, default
|
||||
animation = fade, 1, 3, default
|
||||
animation = workspaces, 1, 1, default
|
||||
animation = specialWorkspaceIn, 1, 1, default, fade
|
||||
animation = specialWorkspaceOut, 1, 1, default, fade
|
||||
}
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = false
|
||||
vrr = 2
|
||||
vrr = 3
|
||||
allow_session_lock_restore = true
|
||||
}
|
||||
|
||||
dwindle {
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = yes # you probably want this
|
||||
# pseudotile = true
|
||||
force_split = 2
|
||||
preserve_split = true
|
||||
}
|
||||
|
||||
master {
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
# no_gaps_when_only = true
|
||||
}
|
||||
|
||||
|
||||
cursor {
|
||||
no_warps = false
|
||||
inactive_timeout = 60
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Gestures │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
gestures {
|
||||
workspace_swipe_distance = 200
|
||||
workspace_swipe_cancel_ratio = 0.3
|
||||
workspace_swipe_forever = true
|
||||
workspace_swipe_direction_lock = false
|
||||
}
|
||||
|
||||
gesture = 3, horizontal, workspace,
|
||||
gesture = 3, down, close
|
||||
gesture = 3, up, fullscreen
|
||||
@@ -0,0 +1,3 @@
|
||||
-- Custom layout manager
|
||||
-- Very work in progress, currently, dwindle layout is still in use,
|
||||
-- but once this is completed, will switch over to this
|
||||
@@ -0,0 +1,14 @@
|
||||
# hyprvim
|
||||
Using Vim Motions and in general vim-style commands is really neat - so why not apply to the Window Manager as well?
|
||||
|
||||
## Mapping
|
||||
- `Super + W`: Manage windows (close windows, resize them, change split)
|
||||
- `Super + Y`: Workspace management (change workspace, move windows to workspaces)
|
||||
- `Super + C`: Notification management (dismiss notifications)
|
||||
- `Super + X`: Launch commands (for software)
|
||||
- `Super + D`: Device management (brightness, volume, media, etc)
|
||||
- `Super + S`: Screenshot
|
||||
|
||||
There are several quick binds available, such as `Super + [0-9]` to switch workspaces, `Super + Shift + [0-9]` to move windows as well as `Super + [hjkl]` to move focus.
|
||||
|
||||
Additionally, there are shortcuts to commonly used apps, such as `Super + Enter` for `kitty`, `Super + Shift + L` for `librewolf` and `Super + Space` for `rofi`
|
||||
@@ -0,0 +1,62 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ device config │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
|
||||
# ── Brightness-Control ──────────────────────────────────────────────
|
||||
bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%'
|
||||
bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%'
|
||||
|
||||
|
||||
# ── Volume control ──────────────────────────────────────────────────
|
||||
bind = ,code:123, exec, pamixer -i 5
|
||||
bind = ,code:122, exec, pamixer -d 5
|
||||
bind = ,code:121, exec, pamixer -t
|
||||
|
||||
|
||||
# ── Submap ──────────────────────────────────────────────────────────
|
||||
bind = $mainMod, D, submap, device
|
||||
submap = device
|
||||
|
||||
|
||||
# ── Swapescape ──────────────────────────────────────────────────────
|
||||
bind = , S, exec, fish -c "toggle-swapescape"
|
||||
bind = , S, submap, reset
|
||||
|
||||
|
||||
# ── FPV goggles binds ───────────────────────────────────────────────
|
||||
bind = CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 1920x0, 1, mirror, DP-1 && notify-send 'Set FPV goggles to mirror main screen' --app-name="Hyprctl"
|
||||
bind = CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 3840x0, 1 && notify-send 'Set to expand FPV goggles' --app-name="Hyprctl"
|
||||
|
||||
# Touchpad
|
||||
bind = , T, exec, hyprctl keyword device[pnp0c50:00-093a:0255-touchpad]:enabled true && notify-send 'Enabled Trackpad' --app-name="Hyprctl"
|
||||
bind = SHIFT, T, exec, hyprctl keyword device[pnp0c50:00-093a:0255-touchpad]:enabled false && notify-send 'Disabled Trackpad' --app-name="Hyprctl"
|
||||
|
||||
|
||||
# ── Monitor config binds ────────────────────────────────────────────
|
||||
bind = SHIFT, D, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1, mirror, eDP-1 && notify-send 'Set to mirror internal display' --app-name="Hyprctl"
|
||||
bind = SHIFT, E, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1 && notify-send 'Set to expand external display' --app-name="Hyprctl"
|
||||
|
||||
|
||||
# ── Internal display controls ───────────────────────────────────────
|
||||
bind = , E, exec, hyprctl keyword monitor eDP-1, 2880x1800@60, 0x0, 1.5 && cpupower-gui -b && notify-send 'Set to battery optimized settings' --app-name="PowerProfiles"
|
||||
bind = , B, exec, hyprctl keyword monitor eDP-1, 2880x1800@120, 0x0, 1.5 && cpupower-gui -b && notify-send 'Set to balanced performance settings' --app-name="PowerProfiles"
|
||||
bind = , P, exec, hyprctl keyword monitor eDP-1, 2880x1800@120, 0x0, 1.5 && cpupower-gui -p && notify-send 'Set to performance optimized settings' --app-name="PowerProfiles"
|
||||
|
||||
|
||||
# ── Using docked ────────────────────────────────────────────────────
|
||||
bind = , D, exec, hyprctl keyword monitor eDP-1, disable
|
||||
|
||||
# Keyboard layout
|
||||
bind = , U, exec, hyprctl keyword input:kb_layout us && hyprctl keyword input:kb_variant altgr-intl && notify-send 'Set to US keyboard layout' --app-name="Keyboard layout"
|
||||
bind = , U, submap, reset
|
||||
bind = , C, exec, hyprctl keyword input:kb_layout ch && hyprctl keyword input:kb_variant '' && notify-send 'Set to CH keyboard layout' --app-name="Keyboard layout"
|
||||
bind = , C, submap, reset
|
||||
bind = , M, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||
bind = , M, submap, reset
|
||||
|
||||
|
||||
# ── Exit submap ─────────────────────────────────────────────────────
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -0,0 +1,86 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ App launching │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
bind = $mainMod, Return, exec, kitty
|
||||
|
||||
|
||||
# ── Rofi ────────────────────────────────────────────────────────────
|
||||
bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run"
|
||||
bind = $mainMod SHIFT, H, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
||||
|
||||
|
||||
# ── Power / logout ──────────────────────────────────────────────────
|
||||
bind = $mainMod, escape, exec, wlogout
|
||||
|
||||
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Launch submap │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
bind = $mainMod, X, submap, launch
|
||||
submap = launch
|
||||
|
||||
|
||||
# ── Kitty ───────────────────────────────────────────────────────────
|
||||
bind = , K, exec, kitty
|
||||
bind = , K, submap, reset
|
||||
bind = , Return, exec, kitty
|
||||
bind = , Return, submap, reset
|
||||
|
||||
|
||||
# ── Others ──────────────────────────────────────────────────────────
|
||||
bind = , Q, exec, qutebrowser
|
||||
bind = , Q, submap, reset
|
||||
|
||||
bind = , L, exec, librewolf
|
||||
bind = , L, submap, reset
|
||||
|
||||
bind = , E, exec, thunar
|
||||
bind = , E, submap, reset
|
||||
|
||||
bind = , D, exec, vesktop
|
||||
bind = , D, submap, reset
|
||||
|
||||
bind = SHIFT, B, exec, brave
|
||||
bind = SHIFT, B, submap, reset
|
||||
|
||||
bind = , F, exec, filezilla
|
||||
bind = , F, submap, reset
|
||||
|
||||
bind = , V, exec, vscodium
|
||||
bind = , V, submap, reset
|
||||
|
||||
bind = , T, exec, thunderbird
|
||||
bind = , T, submap, reset
|
||||
|
||||
bind = , H, exec, heroic
|
||||
bind = , H, submap, reset
|
||||
|
||||
bind = , Z, exec, zathura
|
||||
bind = , Z, submap, reset
|
||||
|
||||
bind = , B, exec, /opt/bs-manager/bs-manager
|
||||
bind = , B, submap, reset
|
||||
|
||||
bind = , P, exec, alvr_dashboard
|
||||
bind = , P, submap, reset
|
||||
|
||||
bind = , C, exec, qalculate-qt
|
||||
bind = , C, submap, reset
|
||||
|
||||
bind = , A, exec, notify-send 'AirPlay server starting...' --app-name="AirPlay Audio" && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && shairport-sync -a LinuxPlay"
|
||||
bind = , A, submap, reset
|
||||
|
||||
bind = SHIFT, A, exec, notify-send 'AirPlay video server starting...' --app-name="AirPlay Video" && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && sleep 5 && uxplay -n LinuxVideoPlay -nh"
|
||||
bind = SHIFT, A, submap, reset
|
||||
|
||||
bind = , S, exec, notify-send 'Steam is launching...' --app-name="Steam" && steam
|
||||
bind = , S, submap, reset
|
||||
|
||||
|
||||
# ── Exit submap ─────────────────────────────────────────────────────
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -0,0 +1,30 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Notifications │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
|
||||
# ── Submap ──────────────────────────────────────────────────────────
|
||||
bind = $mainMod, C, submap, notifications
|
||||
submap = notifications
|
||||
|
||||
|
||||
bind = , T, exec, astal -i notifier toggle
|
||||
bind = , T, submap, reset
|
||||
|
||||
bind = , D, exec, astal -i notifier clear-newest
|
||||
bind = , D, submap, reset
|
||||
|
||||
bind = , C, exec, astal -i notifier clear
|
||||
bind = , C, submap, reset
|
||||
|
||||
bind = , S, exec, astal -i notifier show
|
||||
bind = , S, submap, reset
|
||||
|
||||
bind = , H, exec, astal -i notifier hide
|
||||
bind = , H, submap, reset
|
||||
|
||||
|
||||
# ── Exit submap ─────────────────────────────────────────────────────
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -0,0 +1,25 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Screenshotting binds │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
bind = $mainMod, S, submap, screenshotting
|
||||
submap = screenshotting
|
||||
|
||||
bind = , Y, exec, grimblast --notify copy area
|
||||
bind = , Y, submap, reset
|
||||
bind = , C, exec, grimblast --notify copysave area
|
||||
bind = , C, submap, reset
|
||||
bind = , S, exec, grimblast --notify save area
|
||||
bind = , S, submap, reset
|
||||
bind = SHIFT, Y, exec, grimblast --notify copy screen
|
||||
bind = SHIFT, Y, submap, reset
|
||||
bind = SHIFT, C, exec, grimblast --notify copysave screen
|
||||
bind = SHIFT, C, submap, reset
|
||||
bind = SHIFT, S, exec, grimblast --notify save screen
|
||||
bind = SHIFT, S, submap, reset
|
||||
|
||||
|
||||
# ── Exit submap ─────────────────────────────────────────────────────
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -0,0 +1,40 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Window management submap │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
bind = $mainMod, Q, killactive
|
||||
|
||||
# ── Resize, move using mouse plus mainMod ───────────────────────────
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
|
||||
# ── Submap ──────────────────────────────────────────────────────────
|
||||
bind = $mainMod, W, submap, windowing
|
||||
submap = windowing
|
||||
|
||||
# ── Resize windows ──────────────────────────────────────────────────
|
||||
binde = , L, resizeactive, 10 0
|
||||
binde = , H, resizeactive, -10 0
|
||||
binde = , K, resizeactive, 0 -10
|
||||
binde = , J, resizeactive, 0 10
|
||||
|
||||
|
||||
# ── Change splitratio ───────────────────────────────────────────────
|
||||
# binde = SHIFT, H, splitratio, -0.01
|
||||
# binde = SHIFT, L, splitratio, +0.01
|
||||
|
||||
|
||||
# ── Kill, freeze, etc ───────────────────────────────────────────────
|
||||
bind = SHIFT, f, exec, hyprfreeze -a
|
||||
bind = , x, killactive
|
||||
bind = , q, killactive
|
||||
bind = , f, fullscreen
|
||||
bind = , v, togglefloating
|
||||
bind = SHIFT, k, exec, notify-send 'Insta-Kill activated' --app-name="Hyprctl" && hyprctl kill
|
||||
|
||||
|
||||
# ── Exit submap ─────────────────────────────────────────────────────
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -0,0 +1,119 @@
|
||||
# ┌ ┐
|
||||
# │ Switch workspaces with mainMod + [0-9] │
|
||||
# └ ┘
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# ┌ ┐
|
||||
# │ Move active window to a workspace with │
|
||||
# │ mainMod + SHIFT + [0-9] │
|
||||
# └ ┘
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# ┌ ┐
|
||||
# │ Move focus with vim motions │
|
||||
# └ ┘
|
||||
bind = $mainMod, h, movefocus, l
|
||||
bind = $mainMod, l, movefocus, r
|
||||
bind = $mainMod, j, movefocus, d
|
||||
bind = $mainMod, k, movefocus, u
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Special workspace │
|
||||
# └ ┘
|
||||
bind = $mainMod SHIFT, M, movetoworkspace, special
|
||||
bind = $mainMod, M, togglespecialworkspace
|
||||
|
||||
# ┌ ┐
|
||||
# │ Scroll through existing workspaces with │
|
||||
# │ mainMod + scroll │
|
||||
# └ ┘
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
|
||||
# ┌ ┐
|
||||
# │ move to next window / previous window with │
|
||||
# │ ALT + Tab / SHIFT + ALT + Tab │
|
||||
# └ ┘
|
||||
bind = ALT SHIFT, tab, cyclenext, prev
|
||||
bind = ALT, tab, focusurgentorlast
|
||||
|
||||
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ Submap for workspace management │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
bind = $mainMod, A, submap, workspace
|
||||
submap = workspace
|
||||
|
||||
# ── Move to workspace ───────────────────────────────────────────────
|
||||
bind = , 1, workspace, 1
|
||||
bind = , 2, workspace, 2
|
||||
bind = , 3, workspace, 3
|
||||
bind = , 4, workspace, 4
|
||||
bind = , 5, workspace, 5
|
||||
bind = , 6, workspace, 6
|
||||
bind = , 7, workspace, 7
|
||||
bind = , 8, workspace, 8
|
||||
bind = , 9, workspace, 9
|
||||
bind = , 0, workspace, 10
|
||||
|
||||
|
||||
# ── Move active window to workspace ─────────────────────────────────
|
||||
bind = SHIFT, 1, movetoworkspace, 1
|
||||
bind = SHIFT, 2, movetoworkspace, 2
|
||||
bind = SHIFT, 3, movetoworkspace, 3
|
||||
bind = SHIFT, 4, movetoworkspace, 4
|
||||
bind = SHIFT, 5, movetoworkspace, 5
|
||||
bind = SHIFT, 6, movetoworkspace, 6
|
||||
bind = SHIFT, 7, movetoworkspace, 7
|
||||
bind = SHIFT, 8, movetoworkspace, 8
|
||||
bind = SHIFT, 9, movetoworkspace, 9
|
||||
bind = SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
|
||||
# ── Move workspace with vim motions or mouse scroll ─────────────────
|
||||
bind = , h, workspace, e-1
|
||||
bind = , l, workspace, e+1
|
||||
bind = , mouse_down, workspace, e+1
|
||||
bind = , mouse_up, workspace, e-1
|
||||
|
||||
|
||||
# ── Move window to workspace with vim motions ───────────────────────
|
||||
bind = SHIFT, h, movetoworkspace, e-1
|
||||
bind = SHIFT, l, movetoworkspace, e+1
|
||||
|
||||
|
||||
# ── Special workspace ───────────────────────────────────────────────
|
||||
bind = , s, togglespecialworkspace
|
||||
bind = SHIFT, s, movetoworkspace, special
|
||||
|
||||
|
||||
# ── dwindle ─────────────────────────────────────────────────────────
|
||||
bind = , M, layoutmsg, swapsplit
|
||||
bind = , N, layoutmsg, togglesplit
|
||||
|
||||
|
||||
# ── Exit submap ─────────────────────────────────────────────────────
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -0,0 +1,15 @@
|
||||
$mainMod = SUPER
|
||||
source=./modal-binds/workspace.conf
|
||||
source=./modal-binds/launch.conf
|
||||
source=./modal-binds/notifications.conf
|
||||
source=./modal-binds/window-management.conf
|
||||
source=./modal-binds/screenshot.conf
|
||||
source=./modal-binds/device.conf
|
||||
|
||||
|
||||
bind = CTRL ALT, Delete, exec, notify-send 'I am not Windows' 'Did ya really think that was gonna do anything? Only an eternally broken OS could need such a stupid keybind'
|
||||
bind = ALT, F4, exec, notify-send 'I am not Windows' 'That just feels like a way too unergonomic keybind to be used for such a common action'
|
||||
bind = $mainMod, left, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
bind = $mainMod, right, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
bind = $mainMod, up, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
bind = $mainMod, down, exec, notify-send 'I am not Windows' 'This is no inefficient stacking manager. Tiling happens automatically'
|
||||
@@ -1,17 +1,3 @@
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ WORKSPACE RULES │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
|
||||
# Display full sized (without gaps), if only window on screen
|
||||
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||
# workspace = f[1], gapsout:0, gapsin:0
|
||||
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
|
||||
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
|
||||
# windowrule = rounding 0, floating:0, onworkspace:f[1]
|
||||
|
||||
$mainMod = SUPER
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
@@ -19,103 +5,143 @@ $mainMod = SUPER
|
||||
# │ WINDOW RULES │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
windowrule = float, title:.*(rofi).*
|
||||
windowrule = animation popin, title:.*(rofi).*
|
||||
windowrule = center, title:(rofi)(.*)
|
||||
windowrule = move 1450 50, match:title (.*)Power menu$
|
||||
windowrule = workspace 2, match:class evince
|
||||
windowrule = workspace 2, match:title .*Okular.*
|
||||
windowrule = workspace 2, match:class org.pwmt.zathura
|
||||
windowrule = fullscreen on, match:title wlogout
|
||||
windowrule = workspace 2, match:class librewolf
|
||||
windowrule = workspace 2, match:title LibreWolf
|
||||
windowrule = workspace 2, match:title BSManager
|
||||
windowrule = workspace 1, match:title ALVR(.*)
|
||||
windowrule = workspace 1, match:class (.*)steam_app(.*)
|
||||
windowrule = fullscreen on, match:class (.*)steam_app(.*)
|
||||
windowrule = workspace 2, match:title (.*)Beat Saber(.*)
|
||||
windowrule = fullscreen on, match:title (.*)Beat Saber(.*)
|
||||
windowrule = workspace 2, match:title (.*)Discord(.*)
|
||||
windowrule = workspace 3, match:title ^(Steam)(.*)$
|
||||
windowrule = float off, match:title ^(Steam)(.*)$
|
||||
windowrule = float on, match:title ^(SteamVR)(.*)$
|
||||
windowrule = center on, match:title ^(.*)(SteamVR)(.*)$
|
||||
windowrule = float on, match:title ^(.*)(Android)(.*)(Emulator)(.*)$
|
||||
windowrule = workspace 2, match:title ^(.*)(Android)(.*)(Emulator)(.*)$
|
||||
windowrule = center on, match:title ^(.*)(Android)(.*)(Emulator)(.*)$
|
||||
windowrule = workspace 1, match:title (.*)(VSCodium)$
|
||||
windowrule = center on, match:title ^(.*)(VSCodium)$
|
||||
windowrule = workspace 3, match:class minecraft-launcher
|
||||
windowrule = tile on, match:class minecraft-launcher
|
||||
windowrule = fullscreen on, match:title ^(.*)(Minecraft)(.*)$
|
||||
windowrule = workspace 3, match:title ^(.*)(Minecraft)(.*)$
|
||||
|
||||
windowrule = move 1450 50, title:^(.*)(Power menu)$
|
||||
windowrule = workspace 2, class:evince
|
||||
windowrule = workspace 2, title:.*(Okular).*
|
||||
windowrule = workspace 2, class:org.pwmt.zathura
|
||||
windowrule = fullscreen, title:wlogout
|
||||
windowrule = workspace 2, class:librewolf
|
||||
windowrule = workspace 2, title:LibreWolf
|
||||
windowrule = workspace 2, title:(.*)(Discord)(.*)
|
||||
windowrule = workspace 3, title:^(Steam)(.*)$
|
||||
windowrule = workspace 1, title:^(.*)(VSCodium)$
|
||||
windowrule = center, title:^(.*)(VSCodium)$
|
||||
windowrule = workspace 3, class:minecraft-launcher
|
||||
windowrule = tile, class:minecraft-launcher
|
||||
windowrule = fullscreen, title:^(.*)(Minecraft)(.*)$
|
||||
windowrule = workspace 3, title:^(.*)(Minecraft)(.*)$
|
||||
|
||||
windowrule = workspace 1, title:^(.*)hidden-terminator*(.*)$
|
||||
windowrule = size 0 0, title:^(.*)hidden-terminator*(.*)$
|
||||
windowrule = move 0 0, title:^(.*)hidden-terminator*(.*)$
|
||||
windowrule = float, title:^(.*)hidden-terminator*(.*)$
|
||||
windowrule = workspace 1, match:title ^(.*)hidden-terminator*(.*)$
|
||||
windowrule = size 0 0, match:title ^(.*)hidden-terminator*(.*)$
|
||||
windowrule = move 0 0, match:title ^(.*)hidden-terminator*(.*)$
|
||||
windowrule = float on, match:title ^(.*)hidden-terminator*(.*)$
|
||||
|
||||
# ┌ ┐
|
||||
# │ Set rule for yazi filepicker │
|
||||
# └ ┘
|
||||
windowrule = float, title:^(.*)termfilechooser*(.*)$
|
||||
windowrule = size 1400 800, title:^(.*)termfilechooser*(.*)$
|
||||
windowrule = center, title:^(.*)termfilechooser*(.*)$
|
||||
windowrule = float on, match:title ^(.*)termfilechooser*(.*)$
|
||||
windowrule = size 1400 800, match:title ^(.*)termfilechooser*(.*)$
|
||||
windowrule = center on, match:title ^(.*)termfilechooser*(.*)$
|
||||
windowrule = dim_around on, match:title ^(.*)termfilechooser*(.*)$
|
||||
|
||||
# ┌ ┐
|
||||
# │ Set floating windows & position them centered │
|
||||
# └ ┘
|
||||
windowrule = float, class:file_progress
|
||||
windowrule = center, class:file_progress
|
||||
windowrule = float on, match:class file_progress
|
||||
windowrule = center on, match:class file_progress
|
||||
|
||||
windowrule = float, class:confirm
|
||||
windowrule = center, class:confirm
|
||||
windowrule = float on, match:class confirm
|
||||
windowrule = center on, match:class confirm
|
||||
|
||||
windowrule = float, class:dialog
|
||||
windowrule = center, class:dialog
|
||||
windowrule = float on, match:class dialog
|
||||
windowrule = center on, match:class dialog
|
||||
|
||||
windowrule = float, class:download
|
||||
windowrule = center, class:download
|
||||
windowrule = float on, match:class download
|
||||
windowrule = center on, match:class download
|
||||
|
||||
windowrule = float, class:notification
|
||||
windowrule = center, class:notification
|
||||
windowrule = float on, match:class notification
|
||||
windowrule = center on, match:class notification
|
||||
|
||||
windowrule = float, class:error
|
||||
windowrule = center, class:error
|
||||
windowrule = float on, match:class error
|
||||
windowrule = center on, match:class error
|
||||
|
||||
windowrule = float, class:splash
|
||||
windowrule = center, class:splash
|
||||
windowrule = float on, match:class splash
|
||||
windowrule = center on, match:class splash
|
||||
|
||||
windowrule = float, class:confirmreset
|
||||
windowrule = center, class:confirmreset
|
||||
windowrule = float on, match:class confirmreset
|
||||
windowrule = center on, match:class confirmreset
|
||||
|
||||
windowrule = float, title:Open File
|
||||
windowrule = center, title:Open File
|
||||
windowrule = float on, match:title Open File
|
||||
windowrule = center on, match:title Open File
|
||||
|
||||
windowrule = float, title:branchdialog
|
||||
windowrule = center, title:branchdialog
|
||||
windowrule = float on, match:title branchdialog
|
||||
windowrule = center on, match:title branchdialog
|
||||
|
||||
windowrule = float, class:Lxappearance
|
||||
windowrule = center, class:Lxappearance
|
||||
windowrule = float on, match:class Lxappearance
|
||||
windowrule = center on, match:class Lxappearance
|
||||
|
||||
windowrule = float, title:^(Media viewer)$
|
||||
windowrule = center, title:^(Media viewer)$
|
||||
windowrule = float on, match:title ^(Media viewer)$
|
||||
windowrule = center on, match:title ^(Media viewer)$
|
||||
|
||||
windowrule = float, title:^(Volume Control)$
|
||||
windowrule = center, title:^(Volume Control)$
|
||||
windowrule = float on, match:title ^(Volume Control)$
|
||||
windowrule = center on, match:title ^(Volume Control)$
|
||||
|
||||
windowrule = float, title:^(Picture-in-Picture)$
|
||||
windowrule = center, title:^(Picture-in-Picture)$
|
||||
windowrule = float on, match:title ^(Picture-in-Picture)$
|
||||
windowrule = center on, match:title ^(Picture-in-Picture)$
|
||||
|
||||
windowrule = float, title:^(File Operation Progress)$
|
||||
windowrule = center, title:^(File Operation Progress)$
|
||||
windowrule = float on, match:title ^(File Operation Progress)$
|
||||
windowrule = center on, match:title ^(File Operation Progress)$
|
||||
|
||||
windowrule = float, title:^(Loading)(.*)$
|
||||
windowrule = center, title:^(Loading)(.*)$
|
||||
windowrule = float on, match:title ^(Loading)(.*)$
|
||||
windowrule = center on, match:title ^(Loading)(.*)$
|
||||
|
||||
windowrule = float, class:pavucontrol-qt
|
||||
windowrule = center, class:pavucontrol-qt
|
||||
windowrule = float on, match:title ^(.*)(Launcher)(.*)$
|
||||
windowrule = center on, match:title ^(.*)(Launcher)(.*)$
|
||||
|
||||
windowrule = float, class:pavucontrol
|
||||
windowrule = center, class:pavucontrol
|
||||
windowrule = float on, match:title ^(AG Controller)(.*)$
|
||||
windowrule = center on, match:title ^(AG Controller)(.*)$
|
||||
windowrule = workspace special, match:title ^(AG Controller)(.*)$
|
||||
windowrule = size 1200 800, match:title ^(AG Controller)(.*)$
|
||||
|
||||
windowrule = float, class:file-roller
|
||||
windowrule = center, class:file-roller
|
||||
windowrule = float on, match:title ^(Qalculate)(.*)$
|
||||
windowrule = center on, match:title ^(Qalculate)(.*)$
|
||||
windowrule = workspace special, match:title ^(Qalculate)(.*)$
|
||||
windowrule = size 1200 800, match:title ^(Qalculate)(.*)$
|
||||
|
||||
windowrule = idleinhibit focus, title:^(Rocket League)(.*)$
|
||||
windowrule = fullscreen, title:^(Steam Big Picture)$
|
||||
windowrule = idleinhibit always, class:steam
|
||||
windowrule = idleinhibit always, class:lutris
|
||||
windowrule = idleinhibit focus, class:vlc
|
||||
windowrule = idleinhibit focus, class:supertuxkart
|
||||
windowrule = idleinhibit fullscreen, title:^(.*)(Discord)(.*)$
|
||||
windowrule = idleinhibit fullscreen, title:^(.*)(~)(.*)$
|
||||
windowrule = float on, match:class pavucontrol-qt
|
||||
windowrule = center on, match:class pavucontrol-qt
|
||||
|
||||
windowrule = float on, match:class pavucontrol
|
||||
windowrule = center on, match:class pavucontrol
|
||||
|
||||
windowrule = float on, match:class file-roller
|
||||
windowrule = center on, match:class file-roller
|
||||
|
||||
# idleinhibit
|
||||
windowrule = idle_inhibit focus, match:title ^(Rocket League)(.*)$
|
||||
windowrule = fullscreen on, match:title ^(Steam Big Picture)$
|
||||
windowrule = idle_inhibit always, match:class steam
|
||||
windowrule = idle_inhibit always, match:class lutris
|
||||
windowrule = idle_inhibit focus, match:class vlc
|
||||
windowrule = idle_inhibit focus, match:class supertuxkart
|
||||
windowrule = idle_inhibit fullscreen, match:title ^(.*)(Discord)(.*)$
|
||||
windowrule = idle_inhibit fullscreen, match:title ^(.*)(~)(.*)$
|
||||
|
||||
# Do not screenshare bitwarden windows
|
||||
windowrule = no_screen_share on, match:title (.*)(Bitwarden)(.*)
|
||||
windowrule = no_screen_share on, match:class nm-connection-editor
|
||||
windowrule = no_screen_share on, match:title (.*)(secret)(.*)
|
||||
windowrule = no_screen_share on, match:class (.*)[aA]uthentication(.*)
|
||||
|
||||
# ── LOVR config ─────────────────────────────────────────────────────
|
||||
windowrule = float on, match:title ^(.*)LÖVR(.*)$
|
||||
windowrule = size 1400 800, match:title ^(.*)LÖVR(.*)$
|
||||
windowrule = center on, match:title ^(.*)LÖVR(.*)$
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ Layer rules │
|
||||
# └ ┘
|
||||
layerrule = dim_around on, match:namespace rofi
|
||||
@@ -17,15 +17,10 @@
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
|
||||
# monitor=DP-1, preferred, 0x0, 1, vrr, 2
|
||||
monitor=DP-1, 1920x1080@144, 0x0, 1, vrr, 2
|
||||
monitor=DP-2, 1920x1080@75, 1920x0, 1
|
||||
# monitor=,highres highrr, auto, 1
|
||||
|
||||
|
||||
# exec = swaybg -m fill -i /mnt/storage/SORTED/Pictures/Wallpapers/wallpaper/arch-bg-matterhorn.jpg
|
||||
# exec = swaybg -m fill -i /mnt/storage/SORTED/Pictures/Wallpapers/McLaren/main_livery_upscaled.jpg
|
||||
|
||||
exec = hyprctl setcursor oreo_spark_blue_cursors 24
|
||||
|
||||
source=./hyprland/binds.conf
|
||||
source=./hyprland/general.conf
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
|
||||
#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒
|
||||
#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒
|
||||
#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓
|
||||
#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓
|
||||
#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓
|
||||
#█ ████ ████ ████ ██████ ████ ███ █ █ ██ ██ █ ███████████ ██████ █████ ██ ███ ████ █████ █
|
||||
#██████████████ █████ ██████████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
# ╭────────────────────────────────────────────────╮
|
||||
# │ MONITORS │
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
|
||||
monitor=eDP-1, disable
|
||||
monitor=,highres highrr, auto, 1
|
||||
|
||||
|
||||
source=./hyprland/binds.conf
|
||||
source=./hyprland/general.conf
|
||||
source=./hyprland/windowrules.conf
|
||||
|
||||
# ┌ ┐
|
||||
# │ LAPTOP │
|
||||
# └ ┘
|
||||
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
||||
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
||||
env = X_CURSOR_THEME, Oreo_spark_blue_cursor
|
||||
env = XCURSOR_SIZE,24
|
||||
env = XDG_SESSION_TYPE, wayland
|
||||
env = QT_QPA_PLATFORM,wayland
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
exec-once = hyprpm reload -nn
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
|
||||
# ── Vivado inversion ────────────────────────────────────────────────
|
||||
windowrule = plugin:invertwindow, class:Vivado
|
||||
windowrule = tile, title:(.*)Vivado(.*)
|
||||
@@ -18,14 +18,12 @@
|
||||
# ╰────────────────────────────────────────────────╯
|
||||
# ────────────────────────────────────────────────────────────────────
|
||||
|
||||
monitor=eDP-1, 2880x1800@60, 0x0, 1.5
|
||||
# monitor=,highres highrr, auto, 1
|
||||
|
||||
|
||||
# exec = swaybg -m fill -i /home/janis/Pictures/arch-bg.png
|
||||
monitor=eDP-1, 2880x1800@120, 0x0, 1.5
|
||||
monitor=,highres highrr, auto, 1
|
||||
|
||||
|
||||
source=./hyprland/binds.conf
|
||||
source=./hyprland/gestures.conf
|
||||
source=./hyprland/general.conf
|
||||
source=./hyprland/windowrules.conf
|
||||
|
||||
@@ -35,40 +33,17 @@ source=./hyprland/windowrules.conf
|
||||
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
||||
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
||||
env = X_CURSOR_THEME, Oreo_spark_blue_cursor
|
||||
env = XCURSOR_SIZE,24
|
||||
env = XCURSOR_SIZE, 36
|
||||
env = ELECTRON_ENABLE_HIGHDPI_SUPPORT, 1
|
||||
env = XDG_SESSION_TYPE, wayland
|
||||
env = QT_QPA_PLATFORM,wayland
|
||||
# env = QT_QPA_PLATFORM_THEME,qt6ct
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||
env = QT_QPA_PLATFORM, wayland
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT, wayland
|
||||
env = GDK_SCALE,2
|
||||
exec-once = hyprpm reload -nn
|
||||
|
||||
input {
|
||||
kb_options = caps:swapescape
|
||||
}
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# ── Volume control ──────────────────────────────────────────────────
|
||||
bind = ,code:123, exec, pamixer -i 5
|
||||
bind = ,code:122, exec, pamixer -d 5
|
||||
bind = ,code:121, exec, pamixer -t
|
||||
|
||||
|
||||
# ── Brightness-Control ──────────────────────────────────────────────
|
||||
bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%'
|
||||
bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%'
|
||||
|
||||
|
||||
# ── Monitor config binds ────────────────────────────────────────────
|
||||
bind = $mainMod CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1, mirror, eDP-1 && notify-send 'Set to mirror internal display'
|
||||
bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1 && notify-send 'Set to expand external display'
|
||||
|
||||
|
||||
# ── Internal display controls ───────────────────────────────────────
|
||||
bind = $mainMod ALT, E, exec, hyprctl keyword monitor eDP-1, 2880x1800@60, 0x0, 1.5 && cpupower-gui -b && notify-send 'Set to battery optimized settings'
|
||||
bind = $mainMod ALT, P, exec, hyprctl keyword monitor eDP-1, 2880x1800@120, 0x0, 1.5 && cpupower-gui -p && notify-send 'Set to performance optimized settings'
|
||||
|
||||
|
||||
# ── Vivado inversion ────────────────────────────────────────────────
|
||||
windowrule = plugin:invertwindow, class:Vivado
|
||||
windowrule = tile, title:(.*)Vivado(.*)
|
||||
@@ -9,16 +9,12 @@
|
||||
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||
|
||||
|
||||
general {
|
||||
grace = 15
|
||||
}
|
||||
|
||||
# ┌ ┐
|
||||
# │ BACKGROUND │
|
||||
# └ ┘
|
||||
background {
|
||||
monitor =
|
||||
path = /home/janis/NextCloud/Wallpapers/dark/colour-splash.jpg # Or screenshot
|
||||
path = /home/janis/NextCloud/Wallpapers/nvim/nvim-simple.png # Or screenshot
|
||||
|
||||
blur_passes = 1
|
||||
}
|
||||
@@ -33,7 +29,7 @@ input-field {
|
||||
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = false
|
||||
outer_color = rgb(89, 22, 65)
|
||||
outer_color = rgb(92, 155, 63)
|
||||
inner_color = rgb(200, 200, 200)
|
||||
font_color = rgb(10, 10, 10)
|
||||
fade_on_empty = true
|
||||
@@ -49,7 +45,7 @@ label {
|
||||
monitor =
|
||||
text = <b>$TIME</b>
|
||||
color =
|
||||
font_size = 100
|
||||
font_size = 150
|
||||
font_family = Comfortaa
|
||||
|
||||
position = 0, 80
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░ ░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
|
||||
#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒
|
||||
#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒
|
||||
#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓
|
||||
#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓
|
||||
#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓
|
||||
#█ ████ ████ ████ ██████ ████ ██ █ ██ ███ █████████████ ██████ █████ ██ ███ ████ █████ █
|
||||
#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||
|
||||
general {
|
||||
lock_cmd = hyprlock
|
||||
unlock_cmd = loginctl unlock-session
|
||||
before_sleep_cmd = hyprlock
|
||||
inhibit_sleep = 3
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 300
|
||||
on-timeout = hyprlock --grace 15
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 360
|
||||
on-timeout = hyprctl dispatch dpms off
|
||||
on-resume = hyprctl dispatch dpms on
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 600
|
||||
on-timeout = systemctl suspend
|
||||
on-resume = hyprctl dispatch dpms on
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
-- TODO: Laptop vs desktop vs docked config
|
||||
local swap_escape = false
|
||||
hl.config({
|
||||
general = require("hyprland.core.general")(),
|
||||
input = require("hyprland.core.input")(swap_escape),
|
||||
xwayland = {
|
||||
force_zero_scaling = true,
|
||||
},
|
||||
misc = {
|
||||
disable_hyprland_logo = true,
|
||||
disable_splash_rendering = false,
|
||||
vrr = 3,
|
||||
allow_session_lock_restore = true,
|
||||
},
|
||||
dwindle = {
|
||||
pseudotile = true,
|
||||
force_split = 2,
|
||||
preserve_split = true,
|
||||
},
|
||||
})
|
||||
|
||||
hl.device({
|
||||
name = "pnp0c50:00-093a:0255-touchpad",
|
||||
enabled = true,
|
||||
})
|
||||
@@ -0,0 +1,96 @@
|
||||
#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
|
||||
#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒
|
||||
#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒ ▒▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒
|
||||
#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓
|
||||
#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓
|
||||
#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓
|
||||
#█ ████ ████ ████ ██████ ████ ████ ████████ █ ██ ██████████ ██████ █████ ██ ███ ████ █████ █
|
||||
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
# │ BACKGROUND │
|
||||
# └ ┘
|
||||
background {
|
||||
monitor =
|
||||
path = /home/janis/NextCloud/Wallpapers/nvim/nvim-simple.png # Or screenshot
|
||||
|
||||
blur_passes = 1
|
||||
}
|
||||
|
||||
# ┌ ┐
|
||||
# │ PASSWORD INPUT │
|
||||
# └ ┘
|
||||
input-field {
|
||||
monitor =
|
||||
size = 300, 40
|
||||
outline_thickness = 3
|
||||
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = false
|
||||
outer_color = rgb(92, 155, 63)
|
||||
inner_color = rgb(200, 200, 200)
|
||||
font_color = rgb(10, 10, 10)
|
||||
fade_on_empty = true
|
||||
placeholder_text = <i>Input Password...</i> # Text rendered in the input box when it's empty.
|
||||
hide_input = false
|
||||
|
||||
position = 0, -80
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
label {
|
||||
monitor =
|
||||
text = <b>$TIME</b>
|
||||
color =
|
||||
font_size = 150
|
||||
font_family = Comfortaa
|
||||
|
||||
position = 0, 80
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
|
||||
label {
|
||||
monitor =
|
||||
text = $LAYOUT
|
||||
color = rgba(200, 200, 200, 1.0)
|
||||
font_size = 12
|
||||
font_family = Comfortaa
|
||||
|
||||
position = 0, 0
|
||||
halign = right
|
||||
valign = bottom
|
||||
}
|
||||
|
||||
label {
|
||||
monitor =
|
||||
text = $USER
|
||||
color = rgba(200, 200, 200, 1.0)
|
||||
font_size = 12
|
||||
font_family = Comfortaa
|
||||
|
||||
position = 0, 0
|
||||
halign = left
|
||||
valign = bottom
|
||||
shadow_passes = 3
|
||||
}
|
||||
|
||||
label {
|
||||
monitor =
|
||||
text = <i>Failed attempts: $ATTEMPTS</i>
|
||||
color = rgba(200, 0, 0, 1.0)
|
||||
font_size = 12
|
||||
font_family = Adwaita Sans
|
||||
|
||||
position = 0, 20
|
||||
halign = center
|
||||
valign = bottom
|
||||
shadow_passes = 3
|
||||
shadow_size = 5
|
||||
shadow_boost = 3
|
||||
shadow_color = rgb(255,255,255)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
sleep 1
|
||||
killall xdg-desktop-portal-hyprland
|
||||
killall xdg-desktop-portal-wlr
|
||||
killall xdg-desktop-portal
|
||||
/usr/libexec/xdg-desktop-portal-hyprland &
|
||||
sleep 2
|
||||
/usr/lib/xdg-desktop-portal &
|
||||
@@ -17,6 +17,7 @@ font_size 12.0
|
||||
# │ Cursor config │
|
||||
# └ ┘
|
||||
cursor_trail 1
|
||||
cursor_trail_start_threshold 0
|
||||
|
||||
|
||||
# ┌ ┐
|
||||
@@ -28,3 +29,10 @@ url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto ne
|
||||
detect_urls yes
|
||||
show_hyperlink_targets yes
|
||||
include current-theme.conf
|
||||
wheel_scroll_multiplier 10.0
|
||||
touch_scroll_multiplier 5.0
|
||||
|
||||
# ┌ ┐
|
||||
# │ Mappings │
|
||||
# └ ┘
|
||||
map kitty_mod+e
|
||||
@@ -0,0 +1,276 @@
|
||||
# ─────────────────────────────────────────────────────────────────────
|
||||
# ╭─────────────────────────────────────────────────╮
|
||||
# │ clang-format config │
|
||||
# ╰─────────────────────────────────────────────────╯
|
||||
# ─────────────────────────────────────────────────────────────────────
|
||||
BasedOnStyle: LLVM
|
||||
AccessModifierOffset: -2
|
||||
AlignAfterOpenBracket: BlockIndent
|
||||
AlignArrayOfStructures: Left
|
||||
AlignConsecutiveAssignments:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: true
|
||||
AlignConsecutiveBitFields:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveDeclarations:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveMacros:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveShortCaseStatements:
|
||||
Enabled: true
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCaseArrows: false
|
||||
AlignCaseColons: false
|
||||
AlignConsecutiveTableGenBreakingDAGArgColons:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveTableGenCondOperatorColons:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveTableGenDefinitionColons:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
AlignFunctionPointers: false
|
||||
PadOperators: false
|
||||
AlignEscapedNewlines: Right
|
||||
AlignOperands: Align
|
||||
AlignTrailingComments:
|
||||
Kind: Always
|
||||
OverEmptyLines: 0
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowBreakBeforeNoexceptSpecifier: Never
|
||||
AllowShortBlocksOnASingleLine: Never
|
||||
AllowShortCaseExpressionOnASingleLine: true
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortCompoundRequirementOnASingleLine: true
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AttributeMacros:
|
||||
- __capability
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
BitFieldColonSpacing: Both
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: false
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: false
|
||||
AfterFunction: false
|
||||
AfterNamespace: false
|
||||
AfterObjCDeclaration: false
|
||||
AfterStruct: true
|
||||
AfterUnion: false
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
BeforeLambdaBody: false
|
||||
BeforeWhile: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
BreakAdjacentStringLiterals: true
|
||||
BreakAfterAttributes: Always
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakAfterReturnType: None
|
||||
BreakArrays: true
|
||||
BreakBeforeBinaryOperators: All
|
||||
BreakBeforeBraces: Attach
|
||||
BreakBeforeConceptDeclarations: Always
|
||||
BreakBeforeInlineASMColon: OnlyMultiline
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakFunctionDefinitionParameters: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakStringLiterals: true
|
||||
BreakTemplateDeclarations: MultiLine
|
||||
ColumnLimit: 100
|
||||
CommentPragmas: "^ IWYU pragma:"
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: true
|
||||
DisableFormat: false
|
||||
EmptyLineAfterAccessModifier: Never
|
||||
EmptyLineBeforeAccessModifier: Always
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IfMacros:
|
||||
- KJ_IF_MAYBE
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: ^"(llvm|llvm-c|clang|clang-c)/
|
||||
Priority: 2
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: ^(<|"(gtest|gmock|isl|json)/)
|
||||
Priority: 3
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: .*
|
||||
Priority: 1
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
IncludeIsMainRegex: (Test)?$
|
||||
IncludeIsMainSourceRegex: ""
|
||||
IndentAccessModifiers: true
|
||||
IndentCaseBlocks: true
|
||||
IndentCaseLabels: true
|
||||
IndentExternBlock: AfterExternBlock
|
||||
IndentGotoLabels: true
|
||||
IndentPPDirectives: BeforeHash
|
||||
IndentRequiresClause: true
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: true
|
||||
InsertBraces: false
|
||||
InsertNewlineAtEOF: false
|
||||
InsertTrailingCommas: None
|
||||
IntegerLiteralSeparator:
|
||||
Binary: 0
|
||||
BinaryMinDigits: 0
|
||||
Decimal: 0
|
||||
DecimalMinDigits: 0
|
||||
Hex: 0
|
||||
HexMinDigits: 0
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
KeepEmptyLines:
|
||||
AtEndOfFile: false
|
||||
AtStartOfBlock: true
|
||||
AtStartOfFile: true
|
||||
LambdaBodyIndentation: Signature
|
||||
LineEnding: DeriveLF
|
||||
MacroBlockBegin: ""
|
||||
MacroBlockEnd: ""
|
||||
MainIncludeChar: Quote
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCBreakBeforeNestedBlockParam: true
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PPIndentWidth: -1
|
||||
PackConstructorInitializers: BinPack
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakOpenParenthesis: 0
|
||||
PenaltyBreakScopeResolution: 500
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyIndentedWhitespace: 0
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Right
|
||||
QualifierAlignment: Left
|
||||
ReferenceAlignment: Pointer
|
||||
ReflowComments: true
|
||||
RemoveBracesLLVM: true
|
||||
RemoveParentheses: MultipleParentheses
|
||||
RemoveSemicolon: false
|
||||
RequiresClausePosition: OwnLine
|
||||
RequiresExpressionIndentation: OuterScope
|
||||
SeparateDefinitionBlocks: Always
|
||||
ShortNamespaceLines: 1
|
||||
SkipMacroDefinitionBody: false
|
||||
SortIncludes: CaseSensitive
|
||||
SortJavaStaticImport: Before
|
||||
SortUsingDeclarations: LexicographicNumeric
|
||||
SpaceAfterCStyleCast: true
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCaseColon: false
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeJsonColon: false
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeParensOptions:
|
||||
AfterControlStatements: true
|
||||
AfterForeachMacros: true
|
||||
AfterFunctionDeclarationName: true
|
||||
AfterFunctionDefinitionName: true
|
||||
AfterIfMacros: true
|
||||
AfterOverloadedOperator: false
|
||||
AfterPlacementOperator: true
|
||||
AfterRequiresInClause: false
|
||||
AfterRequiresInExpression: false
|
||||
BeforeNonEmptyParentheses: false
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceBeforeSquareBrackets: false
|
||||
SpaceInEmptyBlock: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: Never
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 1
|
||||
Maximum: -1
|
||||
SpacesInParens: Custom
|
||||
SpacesInParensOptions:
|
||||
ExceptDoubleParentheses: false
|
||||
InConditionalStatements: true
|
||||
InCStyleCasts: false
|
||||
InEmptyParentheses: false
|
||||
Other: true
|
||||
SpacesInSquareBrackets: true
|
||||
Standard: Latest
|
||||
StatementAttributeLikeMacros:
|
||||
- Q_EMIT
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
TabWidth: 4
|
||||
TableGenBreakInsideDAGArg: DontBreak
|
||||
UseTab: Never
|
||||
VerilogBreakBetweenInstancePorts: true
|
||||
WhitespaceSensitiveMacros:
|
||||
- BOOST_PP_STRINGIZE
|
||||
- CF_SWIFT_NAME
|
||||
- NS_SWIFT_NAME
|
||||
- PP_STRINGIZE
|
||||
- STRINGIZE
|
||||
@@ -1,65 +1,744 @@
|
||||
// @ts-check
|
||||
|
||||
import eslint from '@eslint/js';
|
||||
import tseslint from 'typescript-eslint';
|
||||
import globals from 'globals';
|
||||
import stylistic from '@stylistic/eslint-plugin';
|
||||
import tseslint from 'typescript-eslint';
|
||||
import typescript from '@typescript-eslint/eslint-plugin';
|
||||
import vue from 'eslint-plugin-vue';
|
||||
|
||||
export default tseslint.config(
|
||||
eslint.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
{
|
||||
const style = {
|
||||
'plugins': {
|
||||
'@stylistic': stylistic,
|
||||
'@stylistic/js': stylistic,
|
||||
'@stylistic/ts': stylistic
|
||||
},
|
||||
'files': [
|
||||
'**/*.ts',
|
||||
'**/*.js',
|
||||
'**/*.mjs',
|
||||
'**/*.cjs',
|
||||
'**/*.tsx',
|
||||
'**/*.jsx'
|
||||
],
|
||||
'rules': {
|
||||
'sort-imports': [
|
||||
'warn',
|
||||
{
|
||||
'ignoreCase': false,
|
||||
'ignoreDeclarationSort': false,
|
||||
'ignoreMemberSort': false,
|
||||
'memberSyntaxSortOrder': [
|
||||
'none',
|
||||
'all',
|
||||
'multiple',
|
||||
'single'
|
||||
],
|
||||
'allowSeparatedGroups': false
|
||||
}
|
||||
],
|
||||
// Formatting
|
||||
'@stylistic/array-bracket-newline': [
|
||||
'error',
|
||||
{
|
||||
'multiline': false,
|
||||
'minItems': 2
|
||||
}
|
||||
],
|
||||
'@stylistic/array-bracket-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/array-element-newline': [
|
||||
'error',
|
||||
{
|
||||
'consistent': false,
|
||||
'multiline': false,
|
||||
'minItems': 2
|
||||
}
|
||||
],
|
||||
'@stylistic/arrow-parens': [
|
||||
'error',
|
||||
'as-needed'
|
||||
],
|
||||
'@stylistic/arrow-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': true,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/block-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/brace-style': [
|
||||
'error',
|
||||
'1tbs',
|
||||
{
|
||||
'allowSingleLine': false
|
||||
}
|
||||
],
|
||||
'@stylistic/comma-dangle': [
|
||||
'error',
|
||||
'never'
|
||||
],
|
||||
'@stylistic/comma-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': false,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/comma-style': [
|
||||
'error',
|
||||
'last'
|
||||
],
|
||||
'@stylistic/dot-location': [
|
||||
'error',
|
||||
'property'
|
||||
],
|
||||
'@stylistic/function-call-argument-newline': [
|
||||
'error',
|
||||
'consistent'
|
||||
],
|
||||
'@stylistic/function-call-spacing': [
|
||||
'error',
|
||||
'never'
|
||||
],
|
||||
'@stylistic/function-paren-newline': [
|
||||
'error',
|
||||
'multiline-arguments'
|
||||
],
|
||||
'@stylistic/implicit-arrow-linebreak': [
|
||||
'error',
|
||||
'beside'
|
||||
],
|
||||
'@stylistic/indent': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'@stylistic/indent-binary-ops': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'@stylistic/key-spacing': [
|
||||
'error',
|
||||
{
|
||||
'beforeColon': false,
|
||||
'afterColon': true
|
||||
}
|
||||
],
|
||||
'@stylistic/keyword-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': true,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/lines-between-class-members': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/max-len': [
|
||||
'warn',
|
||||
{
|
||||
'code': 140,
|
||||
'comments': 160,
|
||||
'ignoreComments': false,
|
||||
'ignoreUrls': true,
|
||||
'ignoreStrings': true,
|
||||
'ignoreTemplateLiterals': true,
|
||||
'ignoreRegExpLiterals': true
|
||||
}
|
||||
],
|
||||
'@stylistic/max-statements-per-line': [
|
||||
'error',
|
||||
{
|
||||
'max': 1
|
||||
}
|
||||
],
|
||||
'@stylistic/multiline-ternary': [
|
||||
'error',
|
||||
'always-multiline'
|
||||
],
|
||||
'@stylistic/new-parens': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/newline-per-chained-call': 'error',
|
||||
'@stylistic/no-confusing-arrow': 'error',
|
||||
'@stylistic/no-extra-parens': [
|
||||
'error',
|
||||
'all',
|
||||
{
|
||||
'nestedBinaryExpressions': false,
|
||||
'ternaryOperandBinaryExpressions': false,
|
||||
'ignoreJSX': 'multi-line',
|
||||
'nestedConditionalExpressions': false
|
||||
}
|
||||
],
|
||||
'@stylistic/no-extra-semi': 'error',
|
||||
'@stylistic/no-floating-decimal': 'error',
|
||||
'@stylistic/no-mixed-operators': 'error',
|
||||
'@stylistic/no-mixed-spaces-and-tabs': 'error',
|
||||
'@stylistic/no-multi-spaces': 'error',
|
||||
'@stylistic/no-multiple-empty-lines': [
|
||||
'error',
|
||||
{
|
||||
'max': 3,
|
||||
'maxEOF': 2
|
||||
}
|
||||
],
|
||||
'@stylistic/no-tabs': 'error',
|
||||
'@stylistic/no-trailing-spaces': 'error',
|
||||
'@stylistic/no-whitespace-before-property': 'error',
|
||||
'@stylistic/object-curly-newline': [
|
||||
'error',
|
||||
{
|
||||
'multiline': true,
|
||||
'minProperties': 1
|
||||
}
|
||||
],
|
||||
'@stylistic/object-curly-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/object-property-newline': 'error',
|
||||
'@stylistic/one-var-declaration-per-line': 'error',
|
||||
'@stylistic/operator-linebreak': [
|
||||
'error',
|
||||
'before'
|
||||
],
|
||||
'@stylistic/padded-blocks': [
|
||||
'error',
|
||||
{
|
||||
'blocks': 'never',
|
||||
'classes': 'always',
|
||||
'switches': 'never'
|
||||
}
|
||||
],
|
||||
|
||||
// Padding lines. The most in-depth part of this config
|
||||
'@stylistic/padding-line-between-statements': [
|
||||
'error',
|
||||
// Variables, Constants
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'var',
|
||||
'next': 'var'
|
||||
},
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'let',
|
||||
'next': 'let'
|
||||
},
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'const',
|
||||
'next': 'const'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'var',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'cjs-import',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'import',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'let',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'cjs-import',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'import',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'const',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'cjs-import',
|
||||
'class',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'import',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
// Import
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'import',
|
||||
'next': 'import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'cjs-import',
|
||||
'next': 'cjs-import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
],
|
||||
'next': 'cjs-import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'cjs-import',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
],
|
||||
'next': 'import'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'import',
|
||||
'next': [
|
||||
'block',
|
||||
'block-like',
|
||||
'break',
|
||||
'cjs-export',
|
||||
'class',
|
||||
'const',
|
||||
'continue',
|
||||
'debugger',
|
||||
'directive',
|
||||
'do',
|
||||
'empty',
|
||||
'export',
|
||||
'expression',
|
||||
'for',
|
||||
'function',
|
||||
'if',
|
||||
'iife',
|
||||
'let',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'var',
|
||||
'while',
|
||||
'with'
|
||||
]
|
||||
},
|
||||
// If
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'if'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'if',
|
||||
'next': '*'
|
||||
},
|
||||
// For
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'for'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'for',
|
||||
'next': '*'
|
||||
},
|
||||
// While
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'while'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'while',
|
||||
'next': '*'
|
||||
},
|
||||
// Functions
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'function'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'function',
|
||||
'next': '*'
|
||||
},
|
||||
// Block Statements
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'block-like'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'block-like',
|
||||
'next': '*'
|
||||
},
|
||||
// Switch
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'switch'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'switch',
|
||||
'next': '*'
|
||||
},
|
||||
// Try-Catch
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'try'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'try',
|
||||
'next': '*'
|
||||
},
|
||||
// Throw
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'throw'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'throw',
|
||||
'next': '*'
|
||||
},
|
||||
// Return
|
||||
{
|
||||
'blankLine': 'never',
|
||||
'prev': 'return',
|
||||
'next': '*'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'return'
|
||||
},
|
||||
// Export
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'export'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'export',
|
||||
'next': '*'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'cjs-export'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'cjs-export',
|
||||
'next': '*'
|
||||
},
|
||||
// Classes
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': '*',
|
||||
'next': 'class'
|
||||
},
|
||||
{
|
||||
'blankLine': 'always',
|
||||
'prev': 'class',
|
||||
'next': '*'
|
||||
}
|
||||
],
|
||||
'@stylistic/quote-props': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/quotes': [
|
||||
'error',
|
||||
'single'
|
||||
],
|
||||
'@stylistic/rest-spread-spacing': [
|
||||
'error',
|
||||
'never'
|
||||
],
|
||||
'@stylistic/semi': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/semi-spacing': [
|
||||
'error',
|
||||
{
|
||||
'before': false,
|
||||
'after': true
|
||||
}
|
||||
],
|
||||
'@stylistic/semi-style': [
|
||||
'error',
|
||||
'last'
|
||||
],
|
||||
'@stylistic/space-before-blocks': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/space-before-function-paren': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/space-in-parens': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/space-infix-ops': [
|
||||
'error',
|
||||
{
|
||||
'int32Hint': false
|
||||
}
|
||||
],
|
||||
'@stylistic/space-unary-ops': 'error',
|
||||
'@stylistic/spaced-comment': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/switch-colon-spacing': 'error',
|
||||
'@stylistic/template-curly-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/template-tag-spacing': [
|
||||
'error',
|
||||
'always'
|
||||
],
|
||||
'@stylistic/type-generic-spacing': 'error',
|
||||
'@stylistic/type-named-tuple-spacing': 'error',
|
||||
'@stylistic/wrap-iife': [
|
||||
'error',
|
||||
'inside'
|
||||
],
|
||||
'@stylistic/wrap-regex': 'error',
|
||||
'@stylistic/ts/type-annotation-spacing': 'error'
|
||||
}
|
||||
};
|
||||
|
||||
/** @type {import('eslint').Linter.Config} */
|
||||
export default tseslint.config(
|
||||
// Base JavaScript rules
|
||||
eslint.configs.recommended,
|
||||
tseslint.configs.recommended,
|
||||
style,
|
||||
|
||||
// Vue support (including TS and JSX inside SFCs)
|
||||
{
|
||||
'files': [ '**/*.vue' ],
|
||||
'languageOptions': {
|
||||
'sourceType': 'module',
|
||||
'ecmaVersion': 'latest',
|
||||
'globals': globals.browser,
|
||||
'parserOptions': {
|
||||
'parser': tseslint.parser
|
||||
}
|
||||
},
|
||||
'plugins': {
|
||||
'vue': vue,
|
||||
'@stylistic': stylistic,
|
||||
'@stylistic/js': stylistic,
|
||||
'@stylistic/ts': stylistic,
|
||||
'@typescript-eslint': typescript
|
||||
},
|
||||
'extends': [
|
||||
eslint.configs.recommended,
|
||||
...vue.configs['flat/recommended']
|
||||
],
|
||||
'rules': {
|
||||
// Formatting
|
||||
'@stylistic/js/array-bracket-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
||||
'@stylistic/js/array-bracket-spacing': [ 'error', 'always' ],
|
||||
'@stylistic/js/array-element-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
||||
'@stylistic/js/arrow-parens': [ 'error', 'always' ],
|
||||
'@stylistic/js/arrow-spacing': [ 'error', { 'before': true, 'after': true } ],
|
||||
'@stylistic/js/block-spacing': [ 'error', 'always' ],
|
||||
'@stylistic/js/brace-style': [ 'error', '1tbs' ],
|
||||
'@stylistic/js/comma-spacing': [ 'error', { 'before': false, 'after': true } ],
|
||||
'@stylistic/js/comma-style': [ 'error', 'last' ],
|
||||
'@stylistic/js/dot-location': [ 'error', 'property' ],
|
||||
'@stylistic/js/eol-last': [ 'error', 'always' ],
|
||||
'@stylistic/js/function-call-spacing': [ 'error', 'never' ],
|
||||
'@stylistic/js/implicit-arrow-linebreak': [ 'error', 'beside' ],
|
||||
'@stylistic/js/indent': [ 'error', 4 ],
|
||||
'@stylistic/js/key-spacing': [ 'error', { 'beforeColon': false, 'afterColon': true } ],
|
||||
'@stylistic/js/keyword-spacing': [ 'error', { 'before': true, 'after': true } ],
|
||||
'@stylistic/js/lines-between-class-members': [ 'error', 'always' ],
|
||||
'@stylistic/js/new-parens': [ 'error', 'always' ],
|
||||
'@stylistic/js/no-extra-parens': [ 'error', 'all' ],
|
||||
'@stylistic/js/no-extra-semi': 'error',
|
||||
'@stylistic/js/no-floating-decimal': 'error',
|
||||
'@stylistic/js/no-mixed-operators': 'error',
|
||||
'@stylistic/js/no-mixed-spaces-and-tabs': 'error',
|
||||
'@stylistic/js/no-multi-spaces': 'error',
|
||||
'@stylistic/js/no-trailing-spaces': 'error',
|
||||
'@stylistic/js/no-whitespace-before-property': 'error',
|
||||
'@stylistic/js/object-curly-newline': [ 'error', { 'multiline': true, 'minProperties': 3 } ],
|
||||
'@stylistic/js/object-curly-spacing': [ 'error', 'always' ],
|
||||
'@stylistic/js/one-var-declaration-per-line': 'error',
|
||||
'@stylistic/js/quote-props': [ 'error', 'always' ],
|
||||
'@stylistic/js/quotes': [ 'error', 'single' ],
|
||||
'@stylistic/js/rest-spread-spacing': [ 'error', 'never' ],
|
||||
'@stylistic/js/semi': [ 'error', 'always' ],
|
||||
'@stylistic/js/semi-spacing': [ 'error', { 'before': false, 'after': true } ],
|
||||
'@stylistic/js/semi-style': [ 'error', 'last' ],
|
||||
'@stylistic/js/space-before-blocks': [ 'error', 'always' ],
|
||||
'@stylistic/js/space-before-function-paren': [ 'error', 'always' ],
|
||||
'@stylistic/js/space-in-parens': [ 'error', 'always' ],
|
||||
'@stylistic/js/space-infix-ops': [ 'error', { 'int32Hint': false } ],
|
||||
'@stylistic/js/space-unary-ops': 'error',
|
||||
'@stylistic/js/spaced-comment': [ 'error', 'always' ],
|
||||
'@stylistic/js/switch-colon-spacing': 'error',
|
||||
'@stylistic/js/template-curly-spacing': [ 'error', 'always' ],
|
||||
'@stylistic/js/wrap-iife': [ 'error', 'inside' ],
|
||||
'@stylistic/js/wrap-regex': 'error',
|
||||
'@stylistic/ts/type-annotation-spacing': 'error',
|
||||
...typescript.configs.recommended.rules,
|
||||
...style.rules,
|
||||
|
||||
// Vue specific rules
|
||||
'@stylistic/indent': 'off',
|
||||
'vue/html-indent': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'vue/html-comment-indent': [
|
||||
'error',
|
||||
4
|
||||
],
|
||||
'vue/script-indent': [
|
||||
'error',
|
||||
4,
|
||||
{
|
||||
'baseIndent': 1,
|
||||
'switchCase': 1
|
||||
}
|
||||
],
|
||||
'vue/html-self-closing': [
|
||||
'error',
|
||||
{
|
||||
'html': {
|
||||
'void': 'never',
|
||||
'normal': 'never',
|
||||
'component': 'always'
|
||||
},
|
||||
'svg': 'always',
|
||||
'math': 'never'
|
||||
}
|
||||
],
|
||||
'vue/max-attributes-per-line': [
|
||||
'error',
|
||||
{
|
||||
'singleline': 3,
|
||||
'multiline': 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -0,0 +1,2 @@
|
||||
paths:
|
||||
- /home/janis/projects/dotfiles/config/lint/latexfmt.yaml
|
||||
@@ -0,0 +1,82 @@
|
||||
# Use spaces for indent (because f*k tabs)
|
||||
defaultIndent: " "
|
||||
|
||||
# Limit Number of backups
|
||||
maxNumberOfBackups: 3
|
||||
|
||||
verbatimEnvironments:
|
||||
verbatim: 1
|
||||
lstlisting: 1
|
||||
minted: 1
|
||||
code: 1
|
||||
|
||||
indentRules:
|
||||
recall: " "
|
||||
remarks: " "
|
||||
remark: " "
|
||||
guides: " "
|
||||
properties: " "
|
||||
restrictions: " "
|
||||
limitations: " "
|
||||
terms: " "
|
||||
notation: " "
|
||||
usage: " "
|
||||
task: " "
|
||||
proof: " "
|
||||
general: " "
|
||||
simplebox: " "
|
||||
definition: " "
|
||||
theorem: " "
|
||||
lemma: " "
|
||||
corollary: " "
|
||||
axiom: " "
|
||||
fact: " "
|
||||
proposition: " "
|
||||
example: " "
|
||||
formula: " "
|
||||
conjugation: " "
|
||||
forms: " "
|
||||
|
||||
lookForAlignDelims:
|
||||
tables:
|
||||
delims: 1
|
||||
alignDoubleBackSlash: 1
|
||||
spacesBeforeDoubleBackSlash: 1
|
||||
multiColumnGrouping: 0
|
||||
alignRowsWithoutMaxDelims: 1
|
||||
spacesBeforeAmpersand: 1
|
||||
spacesAfterAmpersand: 1
|
||||
justification: left
|
||||
alignFinalDoubleBackSlash: 0
|
||||
dontMeasure: 0
|
||||
delimiterRegEx: (?<!\\)(&)
|
||||
delimiterJustification: left
|
||||
lookForChildCodeBlocks: 1
|
||||
alignContentAfterDoubleBackSlash: 0
|
||||
spacesAfterDoubleBackSlash: 1
|
||||
|
||||
specialBeginEnd:
|
||||
If:
|
||||
begin: '\\If'
|
||||
middle:
|
||||
- '\\ElsIf'
|
||||
- '\\Else'
|
||||
end: '\\EndIf'
|
||||
lookForThis: 1
|
||||
For:
|
||||
begin: '\\For'
|
||||
end: '\\EndFor'
|
||||
lookForThis: 1
|
||||
Procedure:
|
||||
begin: '\\Procedure'
|
||||
end: '\\EndProcedure'
|
||||
lookForThis: 1
|
||||
Function:
|
||||
begin: '\\Function'
|
||||
end: '\\EndFunction'
|
||||
lookForThis: 1
|
||||
While:
|
||||
begin: '\\While'
|
||||
end: '\\EndWhile'
|
||||
lookForThis: 1
|
||||
specialBeforeCommand: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.28.0",
|
||||
"@stylistic/eslint-plugin": "^4.4.1",
|
||||
"eslint-plugin-vue": "^10.2.0",
|
||||
"typescript-eslint": "^8.33.1"
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
/** Basic config file **/
|
||||
|
||||
configuration {
|
||||
show-icons: true;
|
||||
icon-theme: "Candy";
|
||||
display-drun: "";
|
||||
display-run: "🏃🏽♂️ ";
|
||||
display-window: "🗔 ";
|
||||
display-combi: "🔎 ";
|
||||
dpi: 160;
|
||||
}
|
||||
|
||||
@theme "style.rasi"
|
||||
@@ -2,9 +2,9 @@
|
||||
background: #141414;
|
||||
background-selected: #1E1E1E;
|
||||
foreground: #E6E6E6;
|
||||
accent: #591641;
|
||||
accent-two: #97103A;
|
||||
// border-color: #2D2057;
|
||||
accent: #5C9B3F;
|
||||
accent-two: #1674B9;
|
||||
// border-color: #282828;
|
||||
inactive: #C8C8C8;
|
||||
spacing: 2;
|
||||
width: 30em;
|
||||
@@ -18,8 +18,8 @@
|
||||
border: 1px;
|
||||
border-radius: 10px;
|
||||
padding: 0;
|
||||
location: west;
|
||||
anchor: west;
|
||||
location: center;
|
||||
anchor: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,11 +22,11 @@ button {
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: rgba(151, 16, 58, 0.5);
|
||||
background-color: rgba(22, 116, 185, 0.5);
|
||||
}
|
||||
|
||||
button:focus {
|
||||
background-color: rgb(151, 16, 58);
|
||||
background-color: rgb(22, 116, 185);
|
||||
color: rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
[filechooser]
|
||||
cmd=yazi-wrapper.sh
|
||||
default_dir=$HOME
|
||||
; Uncomment to skip creating destination save files with instructions in them
|
||||
; create_help_file=0
|
||||
; Uncomment and edit the line below to change the terminal emulator command
|
||||
; env=TERMCMD=foot
|
||||
|
||||
; Mode must be one of 'suggested', 'default', or 'last'.
|
||||
open_mode=suggested
|
||||
save_mode=suggested
|
||||
@@ -0,0 +1,2 @@
|
||||
[preferred]
|
||||
org.freedesktop.impl.portal.FileChooser=termfilechooser
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 yazi-rs
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,21 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-present Dracula Theme
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,36 +0,0 @@
|
||||
<div align="center">
|
||||
<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
|
||||
</div>
|
||||
|
||||
<h3 align="center">
|
||||
Dracula Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
|
||||
</h3>
|
||||
|
||||
## 👀 Preview
|
||||
|
||||
<img src="preview.png" width="600" />
|
||||
|
||||
## 🎨 Installation
|
||||
|
||||
```sh
|
||||
ya pack -a yazi-rs/flavors:dracula
|
||||
```
|
||||
|
||||
## ⚙️ Usage
|
||||
|
||||
Set the content of your `theme.toml` to enable it as your _dark_ flavor:
|
||||
|
||||
```toml
|
||||
[flavor]
|
||||
dark = "dracula"
|
||||
```
|
||||
|
||||
Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
|
||||
|
||||
See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
|
||||
|
||||
## 📜 License
|
||||
|
||||
The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
|
||||
|
||||
Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
|
||||
@@ -1,170 +0,0 @@
|
||||
# vim:fileencoding=utf-8:foldmethod=marker
|
||||
|
||||
# : Manager {{{
|
||||
|
||||
[manager]
|
||||
cwd = { fg = "#8be9fd" }
|
||||
|
||||
# Hovered
|
||||
hovered = { reversed = true }
|
||||
preview_hovered = { underline = true }
|
||||
|
||||
# Find
|
||||
find_keyword = { fg = "#f1fa8c", bold = true, italic = true, underline = true }
|
||||
find_position = { fg = "#ff79c6", bg = "reset", bold = true, italic = true }
|
||||
|
||||
# Marker
|
||||
marker_copied = { fg = "#50fa7b", bg = "#50fa7b" }
|
||||
marker_cut = { fg = "#ff5555", bg = "#ff5555" }
|
||||
marker_marked = { fg = "#8be9fd", bg = "#8be9fd" }
|
||||
marker_selected = { fg = "#f1fa8c", bg = "#f1fa8c" }
|
||||
|
||||
# Tab
|
||||
tab_active = { reversed = true }
|
||||
tab_inactive = {}
|
||||
tab_width = 1
|
||||
|
||||
# Count
|
||||
count_copied = { fg = "#282a36", bg = "#50fa7b" }
|
||||
count_cut = { fg = "#282a36", bg = "#ff5555" }
|
||||
count_selected = { fg = "#282a36", bg = "#f1fa8c" }
|
||||
|
||||
# Border
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#7282b5" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Mode {{{
|
||||
|
||||
[mode]
|
||||
|
||||
normal_main = { fg = "#282a36", bg = "#bd93f9", bold = true }
|
||||
normal_alt = { fg = "#bd93f9", bg = "#44475a" }
|
||||
|
||||
# Select mode
|
||||
select_main = { fg = "#282a36", bg = "#8be9fd", bold = true }
|
||||
select_alt = { fg = "#8be9fd", bg = "#44475a" }
|
||||
|
||||
# Unset mode
|
||||
unset_main = { fg = "#282a36", bg = "#ffb86c", bold = true }
|
||||
unset_alt = { fg = "#ffb86c", bg = "#44475a" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Status bar {{{
|
||||
|
||||
[status]
|
||||
# Permissions
|
||||
perm_sep = { fg = "#7282b5" }
|
||||
perm_type = { fg = "#bd93f9" }
|
||||
perm_read = { fg = "#f1fa8c" }
|
||||
perm_write = { fg = "#ff5555" }
|
||||
perm_exec = { fg = "#50fa7b" }
|
||||
|
||||
# Progress
|
||||
progress_label = { fg = "#ffffff", bold = true }
|
||||
progress_normal = { fg = "#bd93f9", bg = "#63667d" }
|
||||
progress_error = { fg = "#ff5555", bg = "#63667d" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Pick {{{
|
||||
|
||||
[pick]
|
||||
border = { fg = "#bd93f9" }
|
||||
active = { fg = "#ff79c6", bold = true }
|
||||
inactive = {}
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Input {{{
|
||||
|
||||
[input]
|
||||
border = { fg = "#bd93f9" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Completion {{{
|
||||
|
||||
[cmp]
|
||||
border = { fg = "#bd93f9" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Tasks {{{
|
||||
|
||||
[tasks]
|
||||
border = { fg = "#bd93f9" }
|
||||
title = {}
|
||||
hovered = { fg = "#ff79c6", underline = true }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Which {{{
|
||||
|
||||
[which]
|
||||
mask = { bg = "#44475a" }
|
||||
cand = { fg = "#8be9fd" }
|
||||
rest = { fg = "#8998c9" }
|
||||
desc = { fg = "#ff79c6" }
|
||||
separator = " "
|
||||
separator_style = { fg = "#83869c" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Help {{{
|
||||
|
||||
[help]
|
||||
on = { fg = "#8be9fd" }
|
||||
run = { fg = "#ff79c6" }
|
||||
hovered = { reversed = true, bold = true }
|
||||
footer = { fg = "#44475a", bg = "#f8f8f2" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Notify {{{
|
||||
|
||||
[notify]
|
||||
title_info = { fg = "#50fa7b" }
|
||||
title_warn = { fg = "#f1fa8c" }
|
||||
title_error = { fg = "#ff5555" }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : File-specific styles {{{
|
||||
|
||||
[filetype]
|
||||
|
||||
rules = [
|
||||
# Images
|
||||
{ mime = "image/*", fg = "#8be9fd" },
|
||||
|
||||
# Media
|
||||
{ mime = "{audio,video}/*", fg = "#f1fa8c" },
|
||||
|
||||
# Archives
|
||||
{ mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#ff79c6" },
|
||||
|
||||
# Documents
|
||||
{ mime = "application/{pdf,doc,rtf}", fg = "#50fa7b" },
|
||||
|
||||
# Fallback
|
||||
{ name = "*", fg = "#f8f8f2" },
|
||||
{ name = "*/", fg = "#bd93f9" }
|
||||
]
|
||||
|
||||
# : }}}
|
||||
|
Before Width: | Height: | Size: 835 KiB |
@@ -1,940 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- Dracula Theme v1.4.3
|
||||
#
|
||||
# https://github.com/dracula/sublime
|
||||
#
|
||||
# Copyright 2013-present, All rights reserved
|
||||
#
|
||||
# Code licensed under the MIT license
|
||||
#
|
||||
# @author Zeno Rocha <hi@zenorocha.com>
|
||||
-->
|
||||
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Dracula</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#282a36</string>
|
||||
<key>caret</key>
|
||||
<string>#f8f8f0</string>
|
||||
<key>block_caret</key>
|
||||
<string>#999a9e</string>
|
||||
<key>foreground</key>
|
||||
<string>#f8f8f2</string>
|
||||
<key>invisibles</key>
|
||||
<string>#3B3A32</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#44475a</string>
|
||||
<key>selection</key>
|
||||
<string>#44475a</string>
|
||||
<key>findHighlight</key>
|
||||
<string>#effb7b</string>
|
||||
<key>findHighlightForeground</key>
|
||||
<string>#000000</string>
|
||||
<key>selectionBorder</key>
|
||||
<string>#222218</string>
|
||||
<key>activeGuide</key>
|
||||
<string>#9D550FB0</string>
|
||||
<key>bracketsForeground</key>
|
||||
<string>#F8F8F2A5</string>
|
||||
<key>bracketsOptions</key>
|
||||
<string>underline</string>
|
||||
<key>bracketContentsForeground</key>
|
||||
<string>#F8F8F2A5</string>
|
||||
<key>bracketContentsOptions</key>
|
||||
<string>underline</string>
|
||||
<key>tagsOptions</key>
|
||||
<string>stippled_underline</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6272a4</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f1fa8c</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>User-defined constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character, constant.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Ruby's @variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.readwrite.instance</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#ffb86c</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String interpolation</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Ruby Regexp</string>
|
||||
<key>scope</key>
|
||||
<string>source.ruby string.regexp.classic.ruby,source.ruby string.regexp.mod-r.ruby</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#ff5555</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage</string>
|
||||
<key>scope</key>
|
||||
<string>storage</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage Type Namespace</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.namespace</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage Type Class</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Class name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>underline</string>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Meta Path</string>
|
||||
<key>scope</key>
|
||||
<string>meta.path</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>underline</string>
|
||||
<key>foreground</key>
|
||||
<string>#66d9ef</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Inherited class</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.inherited-class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic underline</string>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#50fa7b</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function argument</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#ffb86c</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag attribute</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.attribute-name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#50fa7b</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#6be5fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library class/type</string>
|
||||
<key>scope</key>
|
||||
<string>support.type, support.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#66d9ef</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library variable</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Support Other Namespace</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.namespace</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#66d9ef</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
<string>invalid</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#ff79c6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
<key>foreground</key>
|
||||
<string>#F8F8F0</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
<string>invalid.deprecated</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#bd93f9</string>
|
||||
<key>foreground</key>
|
||||
<string>#F8F8F0</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON String</string>
|
||||
<key>scope</key>
|
||||
<string>meta.structure.dictionary.json string.quoted.double.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#CFCFC2</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.header</string>
|
||||
<key>scope</key>
|
||||
<string>meta.diff, meta.diff.header</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6272a4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.deleted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.deleted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.inserted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.inserted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#50fa7b</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.changed</string>
|
||||
<key>scope</key>
|
||||
<string>markup.changed</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#E6DB74</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric.line-number.find-in-files - match</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>scope</key>
|
||||
<string>entity.name.filename</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#E6DB74</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>scope</key>
|
||||
<string>message.error</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#F83333</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON Punctuation</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#EEEEEE</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON Structure</string>
|
||||
<key>scope</key>
|
||||
<string>meta.structure.dictionary.json string.quoted.double.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON String</string>
|
||||
<key>scope</key>
|
||||
<string>meta.structure.dictionary.value.json string.quoted.double.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f1fa8c</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON: 6 deep</string>
|
||||
<key>scope</key>
|
||||
<string>meta meta meta meta meta meta meta.structure.dictionary.value string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#50fa7b</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON: 5 deep</string>
|
||||
<key>scope</key>
|
||||
<string>meta meta meta meta meta meta.structure.dictionary.value string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffb86c</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON: 4 deep</string>
|
||||
<key>scope</key>
|
||||
<string>meta meta meta meta meta.structure.dictionary.value string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON: 3 deep</string>
|
||||
<key>scope</key>
|
||||
<string>meta meta meta meta.structure.dictionary.value string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON: 2 deep</string>
|
||||
<key>scope</key>
|
||||
<string>meta meta meta.structure.dictionary.value string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#50fa7b</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON: 1 deep</string>
|
||||
<key>scope</key>
|
||||
<string>meta meta.structure.dictionary.value string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffb86c</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<!-- Markdown Tweaks -->
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markup: strike</string>
|
||||
<key>scope</key>
|
||||
<string>markup.strike</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#FFB86C</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markup: bold</string>
|
||||
<key>scope</key>
|
||||
<string>markup.bold</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
<key>foreground</key>
|
||||
<string>#FFB86C</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markup: italic</string>
|
||||
<key>scope</key>
|
||||
<string>markup.italic</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#FFB86C</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: heading</string>
|
||||
<key>scope</key>
|
||||
<string>markup.heading</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8BE9FD</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: List Items Punctuation</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.list_item.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#FF79C6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: Blockquote</string>
|
||||
<key>scope</key>
|
||||
<string>markup.quote</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#6272A4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: Blockquote Punctuation</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.blockquote.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>background</key>
|
||||
<string>#6272A4</string>
|
||||
<key>foreground</key>
|
||||
<string>#6272A4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: Separator</string>
|
||||
<key>scope</key>
|
||||
<string>meta.separator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6272A4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markup: raw inline</string>
|
||||
<key>scope</key>
|
||||
<string>text.html.markdown markup.raw.inline</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#50FA7B</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markup: underline</string>
|
||||
<key>scope</key>
|
||||
<string>markup.underline</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>underline</string>
|
||||
<key>foreground</key>
|
||||
<string>#BD93F9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markup: Raw block</string>
|
||||
<key>scope</key>
|
||||
<string>markup.raw.block</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#CFCFC2</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: Raw Block fenced source</string>
|
||||
<key>scope</key>
|
||||
<string>markup.raw.block.fenced.markdown source</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#F8F8F2</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: Fenced Bode Block</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.fenced.markdown, variable.language.fenced.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#6272A4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown: Fenced Language</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language.fenced.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
<key>foreground</key>
|
||||
<string>#6272A4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation Accessor</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.accessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#FF79C6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Meta Function Return Type</string>
|
||||
<key>scope</key>
|
||||
<string>meta.function.return-type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#FF79C6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation Section Block Begin</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section.block.begin</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffffff</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation Section Block End</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section.block.end</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffffff</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation Section Embedded Begin</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section.embedded.begin</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation Section Embedded End</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section.embedded.end</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation Separator Namespace</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.separator.namespace</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable Function</string>
|
||||
<key>scope</key>
|
||||
<string>variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#50fa7b</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable Other</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffffff</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable Language</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Entity Name Module Ruby</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.module.ruby</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Entity Name Constant Ruby</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.constant.ruby</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#bd93f9</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Support Function Builtin Ruby</string>
|
||||
<key>scope</key>
|
||||
<string>support.function.builtin.ruby</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffffff</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage Type Namespace CS</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.namespace.cs</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ff79c6</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Entity Name Namespace CS</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.namespace.cs</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8be9fd</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>uuid</key>
|
||||
<string>83091B89-765E-4F0D-9275-0EC6CB084126</string>
|
||||
<key>colorSpaceName</key>
|
||||
<string>sRGB</string>
|
||||
<key>semanticClass</key>
|
||||
<string>theme.dracula</string>
|
||||
<key>author</key>
|
||||
<string>Zeno Rocha</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 - sxyazi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2022 Himanshu
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,37 +0,0 @@
|
||||
<div align="center">
|
||||
<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
|
||||
</div>
|
||||
|
||||
<h3 align="center">
|
||||
Tokyo Night Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
|
||||
</h3>
|
||||
|
||||
## 👀 Preview
|
||||
|
||||
<img src="preview.png" width="600" />
|
||||
|
||||
## 🎨 Installation
|
||||
|
||||
```bash
|
||||
# Linux/macOS
|
||||
git clone https://github.com/BennyOe/tokyo-night.yazi.git ~/.config/yazi/flavors/tokyo-night.yazi
|
||||
|
||||
# Windows
|
||||
git clone https://github.com/BennyOe/tokyo-night.yazi.git %AppData%\yazi\config\flavors\tokyo-night.yazi
|
||||
```
|
||||
|
||||
## ⚙️ Usage
|
||||
|
||||
Add the these lines to your `theme.toml` configuration file to use it:
|
||||
|
||||
|
||||
```toml
|
||||
[flavor]
|
||||
use = "tokyo-night"
|
||||
```
|
||||
|
||||
## 📜 License
|
||||
|
||||
The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
|
||||
|
||||
Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
|
||||
@@ -1,167 +0,0 @@
|
||||
# : Manager {{{
|
||||
|
||||
[manager]
|
||||
cwd = { fg = "#7aa2f7" } # Blue
|
||||
|
||||
# Hovered
|
||||
hovered = { reversed = true }
|
||||
preview_hovered = { underline = true }
|
||||
|
||||
# Find
|
||||
find_keyword = { fg = "#f7768e", bold = true, italic = true, underline = true } # Red
|
||||
find_position = { fg = "#bb9af7", bg = "reset", bold = true, italic = true } # Magenta
|
||||
|
||||
# Marker
|
||||
marker_copied = { fg = "#9ece6a", bg = "#9ece6a" } # Green
|
||||
marker_cut = { fg = "#e0af68", bg = "#f7768e" } # Red
|
||||
marker_marked = { fg = "#7aa2f7", bg = "#7dcfff" } # Cyan
|
||||
marker_selected = { fg = "#e0af68", bg = "#e0af68" } # Yellow
|
||||
|
||||
# Tab
|
||||
tab_active = { bg = "#282C34", fg = "#7aa2f7" } # Darkened background, Blue text
|
||||
tab_inactive = {}
|
||||
tab_width = 1
|
||||
|
||||
# Count
|
||||
count_copied = { fg = "#414868", bg = "#9ece6a" } # Darkened black on Green
|
||||
count_cut = { fg = "#414868", bg = "#e0af68" } # Darkened black on Yellow
|
||||
count_selected = { fg = "#414868", bg = "#7aa2f7" } # Darkened black on Blue
|
||||
|
||||
# Border
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#414868" } # Darkened black
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Status {{{
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
separator_style = { fg = "#7aa2f7", bg = "#414868" } # Blue on Darkened black
|
||||
|
||||
# Mode
|
||||
mode_normal = { fg = "#414868", bg = "#7aa2f7", bold = true } # Darkened black on Blue
|
||||
mode_select = { fg = "#414868", bg = "#9ece6a", bold = true } # Darkened black on Green
|
||||
mode_unset = { fg = "#414868", bg = "#bb9af7", bold = true } # Darkened black on Magenta
|
||||
|
||||
# Progress
|
||||
progress_label = { fg = "#a9b1d6", bold = true } # White
|
||||
progress_normal = { fg = "#7aa2f7", bg = "#414868" } # Blue on Darkened black
|
||||
progress_error = { fg = "#f7768e", bg = "#414868" } # Red on Darkened black
|
||||
|
||||
# Permissions
|
||||
permissions_t = { fg = "#7aa2f7" } # Blue
|
||||
permissions_r = { fg = "#9ece6a" } # Green
|
||||
permissions_w = { fg = "#e0af68" } # Yellow
|
||||
permissions_x = { fg = "#f7768e" } # Red
|
||||
permissions_s = { fg = "#bb9af7" } # Magenta
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Select {{{
|
||||
|
||||
[select]
|
||||
border = { fg = "#7aa2f7" } # Blue
|
||||
active = { fg = "#bb9af7", bold = true } # Magenta
|
||||
inactive = {}
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Input {{{
|
||||
|
||||
[input]
|
||||
border = { fg = "#7aa2f7" } # Blue
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Completion {{{
|
||||
|
||||
[completion]
|
||||
border = { fg = "#7aa2f7" } # Blue
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Tasks {{{
|
||||
|
||||
[tasks]
|
||||
border = { fg = "#7aa2f7" } # Blue
|
||||
title = {}
|
||||
hovered = { fg = "#bb9af7", underline = true } # Magenta
|
||||
|
||||
# : }}}
|
||||
# : Which {{{
|
||||
|
||||
[which]
|
||||
mask = { bg = "#414868" } # Darkened black
|
||||
cand = { fg = "#9ece6a" } # Green
|
||||
rest = { fg = "#a9b1d6" } # White
|
||||
desc = { fg = "#bb9af7" } # Magenta
|
||||
separator = " "
|
||||
separator_style = { fg = "#626880" } # Darkened gray
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Help {{{
|
||||
|
||||
[help]
|
||||
on = { fg = "#9ece6a" } # Green
|
||||
run = { fg = "#bb9af7" } # Magenta
|
||||
hovered = { reversed = true, bold = true }
|
||||
footer = { fg = "#a9b1d6", bg = "#c6d0f5" } # White on Light gray
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : Notify {{{
|
||||
|
||||
[notify]
|
||||
title_info = { fg = "#9ece6a" } # Green
|
||||
title_warn = { fg = "#f7768e" } # Red
|
||||
title_error = { fg = "#e0af68" } # Yellow
|
||||
|
||||
# : }}}
|
||||
|
||||
|
||||
# : File-specific styles {{{
|
||||
|
||||
[filetype]
|
||||
|
||||
rules = [
|
||||
# Images
|
||||
{ mime = "image/*", fg = "#e0af68" }, # Yellow
|
||||
|
||||
# Media
|
||||
{ mime = "video/*", fg = "#f7768e" }, # Red
|
||||
{ mime = "audio/*", fg = "#f7768e" }, # Red
|
||||
|
||||
# Archives
|
||||
{ mime = "application/zip", fg = "#bb9af7" }, # Magenta
|
||||
{ mime = "application/x-tar", fg = "#bb9af7" }, # Magenta
|
||||
{ mime = "application/x-bzip*", fg = "#bb9af7" }, # Magenta
|
||||
{ mime = "application/x-bzip2", fg = "#bb9af7" }, # Magenta
|
||||
{ mime = "application/x-7z-compressed", fg = "#bb9af7" }, # Magenta
|
||||
{ mime = "application/x-rar", fg = "#bb9af7" }, # Magenta
|
||||
{ mime = "application/x-xz", fg = "#bb9af7" }, # Magenta
|
||||
|
||||
# Documents
|
||||
{ mime = "application/doc", fg = "#9ece6a" }, # Green
|
||||
{ mime = "application/pdf", fg = "#9ece6a" }, # Green
|
||||
{ mime = "application/rtf", fg = "#9ece6a" }, # Green
|
||||
{ mime = "application/vnd.*", fg = "#9ece6a" }, # Green
|
||||
|
||||
# Fallback
|
||||
{ name = "*", fg = "#c6d0f5" }, # Light gray
|
||||
{ name = "*/", fg = "#7aa2f7" } # Blue
|
||||
]
|
||||
|
||||
# : }}}
|
||||
|
Before Width: | Height: | Size: 712 KiB |
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Alexander Bays
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Alexander Bays
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,13 +0,0 @@
|
||||
# vscode-dark-modern
|
||||
|
||||
[themes/](../) · [vscode-dark-plus](../vscode-dark-plus.yazi/) · [vscode-light-modern](../vscode-light-modern.yazi/) · [vscode-light-plus](../vscode-light-plus.yazi/)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
@@ -1,186 +0,0 @@
|
||||
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
|
||||
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
|
||||
"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
|
||||
|
||||
# vscode-dark-modern
|
||||
# https://github.com/956MB/vscode.yazi/blob/main/themes/vscode-dark-modern/
|
||||
#
|
||||
# A theme inspired by Visual Studio Code's Dark Modern theme.
|
||||
|
||||
[colors]
|
||||
background = "#1F1F1F"
|
||||
foreground = "#D4D4D4"
|
||||
selection = "#264F78"
|
||||
cursor = "#AEAFAD"
|
||||
black = "#000000"
|
||||
red = "#F44747"
|
||||
green = "#6A9955"
|
||||
yellow = "#D7BA7D"
|
||||
blue = "#569CD6"
|
||||
magenta = "#C586C0"
|
||||
cyan = "#4EC9B0"
|
||||
white = "#D4D4D4"
|
||||
bright_black = "#808080"
|
||||
bright_red = "#F44747"
|
||||
bright_green = "#6A9955"
|
||||
bright_yellow = "#DCDCAA"
|
||||
bright_blue = "#569CD6"
|
||||
bright_magenta = "#C586C0"
|
||||
bright_cyan = "#4EC9B0"
|
||||
bright_white = "#FFFFFF"
|
||||
|
||||
[manager]
|
||||
cwd = { fg = "cyan" }
|
||||
# Hovered
|
||||
hovered = { fg = "#D4D4D4", bg = "#264F78" }
|
||||
preview_hovered = { underline = true }
|
||||
# Find
|
||||
find_keyword = { fg = "#DCDCAA", bold = true, italic = true, underline = true }
|
||||
find_position = { fg = "#C586C0", bg = "#1F1F1F", bold = true, italic = true }
|
||||
# Marker
|
||||
marker_copied = { fg = "#73C991", bg = "#73C991" }
|
||||
marker_cut = { fg = "#F44747", bg = "#F44747" }
|
||||
marker_marked = { fg = "#4EC9B0", bg = "#4EC9B0" }
|
||||
marker_selected = { fg = "#D7BA7D", bg = "#D7BA7D" }
|
||||
# Tab
|
||||
tab_active = { fg = "#D4D4D4", bg = "#1F1F1F" }
|
||||
tab_inactive = { fg = "#D4D4D4", bg = "#2D2D2D" }
|
||||
tab_width = 1
|
||||
# Count
|
||||
count_copied = { fg = "#1F1F1F", bg = "#73C991" }
|
||||
count_cut = { fg = "#1F1F1F", bg = "#F44747" }
|
||||
count_selected = { fg = "#1F1F1F", bg = "#D7BA7D" }
|
||||
# Border
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#444444" }
|
||||
# Highlighting
|
||||
syntect_theme = "./tmtheme.xml"
|
||||
# Cursor
|
||||
cursor_symbol = "█"
|
||||
cursor = { fg = "#1F1F1F", bg = "#AEAFAD" }
|
||||
# Executable
|
||||
exe_symbol = ""
|
||||
exe = { fg = "#4EC9B0", bg = "#1F1F1F" }
|
||||
# Regular
|
||||
file_symbol = ""
|
||||
file = { }
|
||||
# Directory
|
||||
folder_symbol = ""
|
||||
folder = { fg = "#569CD6", bg = "#1F1F1F" }
|
||||
# Hidden
|
||||
hidden_symbol = ""
|
||||
hidden = { fg = "#808080" }
|
||||
# Link
|
||||
link_symbol = ""
|
||||
link = { fg = "#4EC9B0", bg = "#1F1F1F" }
|
||||
# Link (broken)
|
||||
broken_symbol = ""
|
||||
broken = { fg = "#F44747", bg = "#3A1212" }
|
||||
# Selected
|
||||
selected = { fg = "#FFFFFF", bg = "#264F78" }
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
separator_style = { fg = "#444444", bg = "#444444" }
|
||||
# Mode
|
||||
mode_normal = { fg = "#1F1F1F", bg = "#569CD6", bold = true }
|
||||
mode_select = { fg = "#1F1F1F", bg = "#FFAF00", bold = true }
|
||||
mode_unset = { fg = "#1F1F1F", bg = "#F44747", bold = true }
|
||||
# Progress
|
||||
progress_label = { bold = true }
|
||||
progress_normal = { fg = "#569CD6", bg = "#1F1F1F" }
|
||||
progress_error = { fg = "#F44747", bg = "#1F1F1F" }
|
||||
# Permissions
|
||||
permissions_t = { fg = "#6A9955" }
|
||||
permissions_r = { fg = "#D7BA7D" }
|
||||
permissions_w = { fg = "#F44747" }
|
||||
permissions_x = { fg = "#4EC9B0" }
|
||||
permissions_s = { fg = "#808080" }
|
||||
|
||||
[select]
|
||||
border = { fg = "#569CD6" }
|
||||
active = { fg = "#C586C0", bold = true }
|
||||
inactive = {}
|
||||
|
||||
[input]
|
||||
border = { fg = "#569CD6" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[completion]
|
||||
border = { fg = "#569CD6" }
|
||||
active = { bg = "#264F78" }
|
||||
inactive = {}
|
||||
# Icons
|
||||
icon_file = ""
|
||||
icon_folder = ""
|
||||
icon_command = ""
|
||||
|
||||
[tasks]
|
||||
border = { fg = "#569CD6" }
|
||||
title = {}
|
||||
hovered = { underline = true }
|
||||
|
||||
[which]
|
||||
mask = { bg = "#1F1F1F" }
|
||||
cand = { fg = "#4EC9B0" }
|
||||
rest = { fg = "#808080" }
|
||||
desc = { fg = "#C586C0" }
|
||||
separator = " "
|
||||
separator_style = { fg = "#808080" }
|
||||
|
||||
[help]
|
||||
on = { fg = "#4EC9B0" }
|
||||
run = { fg = "#C586C0" }
|
||||
desc = { fg = "#D4D4D4" }
|
||||
hovered = { bg = "#264F78", bold = true }
|
||||
footer = { fg = "#D4D4D4", bg = "#252526" }
|
||||
|
||||
[filetype]
|
||||
rules = [
|
||||
# Images
|
||||
{ mime = "image/*", fg = "#D7BA7D" },
|
||||
# Videos
|
||||
{ mime = "video/*", fg = "#C586C0" },
|
||||
# Audio
|
||||
{ mime = "audio/*", fg = "#C586C0" },
|
||||
# Archives
|
||||
{ mime = "application/zip", fg = "#F44747" },
|
||||
{ mime = "application/gzip", fg = "#F44747" },
|
||||
{ mime = "application/x-tar", fg = "#F44747" },
|
||||
{ mime = "application/x-bzip", fg = "#F44747" },
|
||||
{ mime = "application/x-bzip2", fg = "#F44747" },
|
||||
{ mime = "application/x-7z-compressed", fg = "#F44747" },
|
||||
{ mime = "application/x-rar", fg = "#F44747" },
|
||||
# Documents
|
||||
{ mime = "application/pdf", fg = "#4EC9B0" },
|
||||
{ mime = "application/msword", fg = "#4EC9B0" },
|
||||
{ mime = "application/vnd.openxmlformats-officedocument.*", fg = "#4EC9B0" },
|
||||
# Fallback
|
||||
{ name = "*", fg = "#D4D4D4" },
|
||||
{ name = "*/", fg = "#569CD6" },
|
||||
# Executable
|
||||
{ name = "*", category = "executable", fg = "#4EC9B0", bg = "#1F1F1F" },
|
||||
# Directories
|
||||
{ name = "*/", fg = "#569CD6", bg = "#1F1F1F" },
|
||||
# Hidden files
|
||||
{ name = ".*", fg = "#808080" },
|
||||
# Symlinks
|
||||
{ name = "*", category = "link", fg = "#4EC9B0", bg = "#1F1F1F" },
|
||||
# Broken symlinks
|
||||
{ name = "*", category = "broken", fg = "#F44747", bg = "#3A1212" },
|
||||
]
|
||||
|
||||
[icon]
|
||||
rules = [
|
||||
{ name = "Desktop", text = "" },
|
||||
{ name = "Documents", text = "" },
|
||||
{ name = "Downloads", text = "" },
|
||||
{ name = "Pictures", text = "" },
|
||||
{ name = "Music", text = "" },
|
||||
{ name = "Videos", text = "" },
|
||||
{ name = ".git", text = "" },
|
||||
{ name = ".config", text = "" },
|
||||
]
|
||||
|
Before Width: | Height: | Size: 455 KiB |
|
Before Width: | Height: | Size: 463 KiB |
|
Before Width: | Height: | Size: 578 KiB |
|
Before Width: | Height: | Size: 631 KiB |