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
|
## 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) │
|
// │ Theme generator (returns theme as object) │
|
||||||
// ╰───────────────────────────────────────────────╯
|
// ╰───────────────────────────────────────────────╯
|
||||||
// ───────────────────────────────────────────────────────────────────
|
// ───────────────────────────────────────────────────────────────────
|
||||||
module.exports.generateTheme = ( theme, wallpaper, lockpaper, palette ) => {
|
module.exports.generateTheme = (
|
||||||
|
theme, wallpaper, lockpaper, palette
|
||||||
|
) => {
|
||||||
return {
|
return {
|
||||||
'wallpaper-path': wallpaper,
|
'wallpaper-path': wallpaper,
|
||||||
'lockpaper-path': lockpaper,
|
'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-rgba-007': renderColourAsRGBA( palette[ 0 ], 0.07 ),
|
||||||
'colour-accent-hyprland': util.renderColourAsRGBAHex( palette[ 0 ], 0.8 ),
|
'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-1-hex': renderColourAsHex( util.getGradientColour(
|
||||||
'colour-accent-gradient-2-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 2, gradientMultipliers[ theme ] ) ),
|
palette[ 0 ], 1, 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-2-hex': renderColourAsHex( util.getGradientColour(
|
||||||
'colour-accent-gradient-5-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 5, gradientMultipliers[ theme ] ) ),
|
palette[ 0 ], 2, 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-3-hex': renderColourAsHex( util.getGradientColour(
|
||||||
'colour-accent-gradient-inverse-3-hex': renderColourAsHex( util.getGradientColour( palette[ 0 ], 1, 1 / gradientMultipliers[ theme ] ) ),
|
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 ─────────────────────────────────────────────
|
// ── Secondary accent ─────────────────────────────────────────────
|
||||||
'colour-accent-2-hex': renderColourAsHex( palette[ 1 ] ),
|
'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 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,
|
'light': 1.1,
|
||||||
'bright': 1.15,
|
'bright': 1.15,
|
||||||
'test': 0.75
|
'test': 0.75
|
||||||
}
|
};
|
||||||
const colours = {
|
const colours = {
|
||||||
foreground: {
|
'foreground': {
|
||||||
'nordic': [ 200, 220, 255 ],
|
'nordic': [
|
||||||
'deep-dark': [ 230, 230, 230 ],
|
200,
|
||||||
'material': [ 255, 255, 255 ], // TODO: Will be calculated by material theme generator
|
220,
|
||||||
'light': [ 40, 40, 40 ],
|
255
|
||||||
'bright': [ 0, 0, 0 ],
|
],
|
||||||
'test': [ 0, 0, 0 ],
|
'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': {
|
'foreground-accent': {
|
||||||
'nordic': [ 255, 255, 255 ],
|
'nordic': [
|
||||||
'deep-dark': [ 255, 255, 255 ],
|
255,
|
||||||
'material': [ 200, 200, 200 ], // TODO: Will be calculated by material theme generator
|
255,
|
||||||
'light': [ 0, 0, 0 ],
|
255
|
||||||
'bright': [ 50, 50, 50 ],
|
],
|
||||||
'test': [ 0, 0, 0 ],
|
'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: {
|
'background': {
|
||||||
'nordic': [ 10, 10, 15 ],
|
'nordic': [
|
||||||
'deep-dark': [ 20, 20, 20 ],
|
10,
|
||||||
'material': [ 30, 30, 30 ], // TODO: Will be calculated by material theme generator
|
10,
|
||||||
'light': [ 230, 230, 230 ],
|
15
|
||||||
'bright': [ 255, 255, 255 ],
|
],
|
||||||
'test': [ 255, 255, 255 ],
|
'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': {
|
'background-alternative': {
|
||||||
'nordic': [ 20, 20, 25 ],
|
'nordic': [
|
||||||
'deep-dark': [ 30, 30, 30 ],
|
20,
|
||||||
'material': [ 40, 40, 40 ], // TODO: Will be calculated by material theme generator
|
20,
|
||||||
'light': [ 210, 210, 210 ],
|
25
|
||||||
'bright': [ 230, 230, 230 ],
|
],
|
||||||
'test': [ 255, 255, 0 ] // brown
|
'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': {
|
'background-tertiary': {
|
||||||
'nordic': [ 0, 0, 0 ],
|
'nordic': [
|
||||||
'deep-dark': [ 45, 45, 45 ],
|
0,
|
||||||
'material': [ 0, 0, 0 ], // TODO: Will be calculated by material theme generator
|
0,
|
||||||
'light': [ 180, 180, 180 ],
|
0
|
||||||
'bright': [ 200, 200, 200 ],
|
],
|
||||||
'test': [ 255, 0, 255 ] // purple
|
'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: {
|
'shadow': {
|
||||||
'nordic': [ 0, 0, 2 ],
|
'nordic': [
|
||||||
'deep-dark': [ 40, 40, 40 ],
|
0,
|
||||||
'material': [ 30, 30, 30 ], // TODO: Will be calculated by material theme generator
|
0,
|
||||||
'light': [ 190, 190, 190 ],
|
2
|
||||||
'bright': [ 150, 150, 150 ],
|
],
|
||||||
'test': [ 120, 0, 0 ] // dark red
|
'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: {
|
'inactive': {
|
||||||
'nordic': [ 200, 200, 200 ],
|
'nordic': [
|
||||||
'deep-dark': [ 200, 200, 200 ],
|
200,
|
||||||
'material': [ 200, 200, 200 ], // TODO: Will be calculated by material theme generator
|
200,
|
||||||
'light': [ 65, 65, 65 ],
|
200
|
||||||
'bright': [ 60, 60, 60 ],
|
],
|
||||||
'test': [ 150, 150, 150 ]
|
'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': {
|
'inactive-background': {
|
||||||
'nordic': [ 0, 0, 0 ],
|
'nordic': [
|
||||||
'deep-dark': [ 0, 0, 0 ],
|
0,
|
||||||
'material': [ 255, 255, 255 ], // TODO: Will be calculated by material theme generator
|
0,
|
||||||
'light': [ 80, 80, 80 ],
|
0
|
||||||
'bright': [ 60, 60, 60 ],
|
],
|
||||||
'test': [ 60, 60, 60 ]
|
'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 = {
|
const fonts = {
|
||||||
'primary': {
|
'primary': {
|
||||||
'nordic': 'Comfortaa',
|
'nordic': 'Comfortaa',
|
||||||
@@ -261,20 +470,18 @@ const fonts = {
|
|||||||
'light': 'Jetbrains Mono',
|
'light': 'Jetbrains Mono',
|
||||||
'bright': 'Jetbrains Mono',
|
'bright': 'Jetbrains Mono',
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const iconTheme = {
|
const iconTheme = {
|
||||||
'nordic': 'Candy',
|
'nordic': 'Candy',
|
||||||
'deep-dark': 'Candy',
|
'deep-dark': 'Candy',
|
||||||
'material': 'Candy',
|
'material': 'Candy',
|
||||||
'light': 'Candy',
|
'light': 'Candy',
|
||||||
'bright': 'Candy'
|
'bright': 'Candy'
|
||||||
}
|
};
|
||||||
|
|
||||||
const yaziThemes = {
|
const yaziThemes = {
|
||||||
'nordic': 'tokyo-night',
|
'nordic': 'tokyo-night',
|
||||||
'deep-dark': 'vscode-dark-modern',
|
'deep-dark': 'dracula',
|
||||||
'material': 'dracula',
|
'material': 'dracula',
|
||||||
'light': 'vscode-light-modern',
|
'light': 'catppuccin-latte',
|
||||||
'bright': 'vscode-light-modern',
|
'bright': 'catppuccin-latte',
|
||||||
}
|
};
|
||||||
@@ -10,7 +10,7 @@ const inquirer = require( 'inquirer' ).default;
|
|||||||
const build = ( wallpaper, lockpaper, theme ) => {
|
const build = ( wallpaper, lockpaper, theme ) => {
|
||||||
console.log( '\n=> Extracting colours' );
|
console.log( '\n=> Extracting colours' );
|
||||||
// Extract colour palette from chosen wallpaper using Color-Thief
|
// Extract colour palette from chosen wallpaper using Color-Thief
|
||||||
colorThief.getPalette( wallpaper ).then( palette => {
|
colorThief.getPalette( wallpaper, 20 ).then( palette => {
|
||||||
palette = util.removeUselessColours( palette );
|
palette = util.removeUselessColours( palette );
|
||||||
// Define view options (for rendering with mustache)
|
// Define view options (for rendering with mustache)
|
||||||
if ( theme === 'test' ) {
|
if ( theme === 'test' ) {
|
||||||
@@ -30,7 +30,7 @@ const build = ( wallpaper, lockpaper, theme ) => {
|
|||||||
name: 'confirm-proceed-build',
|
name: 'confirm-proceed-build',
|
||||||
message: 'Okay to proceed with these colours?'
|
message: 'Okay to proceed with these colours?'
|
||||||
} ] ).then( answer => {
|
} ] ).then( answer => {
|
||||||
if ( answer ) proceedWithBuild( wallpaper, lockpaper, theme, palette );
|
if ( answer['confirm-proceed-build'] ) proceedWithBuild( wallpaper, lockpaper, theme, palette );
|
||||||
else {
|
else {
|
||||||
// Have the user pick any other of the extracted colours instead
|
// Have the user pick any other of the extracted colours instead
|
||||||
let counter = -1;
|
let counter = -1;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
const convert = require( 'color-convert' );
|
const convert = require( 'color-convert' );
|
||||||
|
|
||||||
const fs = require( 'fs' );
|
const fs = require( 'fs' );
|
||||||
|
|
||||||
const path = require( 'path' );
|
const path = require( 'path' );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8,15 +10,21 @@ const path = require( 'path' );
|
|||||||
* @param {string} extension The file extension to look for
|
* @param {string} extension The file extension to look for
|
||||||
* @returns {string[]} returns a list of html files with their full path
|
* @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 ls = fs.readdirSync( dir );
|
||||||
const fileList = [];
|
const fileList = [];
|
||||||
|
|
||||||
for ( let file in ls ) {
|
for ( let file in ls ) {
|
||||||
if ( fs.statSync( path.join( dir, ls[ file ] ) ).isDirectory() ) {
|
if ( fs.statSync( path.join( dir, ls[ file ] ) ).isDirectory() ) {
|
||||||
// Filter ignored directories
|
// Filter ignored directories
|
||||||
if ( ignoreList === undefined || !ignoreList.includes( ls[ file ] ) ) {
|
if ( ignoreList === undefined || !ignoreList.includes( ls[ file ] ) ) {
|
||||||
const newFiles = treeWalker( path.join( dir, ls[ file ] ), extension, ignoreList );
|
const newFiles = treeWalker(
|
||||||
for (let file = 0; file < newFiles.length; file++) {
|
path.join( dir, ls[ file ] ), extension, ignoreList
|
||||||
|
);
|
||||||
|
|
||||||
|
for ( let file = 0; file < newFiles.length; file++ ) {
|
||||||
fileList.push( newFiles[ file ] );
|
fileList.push( newFiles[ file ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,56 +36,75 @@ const treeWalker = ( dir, extension, ignoreList ) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return fileList;
|
return fileList;
|
||||||
}
|
};
|
||||||
|
|
||||||
const renderColourAsHex = ( colour ) => {
|
const renderColourAsHex = colour => {
|
||||||
return '#' + convert.default.rgb.hex( colour[ 0 ], colour[ 1 ], colour[ 2 ] );
|
return '#' + convert.default.rgb.hex(
|
||||||
}
|
colour[ 0 ], colour[ 1 ], colour[ 2 ]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const renderColourAsRGB = ( colour ) => {
|
const renderColourAsRGB = colour => {
|
||||||
return `rgb(${ colour[ 0 ] }, ${ colour[ 1 ] }, ${ colour[ 2 ] })`
|
return `rgb(${ colour[ 0 ] }, ${ colour[ 1 ] }, ${ colour[ 2 ] })`;
|
||||||
}
|
};
|
||||||
|
|
||||||
const renderColourAsRGBA = ( colour, ambiance ) => {
|
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 renderColourAsRGBHex = colour => {
|
||||||
const hexCol = convert.default.rgb.hex( colour[ 0 ], colour[ 1 ], colour[ 2 ] );
|
const hexCol = convert.default.rgb.hex(
|
||||||
return `rgb(${hexCol})`.toLowerCase();
|
colour[ 0 ], colour[ 1 ], colour[ 2 ]
|
||||||
}
|
);
|
||||||
|
|
||||||
function decimalToHex(decimal) {
|
return `rgb(${ hexCol })`.toLowerCase();
|
||||||
const hexValue = Math.round(decimal * 255);
|
};
|
||||||
return hexValue.toString(16).padStart(2, '0');
|
|
||||||
|
function decimalToHex ( decimal ) {
|
||||||
|
const hexValue = Math.round( decimal * 255 );
|
||||||
|
|
||||||
|
return hexValue.toString( 16 ).padStart( 2, '0' );
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderColourAsRGBAHex = ( colour, ambiance ) => {
|
const renderColourAsRGBAHex = ( colour, ambiance ) => {
|
||||||
const hexCol = convert.default.rgb.hex( colour[ 0 ], colour[ 1 ], colour[ 2 ] );
|
const hexCol = convert.default.rgb.hex(
|
||||||
return `rgba(${hexCol}${decimalToHex(ambiance)})`.toLowerCase();
|
colour[ 0 ], colour[ 1 ], colour[ 2 ]
|
||||||
}
|
);
|
||||||
|
|
||||||
const removeUselessColours = ( palette ) => {
|
return `rgba(${ hexCol }${ decimalToHex( ambiance ) })`.toLowerCase();
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeUselessColours = palette => {
|
||||||
const p = [];
|
const p = [];
|
||||||
|
|
||||||
for ( let i = 0; i < palette.length; i++ ) {
|
for ( let i = 0; i < palette.length; i++ ) {
|
||||||
|
const el = palette[ i ];
|
||||||
const luminance = calculateLuminance( palette[ i ] );
|
const luminance = calculateLuminance( palette[ i ] );
|
||||||
if ( luminance < 215 && luminance > 40 ) {
|
|
||||||
|
if ( luminance < 210 && luminance > 40 ) {
|
||||||
p.push( palette[ i ] );
|
p.push( palette[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for ( let j = 0; j < el.length; j++ ) {
|
||||||
|
if ( el[j] > 70 ) {
|
||||||
|
p.push( palette[ i ] );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
};
|
||||||
|
|
||||||
const calculateLuminance = ( colour ) => {
|
const calculateLuminance = colour => {
|
||||||
return colour[ 0 ] + colour[ 1 ] + colour[ 2 ] / 3;
|
return colour[ 0 ] + colour[ 1 ] + colour[ 2 ] / 3;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Replace the colours with variable names
|
* Replace the colours with variable names
|
||||||
*/
|
*/
|
||||||
const replacements = {
|
const replacements = {
|
||||||
'#0f1011': '@bg',
|
'#0f1011': '@bg',
|
||||||
'rgba(9, 9, 10, 0.9)': '@bg_rgba_07',
|
'rgba(9, 9, 10, 0.9)': '@bg_rgba_07',
|
||||||
'rgba(26, 28, 30, 0.3)': '@bg_rgba_05',
|
'rgba(26, 28, 30, 0.3)': '@bg_rgba_05',
|
||||||
@@ -129,33 +156,54 @@ const replacements = {
|
|||||||
'rgba(158, 158, 158, 0.2)': '@fg_rgba_02',
|
'rgba(158, 158, 158, 0.2)': '@fg_rgba_02',
|
||||||
'rgba(158, 158, 158, 0.1168)': '@fg_rgba_01'
|
'rgba(158, 158, 158, 0.1168)': '@fg_rgba_01'
|
||||||
};
|
};
|
||||||
const themePreProcessor = ( file, replacement, out ) => {
|
|
||||||
|
const themePreProcessor = (
|
||||||
|
file, replacement, out
|
||||||
|
) => {
|
||||||
const colours = Object.keys( replacements );
|
const colours = Object.keys( replacements );
|
||||||
|
|
||||||
let data = '' + fs.readFileSync( file );
|
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];
|
const colour = colours[index];
|
||||||
data = data.replaceAll(colour, replacements[ colour ]);
|
|
||||||
|
data = data.replaceAll( colour, replacements[ colour ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
const outPath = file.replace( replacement, out );
|
const outPath = file.replace( replacement, out );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fs.mkdirSync( path.dirname( outPath ), {
|
fs.mkdirSync( path.dirname( outPath ), {
|
||||||
recursive: true,
|
'recursive': true,
|
||||||
} );
|
} );
|
||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
console.error( e );
|
console.error( e );
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.writeFileSync( outPath, data );
|
fs.writeFileSync( outPath, data );
|
||||||
}
|
};
|
||||||
|
|
||||||
const getGradientColour = ( colour, index, multiplier ) => {
|
const getGradientColour = (
|
||||||
|
colour, index, multiplier
|
||||||
|
) => {
|
||||||
if ( index === 0 ) {
|
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 = {
|
module.exports = {
|
||||||
treeWalker,
|
treeWalker,
|
||||||
@@ -167,4 +215,4 @@ module.exports = {
|
|||||||
themePreProcessor,
|
themePreProcessor,
|
||||||
getGradientColour,
|
getGradientColour,
|
||||||
removeUselessColours
|
removeUselessColours
|
||||||
}
|
};
|
||||||
@@ -1,29 +1,37 @@
|
|||||||
const fs = require( 'fs' );
|
const fs = require( 'fs' );
|
||||||
|
|
||||||
const path = require( 'path' );
|
const path = require( 'path' );
|
||||||
|
|
||||||
const data = '' + fs.readFileSync( '/usr/share/themes/Material-Black-Blueberry/gtk-4.0/gtk.css' );
|
const data = '' + fs.readFileSync( '/usr/share/themes/Material-Black-Blueberry/gtk-4.0/gtk.css' );
|
||||||
|
|
||||||
let lineNumber = 1;
|
let lineNumber = 1;
|
||||||
|
|
||||||
const indexer = {};
|
const indexer = {};
|
||||||
for (let i = 0; i < data.length; i++) {
|
|
||||||
|
for ( let i = 0; i < data.length; i++ ) {
|
||||||
const char = data[i];
|
const char = data[i];
|
||||||
|
|
||||||
if ( char === '\n' ) {
|
if ( char === '\n' ) {
|
||||||
lineNumber++;
|
lineNumber++;
|
||||||
} else if ( char === '#' ) {
|
} else if ( char === '#' ) {
|
||||||
const extract = data.substring( i );
|
const extract = data.substring( i );
|
||||||
const col = extract.slice( 0, extract.indexOf( '\n' ) );
|
const col = extract.slice( 0, extract.indexOf( '\n' ) );
|
||||||
|
|
||||||
if ( !indexer[ col ] ) {
|
if ( !indexer[ col ] ) {
|
||||||
indexer[ col ] = [];
|
indexer[ col ] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
indexer[ col ].push( lineNumber );
|
indexer[ col ].push( lineNumber );
|
||||||
} else if ( char === 'r' ) {
|
} else if ( char === 'r' ) {
|
||||||
const extract = data.substring( i );
|
const extract = data.substring( i );
|
||||||
|
|
||||||
if ( extract.slice( 0, 3 ) === 'rgb' ) {
|
if ( extract.slice( 0, 3 ) === 'rgb' ) {
|
||||||
const col = extract.slice( 0, extract.indexOf( '\n' ) );
|
const col = extract.slice( 0, extract.indexOf( '\n' ) );
|
||||||
|
|
||||||
if ( !indexer[ col ] ) {
|
if ( !indexer[ col ] ) {
|
||||||
indexer[ col ] = [];
|
indexer[ col ] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
indexer[ col ].push( lineNumber );
|
indexer[ col ].push( lineNumber );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,7 +40,8 @@ for (let i = 0; i < data.length; i++) {
|
|||||||
|
|
||||||
// Output
|
// Output
|
||||||
const keys = Object.keys( indexer );
|
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];
|
const element = keys[i];
|
||||||
|
|
||||||
if ( element.length <= 25 ) {
|
if ( element.length <= 25 ) {
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"gen": {
|
|
||||||
"overrides": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +1,31 @@
|
|||||||
import { App } from "astal/gtk4"
|
import {
|
||||||
import style from "./style.scss"
|
App
|
||||||
import Bar from "./components/bar/Bar";
|
} from 'astal/gtk4';
|
||||||
import AstalHyprland from "gi://AstalHyprland?version=0.1";
|
import AstalHyprland from 'gi://AstalHyprland?version=0.1';
|
||||||
import { hyprToGdk } from "./util/hyprland";
|
import Bar from './components/bar/Bar';
|
||||||
import Brightness from "./util/brightness";
|
import Brightness from './util/brightness';
|
||||||
|
import {
|
||||||
|
hyprToGdk
|
||||||
|
} from './util/hyprland';
|
||||||
|
import style from './style.scss';
|
||||||
|
|
||||||
App.start({
|
App.start( {
|
||||||
instanceName: "runner",
|
'instanceName': 'runner',
|
||||||
css: style,
|
'css': style,
|
||||||
main() {
|
main () {
|
||||||
const hypr = AstalHyprland.get_default();
|
const hypr = AstalHyprland.get_default();
|
||||||
const bars = new Map<number, string>();
|
const bars = new Map<number, string>();
|
||||||
|
|
||||||
const barCreator = ( monitor: AstalHyprland.Monitor ) => {
|
const barCreator = ( monitor: AstalHyprland.Monitor ) => {
|
||||||
const gdkMonitor = hyprToGdk( monitor );
|
const gdkMonitor = hyprToGdk( monitor );
|
||||||
|
|
||||||
if ( gdkMonitor ) {
|
if ( gdkMonitor ) {
|
||||||
print( 'Bar added for screen ' + monitor.get_id() );
|
print( 'Bar added for screen ' + monitor.get_id() );
|
||||||
bars.set( monitor.get_id(), Bar.BarLauncher( gdkMonitor ) );
|
bars.set( monitor.get_id(), Bar.BarLauncher( gdkMonitor ) );
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
for (const monitor of hypr.monitors) {
|
for ( const monitor of hypr.monitors ) {
|
||||||
barCreator( monitor );
|
barCreator( monitor );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,14 +35,17 @@ App.start({
|
|||||||
|
|
||||||
hypr.connect( 'monitor-removed', ( _, monitor ) => {
|
hypr.connect( 'monitor-removed', ( _, monitor ) => {
|
||||||
const windowName = bars.get( monitor );
|
const windowName = bars.get( monitor );
|
||||||
|
|
||||||
if ( windowName ) {
|
if ( windowName ) {
|
||||||
const win = App.get_window( windowName );
|
const win = App.get_window( windowName );
|
||||||
|
|
||||||
if ( win ) {
|
if ( win ) {
|
||||||
App.toggle_window( windowName );
|
App.toggle_window( windowName );
|
||||||
win.set_child( null );
|
win.set_child( null );
|
||||||
App.remove_window( win );
|
App.remove_window( win );
|
||||||
print( 'Bar removed for screen', monitor );
|
print( 'Bar removed for screen', monitor );
|
||||||
}
|
}
|
||||||
|
|
||||||
bars.delete( monitor );
|
bars.delete( monitor );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
@@ -49,7 +57,7 @@ App.start({
|
|||||||
// }
|
// }
|
||||||
// Launcher();
|
// Launcher();
|
||||||
},
|
},
|
||||||
requestHandler(request, res) {
|
requestHandler ( request, res ) {
|
||||||
const args = request.trimStart().split( ' ' );
|
const args = request.trimStart().split( ' ' );
|
||||||
|
|
||||||
if ( args[ 0 ] === 'notifier' ) {
|
if ( args[ 0 ] === 'notifier' ) {
|
||||||
@@ -60,6 +68,7 @@ App.start({
|
|||||||
} else if ( args[ 0 ] === 'brightness' ) {
|
} else if ( args[ 0 ] === 'brightness' ) {
|
||||||
try {
|
try {
|
||||||
const brightness = Brightness.get_default();
|
const brightness = Brightness.get_default();
|
||||||
|
|
||||||
if ( brightness.screenAvailable ) {
|
if ( brightness.screenAvailable ) {
|
||||||
if ( args[ 1 ] === 'increase' ) {
|
if ( args[ 1 ] === 'increase' ) {
|
||||||
brightness.screen += args.length > 1 ? parseInt( args[ 2 ] ) / 100 : 1;
|
brightness.screen += args.length > 1 ? parseInt( args[ 2 ] ) / 100 : 1;
|
||||||
@@ -70,19 +79,27 @@ App.start({
|
|||||||
brightness.screen = parseInt( args[ 2 ] ) / 100;
|
brightness.screen = parseInt( args[ 2 ] ) / 100;
|
||||||
} else {
|
} else {
|
||||||
res( 'Argument <brightness> unspecified' );
|
res( 'Argument <brightness> unspecified' );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res( 'Unknown command ' + args[ 1 ] );
|
res( 'Unknown command ' + args[ 1 ] );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
res( 'Ok' );
|
res( 'Ok' );
|
||||||
} else {
|
} else {
|
||||||
res( 'No controllable screen available' );
|
res( 'No controllable screen available' );
|
||||||
}
|
}
|
||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
|
print( e );
|
||||||
res( 'Error running brightness change' );
|
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' ) {
|
// } else if ( args[ 0 ] === 'launcher' ) {
|
||||||
// if ( args[ 1 ] === 'show' ) {
|
// if ( args[ 1 ] === 'show' ) {
|
||||||
@@ -99,5 +116,4 @@ App.start({
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
})
|
} );
|
||||||
|
|
||||||
@@ -1,44 +1,58 @@
|
|||||||
import { Gtk } from "astal/gtk4";
|
import Audio from './modules/Audio/Audio';
|
||||||
import Power from "./modules/Power";
|
import {
|
||||||
import Audio from "./modules/Audio/Audio";
|
BatteryBox
|
||||||
import Bluetooth from "./modules/Bluetooth/Bluetooth";
|
} from './modules/Battery';
|
||||||
import Brightness from "./modules/Brightness/Brightness";
|
import Bluetooth from './modules/Bluetooth/Bluetooth';
|
||||||
import Player from "./modules/Player/Player";
|
import Brightness from './modules/Brightness/Brightness';
|
||||||
import { BatteryBox } from "./modules/Battery";
|
import {
|
||||||
import { exec } from "astal";
|
Gtk
|
||||||
import Network from "./modules/Networking/Network";
|
} 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 QuickActions = () => {
|
||||||
const popover = new Gtk.Popover({ cssClasses: ["quick-actions-wrapper"] });
|
const popover = new Gtk.Popover( {
|
||||||
popover.set_child(renderQuickActions());
|
'cssClasses': [ 'quick-actions-wrapper' ]
|
||||||
|
} );
|
||||||
|
|
||||||
|
popover.set_child( renderQuickActions() );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderQuickActions = () => {
|
const renderQuickActions = () => {
|
||||||
const user = exec("/bin/sh -c whoami");
|
const user = exec( '/bin/sh -c whoami' );
|
||||||
const profile = exec("/bin/fish -c get-profile-picture");
|
const profile = exec( '/bin/fish -c get-profile-picture' );
|
||||||
const cwd = exec("pwd");
|
const cwd = exec( 'pwd' );
|
||||||
const um = Power.UserMenu();
|
const um = Power.UserMenu();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box visible cssClasses={["quick-actions", "popover-box"]} vertical>
|
<box visible cssClasses={[
|
||||||
|
'quick-actions',
|
||||||
|
'popover-box'
|
||||||
|
]} vertical>
|
||||||
<centerbox
|
<centerbox
|
||||||
startWidget={
|
startWidget={
|
||||||
<button
|
<button
|
||||||
onClicked={() => um.popup()}
|
onClicked={() => um.popup()}
|
||||||
cssClasses={["stealthy-button"]}
|
cssClasses={[ 'stealthy-button' ]}
|
||||||
child={
|
child={
|
||||||
<box>
|
<box>
|
||||||
{um}
|
{um}
|
||||||
<Gtk.Frame
|
<Gtk.Frame
|
||||||
cssClasses={["avatar-icon"]}
|
cssClasses={[ 'avatar-icon' ]}
|
||||||
child={
|
child={
|
||||||
<image
|
<image
|
||||||
file={
|
file={
|
||||||
profile !== ""
|
profile !== ''
|
||||||
? profile
|
? profile
|
||||||
: cwd +
|
: cwd
|
||||||
"/no-avatar-icon.jpg"
|
+ '/no-avatar-icon.jpg'
|
||||||
}
|
}
|
||||||
></image>
|
></image>
|
||||||
}
|
}
|
||||||
@@ -53,6 +67,7 @@ const renderQuickActions = () => {
|
|||||||
hexpand={false}
|
hexpand={false}
|
||||||
>
|
>
|
||||||
<BatteryBox></BatteryBox>
|
<BatteryBox></BatteryBox>
|
||||||
|
<SysTray.SystemTray></SysTray.SystemTray>
|
||||||
<Power.Power></Power.Power>
|
<Power.Power></Power.Power>
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { bind, Binding } from "astal";
|
import { bind } from "astal";
|
||||||
import { Gtk } from "astal/gtk4";
|
import { Gtk } from "astal/gtk4";
|
||||||
import AstalWp from "gi://AstalWp";
|
import AstalWp from "gi://AstalWp";
|
||||||
|
|
||||||
@@ -13,8 +13,8 @@ const AudioModule = () => {
|
|||||||
wp.defaultMicrophone.set_volume(volume / 100);
|
wp.defaultMicrophone.set_volume(volume / 100);
|
||||||
};
|
};
|
||||||
|
|
||||||
const speakerSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SPEAKER);
|
const speakerSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SINK);
|
||||||
const micSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_MICROPHONE);
|
const micSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SOURCE);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box cssClasses={["audio-box"]} vertical>
|
<box cssClasses={["audio-box"]} vertical>
|
||||||
@@ -107,12 +107,18 @@ const AudioModule = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const SinkPicker = (type: AstalWp.MediaClass) => {
|
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 (
|
return (
|
||||||
<box vertical>
|
<box vertical>
|
||||||
<label
|
<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' ]}
|
cssClasses={[ 'title-2' ]}
|
||||||
></label>
|
></label>
|
||||||
<Gtk.Separator marginBottom={5} marginTop={3}></Gtk.Separator>
|
<Gtk.Separator marginBottom={5} marginTop={3}></Gtk.Separator>
|
||||||
@@ -128,11 +134,11 @@ const SinkPicker = (type: AstalWp.MediaClass) => {
|
|||||||
if (
|
if (
|
||||||
id ===
|
id ===
|
||||||
(type ===
|
(type ===
|
||||||
AstalWp.MediaClass.AUDIO_SPEAKER
|
AstalWp.MediaClass.AUDIO_SINK
|
||||||
? wp.defaultSpeaker.id
|
? wp.defaultSpeaker.id
|
||||||
: type ===
|
: type ===
|
||||||
AstalWp.MediaClass
|
AstalWp.MediaClass
|
||||||
.AUDIO_MICROPHONE
|
.AUDIO_SOURCE
|
||||||
? wp.defaultMicrophone.id
|
? 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"]}
|
cssClasses={["battery-time"]}
|
||||||
visible={bind(battery, "charging").as(c => !c)}
|
visible={bind(battery, "charging").as(c => !c)}
|
||||||
label={bind(battery, "timeToEmpty").as(t => `(${toTime(t)})`)}
|
label={bind(battery, "timeToEmpty").as(t => `(${toTime(t)})`)}
|
||||||
|
tooltipText={bind(battery, 'energyRate').as(er => `Time to empty. Power usage: ${batteryEnergy(er)}`)}
|
||||||
/>
|
/>
|
||||||
<label
|
<label
|
||||||
cssClasses={["battery-time"]}
|
cssClasses={["battery-time"]}
|
||||||
visible={bind(battery, "charging")}
|
visible={bind(battery, "charging")}
|
||||||
label={bind(battery, "timeToFull").as(t => `(${toTime(t)})`)}
|
label={bind(battery, "timeToFull").as(t => `(${toTime(t)})`)}
|
||||||
|
tooltipText={bind(battery, 'energyRate').as(er => `Time to full. Charge rate: ${batteryEnergy(er)}`)}
|
||||||
/>
|
/>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const MINUTE = 60;
|
||||||
|
const HOUR = MINUTE * 60;
|
||||||
const toTime = (time: number) => {
|
const toTime = (time: number) => {
|
||||||
const MINUTE = 60;
|
if (!time) return "Waiting on BIOS"
|
||||||
const HOUR = MINUTE * 60;
|
if (time > 24 * HOUR) return "24h+";
|
||||||
|
|
||||||
if (time > 24 * HOUR) return "";
|
|
||||||
|
|
||||||
const hours = Math.round(time / HOUR);
|
const hours = Math.round(time / HOUR);
|
||||||
const minutes = Math.round((time - hours * HOUR) / MINUTE);
|
const minutes = Math.round((time - hours * HOUR) / MINUTE);
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import Brightness from "../../../../util/brightness";
|
|||||||
const brightness = Brightness.get_default();
|
const brightness = Brightness.get_default();
|
||||||
|
|
||||||
const BrightnessModule = () => {
|
const BrightnessModule = () => {
|
||||||
print( brightness.screen * 100 );
|
|
||||||
const setBrightness = (value: number) => {
|
const setBrightness = (value: number) => {
|
||||||
brightness.screen = value;
|
brightness.screen = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box visible={bind(brightness, 'screenAvailable')}>
|
<box visible={bind(brightness, 'screenAvailable')}>
|
||||||
<image iconName={"brightness-high-symbolic"}></image>
|
<image iconName={"brightness-high-symbolic"}></image>
|
||||||
@@ -17,7 +17,7 @@ const BrightnessModule = () => {
|
|||||||
hexpand
|
hexpand
|
||||||
max={1}
|
max={1}
|
||||||
min={0.01}
|
min={0.01}
|
||||||
step={0.01}
|
step={0.05}
|
||||||
vexpand
|
vexpand
|
||||||
onChangeValue={self => setBrightness(self.value)}
|
onChangeValue={self => setBrightness(self.value)}
|
||||||
></slider>
|
></slider>
|
||||||
|
|||||||
@@ -135,8 +135,9 @@ const PlayerItem = ({ player }: { player: AstalMpris.Player }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const secondsToFriendlyTime = (time: number) => {
|
const secondsToFriendlyTime = (time: number) => {
|
||||||
const minutes = Math.floor(time / 60);
|
const m = Math.floor(time / 60);
|
||||||
const hours = Math.floor(minutes / 60);
|
const minutes = Math.floor(m % 60);
|
||||||
|
const hours = Math.floor(m / 60 % 24);
|
||||||
const seconds = Math.floor(time % 60);
|
const seconds = Math.floor(time % 60);
|
||||||
if (hours > 0) {
|
if (hours > 0) {
|
||||||
return `${hours}:${expandTime(minutes)}:${expandTime(seconds)}`;
|
return `${hours}:${expandTime(minutes)}:${expandTime(seconds)}`;
|
||||||
|
|||||||
@@ -1,48 +1,56 @@
|
|||||||
import { exec } from "astal";
|
import {
|
||||||
import { Gtk } from "astal/gtk4";
|
exec
|
||||||
|
} from 'astal';
|
||||||
|
import {
|
||||||
|
Gtk
|
||||||
|
} from 'astal/gtk4';
|
||||||
|
|
||||||
const PowerMenu = (): Gtk.Popover => {
|
const PowerMenu = (): Gtk.Popover => {
|
||||||
const popover = new Gtk.Popover({ cssClasses: ["PowerMenu"] });
|
const popover = new Gtk.Popover( {
|
||||||
|
'cssClasses': [ 'PowerMenu' ]
|
||||||
|
} );
|
||||||
|
|
||||||
const powerMenuBox = () => {
|
const powerMenuBox = () => {
|
||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={
|
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>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={<image iconName={"system-reboot-symbolic"}></image>}
|
child={<image iconName={'system-reboot-symbolic'}></image>}
|
||||||
onClicked={() => exec("/bin/sh -c 'reboot'")}
|
onClicked={() => exec( '/bin/sh -c \'reboot\'' )}
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={<image iconName={"system-suspend-symbolic"}></image>}
|
child={<image iconName={'system-suspend-symbolic'}></image>}
|
||||||
onClicked={() => exec("/bin/sh -c 'systemctl suspend'")}
|
onClicked={() => exec( '/bin/sh -c \'systemctl suspend\'' )}
|
||||||
></button>
|
></button>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
popover.set_child(powerMenuBox());
|
popover.set_child( powerMenuBox() );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Power = () => {
|
const Power = () => {
|
||||||
const pm = PowerMenu();
|
const pm = PowerMenu();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
widthRequest={0}
|
widthRequest={0}
|
||||||
hexpand={false}
|
hexpand={false}
|
||||||
vexpand={false}
|
vexpand={false}
|
||||||
cssClasses={["power-menu-button"]}
|
cssClasses={[ 'power-menu-button' ]}
|
||||||
child={
|
child={
|
||||||
<box>
|
<box>
|
||||||
<image iconName={"system-shutdown-symbolic"}></image>
|
<image iconName={'system-shutdown-symbolic'}></image>
|
||||||
{pm}
|
{pm}
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
@@ -58,24 +66,24 @@ const UserMenu = (): Gtk.Popover => {
|
|||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={
|
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>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={<image iconName={"system-log-out-symbolic"}></image>}
|
child={<image iconName={'system-log-out-symbolic'}></image>}
|
||||||
onClicked={() =>
|
onClicked={() => exec( '/bin/sh -c \'hyprctl dispatch exit 0\'' )
|
||||||
exec("/bin/sh -c 'hyprctl dispatch exit 0'")
|
|
||||||
}
|
}
|
||||||
></button>
|
></button>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
popover.set_child(powerMenuBox());
|
popover.set_child( powerMenuBox() );
|
||||||
|
|
||||||
return popover;
|
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 {
|
||||||
import Hyprland from "./modules/Hyprland";
|
App, Astal, Gdk, Gtk
|
||||||
import Calendar from "./modules/Calendar";
|
} from 'astal/gtk4';
|
||||||
import QuickView from "./modules/QuickView";
|
import Calendar from './modules/Calendar';
|
||||||
import SystemInfo from "./modules/SystemInfo";
|
import {
|
||||||
import { CenterBox } from "astal/gtk4/widget";
|
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 Bar = ( {
|
||||||
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;
|
gdkmonitor, name
|
||||||
|
}: {
|
||||||
|
'gdkmonitor': Gdk.Monitor,
|
||||||
|
'name': string
|
||||||
|
} ) => {
|
||||||
|
const {
|
||||||
|
TOP, LEFT, RIGHT
|
||||||
|
} = Astal.WindowAnchor;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<window
|
<window
|
||||||
gdkmonitor={gdkmonitor}
|
gdkmonitor={gdkmonitor}
|
||||||
cssClasses={["Bar"]}
|
cssClasses={[ 'Bar' ]}
|
||||||
name={name}
|
name={name}
|
||||||
namespace={"bar"}
|
namespace={'bar'}
|
||||||
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
||||||
anchor={TOP | LEFT | RIGHT}
|
anchor={TOP | LEFT | RIGHT}
|
||||||
visible
|
visible
|
||||||
@@ -21,13 +32,13 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
|||||||
child={
|
child={
|
||||||
<CenterBox
|
<CenterBox
|
||||||
orientation={Gtk.Orientation.HORIZONTAL}
|
orientation={Gtk.Orientation.HORIZONTAL}
|
||||||
start_widget={
|
startWidget={
|
||||||
<box
|
<box
|
||||||
hexpand
|
hexpand
|
||||||
halign={Gtk.Align.START}
|
halign={Gtk.Align.START}
|
||||||
>
|
>
|
||||||
|
<Hyprland.ModeStatus />
|
||||||
<Calendar.Time />
|
<Calendar.Time />
|
||||||
<SystemInfo.SystemInfo />
|
|
||||||
<Hyprland.Workspace />
|
<Hyprland.Workspace />
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
@@ -36,9 +47,9 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
|||||||
<box
|
<box
|
||||||
hexpand
|
hexpand
|
||||||
halign={Gtk.Align.END}
|
halign={Gtk.Align.END}
|
||||||
cssClasses={["BarRight"]}
|
cssClasses={[ 'BarRight' ]}
|
||||||
>
|
>
|
||||||
<Hyprland.SysTray />
|
<SystemInfo.SystemInfo />
|
||||||
<QuickView.QuickView />
|
<QuickView.QuickView />
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
@@ -48,21 +59,24 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const cliHandler = (args: string[]): string => {
|
const cliHandler = ( args: string[] ): string => {
|
||||||
return "Not implemented";
|
console.debug( args );
|
||||||
|
|
||||||
|
return 'Not implemented';
|
||||||
};
|
};
|
||||||
|
|
||||||
const BarLauncher = ( monitor: Gdk.Monitor ) => {
|
const BarLauncher = ( monitor: Gdk.Monitor ) => {
|
||||||
const windowName = `bar-${monitor.get_connector()}`
|
const windowName = `bar-${ monitor.get_connector() }`;
|
||||||
|
|
||||||
const createBar = () => {
|
const createBar = () => {
|
||||||
return <Bar gdkmonitor={monitor} name={windowName}></Bar>
|
return <Bar gdkmonitor={monitor} name={windowName}></Bar>;
|
||||||
}
|
};
|
||||||
|
|
||||||
// Actually start the bar
|
// Actually start the bar
|
||||||
createBar();
|
createBar();
|
||||||
|
|
||||||
return windowName;
|
return windowName;
|
||||||
}
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
BarLauncher,
|
BarLauncher,
|
||||||
|
|||||||
@@ -11,6 +11,50 @@ window.Bar {
|
|||||||
/* border-radius: 10px; */
|
/* border-radius: 10px; */
|
||||||
/* margin: 8px; */
|
/* 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 {
|
.bar-button {
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
@@ -54,12 +98,13 @@ window.Bar {
|
|||||||
.time {
|
.time {
|
||||||
min-width: 11rem;
|
min-width: 11rem;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
|
|
||||||
& button {
|
& button {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.quick-view-symbol {
|
.quick-view-symbol {
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,75 +1,34 @@
|
|||||||
import AstalTray from "gi://AstalTray";
|
import {
|
||||||
import { bind, GObject } from "astal";
|
bind,
|
||||||
import AstalHyprland from "gi://AstalHyprland";
|
exec,
|
||||||
import { Gtk } from "astal/gtk4";
|
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 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 = () => {
|
const Workspace = () => {
|
||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
{bind(hypr, "workspaces").as(wss =>
|
{bind( hypr, 'workspaces' ).as( wss => wss
|
||||||
wss
|
.filter( ws => !( ws.id >= -99 && ws.id <= -2 ) ) // filter out special workspaces
|
||||||
.filter(ws => !(ws.id >= -99 && ws.id <= -2)) // filter out special workspaces
|
.sort( ( a, b ) => a.id - b.id )
|
||||||
.sort((a, b) => a.id - b.id)
|
.map( ws => (
|
||||||
.map(ws => (
|
<button
|
||||||
<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' ], )}
|
||||||
]
|
onButtonPressed={() => ws.focus()}
|
||||||
: ["workspace-button"],
|
child={<label label={String( ws.id )}></label>}
|
||||||
)}
|
></button>
|
||||||
onButtonPressed={() => ws.focus()}
|
) ), )}
|
||||||
child={<label label={String(ws.id)}></label>}
|
|
||||||
></button>
|
|
||||||
)),
|
|
||||||
)}
|
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -79,15 +38,15 @@ const Workspace = () => {
|
|||||||
* displaying all available clients
|
* displaying all available clients
|
||||||
*/
|
*/
|
||||||
const ActiveWindow = () => {
|
const ActiveWindow = () => {
|
||||||
const focused = bind(hypr, "focusedClient");
|
const focused = bind( hypr, 'focusedClient' );
|
||||||
|
|
||||||
const WindowPopover = (): Gtk.Popover => {
|
const WindowPopover = (): Gtk.Popover => {
|
||||||
// Set up boxes + Popover
|
// Set up boxes + Popover
|
||||||
const popover = new Gtk.Popover();
|
const popover = new Gtk.Popover();
|
||||||
|
|
||||||
const popoverBox = WindowPopoverBox();
|
const popoverBox = WindowPopoverBox();
|
||||||
|
|
||||||
popover.set_child(popoverBox);
|
popover.set_child( popoverBox );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -97,47 +56,91 @@ const ActiveWindow = () => {
|
|||||||
// Return fully assembled HyprlandFocusedClient box
|
// Return fully assembled HyprlandFocusedClient box
|
||||||
// ───────────────────────────────────────────────────────────────────
|
// ───────────────────────────────────────────────────────────────────
|
||||||
return (
|
return (
|
||||||
<box visible={focused.as(Boolean)}>
|
<box visible={focused.as( Boolean )}>
|
||||||
<button
|
<button
|
||||||
onClicked={() => windowPopover.popup()}
|
onClicked={() => windowPopover.popup()}
|
||||||
cssClasses={["bar-button"]}
|
cssClasses={[ 'bar-button' ]}
|
||||||
child={
|
child={
|
||||||
focused.as(
|
focused.as( client => client && (
|
||||||
client =>
|
<label
|
||||||
client && (
|
maxWidthChars={70}
|
||||||
<label label={bind(client, "title").as(String)} />
|
ellipsize={Pango.EllipsizeMode.END}
|
||||||
),
|
label={bind( client, 'title' ).as( String )} />
|
||||||
)
|
), )
|
||||||
}></button>
|
}></button>
|
||||||
{windowPopover}
|
{windowPopover}
|
||||||
</box >
|
</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 = () => {
|
const WindowPopoverBox = () => {
|
||||||
return <box vertical>
|
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>
|
<Gtk.Separator marginTop={5} marginBottom={5}></Gtk.Separator>
|
||||||
<box vertical>
|
<box vertical>
|
||||||
{bind(hypr, 'clients').as(clients => {
|
{bind( hypr, 'clients' ).as( clients => {
|
||||||
return clients.map(client => {
|
return clients.map( client => {
|
||||||
return <button child={
|
return <button child={
|
||||||
<box>
|
<box>
|
||||||
<label label={bind(client, 'workspace').as(w => `(WS ${w.name})`)}></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, 'initialClass' ).as( c => `[${ c }]` )}></label>
|
||||||
<label label={bind(client, 'title')}></label>
|
<label label={bind( client, 'title' )}></label>
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
onClicked={() => client.focus()}
|
onClicked={() => client.focus()}
|
||||||
></button>
|
></button>;
|
||||||
})
|
} );
|
||||||
})}
|
} )}
|
||||||
</box>
|
</box>
|
||||||
</box>
|
</box>;
|
||||||
}
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
Workspace,
|
Workspace,
|
||||||
ActiveWindow,
|
ActiveWindow,
|
||||||
SysTray,
|
ModeStatus
|
||||||
};
|
};
|
||||||
@@ -1,16 +1,24 @@
|
|||||||
import { bind } from "astal";
|
import AstalBattery from 'gi://AstalBattery';
|
||||||
import AstalBattery from "gi://AstalBattery";
|
import AstalBluetooth from 'gi://AstalBluetooth';
|
||||||
import AstalBluetooth from "gi://AstalBluetooth";
|
import AstalNetwork from 'gi://AstalNetwork';
|
||||||
import AstalNetwork from "gi://AstalNetwork";
|
import AstalWp from 'gi://AstalWp';
|
||||||
import AstalWp from "gi://AstalWp";
|
import Brightness from '../../../util/brightness';
|
||||||
import { Gtk } from "astal/gtk4";
|
import {
|
||||||
import Brightness from "../../../util/brightness";
|
Gtk
|
||||||
import QuickActions from "../../QuickActions/QuickActions";
|
} from 'astal/gtk4';
|
||||||
|
import QuickActions from '../../QuickActions/QuickActions';
|
||||||
|
import {
|
||||||
|
bind
|
||||||
|
} from 'astal';
|
||||||
|
import {
|
||||||
|
execAsync
|
||||||
|
} from 'astal';
|
||||||
|
|
||||||
const STATE = AstalNetwork.DeviceState;
|
const STATE = AstalNetwork.DeviceState;
|
||||||
|
|
||||||
const QuickView = () => {
|
const QuickView = () => {
|
||||||
const qa = QuickActions.QuickActions();
|
const qa = QuickActions.QuickActions();
|
||||||
|
|
||||||
const showQuickActions = () => {
|
const showQuickActions = () => {
|
||||||
qa.popup();
|
qa.popup();
|
||||||
};
|
};
|
||||||
@@ -18,14 +26,14 @@ const QuickView = () => {
|
|||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClicked={() => showQuickActions()}
|
onClicked={() => showQuickActions()}
|
||||||
cssClasses={["quick-action-button"]}
|
cssClasses={[ 'quick-action-button' ]}
|
||||||
child={
|
child={
|
||||||
<box>
|
<box>
|
||||||
<BatteryWidget></BatteryWidget>
|
<BatteryWidget></BatteryWidget>
|
||||||
<Audio></Audio>
|
<Audio></Audio>
|
||||||
<BluetoothWidget></BluetoothWidget>
|
<BluetoothWidget></BluetoothWidget>
|
||||||
<NetworkWidget></NetworkWidget>
|
<NetworkWidget></NetworkWidget>
|
||||||
<image iconName={"system-shutdown-symbolic"}></image>
|
<image iconName={'system-shutdown-symbolic'}></image>
|
||||||
{qa}
|
{qa}
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
@@ -39,37 +47,39 @@ const NetworkWidget = () => {
|
|||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<image
|
<image
|
||||||
iconName={bind(network, "state").as(state => {
|
iconName={bind( network, 'state' ).as( state => {
|
||||||
if (state === AstalNetwork.State.CONNECTING) {
|
if ( state === AstalNetwork.State.CONNECTING ) {
|
||||||
return "chronometer-reset-symbolic";
|
return 'chronometer-reset-symbolic';
|
||||||
} else if (
|
} else if (
|
||||||
state === AstalNetwork.State.CONNECTED_LOCAL ||
|
state === AstalNetwork.State.CONNECTED_LOCAL
|
||||||
state === AstalNetwork.State.CONNECTED_SITE ||
|
|| state === AstalNetwork.State.CONNECTED_SITE
|
||||||
state === AstalNetwork.State.CONNECTED_GLOBAL
|
|| state === AstalNetwork.State.CONNECTED_GLOBAL
|
||||||
) {
|
) {
|
||||||
return "network-wired-activated-symbolic";
|
return 'network-wired-activated-symbolic';
|
||||||
} else {
|
} else {
|
||||||
return "paint-unknown-symbolic";
|
return 'paint-unknown-symbolic';
|
||||||
}
|
}
|
||||||
})}
|
} )}
|
||||||
cssClasses={["network-widget", "quick-view-symbol"]}
|
cssClasses={[
|
||||||
visible={bind(network.wifi, "state").as(
|
'network-widget',
|
||||||
state => state !== STATE.ACTIVATED,
|
'quick-view-symbol'
|
||||||
)}
|
]}
|
||||||
|
visible={bind( network.wifi, 'state' ).as( state => state !== STATE.ACTIVATED, )}
|
||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
iconName={bind(network.wifi, "state").as(state => {
|
iconName={bind( network.wifi, 'state' ).as( state => {
|
||||||
if (state === STATE.ACTIVATED) {
|
if ( state === STATE.ACTIVATED ) {
|
||||||
return network.wifi.iconName;
|
return network.wifi.iconName;
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return '';
|
||||||
}
|
}
|
||||||
})}
|
} )}
|
||||||
tooltipText={bind(network.wifi, 'ssid')}
|
tooltipText={bind( network.wifi, 'ssid' )}
|
||||||
cssClasses={["network-widget", "quick-view-symbol"]}
|
cssClasses={[
|
||||||
visible={bind(network.wifi, "state").as(
|
'network-widget',
|
||||||
state => state === STATE.ACTIVATED,
|
'quick-view-symbol'
|
||||||
)}
|
]}
|
||||||
|
visible={bind( network.wifi, 'state' ).as( state => state === STATE.ACTIVATED, )}
|
||||||
></image>
|
></image>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
@@ -77,57 +87,66 @@ const NetworkWidget = () => {
|
|||||||
|
|
||||||
const BluetoothWidget = () => {
|
const BluetoothWidget = () => {
|
||||||
const bluetooth = AstalBluetooth.get_default();
|
const bluetooth = AstalBluetooth.get_default();
|
||||||
const enabled = bind(bluetooth, "isPowered");
|
const enabled = bind( bluetooth, 'isPowered' );
|
||||||
const connected = bind(bluetooth, "isConnected");
|
const connected = bind( bluetooth, 'isConnected' );
|
||||||
|
|
||||||
// For each connected BT device, render status
|
// For each connected BT device, render status
|
||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<box visible={enabled.as(e => e)}>
|
<box visible={enabled.as( e => e )}>
|
||||||
<image
|
<image
|
||||||
iconName={"bluetooth-active-symbolic"}
|
iconName={'bluetooth-active-symbolic'}
|
||||||
visible={connected.as(c => c)}
|
visible={connected.as( c => c )}
|
||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
iconName={"bluetooth-disconnected-symbolic"}
|
iconName={'bluetooth-disconnected-symbolic'}
|
||||||
visible={connected.as(c => !c)}
|
visible={connected.as( c => !c )}
|
||||||
></image>
|
></image>
|
||||||
</box>
|
</box>
|
||||||
<image
|
<image
|
||||||
iconName={"bluetooth-disabled-symbolic"}
|
iconName={'bluetooth-disabled-symbolic'}
|
||||||
visible={enabled.as(e => !e)}
|
visible={enabled.as( e => !e )}
|
||||||
></image>
|
></image>
|
||||||
<box>
|
<box>
|
||||||
{bind(bluetooth, "devices").as(devices => {
|
{bind( bluetooth, 'devices' ).as( devices => {
|
||||||
return devices.map(device => {
|
return devices.map( device => {
|
||||||
return (
|
return (
|
||||||
<image
|
<image
|
||||||
iconName={bind(device, "icon").as(
|
iconName={bind( device, 'icon' ).as( icon => icon, )}
|
||||||
icon => icon,
|
visible={bind( device, 'connected' )}
|
||||||
)}
|
tooltipText={bind( device, 'batteryPercentage' ).as( n => {
|
||||||
visible={bind(device, "connected")}
|
return device.get_name() + ': ' + n + '%';
|
||||||
tooltipText={bind(device, "batteryPercentage").as(
|
}, )}
|
||||||
n => {
|
|
||||||
return device.get_name() + ': ' + n + "%";
|
|
||||||
},
|
|
||||||
)}
|
|
||||||
></image>
|
></image>
|
||||||
);
|
);
|
||||||
});
|
} );
|
||||||
})}
|
} )}
|
||||||
</box>
|
</box>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
let hasSentNotification = false;
|
||||||
|
|
||||||
const BatteryWidget = () => {
|
const BatteryWidget = () => {
|
||||||
const battery = AstalBattery.get_default();
|
const battery = AstalBattery.get_default();
|
||||||
if (battery.get_is_present()) {
|
|
||||||
|
if ( battery.get_is_present() ) {
|
||||||
return (
|
return (
|
||||||
<image
|
<image
|
||||||
iconName={bind(battery, "iconName").as(icon => icon)}
|
iconName={bind( battery, 'batteryIconName' ).as( icon => icon )}
|
||||||
cssClasses={["quick-view-symbol"]}
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
tooltipText={bind(battery, 'percentage').as(p => `${Math.round(p * 100)}%`)}
|
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>
|
></image>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -138,14 +157,14 @@ const BatteryWidget = () => {
|
|||||||
|
|
||||||
const BrightnessWidget = () => {
|
const BrightnessWidget = () => {
|
||||||
const brightness = Brightness.get_default();
|
const brightness = Brightness.get_default();
|
||||||
const screen_brightness = bind(brightness, "screen");
|
const screen_brightness = bind( brightness, 'screen' );
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box cssClasses={["quick-view-symbol"]}>
|
<box cssClasses={[ 'quick-view-symbol' ]}>
|
||||||
<image iconName={"brightness-high-symbolic"}></image>
|
<image iconName={'brightness-high-symbolic'}></image>
|
||||||
<label
|
<label
|
||||||
label={screen_brightness.as(b => '' + Math.round(100 * b))}
|
label={screen_brightness.as( b => '' + Math.round( 100 * b ) )}
|
||||||
visible={bind(brightness, "screenAvailable")}
|
visible={bind( brightness, 'screenAvailable' )}
|
||||||
></label>
|
></label>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
@@ -153,31 +172,27 @@ const BrightnessWidget = () => {
|
|||||||
|
|
||||||
const Audio = () => {
|
const Audio = () => {
|
||||||
const wireplumber = AstalWp.get_default();
|
const wireplumber = AstalWp.get_default();
|
||||||
if (wireplumber) {
|
|
||||||
|
if ( wireplumber ) {
|
||||||
return (
|
return (
|
||||||
<box orientation={Gtk.Orientation.HORIZONTAL}>
|
<box orientation={Gtk.Orientation.HORIZONTAL}>
|
||||||
<image
|
<image
|
||||||
iconName={bind(wireplumber.defaultSpeaker, "volumeIcon").as(
|
iconName={bind( wireplumber.defaultSpeaker, 'volumeIcon' ).as( icon => icon, )}
|
||||||
icon => icon,
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
)}
|
tooltipText={bind( wireplumber.defaultSpeaker, 'volume' ).as( v => Math.round( 100 * v ) + '%' )}
|
||||||
cssClasses={["quick-view-symbol"]}
|
|
||||||
tooltipText={bind(wireplumber.defaultSpeaker, 'volume').as(v => Math.round(100 * v) + '%')}
|
|
||||||
></image>
|
></image>
|
||||||
<image
|
<image
|
||||||
iconName={bind(
|
iconName={bind( wireplumber.defaultMicrophone,
|
||||||
wireplumber.defaultMicrophone,
|
'volumeIcon', ).as( icon => icon )}
|
||||||
"volumeIcon",
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
).as(icon => icon)}
|
tooltipText={bind( wireplumber.defaultMicrophone, 'volume' ).as( v => Math.round( 100 * v ) + '%' )}
|
||||||
cssClasses={["quick-view-symbol"]}
|
|
||||||
tooltipText={bind(wireplumber.defaultMicrophone, 'volume').as(v => Math.round(100 * v) + '%')}
|
|
||||||
></image>
|
></image>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
print(
|
print( '[ WirePlumber ] Could not connect, Audio support in bar will be missing', );
|
||||||
"[ WirePlumber ] Could not connect, Audio support in bar will be missing",
|
|
||||||
);
|
return <image iconName={'action-unavailable-symbolic'}></image>;
|
||||||
return <image iconName={"action-unavailable-symbolic"}></image>;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -185,4 +200,5 @@ const Audio = () => {
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
QuickView,
|
QuickView,
|
||||||
|
BrightnessWidget
|
||||||
};
|
};
|
||||||
@@ -1,35 +1,39 @@
|
|||||||
import { execAsync } from "astal";
|
import {
|
||||||
import { Gtk } from "astal/gtk4";
|
Gtk
|
||||||
import sysinfo from "../sysinfo";
|
} from 'astal/gtk4';
|
||||||
|
import {
|
||||||
|
execAsync
|
||||||
|
} from 'astal';
|
||||||
|
import sysinfo from '../sysinfo';
|
||||||
|
|
||||||
const info = () => {
|
const info = () => {
|
||||||
return (
|
return (
|
||||||
<box vertical>
|
<box vertical>
|
||||||
<label
|
<label
|
||||||
label={"System Information"}
|
label={'System Information'}
|
||||||
cssClasses={["title-2"]}
|
cssClasses={[ 'title-2' ]}
|
||||||
></label>
|
></label>
|
||||||
<Gtk.Separator marginTop={5} marginBottom={10}></Gtk.Separator>
|
<Gtk.Separator marginTop={5} marginBottom={10}></Gtk.Separator>
|
||||||
<label
|
<label
|
||||||
vexpand
|
vexpand
|
||||||
halign={Gtk.Align.START}
|
halign={Gtk.Align.START}
|
||||||
hexpand
|
hexpand
|
||||||
label={sysinfo.ramUsed(used => {
|
label={sysinfo.ramUsed( used => {
|
||||||
return "RAM: " + used + ` (${sysinfo.ramUtil.get()}%)`;
|
return 'RAM: ' + used + ` (${ sysinfo.ramUtil.get() }%)`;
|
||||||
})}
|
} )}
|
||||||
></label>
|
></label>
|
||||||
<label
|
<label
|
||||||
label={sysinfo.systemStats(stats => {
|
label={sysinfo.systemStats( stats => {
|
||||||
return `CPU: ${stats.cpuTemp}, ${stats.cpuClk}
|
return `CPU: ${ stats.cpuTemp }, ${ stats.cpuClk }
|
||||||
GPU: ${stats.gpuTemp}, ${stats.gpuClk} (${stats.vram} / ${stats.availableVRAM})
|
GPU: ${ stats.gpuTemp }, ${ stats.gpuClk } (${ stats.vram } / ${ stats.availableVRAM })
|
||||||
Kernel: ${stats.kernel}`;
|
Kernel: ${ stats.kernel }`;
|
||||||
})}
|
} )}
|
||||||
></label>
|
></label>
|
||||||
<Gtk.Separator marginTop={10}></Gtk.Separator>
|
<Gtk.Separator marginTop={10}></Gtk.Separator>
|
||||||
<button
|
<button
|
||||||
onClicked={() => execAsync(`/bin/sh -c "kitty --hold fish -c 'fastfetch'"`)}
|
onClicked={() => execAsync( '/bin/sh -c "kitty --hold fish -c \'fastfetch\'"' )}
|
||||||
child={
|
child={
|
||||||
<label label={"View FastFetch"}></label>
|
<label label={'View FastFetch'}></label>
|
||||||
}></button>
|
}></button>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
@@ -38,7 +42,7 @@ Kernel: ${stats.kernel}`;
|
|||||||
const SystemInformationPanel = () => {
|
const SystemInformationPanel = () => {
|
||||||
const popover = new Gtk.Popover();
|
const popover = new Gtk.Popover();
|
||||||
|
|
||||||
popover.set_child(info());
|
popover.set_child( info() );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
@@ -54,44 +58,44 @@ const SystemInfo = () => {
|
|||||||
sysinfo.refreshStats();
|
sysinfo.refreshStats();
|
||||||
};
|
};
|
||||||
|
|
||||||
if (sysinfo.enabled) {
|
if ( sysinfo.enabled ) {
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
onClicked={() => openSysInfo()}
|
onClicked={() => openSysInfo()}
|
||||||
child={
|
child={
|
||||||
<box tooltipText={sysinfo.ramUsed(v => v)}>
|
<box tooltipText={sysinfo.ramUsed( v => v )}>
|
||||||
<box
|
<box
|
||||||
cssClasses={[ 'quick-view-symbol' ]}
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
>
|
>
|
||||||
<image
|
<image
|
||||||
iconName={"power-profile-performance-symbolic"}
|
iconName={'power-profile-performance-symbolic'}
|
||||||
marginEnd={1}
|
marginEnd={1}
|
||||||
></image>
|
></image>
|
||||||
<label
|
<label
|
||||||
label={sysinfo.cpuUtil(util => util)}
|
label={sysinfo.cpuUtil( util => util )}
|
||||||
marginEnd={5}
|
marginEnd={5}
|
||||||
></label>
|
></label>
|
||||||
</box>
|
</box>
|
||||||
<box
|
<box
|
||||||
cssClasses={[ 'quick-view-symbol' ]}
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
>
|
>
|
||||||
<image iconName={"histogram-symbolic"}></image>
|
<image iconName={'memory'}></image>
|
||||||
<label label={sysinfo.ramUtil(util => util)}></label>
|
<label label={sysinfo.ramUtil( util => util )}></label>
|
||||||
</box>
|
</box>
|
||||||
<box
|
<box
|
||||||
cssClasses={[ 'quick-view-symbol' ]}
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
>
|
>
|
||||||
<image iconName={"show-gpu-effects-symbolic"}></image>
|
<image iconName={'show-gpu-effects-symbolic'}></image>
|
||||||
<label label={sysinfo.gpuUtil(util => util)}></label>
|
<label label={sysinfo.gpuUtil( util => util )}></label>
|
||||||
</box>
|
</box>
|
||||||
{panel}
|
{panel}
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
cssClasses={["bar-button"]}
|
cssClasses={[ 'bar-button' ]}
|
||||||
></button>
|
></button>
|
||||||
);
|
);
|
||||||
} else {
|
} 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 { Gtk } from "astal/gtk4";
|
||||||
import Notifd from "gi://AstalNotifd";
|
import Notifd from "gi://AstalNotifd";
|
||||||
import { NotificationIcon } from "./Icon";
|
import { NotificationIcon } from "./Icon";
|
||||||
import { createTimeoutManager } from "../../../util/notifd";
|
import { createTimeoutManager, time, urgency } from "../../../util/notifd";
|
||||||
|
|
||||||
export function NotificationWidget({
|
export function NotificationWidget({
|
||||||
notification,
|
notification,
|
||||||
@@ -81,8 +81,8 @@ export function NotificationWidget({
|
|||||||
halign={CENTER}
|
halign={CENTER}
|
||||||
valign={CENTER}
|
valign={CENTER}
|
||||||
vexpand={true}
|
vexpand={true}
|
||||||
|
child={NotificationIcon(notification)!}
|
||||||
>
|
>
|
||||||
{NotificationIcon(notification)}
|
|
||||||
</box>
|
</box>
|
||||||
<box
|
<box
|
||||||
vertical
|
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;
|
const icon = notification.image || notification.appIcon || notification.desktopEntry;
|
||||||
if (fileExists(icon)) {
|
if (fileExists(icon)) {
|
||||||
return (
|
return (
|
||||||
<box expand={false} valign={Gtk.Align.CENTER}>
|
<box hexpand={false} valign={Gtk.Align.CENTER} child={
|
||||||
<image file={icon} />
|
<image file={icon} />
|
||||||
|
}>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
} else if (isIcon(icon)) {
|
} else if (isIcon(icon)) {
|
||||||
return (
|
return (
|
||||||
<box expand={false} valign={Gtk.Align.CENTER}>
|
<box hexpand={false} valign={Gtk.Align.CENTER} child={
|
||||||
<image iconName={icon} />
|
<image iconName={icon} />
|
||||||
|
}>
|
||||||
</box>
|
</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;
|
$fg-color: #E6E6E6;
|
||||||
$bg-color: #141414;
|
$bg-color: #141414;
|
||||||
$accent-color: #591641;
|
$accent-color: #5C9B3F;
|
||||||
$accent-color-2: #97103A;
|
$accent-color-2: #1674B9;
|
||||||
$shadow-color: rgba(40, 40, 40, 0.3);
|
$shadow-color: rgba(40, 40, 40, 0.3);
|
||||||
|
$monospace-font: Source Code Pro
|
||||||
@@ -4,134 +4,134 @@
|
|||||||
"padding": {
|
"padding": {
|
||||||
"top": 2,
|
"top": 2,
|
||||||
"left": 1,
|
"left": 1,
|
||||||
"right": 2,
|
"right": 2
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"separator": " ",
|
"separator": " "
|
||||||
},
|
},
|
||||||
"modules": [
|
"modules": [
|
||||||
// Title
|
// Title
|
||||||
{
|
{
|
||||||
"type": "title",
|
"type": "title",
|
||||||
"format": "{#1}╭───────────── {#}{user-name-colored}",
|
"format": "{#1}╭───────────── {#}{user-name-colored}"
|
||||||
},
|
},
|
||||||
// System Information
|
// System Information
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│ {#}System Information",
|
"format": "{#1}│ {#}System Information"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "os",
|
"type": "os",
|
||||||
"key": "{#separator}│ {#keys} OS",
|
"key": "{#separator}│ {#keys} OS"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "kernel",
|
"type": "kernel",
|
||||||
"key": "{#separator}│ {#keys} Kernel",
|
"key": "{#separator}│ {#keys} Kernel"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "uptime",
|
"type": "uptime",
|
||||||
"key": "{#separator}│ {#keys} Uptime",
|
"key": "{#separator}│ {#keys} Uptime"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "packages",
|
"type": "packages",
|
||||||
"key": "{#separator}│ {#keys} Packages",
|
"key": "{#separator}│ {#keys} Packages",
|
||||||
"format": "{all}",
|
"format": "{all}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│",
|
"format": "{#1}│"
|
||||||
},
|
},
|
||||||
// Desktop Environment
|
// Desktop Environment
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│ {#}Desktop Environment",
|
"format": "{#1}│ {#}Desktop Environment"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "de",
|
"type": "de",
|
||||||
"key": "{#separator}│ {#keys} DE",
|
"key": "{#separator}│ {#keys} DE"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "wm",
|
"type": "wm",
|
||||||
"key": "{#separator}│ {#keys} WM",
|
"key": "{#separator}│ {#keys} WM"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "wmtheme",
|
"type": "wmtheme",
|
||||||
"key": "{#separator}│ {#keys} Theme",
|
"key": "{#separator}│ {#keys} Theme"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "display",
|
"type": "display",
|
||||||
"key": "{#separator}│ {#keys} Resolution",
|
"key": "{#separator}│ {#keys} Resolution"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"key": "{#separator}│ {#keys} Shell",
|
"key": "{#separator}│ {#keys} Shell"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "terminalfont",
|
"type": "terminalfont",
|
||||||
"key": "{#separator}│ {#keys} Font",
|
"key": "{#separator}│ {#keys} Font"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│",
|
"format": "{#1}│"
|
||||||
},
|
},
|
||||||
// Hardware Information
|
// Hardware Information
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│ {#}Hardware Information",
|
"format": "{#1}│ {#}Hardware Information"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "cpu",
|
"type": "cpu",
|
||||||
"key": "{#separator}│ {#keys} CPU",
|
"key": "{#separator}│ {#keys} CPU"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "gpu",
|
"type": "gpu",
|
||||||
"key": "{#separator}│ {#keys} GPU",
|
"key": "{#separator}│ {#keys} GPU"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "memory",
|
"type": "memory",
|
||||||
"key": "{#separator}│ {#keys} Memory",
|
"key": "{#separator}│ {#keys} Memory"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "disk",
|
"type": "disk",
|
||||||
"key": "{#separator}│ {#keys} Disk (/)",
|
"key": "{#separator}│ {#keys} Disk (/)",
|
||||||
"folders": "/",
|
"folders": "/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│",
|
"format": "{#1}│"
|
||||||
},
|
},
|
||||||
// Network
|
// Network
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│ {#}Network",
|
"format": "{#1}│ {#}Network"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "wifi",
|
"type": "wifi",
|
||||||
"key": "{#separator}│ {#keys}⮃ WiFi",
|
"key": "{#separator}│ {#keys}⮃ WiFi"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "dns",
|
"type": "dns",
|
||||||
"key": "{#separator}│ {#keys}🖧 DNS",
|
"key": "{#separator}│ {#keys}🖧 DNS"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "localip",
|
"type": "localip",
|
||||||
"key": "{#separator}│ {#keys}⍰ IP",
|
"key": "{#separator}│ {#keys}⍰ IP"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}│",
|
"format": "{#1}│"
|
||||||
},
|
},
|
||||||
// Colors
|
// Colors
|
||||||
{
|
{
|
||||||
"type": "colors",
|
"type": "colors",
|
||||||
"key": "{#separator}│",
|
"key": "{#separator}│",
|
||||||
"symbol": "circle",
|
"symbol": "circle"
|
||||||
},
|
},
|
||||||
// Footer
|
// Footer
|
||||||
{
|
{
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"format": "{#1}╰───────────────────────────────╯",
|
"format": "{#1}╰───────────────────────────────╯"
|
||||||
},
|
}
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
@@ -1,30 +1,38 @@
|
|||||||
alias ls='ls -l --color'
|
alias ls='ls -l --color'
|
||||||
alias ll='ls -la --color'
|
alias ll='ls -la --color'
|
||||||
alias v='nvim'
|
alias v='nvim'
|
||||||
|
alias i='vimiv'
|
||||||
alias c='clear'
|
alias c='clear'
|
||||||
|
alias cv='clear && nvim'
|
||||||
alias zs='zathura-sandbox'
|
alias zs='zathura-sandbox'
|
||||||
alias bt='bluetui'
|
alias z='zathura'
|
||||||
alias vicfg='cd ~/.config/nvim/ && nvim'
|
alias bt='bashtop'
|
||||||
|
alias vicfg='nvim ~/projects/nvim/'
|
||||||
alias fm='thunar .'
|
alias fm='thunar .'
|
||||||
alias gl='git ls-files --others --exclude-standard'
|
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 gpu='git push'
|
||||||
alias gp='git pull'
|
alias gp='git pull'
|
||||||
|
alias gpr='git pull --rebase'
|
||||||
alias gc='git commit -a -m'
|
alias gc='git commit -a -m'
|
||||||
alias ga='git add ./*'
|
alias ga='git add ./*'
|
||||||
alias cfh='nvim ~/projects/active/dotfiles/config/hypr/'
|
alias cfh='nvim ~/projects/dotfiles/config/hypr/'
|
||||||
alias cfn='nvim ~/projects/active/nvim/'
|
alias cfn='nvim ~/projects/nvim/'
|
||||||
alias cff='nvim ~/projects/active/dotfiles/config/fish/'
|
alias cff='nvim ~/projects/dotfiles/config/fish/'
|
||||||
alias cfw='nvim ~/projects/archive/dotfiles-old/pc/configs/waybar/'
|
alias cfa='nvim ~/projects/dotfiles/config/astal/'
|
||||||
alias cfa='nvim ~/projects/active/dotfiles/config/ags/'
|
alias cf='nvim ~/projects/dotfiles/'
|
||||||
alias cf='nvim ~/projects/active/dotfiles/'
|
|
||||||
alias g='lazygit'
|
alias g='lazygit'
|
||||||
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
|
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
|
||||||
alias ai='ollama serve'
|
alias ai='ollama serve'
|
||||||
alias ff='fastfetch'
|
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
|
# Add scripts in ~/projects/dotfiles/scripts/ to path
|
||||||
fish_add_path -P ~/projects/active/dotfiles/scripts/
|
fish_add_path -P ~/projects/dotfiles/scripts/
|
||||||
|
|
||||||
function y
|
function y
|
||||||
set tmp (mktemp -t "yazi-cwd.XXXXXX")
|
set tmp (mktemp -t "yazi-cwd.XXXXXX")
|
||||||
@@ -36,7 +44,6 @@ function y
|
|||||||
end
|
end
|
||||||
|
|
||||||
zoxide init --cmd j fish | source
|
zoxide init --cmd j fish | source
|
||||||
# [ -f /usr/share/autojump/autojump.fish ]; and source /usr/share/autojump/autojump.fish
|
|
||||||
|
|
||||||
if status is-interactive
|
if status is-interactive
|
||||||
function fish_prompt
|
function fish_prompt
|
||||||
@@ -124,3 +131,5 @@ end
|
|||||||
|
|
||||||
|
|
||||||
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 {
|
general {
|
||||||
lock_cmd = hyprlock --immediate
|
lock_cmd = hyprlock
|
||||||
unlock_cmd = loginctl unlock-session
|
unlock_cmd = loginctl unlock-session
|
||||||
before_sleep_cmd = hyprlock --immediate
|
before_sleep_cmd = hyprlock
|
||||||
after_sleep_cmd = hyprlock --immediate
|
inhibit_sleep = 3
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 300
|
timeout = 300
|
||||||
|
on-timeout = hyprlock --grace 15
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 360
|
||||||
on-timeout = hyprctl dispatch dpms off
|
on-timeout = hyprctl dispatch dpms off
|
||||||
on-resume = hyprctl dispatch dpms on
|
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
|
# These key-binds are non-specific, laptop config has a separate file that includes
|
||||||
# extra config for it specifically
|
# extra config for it specifically
|
||||||
bind = $mainMod, Q, killactive
|
bind = $mainMod, Q, killactive
|
||||||
# bind = $mainMod SHIFT, Q, exit
|
|
||||||
bind = $mainMod, Return, exec, kitty
|
bind = $mainMod, Return, exec, kitty
|
||||||
# bind = $mainMod, E, exec, thunar
|
|
||||||
bind = $mainMod SHIFT, E, exec, thunar
|
bind = $mainMod SHIFT, E, exec, thunar
|
||||||
bind = $mainMod, E, exec, kitty --hold fish -c "y"
|
bind = $mainMod, E, exec, kitty --hold fish -c "y"
|
||||||
bind = $mainMod, V, togglefloating,
|
bind = $mainMod, V, togglefloating,
|
||||||
@@ -46,13 +44,11 @@ bind = $mainMod SHIFT, L, exec, librewolf
|
|||||||
bind = $mainMod SHIFT, D, exec, vesktop
|
bind = $mainMod SHIFT, D, exec, vesktop
|
||||||
bind = $mainMod SHIFT, V, exec, vscodium
|
bind = $mainMod SHIFT, V, exec, vscodium
|
||||||
bind = $mainMod SHIFT, T, exec, thunderbird
|
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, 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, 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, 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, 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 CTRL, K, exec, notify-send 'Insta-Kill activated' --app-name="Hyprctl" && hyprctl kill
|
||||||
bind = $mainMod SHIFT, O, exec, terminator -e "~/projects/dotfiles/ai.sh"
|
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 │
|
# │ Rofi commands │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run"
|
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 │
|
# │ Logout commands │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = $mainMod, escape, exec, wlogout
|
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 │
|
# │ Same with vim-motions │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
@@ -140,6 +128,12 @@ bind = $mainMod SHIFT, j, movetoworkspace, e-1
|
|||||||
bind = $mainMod SHIFT, k, 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 │
|
# │ Scroll through existing workspaces with │
|
||||||
# │ mainMod + scroll │
|
# │ mainMod + scroll │
|
||||||
@@ -148,30 +142,18 @@ bind = $mainMod, mouse_down, workspace, e+1
|
|||||||
bind = $mainMod, mouse_up, 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 │
|
# │ move to next window / previous window with │
|
||||||
# │ ALT + Tab / SHIFT + ALT + Tab │
|
# │ ALT + Tab / SHIFT + ALT + Tab │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = ALT SHIFT, tab, cyclenext, prev
|
bind = ALT SHIFT, tab, cyclenext, prev
|
||||||
# bind = ALT, tab, cyclenext, next
|
|
||||||
# bind = ALT CTRL, tab, focusurgentorlast
|
|
||||||
bind = ALT, tab, focusurgentorlast
|
bind = ALT, tab, focusurgentorlast
|
||||||
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Master layout commands │
|
# │ Dwindle layout commands │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = $mainMod CTRL, M, layoutmsg, swapwithmaster
|
bind = $mainMod CTRL, M, layoutmsg, swapsplit
|
||||||
bind = $mainMod SHIFT, A, layoutmsg, addmaster
|
|
||||||
bind = $mainMod SHIFT CTRL, right, layoutmsg, orientationnext
|
|
||||||
bind = $mainMod SHIFT CTRL, left, layoutmsg, orientationprev
|
|
||||||
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
@@ -182,6 +164,39 @@ bindm = $mainMod, mouse:272, movewindow
|
|||||||
bindm = $mainMod, mouse:273, resizewindow
|
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 │
|
# │ Freeze │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
@@ -199,8 +214,8 @@ bind = ,code:121, exec, pamixer -t
|
|||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Brightness-Control │
|
# │ Brightness-Control │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%' --app-name="Brightness"
|
bind = ,code:232, exec, light -U 5
|
||||||
bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%' --app-name="Brightness"
|
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, 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"
|
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 {
|
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)
|
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 = 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 = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
# exec-once = waybar
|
|
||||||
exec-once = hypridle
|
exec-once = hypridle
|
||||||
exec-once = nm-applet
|
exec-once = nm-applet
|
||||||
exec-once = nextcloud --background
|
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/dotfiles/config/astal/ --gtk 4 >> /tmp/runner-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/dotfiles/config/ags/notifications/ --gtk 3 >> /tmp/notifier-log 2>&1"
|
||||||
# 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/"
|
|
||||||
|
|
||||||
|
|
||||||
|
# ── 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,wayland
|
||||||
env = QT_QPA_PLATFORM_THEME,qt6ct
|
env = QT_QPA_PLATFORM_THEME,qt6ct
|
||||||
env = OLLAMA_HOST,0.0.0.0
|
env = OLLAMA_HOST,0.0.0.0
|
||||||
@@ -31,29 +31,45 @@ env = OLLAMA_HOST,0.0.0.0
|
|||||||
# ╰────────────────────────────────────────────────╯
|
# ╰────────────────────────────────────────────────╯
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
input {
|
input {
|
||||||
kb_layout = ch
|
kb_layout = us
|
||||||
kb_options = caps:swapescape
|
kb_variant = altgr-intl
|
||||||
natural_scroll = true
|
natural_scroll = true
|
||||||
|
|
||||||
numlock_by_default = true
|
numlock_by_default = true
|
||||||
|
repeat_delay = 400
|
||||||
|
|
||||||
follow_mouse = 2
|
follow_mouse = 2
|
||||||
mouse_refocus = true
|
mouse_refocus = true
|
||||||
|
scroll_factor = 2
|
||||||
|
accel_profile = flat
|
||||||
|
|
||||||
touchpad {
|
touchpad {
|
||||||
disable_while_typing = true
|
disable_while_typing = true
|
||||||
natural_scroll = true
|
natural_scroll = true
|
||||||
|
scroll_factor = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
focus_on_close = 1
|
focus_on_close = 1
|
||||||
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
sensitivity = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
gestures {
|
device {
|
||||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
name = pnp0c50:00-093a:0255-touchpad
|
||||||
workspace_swipe = true
|
enabled = true
|
||||||
workspace_swipe_distance = 300
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ── Cursors ─────────────────────────────────────────────────────────
|
||||||
|
cursor {
|
||||||
|
no_warps = false
|
||||||
|
inactive_timeout = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ── Bind config ─────────────────────────────────────────────────────
|
||||||
|
binds {
|
||||||
|
workspace_back_and_forth = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,27 +79,26 @@ gestures {
|
|||||||
# ╰────────────────────────────────────────────────╯
|
# ╰────────────────────────────────────────────────╯
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
general {
|
general {
|
||||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
|
||||||
|
|
||||||
gaps_in = 3
|
gaps_in = 3
|
||||||
gaps_out = 4
|
gaps_out = 4
|
||||||
border_size = 1
|
border_size = 2
|
||||||
# col.active_border = rgba(cc5c00ff) rgba(cc5c00ff) rgba(ff0000ff) 45deg
|
|
||||||
# col.inactive_border = rgba(595959aa)
|
|
||||||
|
|
||||||
layout = master
|
layout = dwindle
|
||||||
no_border_on_floating = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────────────
|
||||||
|
# ╭────────────────────────────────────────────────╮
|
||||||
|
# │ Style │
|
||||||
|
# ╰────────────────────────────────────────────────╯
|
||||||
|
# ────────────────────────────────────────────────────────────────────
|
||||||
decoration {
|
decoration {
|
||||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
|
||||||
inactive_opacity = 1
|
inactive_opacity = 1
|
||||||
rounding = 10
|
rounding = 10
|
||||||
|
|
||||||
shadow {
|
shadow {
|
||||||
enabled = true
|
enabled = true
|
||||||
range = 4
|
range = 4
|
||||||
# color = rgba(1a1a1aee)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
blur {
|
blur {
|
||||||
@@ -100,38 +115,26 @@ decoration {
|
|||||||
animations {
|
animations {
|
||||||
enabled = yes
|
enabled = yes
|
||||||
|
|
||||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
|
||||||
|
|
||||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
animation = windows, 1, 7, myBezier
|
animation = windows, 1, 3, myBezier
|
||||||
animation = windowsOut, 1, 7, default, popin 80%
|
animation = windowsOut, 1, 4, default, popin 80%
|
||||||
animation = border, 1, 10, default
|
animation = border, 1, 8, default
|
||||||
animation = fade, 1, 7, default
|
animation = fade, 1, 3, default
|
||||||
animation = workspaces, 1, 6, default
|
animation = workspaces, 1, 1, default
|
||||||
|
animation = specialWorkspaceIn, 1, 1, default, fade
|
||||||
|
animation = specialWorkspaceOut, 1, 1, default, fade
|
||||||
}
|
}
|
||||||
|
|
||||||
misc {
|
misc {
|
||||||
disable_hyprland_logo = true
|
disable_hyprland_logo = true
|
||||||
disable_splash_rendering = false
|
disable_splash_rendering = false
|
||||||
vrr = 2
|
vrr = 3
|
||||||
allow_session_lock_restore = true
|
allow_session_lock_restore = true
|
||||||
}
|
}
|
||||||
|
|
||||||
dwindle {
|
dwindle {
|
||||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
# pseudotile = true
|
||||||
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
force_split = 2
|
||||||
preserve_split = yes # you probably want this
|
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
|
$mainMod = SUPER
|
||||||
|
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
@@ -19,103 +5,143 @@ $mainMod = SUPER
|
|||||||
# │ WINDOW RULES │
|
# │ WINDOW RULES │
|
||||||
# ╰────────────────────────────────────────────────╯
|
# ╰────────────────────────────────────────────────╯
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
windowrule = float, title:.*(rofi).*
|
windowrule = move 1450 50, match:title (.*)Power menu$
|
||||||
windowrule = animation popin, title:.*(rofi).*
|
windowrule = workspace 2, match:class evince
|
||||||
windowrule = center, title:(rofi)(.*)
|
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 1, match:title ^(.*)hidden-terminator*(.*)$
|
||||||
windowrule = workspace 2, class:evince
|
windowrule = size 0 0, match:title ^(.*)hidden-terminator*(.*)$
|
||||||
windowrule = workspace 2, title:.*(Okular).*
|
windowrule = move 0 0, match:title ^(.*)hidden-terminator*(.*)$
|
||||||
windowrule = workspace 2, class:org.pwmt.zathura
|
windowrule = float on, match:title ^(.*)hidden-terminator*(.*)$
|
||||||
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*(.*)$
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Set rule for yazi filepicker │
|
# │ Set rule for yazi filepicker │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
windowrule = float, title:^(.*)termfilechooser*(.*)$
|
windowrule = float on, match:title ^(.*)termfilechooser*(.*)$
|
||||||
windowrule = size 1400 800, title:^(.*)termfilechooser*(.*)$
|
windowrule = size 1400 800, match:title ^(.*)termfilechooser*(.*)$
|
||||||
windowrule = center, title:^(.*)termfilechooser*(.*)$
|
windowrule = center on, match:title ^(.*)termfilechooser*(.*)$
|
||||||
|
windowrule = dim_around on, match:title ^(.*)termfilechooser*(.*)$
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Set floating windows & position them centered │
|
# │ Set floating windows & position them centered │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
windowrule = float, class:file_progress
|
windowrule = float on, match:class file_progress
|
||||||
windowrule = center, class:file_progress
|
windowrule = center on, match:class file_progress
|
||||||
|
|
||||||
windowrule = float, class:confirm
|
windowrule = float on, match:class confirm
|
||||||
windowrule = center, class:confirm
|
windowrule = center on, match:class confirm
|
||||||
|
|
||||||
windowrule = float, class:dialog
|
windowrule = float on, match:class dialog
|
||||||
windowrule = center, class:dialog
|
windowrule = center on, match:class dialog
|
||||||
|
|
||||||
windowrule = float, class:download
|
windowrule = float on, match:class download
|
||||||
windowrule = center, class:download
|
windowrule = center on, match:class download
|
||||||
|
|
||||||
windowrule = float, class:notification
|
windowrule = float on, match:class notification
|
||||||
windowrule = center, class:notification
|
windowrule = center on, match:class notification
|
||||||
|
|
||||||
windowrule = float, class:error
|
windowrule = float on, match:class error
|
||||||
windowrule = center, class:error
|
windowrule = center on, match:class error
|
||||||
|
|
||||||
windowrule = float, class:splash
|
windowrule = float on, match:class splash
|
||||||
windowrule = center, class:splash
|
windowrule = center on, match:class splash
|
||||||
|
|
||||||
windowrule = float, class:confirmreset
|
windowrule = float on, match:class confirmreset
|
||||||
windowrule = center, class:confirmreset
|
windowrule = center on, match:class confirmreset
|
||||||
|
|
||||||
windowrule = float, title:Open File
|
windowrule = float on, match:title Open File
|
||||||
windowrule = center, title:Open File
|
windowrule = center on, match:title Open File
|
||||||
|
|
||||||
windowrule = float, title:branchdialog
|
windowrule = float on, match:title branchdialog
|
||||||
windowrule = center, title:branchdialog
|
windowrule = center on, match:title branchdialog
|
||||||
|
|
||||||
windowrule = float, class:Lxappearance
|
windowrule = float on, match:class Lxappearance
|
||||||
windowrule = center, class:Lxappearance
|
windowrule = center on, match:class Lxappearance
|
||||||
|
|
||||||
windowrule = float, title:^(Media viewer)$
|
windowrule = float on, match:title ^(Media viewer)$
|
||||||
windowrule = center, title:^(Media viewer)$
|
windowrule = center on, match:title ^(Media viewer)$
|
||||||
|
|
||||||
windowrule = float, title:^(Volume Control)$
|
windowrule = float on, match:title ^(Volume Control)$
|
||||||
windowrule = center, title:^(Volume Control)$
|
windowrule = center on, match:title ^(Volume Control)$
|
||||||
|
|
||||||
windowrule = float, title:^(Picture-in-Picture)$
|
windowrule = float on, match:title ^(Picture-in-Picture)$
|
||||||
windowrule = center, title:^(Picture-in-Picture)$
|
windowrule = center on, match:title ^(Picture-in-Picture)$
|
||||||
|
|
||||||
windowrule = float, title:^(File Operation Progress)$
|
windowrule = float on, match:title ^(File Operation Progress)$
|
||||||
windowrule = center, title:^(File Operation Progress)$
|
windowrule = center on, match:title ^(File Operation Progress)$
|
||||||
|
|
||||||
windowrule = float, title:^(Loading)(.*)$
|
windowrule = float on, match:title ^(Loading)(.*)$
|
||||||
windowrule = center, title:^(Loading)(.*)$
|
windowrule = center on, match:title ^(Loading)(.*)$
|
||||||
|
|
||||||
windowrule = float, class:pavucontrol-qt
|
windowrule = float on, match:title ^(.*)(Launcher)(.*)$
|
||||||
windowrule = center, class:pavucontrol-qt
|
windowrule = center on, match:title ^(.*)(Launcher)(.*)$
|
||||||
|
|
||||||
windowrule = float, class:pavucontrol
|
windowrule = float on, match:title ^(AG Controller)(.*)$
|
||||||
windowrule = center, class:pavucontrol
|
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 = float on, match:title ^(Qalculate)(.*)$
|
||||||
windowrule = center, class:file-roller
|
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 = float on, match:class pavucontrol-qt
|
||||||
windowrule = fullscreen, title:^(Steam Big Picture)$
|
windowrule = center on, match:class pavucontrol-qt
|
||||||
windowrule = idleinhibit always, class:steam
|
|
||||||
windowrule = idleinhibit always, class:lutris
|
windowrule = float on, match:class pavucontrol
|
||||||
windowrule = idleinhibit focus, class:vlc
|
windowrule = center on, match:class pavucontrol
|
||||||
windowrule = idleinhibit focus, class:supertuxkart
|
|
||||||
windowrule = idleinhibit fullscreen, title:^(.*)(Discord)(.*)$
|
windowrule = float on, match:class file-roller
|
||||||
windowrule = idleinhibit fullscreen, title:^(.*)(~)(.*)$
|
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-1, 1920x1080@144, 0x0, 1, vrr, 2
|
||||||
monitor=DP-2, 1920x1080@75, 1920x0, 1
|
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/binds.conf
|
||||||
source=./hyprland/general.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=eDP-1, 2880x1800@120, 0x0, 1.5
|
||||||
# monitor=,highres highrr, auto, 1
|
monitor=,highres highrr, auto, 1
|
||||||
|
|
||||||
|
|
||||||
# exec = swaybg -m fill -i /home/janis/Pictures/arch-bg.png
|
|
||||||
|
|
||||||
|
|
||||||
source=./hyprland/binds.conf
|
source=./hyprland/binds.conf
|
||||||
|
source=./hyprland/gestures.conf
|
||||||
source=./hyprland/general.conf
|
source=./hyprland/general.conf
|
||||||
source=./hyprland/windowrules.conf
|
source=./hyprland/windowrules.conf
|
||||||
|
|
||||||
@@ -35,40 +33,17 @@ source=./hyprland/windowrules.conf
|
|||||||
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
||||||
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
||||||
env = X_CURSOR_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 = ELECTRON_ENABLE_HIGHDPI_SUPPORT, 1
|
||||||
env = XDG_SESSION_TYPE, wayland
|
env = XDG_SESSION_TYPE, wayland
|
||||||
env = QT_QPA_PLATFORM,wayland
|
env = QT_QPA_PLATFORM, wayland
|
||||||
# env = QT_QPA_PLATFORM_THEME,qt6ct
|
env = ELECTRON_OZONE_PLATFORM_HINT, wayland
|
||||||
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
|
||||||
env = GDK_SCALE,2
|
env = GDK_SCALE,2
|
||||||
exec-once = hyprpm reload -nn
|
|
||||||
|
input {
|
||||||
|
kb_options = caps:swapescape
|
||||||
|
}
|
||||||
|
|
||||||
xwayland {
|
xwayland {
|
||||||
force_zero_scaling = true
|
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 │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
background {
|
background {
|
||||||
monitor =
|
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
|
blur_passes = 1
|
||||||
}
|
}
|
||||||
@@ -33,7 +29,7 @@ input-field {
|
|||||||
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
|
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_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
dots_center = false
|
dots_center = false
|
||||||
outer_color = rgb(89, 22, 65)
|
outer_color = rgb(92, 155, 63)
|
||||||
inner_color = rgb(200, 200, 200)
|
inner_color = rgb(200, 200, 200)
|
||||||
font_color = rgb(10, 10, 10)
|
font_color = rgb(10, 10, 10)
|
||||||
fade_on_empty = true
|
fade_on_empty = true
|
||||||
@@ -49,7 +45,7 @@ label {
|
|||||||
monitor =
|
monitor =
|
||||||
text = <b>$TIME</b>
|
text = <b>$TIME</b>
|
||||||
color =
|
color =
|
||||||
font_size = 100
|
font_size = 150
|
||||||
font_family = Comfortaa
|
font_family = Comfortaa
|
||||||
|
|
||||||
position = 0, 80
|
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 config │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
cursor_trail 1
|
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
|
detect_urls yes
|
||||||
show_hyperlink_targets yes
|
show_hyperlink_targets yes
|
||||||
include current-theme.conf
|
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 eslint from '@eslint/js';
|
||||||
import tseslint from 'typescript-eslint';
|
import globals from 'globals';
|
||||||
import stylistic from '@stylistic/eslint-plugin';
|
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(
|
export default tseslint.config(
|
||||||
|
// Base JavaScript rules
|
||||||
eslint.configs.recommended,
|
eslint.configs.recommended,
|
||||||
...tseslint.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': {
|
'plugins': {
|
||||||
|
'vue': vue,
|
||||||
|
'@stylistic': stylistic,
|
||||||
'@stylistic/js': stylistic,
|
'@stylistic/js': stylistic,
|
||||||
'@stylistic/ts': stylistic,
|
'@stylistic/ts': stylistic,
|
||||||
|
'@typescript-eslint': typescript
|
||||||
},
|
},
|
||||||
|
'extends': [
|
||||||
|
eslint.configs.recommended,
|
||||||
|
...vue.configs['flat/recommended']
|
||||||
|
],
|
||||||
'rules': {
|
'rules': {
|
||||||
// Formatting
|
...typescript.configs.recommended.rules,
|
||||||
'@stylistic/js/array-bracket-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
...style.rules,
|
||||||
'@stylistic/js/array-bracket-spacing': [ 'error', 'always' ],
|
|
||||||
'@stylistic/js/array-element-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
// Vue specific rules
|
||||||
'@stylistic/js/arrow-parens': [ 'error', 'always' ],
|
'@stylistic/indent': 'off',
|
||||||
'@stylistic/js/arrow-spacing': [ 'error', { 'before': true, 'after': true } ],
|
'vue/html-indent': [
|
||||||
'@stylistic/js/block-spacing': [ 'error', 'always' ],
|
'error',
|
||||||
'@stylistic/js/brace-style': [ 'error', '1tbs' ],
|
4
|
||||||
'@stylistic/js/comma-spacing': [ 'error', { 'before': false, 'after': true } ],
|
],
|
||||||
'@stylistic/js/comma-style': [ 'error', 'last' ],
|
'vue/html-comment-indent': [
|
||||||
'@stylistic/js/dot-location': [ 'error', 'property' ],
|
'error',
|
||||||
'@stylistic/js/eol-last': [ 'error', 'always' ],
|
4
|
||||||
'@stylistic/js/function-call-spacing': [ 'error', 'never' ],
|
],
|
||||||
'@stylistic/js/implicit-arrow-linebreak': [ 'error', 'beside' ],
|
'vue/script-indent': [
|
||||||
'@stylistic/js/indent': [ 'error', 4 ],
|
'error',
|
||||||
'@stylistic/js/key-spacing': [ 'error', { 'beforeColon': false, 'afterColon': true } ],
|
4,
|
||||||
'@stylistic/js/keyword-spacing': [ 'error', { 'before': true, 'after': true } ],
|
{
|
||||||
'@stylistic/js/lines-between-class-members': [ 'error', 'always' ],
|
'baseIndent': 1,
|
||||||
'@stylistic/js/new-parens': [ 'error', 'always' ],
|
'switchCase': 1
|
||||||
'@stylistic/js/no-extra-parens': [ 'error', 'all' ],
|
}
|
||||||
'@stylistic/js/no-extra-semi': 'error',
|
],
|
||||||
'@stylistic/js/no-floating-decimal': 'error',
|
'vue/html-self-closing': [
|
||||||
'@stylistic/js/no-mixed-operators': 'error',
|
'error',
|
||||||
'@stylistic/js/no-mixed-spaces-and-tabs': 'error',
|
{
|
||||||
'@stylistic/js/no-multi-spaces': 'error',
|
'html': {
|
||||||
'@stylistic/js/no-trailing-spaces': 'error',
|
'void': 'never',
|
||||||
'@stylistic/js/no-whitespace-before-property': 'error',
|
'normal': 'never',
|
||||||
'@stylistic/js/object-curly-newline': [ 'error', { 'multiline': true, 'minProperties': 3 } ],
|
'component': 'always'
|
||||||
'@stylistic/js/object-curly-spacing': [ 'error', 'always' ],
|
},
|
||||||
'@stylistic/js/one-var-declaration-per-line': 'error',
|
'svg': 'always',
|
||||||
'@stylistic/js/quote-props': [ 'error', 'always' ],
|
'math': 'never'
|
||||||
'@stylistic/js/quotes': [ 'error', 'single' ],
|
}
|
||||||
'@stylistic/js/rest-spread-spacing': [ 'error', 'never' ],
|
],
|
||||||
'@stylistic/js/semi': [ 'error', 'always' ],
|
'vue/max-attributes-per-line': [
|
||||||
'@stylistic/js/semi-spacing': [ 'error', { 'before': false, 'after': true } ],
|
'error',
|
||||||
'@stylistic/js/semi-style': [ 'error', 'last' ],
|
{
|
||||||
'@stylistic/js/space-before-blocks': [ 'error', 'always' ],
|
'singleline': 3,
|
||||||
'@stylistic/js/space-before-function-paren': [ 'error', 'always' ],
|
'multiline': 1
|
||||||
'@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',
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -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: #141414;
|
||||||
background-selected: #1E1E1E;
|
background-selected: #1E1E1E;
|
||||||
foreground: #E6E6E6;
|
foreground: #E6E6E6;
|
||||||
accent: #591641;
|
accent: #5C9B3F;
|
||||||
accent-two: #97103A;
|
accent-two: #1674B9;
|
||||||
// border-color: #2D2057;
|
// border-color: #282828;
|
||||||
inactive: #C8C8C8;
|
inactive: #C8C8C8;
|
||||||
spacing: 2;
|
spacing: 2;
|
||||||
width: 30em;
|
width: 30em;
|
||||||
@@ -18,8 +18,8 @@
|
|||||||
border: 1px;
|
border: 1px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
location: west;
|
location: center;
|
||||||
anchor: west;
|
anchor: center;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
button:hover {
|
button:hover {
|
||||||
background-color: rgba(151, 16, 58, 0.5);
|
background-color: rgba(22, 116, 185, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
button:focus {
|
button:focus {
|
||||||
background-color: rgb(151, 16, 58);
|
background-color: rgb(22, 116, 185);
|
||||||
color: rgb(230, 230, 230);
|
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 |