This commit is contained in:
Yuzucchii 2025-06-14 17:17:10 -05:00
commit 168a02aebe
Signed by: yuzucchii
SSH Key Fingerprint: SHA256:3hT0Nn/790kQI9VFVQ2Kfh3Ma3JZe2pST86n1T5G7ww
54 changed files with 4580 additions and 0 deletions

96
.gitconfig Normal file
View File

@ -0,0 +1,96 @@
[user]
name="Yuzucchii"
email="me@yuzucchii.xyz"
signinkey=EFF95B412FB129BB
signingkey = /home/yu/.ssh/id_ed25519.pub
[core]
compression=9
whitespace=error
preloadindex=true
[commit]
gpgsign=true
signoff=true
verbose=false
allowEmpty=false
template=~/.config/git/template
[advice]
addEmptyPathspec=false
pushNonFastForward=false
statusHints=false
[url "ssh://git@sv.yuzucchii.xyz:2222/"]
insteadOf = "yu:"
port = 2222
[url "ssh://git@github.com:"]
insteadOf = "gh:"
[status]
branch=true
showStash=true
showUntrackedFiles=all
[diff]
context=3
renames=copies
interHunkContext=10
[pager]
markEmptyLines=false
branch=false
tag=false
[color "diff"]
meta=black bold
frag=magenta
context=white
new=green bold
whitespace=yellow reverse
old=red
[interactive]
diffFilter=diff-so-fancy --patch
singlekey=true
[push]
autoSetupRemote=true
default=current
followTags=true
[pull]
default=true
rebase=true
[rebase]
autostash=true
missingCommitsCheck=warn
[log]
abbrevCommit=true
graphColors=blue,yellow,cyan,magenta,green,red
[color "decorate"]
HEAD=red
branch=blue
tag=yellow
remoteBranch=magenta
[color "branch"]
current=magenta
local=default
remote=yellow
upstream=green
plain=blue
[branch]
sort=-committerdate
[tag]
sort=-triggerdate
gpgSign=true
[gpg]
format=ssh

11
config Normal file
View File

@ -0,0 +1,11 @@
Host yuzu
HostName sv.yuzucchii.xyz
Port 22 # the container port
IdentityFile ~/.ssh/ssh-key-2025-05-02.key
User yuzucchii
Host gitea
HostName git.yuzucchii.xyz
Port 2222
IdentityFile ~/.ssh/id_ed25519

View File

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="4"></circle>
<path d="M12 2v2"></path>
<path d="M12 20v2"></path>
<path d="m4.93 4.93 1.41 1.41"></path>
<path d="m17.66 17.66 1.41 1.41"></path>
<path d="M2 12h2"></path>
<path d="M20 12h2"></path>
<path d="m6.34 17.66-1.41 1.41"></path>
<path d="m19.07 4.93-1.41 1.41"></path>
</svg>

After

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -0,0 +1,11 @@
<svg width="96" height="96" viewBox="0 0 96 96" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="45" y="5" width="6" height="20" rx="3" fill="#6e7071"/>
<rect x="45" y="71" width="6" height="20" rx="3" fill="#6e7071"/>
<rect x="62" y="66.2426" width="6" height="20" rx="3" transform="rotate(-45 62 66.2426)" fill="#6e7071"/>
<rect x="15.0974" y="19.3401" width="6" height="20.0641" rx="3" transform="rotate(-45 15.0974 19.3401)" fill="#6e7071"/>
<rect x="5" y="51" width="6" height="20" rx="3" transform="rotate(-90 5 51)" fill="#6e7071"/>
<rect x="71" y="51" width="6" height="20" rx="3" transform="rotate(-90 71 51)" fill="#6e7071"/>
<rect x="66.4446" y="33.5867" width="6" height="20" rx="3" transform="rotate(-135 66.4446 33.5867)" fill="#6e7071"/>
<rect x="19.1094" y="80.7969" width="6" height="20.02" rx="3" transform="rotate(-135 19.1094 80.7969)" fill="#6e7071"/>
<circle cx="48" cy="48" r="19" fill="#6e7071"/>
</svg>

After

Width:  |  Height:  |  Size: 936 B

View File

@ -0,0 +1,11 @@
<svg width="96" height="96" viewBox="0 0 96 96" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="51" y="24" width="6" height="10" rx="3" transform="rotate(-180 51 24)" fill="#6e7071"/>
<rect x="45" y="71" width="6" height="10" rx="3" fill="#6e7071"/>
<rect x="62" y="66.2426" width="6" height="10" rx="3" transform="rotate(-45 62 66.2426)" fill="#6e7071"/>
<rect x="33.4822" y="29.2396" width="6" height="10" rx="3" transform="rotate(135 33.4822 29.2396)" fill="#6e7071"/>
<rect x="25" y="45" width="6" height="10" rx="3" transform="rotate(90 25 45)" fill="#6e7071"/>
<rect x="71" y="51" width="6" height="10" rx="3" transform="rotate(-90 71 51)" fill="#6e7071"/>
<rect x="66.4446" y="33.5867" width="6" height="10" rx="3" transform="rotate(-135 66.4446 33.5867)" fill="#6e7071"/>
<rect x="29.0089" y="62.4121" width="6" height="10" rx="3" transform="rotate(45 29.0089 62.4121)" fill="#6e7071"/>
<circle cx="48" cy="48" r="19" fill="#6e7071"/>
</svg>

After

Width:  |  Height:  |  Size: 959 B

View File

@ -0,0 +1,11 @@
<svg width="96" height="96" viewBox="0 0 96 96" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="51" y="24" width="6" height="15" rx="3" transform="rotate(-180 51 24)" fill="#6e7071"/>
<rect x="45" y="71" width="6" height="15" rx="3" fill="#6e7071"/>
<rect x="62" y="66.2426" width="6" height="15" rx="3" transform="rotate(-45 62 66.2426)" fill="#6e7071"/>
<rect x="33.4822" y="29.2396" width="6" height="15" rx="3" transform="rotate(135 33.4822 29.2396)" fill="#6e7071"/>
<rect x="25" y="45" width="6" height="15" rx="3" transform="rotate(90 25 45)" fill="#6e7071"/>
<rect x="71" y="51" width="6" height="15" rx="3" transform="rotate(-90 71 51)" fill="#6e7071"/>
<rect x="66.4446" y="33.5867" width="6" height="15" rx="3" transform="rotate(-135 66.4446 33.5867)" fill="#6e7071"/>
<rect x="29.0089" y="62.4121" width="6" height="15" rx="3" transform="rotate(45 29.0089 62.4121)" fill="#6e7071"/>
<circle cx="48" cy="48" r="19" fill="#6e7071"/>
</svg>

After

Width:  |  Height:  |  Size: 959 B

View File

@ -0,0 +1,11 @@
<svg width="96" height="96" viewBox="0 0 96 96" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="51" y="24" width="6" height="5" rx="2.5" transform="rotate(-180 51 24)" fill="#6e7071"/>
<rect x="45" y="71" width="6" height="5" rx="2.5" fill="#6e7071"/>
<rect x="62" y="66.2426" width="6" height="5" rx="2.5" transform="rotate(-45 62 66.2426)" fill="#6e7071"/>
<rect x="33.4822" y="29.2396" width="6" height="5" rx="2.5" transform="rotate(135 33.4822 29.2396)" fill="#6e7071"/>
<rect x="25" y="45" width="6" height="5" rx="2.5" transform="rotate(90 25 45)" fill="#6e7071"/>
<rect x="71" y="51" width="6" height="5" rx="2.5" transform="rotate(-90 71 51)" fill="#6e7071"/>
<rect x="66.4446" y="33.5867" width="6" height="5" rx="2.5" transform="rotate(-135 66.4446 33.5867)" fill="#6e7071"/>
<rect x="29.0089" y="62.4121" width="6" height="5" rx="2.5" transform="rotate(45 29.0089 62.4121)" fill="#6e7071"/>
<circle cx="48" cy="48" r="19" fill="#6e7071"/>
</svg>

After

Width:  |  Height:  |  Size: 967 B

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 96 96" width="96px" height="96px">
<g id="surface94384493">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(110, 112, 113);fill-opacity:1;" d="M 48.433594 14.203125 C 48.167969 14.203125 47.90625 14.222656 47.640625 14.257812 C 46.582031 14.402344 45.539062 14.835938 44.679688 15.601562 C 44.679688 15.601562 44.679688 15.605469 44.679688 15.605469 L 26.234375 32 L 13 32 C 8.066406 32 4 36.066406 4 41 L 4 55 C 4 59.933594 8.066406 64 13 64 L 26.234375 64 L 44.679688 80.394531 C 46.402344 81.925781 48.84375 82.148438 50.691406 81.320312 C 52.539062 80.492188 54 78.515625 54 76.210938 L 54 19.789062 C 54 17.484375 52.542969 15.511719 50.695312 14.679688 C 50.003906 14.367188 49.226562 14.203125 48.433594 14.203125 Z M 80.4375 15.964844 C 79.378906 16.007812 78.421875 16.605469 77.917969 17.535156 C 77.414062 18.46875 77.441406 19.59375 77.984375 20.503906 C 88.75 39.074219 88.789062 56.929688 77.988281 75.492188 C 77.402344 76.421875 77.371094 77.59375 77.90625 78.550781 C 78.441406 79.507812 79.457031 80.097656 80.550781 80.089844 C 81.648438 80.082031 82.652344 79.472656 83.171875 78.507812 C 94.851562 58.433594 94.808594 37.566406 83.175781 17.496094 C 82.625 16.511719 81.566406 15.917969 80.4375 15.964844 Z M 71.511719 23.960938 C 70.453125 23.957031 69.46875 24.511719 68.925781 25.417969 C 68.382812 26.328125 68.355469 27.453125 68.859375 28.386719 C 75.777344 41.636719 75.777344 54.363281 68.859375 67.613281 C 68.34375 68.566406 68.378906 69.722656 68.957031 70.640625 C 69.535156 71.558594 70.558594 72.09375 71.640625 72.039062 C 72.726562 71.988281 73.695312 71.355469 74.179688 70.386719 C 81.859375 55.675781 81.859375 40.324219 74.179688 25.613281 C 73.671875 24.605469 72.640625 23.964844 71.511719 23.960938 Z M 62.34375 33.992188 C 61.339844 34.035156 60.421875 34.578125 59.902344 35.441406 C 59.382812 36.304688 59.328125 37.367188 59.761719 38.277344 C 62.792969 44.914062 62.789062 51.121094 59.746094 57.757812 C 59.292969 58.734375 59.394531 59.875 60.015625 60.753906 C 60.636719 61.632812 61.679688 62.113281 62.75 62.011719 C 63.820312 61.910156 64.753906 61.242188 65.199219 60.261719 C 68.875 52.246094 68.882812 43.796875 65.21875 35.78125 C 64.71875 34.648438 63.578125 33.9375 62.34375 33.992188 Z M 62.34375 33.992188 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 96 96" width="96px" height="96px">
<g id="surface94458578">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(110, 112, 113);fill-opacity:1;" d="M 60.433594 14.203125 C 60.167969 14.203125 59.90625 14.222656 59.640625 14.257812 C 58.582031 14.402344 57.539062 14.835938 56.679688 15.601562 C 56.679688 15.601562 56.679688 15.605469 56.679688 15.605469 L 38.234375 32 L 25 32 C 20.066406 32 16 36.066406 16 41 L 16 55 C 16 59.933594 20.066406 64 25 64 L 38.234375 64 L 56.679688 80.394531 C 58.402344 81.925781 60.84375 82.148438 62.691406 81.320312 C 64.539062 80.492188 66 78.515625 66 76.210938 L 66 19.789062 C 66 17.484375 64.542969 15.511719 62.695312 14.679688 C 62.003906 14.367188 61.226562 14.203125 60.433594 14.203125 Z M 74.34375 33.992188 C 73.339844 34.035156 72.421875 34.578125 71.902344 35.441406 C 71.382812 36.304688 71.328125 37.367188 71.761719 38.277344 C 74.792969 44.914062 74.789062 51.121094 71.746094 57.757812 C 71.292969 58.734375 71.394531 59.875 72.015625 60.753906 C 72.636719 61.632812 73.679688 62.113281 74.75 62.011719 C 75.820312 61.910156 76.753906 61.242188 77.199219 60.261719 C 80.875 52.246094 80.882812 43.796875 77.21875 35.78125 C 76.71875 34.648438 75.578125 33.9375 74.34375 33.992188 Z M 74.34375 33.992188 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 96 96" width="96px" height="96px">
<g id="surface94454368">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(110, 112, 113);fill-opacity:1;" d="M 54.433594 14.203125 C 54.167969 14.203125 53.90625 14.222656 53.640625 14.257812 C 52.582031 14.402344 51.539062 14.835938 50.679688 15.601562 C 50.679688 15.601562 50.679688 15.605469 50.679688 15.605469 L 32.234375 32 L 19 32 C 14.066406 32 10 36.066406 10 41 L 10 55 C 10 59.933594 14.066406 64 19 64 L 32.234375 64 L 50.679688 80.394531 C 52.402344 81.925781 54.84375 82.148438 56.691406 81.320312 C 58.539062 80.492188 60 78.515625 60 76.210938 L 60 19.789062 C 60 17.484375 58.542969 15.511719 56.695312 14.679688 C 56.003906 14.367188 55.226562 14.203125 54.433594 14.203125 Z M 77.511719 23.960938 C 76.453125 23.957031 75.46875 24.511719 74.925781 25.417969 C 74.382812 26.328125 74.355469 27.453125 74.859375 28.386719 C 81.777344 41.636719 81.777344 54.363281 74.859375 67.613281 C 74.34375 68.566406 74.378906 69.722656 74.957031 70.640625 C 75.535156 71.558594 76.558594 72.09375 77.640625 72.039062 C 78.726562 71.988281 79.695312 71.355469 80.179688 70.386719 C 87.859375 55.675781 87.859375 40.324219 80.179688 25.613281 C 79.671875 24.605469 78.640625 23.964844 77.511719 23.960938 Z M 68.34375 33.992188 C 67.339844 34.035156 66.421875 34.578125 65.902344 35.441406 C 65.382812 36.304688 65.328125 37.367188 65.761719 38.277344 C 68.792969 44.914062 68.789062 51.121094 65.746094 57.757812 C 65.292969 58.734375 65.394531 59.875 66.015625 60.753906 C 66.636719 61.632812 67.679688 62.113281 68.75 62.011719 C 69.820312 61.910156 70.753906 61.242188 71.199219 60.261719 C 74.875 52.246094 74.882812 43.796875 71.21875 35.78125 C 70.71875 34.648438 69.578125 33.9375 68.34375 33.992188 Z M 68.34375 33.992188 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 96 96" width="96px" height="96px">
<g id="surface94463317">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(224,95,101);fill-opacity:1;" d="M 10.949219 7.96875 C 9.726562 7.96875 8.628906 8.710938 8.167969 9.839844 C 7.710938 10.972656 7.984375 12.269531 8.859375 13.121094 L 27.738281 32 L 19 32 C 14.039062 32 10 36.039062 10 41 L 10 55 C 10 59.960938 14.039062 64 19 64 L 32.238281 64 L 50.679688 80.398438 C 51.738281 81.339844 53.039062 81.820312 54.378906 81.820312 C 55.160156 81.820312 55.9375 81.660156 56.699219 81.320312 C 58.738281 80.398438 60 78.4375 60 76.21875 L 60 64.261719 L 82.859375 87.121094 C 83.613281 87.90625 84.730469 88.21875 85.78125 87.945312 C 86.832031 87.671875 87.652344 86.851562 87.925781 85.800781 C 88.199219 84.75 87.886719 83.632812 87.101562 82.878906 L 13.101562 8.878906 C 12.535156 8.296875 11.761719 7.96875 10.949219 7.96875 Z M 54.339844 14.175781 C 53.019531 14.1875 51.730469 14.675781 50.679688 15.601562 L 38.839844 26.140625 L 60 47.300781 L 60 19.78125 C 60 17.5625 58.738281 15.601562 56.699219 14.679688 C 55.933594 14.335938 55.132812 14.167969 54.339844 14.175781 Z M 77.28125 24.011719 C 76.894531 24.042969 76.503906 24.148438 76.140625 24.339844 C 74.660156 25.101562 74.097656 26.917969 74.859375 28.378906 C 81.121094 40.339844 81.699219 52 76.621094 63.921875 L 81.140625 68.441406 C 87.921875 54.222656 87.601562 39.820312 80.179688 25.621094 C 79.609375 24.511719 78.445312 23.917969 77.28125 24.011719 Z M 68.40625 34.023438 C 68.015625 34.035156 67.617188 34.125 67.238281 34.300781 C 65.738281 35 65.082031 36.761719 65.761719 38.28125 C 68.242188 43.703125 68.660156 48.980469 67.039062 54.339844 L 71.71875 59.019531 C 74.917969 51.300781 74.757812 43.5 71.21875 35.78125 C 70.707031 34.65625 69.578125 33.988281 68.40625 34.023438 Z M 68.40625 34.023438 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 96 96" width="96px" height="96px">
<g id="surface94461773">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(110, 112, 113);fill-opacity:1;" d="M 64.433594 14.203125 C 64.167969 14.203125 63.90625 14.222656 63.640625 14.257812 C 62.582031 14.402344 61.539062 14.835938 60.679688 15.601562 C 60.679688 15.601562 60.679688 15.605469 60.679688 15.605469 L 42.234375 32 L 29 32 C 24.066406 32 20 36.066406 20 41 L 20 55 C 20 59.933594 24.066406 64 29 64 L 42.234375 64 L 60.679688 80.394531 C 62.402344 81.925781 64.84375 82.148438 66.691406 81.320312 C 68.539062 80.492188 70 78.515625 70 76.210938 L 70 19.789062 C 70 17.484375 68.542969 15.511719 66.695312 14.679688 C 66.003906 14.367188 65.226562 14.203125 64.433594 14.203125 Z M 64.433594 14.203125 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 907 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-x"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><line x1="23" y1="9" x2="17" y2="15"></line><line x1="17" y1="9" x2="23" y2="15"></line></svg>

After

Width:  |  Height:  |  Size: 365 B

1
dunst/assets/volume.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#cba6f7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-volume-2"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon><path d="M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path></svg>

After

Width:  |  Height:  |  Size: 354 B

73
dunst/dunstrc Normal file
View File

@ -0,0 +1,73 @@
[global]
monitor = 0
follow = none
width = 300
height = (0, 145)
origin = top-right
alignment = "left"
vertical_alignment = "center"
ellipsize = "middle"
offset = (15, 15)
padding = 15
horizontal_padding = 15
text_icon_padding = 15
icon_position = "left"
min_icon_size = 48
max_icon_size = 64
progress_bar = true
progress_bar_height = 8
progress_bar_frame_width = 1
progress_bar_min_width = 150
progress_bar_max_width = 300
separator_height = 2
frame_width = 2
frame_color = "#313244"
separator_color = "frame"
corner_radius = 8
transparency = 0
gap_size = 8
line_height = 0
notification_limit = 0
idle_threshold = 120
history_length = 20
show_age_threshold = 60
markup = "full"
font = "monospace 10"
format = "<b>%s</b>\n%b "
word_wrap = "yes"
sort = "yes"
shrink = "no"
indicate_hidden = "yes"
sticky_history = "yes"
ignore_newline = "no"
show_indicators = "no"
stack_duplicates = true
always_run_script = true
hide_duplicate_count = false
ignore_dbusclose = false
force_xwayland = false
force_xinerama = false
mouse_left_click = "do_action"
mouse_middle_click = "close_all"
mouse_right_click = "close_current"
[experimental]
per_monitor_dpi = false
[urgency_low]
background = "#1e1e2e"
foreground = "#cdd6f4"
highlight = "#cba6f7"
timeout = 4
[urgency_normal]
background = "#1e1e2e"
foreground = "#cdd6f4"
highlight = "#cba6f7"
timeout = 6
[urgency_critical]
background = "#1e1e2e"
foreground = "#cdd6f4"
highlight = "#cba6f7"
timeout = 0

45
dunst/scripts/openEwwPopup.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/bash
DND_LOCK_FILE="$HOME/.cache/dnd-lock.lock"
LOCK_FILE="$HOME/.cache/eww-notif-popup.lock"
EWW_BIN="$HOME/.local/bin/eww"
finish() {
${EWW_BIN} update noti=false; sleep 0.075
${EWW_BIN} close notification-popup
rm -f ${LOCK_FILE}
}
# Run eww daemon if not running
if [[ ! `pidof eww` ]]; then
${EWW_BIN} daemon
sleep 1
else
if [[ -f "$LOCK_FILE" ]]; then
sleep 0.275 && ${EWW_BIN} update has_another_notif=true && canberra-gtk-play -i message-new-instant
fi
if [[ ! -f "$DND_LOCK_FILE" ]]; then
KILLED=false
for pid in $(pidof -x openEwwPopup.sh); do
if [ $pid != $$ ]; then
kill -9 $pid
KILLED=true
fi
done >/dev/null
if ! $KILLED; then
sleep 0.5
${EWW_BIN} update noti=true
${EWW_BIN} open notification-popup
canberra-gtk-play -i message
touch ${LOCK_FILE}
fi
# ${EWW_BIN} update has_another_notif=true
sleep 5
finish
unset KILLED
${EWW_BIN} update has_another_notif=false
fi
fi

View File

@ -0,0 +1,3 @@
#!/bin/bash
canberra-gtk-play -i message

17
dunst/scripts/songArtLogger.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
TMP_DIR="$HOME/.cache/dunst"
TMP_COVER_PATH="$TMP_DIR/$DUNST_SUMMARY.png"
TMP_TEMP_PATH="$TMP_DIR/temp.png"
if [ ! -d "$TMP_DIR" ]; then
mkdir -p "$TMP_DIR"
fi
ART_FROM_SPOTIFY="$(playerctl -p %any,spotify metadata mpris:artUrl | sed -e 's/open.spotify.com/i.scdn.co/g')"
if [[ $(playerctl -p spotify,%any,firefox,chromium,brave,mpd metadata mpris:artUrl) ]]; then
curl -s "$ART_FROM_SPOTIFY" --output "$TMP_COVER_PATH"
fi
cp "$TMP_TEMP_PATH" "$TMP_COVER_PATH"

16
ghostty/config Normal file
View File

@ -0,0 +1,16 @@
# Config generated by Ghostty Config
shell-integration = zsh
term = xterm-256color
#custom-shader = ~/.config/ghostty/shaders/bettercrt.glsl
#custom-shader-animation = true
window-decoration = true
background-opacity = 0.90
theme = catppuccin-mocha
cursor-style = block
font-size = 14
font-thicken = true
font-family = "FiraMono Nerd Font"
keybind = global:cmd+s=toggle_quick_terminal
mouse-hide-while-typing = true
class = "ghostty"

1
ghostty/shaders Submodule

@ -0,0 +1 @@
Subproject commit a17573fb254e618f92a75afe80faa31fd5e09d6f

31
ghostty/themes/stardust Normal file
View File

@ -0,0 +1,31 @@
# ------------------------------
# stardust ghostty theme
# Save this as, for example, "~/.config/ghostty/themes/stardust"
# Then set in your Ghostty config: theme = stardust
# ------------------------------
palette = 0=#18181b
palette = 1=#F44747
palette = 2=#fcca7c
palette = 3=#f7a41d
palette = 4=#acd2ac
palette = 5=#fcca7c
palette = 6=#4EC9B0
palette = 7=#dcdccc
palette = 8=#2b2b2b
palette = 9=#D16969
palette = 10=#ffc1c1
palette = 11=#fcca7c
palette = 12=#fcca7c
palette = 13=#C586C0
palette = 14=#4EC9B0
palette = 15=#ffffff
background = #18181b
foreground = #dcdccc
cursor-color = #8faf9f
cursor-text = #000d18
selection-background = #5e81ac
selection-foreground = #dcdccc

23
hypr/hypridle.conf Normal file
View File

@ -0,0 +1,23 @@
$lock_cmd = pidof hyprlock || hyprlock
$suspend_cmd = pidof steam || loginctl suspend # fuck nvidia
general {
lock_cmd = $lock_cmd
before_sleep_cmd = loginctl lock-session
}
listener {
timeout = 180 # 3mins
on-timeout = loginctl lock-session
}
listener {
timeout = 240 # 4mins
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
listener {
timeout = 540 # 9mins
on-timeout = $suspend_cmd
}

263
hypr/hyprland.conf Normal file
View File

@ -0,0 +1,263 @@
monitor=,1360x768,auto,1,bitdepth,8
monitor=,preferred,auto,1,mirror,eDP-1,bitdepth,8
xwayland {
force_zero_scaling = true
}
# apps
$terminal = ghostty
$browser = firefox
$fileManager = $terminal --command="lf"
$passwordManager = /usr/bin/keepassxc
# yes I have Discord virtualised, don't judge me
$discord = /home/yu/.local/bin/distrobox-enter -n pkg -- /usr/bin/discord
# menus and scripts
$emojipicker = ~/.config/wofi/scripts/emojis.sh
$menu = ~/scripts/menu
$powermenu = ~/.config/wofi/scripts/power.sh
exec-once = $terminal
exec-once = pipewire & wireplumber & pipewire-pulse
exec-once = waybar & hyprpaper
exec-once = [ ! -s ~/.config/mpd/pid ] && mpd
exec-once = hyprctl dispatch exec playerctl start
exec-once = playerctld daemon
exec-once = dunst -conf .config/dunst/dunstrc
exec-once = wl-paste --watch cliphist store
exec-once = hypridle
exec-once = hyprctl setcursor Makise-Kurisu-Cursor 24
exec-once = hyprctl hyprpaper reload ,~/Pictures/wallpaper/2246.png # default
env = HYPRCURSOR_THEME,Makise-Kurisu-Cursor
env = HYPRCURSOR_SIZE,24
# fix flickering cursor
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
debug {
disable_logs = false
damage_tracking = 0
}
cursor {
inactive_timeout = 0
no_hardware_cursors = true
}
render {
explicit_sync = 2
explicit_sync_kms = 2
}
opengl {
nvidia_anti_flicker = 0
}
# end fix
general {
gaps_in = 6
gaps_out = 12
border_size = 2
col.active_border = rgba(66ccffee) rgba(99ffccff) 45deg
col.inactive_border = rgba(444444aa)
resize_on_border = false
allow_tearing = true
layout = master
}
decoration {
rounding = 12
active_opacity = 0.95;
inactive_opacity = 0.8;
blur {
enabled = true
xray = false # Disable for softer edges (xray can look harsh)
special = true # Apply blur to "special" layers (dialogs, etc.)
new_optimizations = true # Keep this for performance
size = 10 # Slightly smaller for smoother performance
passes = 3 # Fewer passes = less GPU load (but still creamy)
brightness = 0.9 # Slightly dim to reduce glare
noise = 0.02 # Subtle grain for "film-like" texture
contrast = 1.1 # Slight boost for vibrancy
popups = true # Blur popups (essential for Aero)
popups_ignorealpha = 0.5 # Softer popup transparency
# Add these experimental tweaks:
vibrancy = 0.2 # If supported (enhances colors under blur)
vibrancy_darkness = 0.1 # Prevents oversaturation
}
# Shadow
shadow {
enabled = true
ignore_window = true
range = 12
offset = 0 2
render_power = 3
color = rgba(100, 180, 255, 0.6)
}
# Dim
dim_inactive = false
dim_strength = 0.1
dim_special = 0
}
animations {
enabled = yes
bezier = linear, 0, 0, 1, 1
bezier = aero_gentle, 0.25, 0.1, 0.25, 1.0
bezier = aero_bounce, 0.5, 1.5, 0.5, 0.9
bezier = aero_snap, 0.4, 0, 0.2, 1
bezier = aero_menu, 0.1, 1, 0, 1
animation = windows, 1, 3, aero_bounce, popin 70%
#this crap breaks slurp do not use it
#animation = windowsIn, 1, 3, aero_gentle, slideup 30%
#animation = windowsOut, 1, 3, aero_snap, slidedown 30%
animation = border, 1, 5, linear
#animation = layersIn, 1, 3, aero_gentle, slideup 20%
#animation = layersOut, 1, 2, aero_snap, slidedown 20%
animation = fadeLayersIn, 1, 2, aero_gentle
animation = fadeLayersOut, 1, 1, aero_snap
animation = workspaces, 1, 5, aero_menu, slidefadevert 15%
animation = specialWorkspace, 1, 4, aero_bounce, slidevert
animation = fade, 1, 3, aero_gentle
animation = borderangle, 1, 10, linear, loop
}
master {
new_status = master
}
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
vfr = 0
enable_swallow = true
swallow_regex = (allacritty|Alacritty|ghostty|Ghostty)
}
input {
kb_layout = us
kb_variant = altgr-intl
kb_options = deadkeys
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
gestures {
workspace_swipe = false # this can be fun if I used a laptop
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
# idk???
device {
name = epic-mouse-v1
sensitivity = -0.5
}
# ==== Essentials ====
$mainMod = SUPER
bind = $mainMod, RETURN, exec, $terminal # Enter to launch terminal (intuitive)
bind = $mainMod, Q, killactive # Q = "Quit window" (mnemonic)
bind = $mainMod SHIFT, Q, exec, $powermenu # Shift+Q for power menu
bind = $mainMod, SPACE, exec, $menu # Spacebar for app launcher (like Spotlight)
# ==== Apps ====
bind = $mainMod, E, exec, $fileManager # E = Explorer
bind = $mainMod, D, exec, $discord # D = Discord
bind = $mainMod, P, exec, $passwordManager # P = Password manager
bind = $mainMod, X, exec, $emojipicker # X = eXpression (emoji)
bind = $mainMod SHIFT, B, exec, kill $(pidof waybar) || waybar # toggle waybar, reloads waybar
# ==== Window Management ====
bind = CONTROL, TAB, workspace, previous # Normie feature
bind = $mainMod, F, fullscreen, 1 # F = Fullscreen
bind = $mainMod SHIFT, F, fullscreen, 0 # Shift+F = Fake fullscreen
bind = $mainMod, V, togglefloating # V = "levitate" window
bind = $mainMod SHIFT, M, exit # M = "Murder" Hyprland (emergency)
bind = $mainMod, i, centerwindow # C = Center window (new!)
# ==== Navigation ====
bind = $mainMod, J, layoutmsg, cyclenext noloop
bind = $mainMod, K, layoutmsg, cycleprev noloop
bind = $mainMod, Y, layoutmsg, toggledwindle
bind = $mainMod, T, togglegroup
bind = $mainMod, O, layoutmsg, focusmaster
bind = $mainMod SHIFT, O, layoutmsg, swapwithmaster
# ==== Workspaces ====
bind = $mainMod, 1-9, workspace, 1-9 # Numbers for workspaces
bind = $mainMod, 0, workspace, 10
bind = $mainMod SHIFT, 1-9, movetoworkspace, 1-9 # Shift to move windows
bind = $mainMod SHIFT, 0, movetoworkspace, 10
bind = $mainMod, mouse_down, workspace, e+1 # Scroll workspaces
bind = $mainMod, mouse_up, workspace, e-1
# ==== Media/System ====
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = , XF86MonBrightnessUp, exec, brightnessctl s +10%
bindel = , XF86MonBrightnessDown, exec, brightnessctl s 10%-
# ==== Screenshots ====
bind = , PRINT, exec, grim -g "$(slurp)" - | wl-copy # Area → clipboard
bind = $mainMod, U, exec, grim - | wl-copy # Fullscreen → clipboard
bind = $mainMod SHIFT, U, exec, sh ~/scripts/upload # this is epic uploader to my selfhosted site
# ==== Utilities ====
bind = $mainMod, R, exec, hyprctl reload # R = Reload config
bind = $mainMod, S, togglespecialworkspace, magic # S = Scratchpad
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
bind = $mainMod, W, exec, ~/.config/hypr/scripts/wallpaper.sh # W = Wallpaper cycler
# ==== Mouse Controls ====
bindm = $mainMod, mouse:272, movewindow # Left-click drag to move
bindm = $mainMod, mouse:273, resizewindow # Right-click drag to resize
# ==== Workspaces ====
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
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
windowrule = suppressevent maximize, class:.*
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0

83
hypr/hyprlock.conf Normal file
View File

@ -0,0 +1,83 @@
$text_color = rgba(FFDAD6FF)
$entry_background_color = rgba(41000311)
$entry_border_color = rgba(896E6C55)
$entry_color = rgba(FFDAD6FF)
$font_family = Rubik Light
$font_family_clock = Rubik Light
$font_material_symbols = Material Symbols Rounded
background {
color = rgba(181818FF)
# path = "~/Pictures/wallpaper/default.jpg"
path = screenshot
blur_size = 15
blur_passes = 4
}
input-field {
monitor =
size = 250, 50
outline_thickness = 2
dots_size = 0.1
dots_spacing = 0.3
outer_color = $entry_border_color
inner_color = $entry_background_color
font_color = $entry_color
fade_on_empty = true
position = 0, 20
halign = center
valign = center
}
label { # Clock
monitor =
text = $TIME
color = $text_color
font_size = 65
font_family = $font_family_clock
position = 0, 300
halign = center
valign = center
}
label { # Date
monitor =
text = cmd[update:5000] date +"%A, %B %d"
color = $text_color
font_size = 17
font_family = $font_family
position = 0, 240
halign = center
valign = center
}
label { # User
monitor =
text =  $USER
color = $text_color
shadow_passes = 1
shadow_boost = 0.35
outline_thickness = 2
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
font_size = 20
font_family = $font_family
position = 0, 50
halign = center
valign = bottom
}
label { # Status
monitor =
text = cmd[update:1000] echo "<span foreground='##ff2222'>$(date)</span>"
color = $text_color
font_size = 14
font_family = $font_family
position = 30, -30
halign = left
valign = top
}

2
hypr/hyprpaper.conf Normal file
View File

@ -0,0 +1,2 @@
preload = /home/yu/Pictures/wallpaper/1.png
wallpaper = , /home/yu/Pictures/wallpaper/1.png

14
hypr/scripts/wallpaper.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/sh
WALLPAPER_DIR="$HOME/Pictures/wallpaper/"
CURRENT_WALL=$(hyprctl hyprpaper listloaded)
MONITOR="HDMI-A-1"
# Get a random wallpaper that is not the current one
WALLPAPER=$(find "$WALLPAPER_DIR" -type f ! -name "$(basename "$CURRENT_WALL")" | shuf -n 1)
# Ensure we unload them all
hyprctl hyprpaper unload all
# Apply the selected wallpaper
hyprctl hyprpaper reload $MONITOR,"$WALLPAPER"

9
mako/config Normal file
View File

@ -0,0 +1,9 @@
background-color=#f0f0f0e0
text-color=#111111
border-color=#aaaaaa
border-size=2
border-radius=6
padding=10
default-timeout=5000
font=JetBrainsMono Nerd Font 13

650
nvim/init.lua Normal file
View File

@ -0,0 +1,650 @@
local vim = vim
local Plug = vim.fn['plug#']
local o = vim.opt
local g = vim.g
o.title = true
g.mapleader = ' '
g.maplocalleader = ' '
g.toggle_theme_icon = ""
g.have_nerd_font = true
-- Line numbers
o.number = true
-- o.spell = true
o.spelllang="en_us,es"
-- Configure how new splits should be opened
o.splitright = true
o.splitbelow = true
o.inccommand = 'split'
-- Tabs
o.shiftwidth = 2
o.tabstop = 2
o.undofile = true
o.undodir = vim.fn.stdpath("data") .. "/undo//"
-- https://www.reddit.com/r/neovim/comments/wlkq0e/neovim_configuration_to_backup_files_with/
o.backup = true
o.backupdir = vim.fn.stdpath("data") .. "/backup//"
-- o.clipboard = "unnamedplus"
-- Statuscolumn
-- Set sign column to be 4.
-- So, if I have a new diff, It'll not feel weird, by the signcolumn expanding
o.signcolumn = "yes:1"
-- Statusline
o.cmdheight = 0
o.laststatus = 3
-- Folds
o.foldcolumn = "1"
o.foldlevel = 99
o.foldlevelstart = 99
o.foldenable = true
-- Enable break indent
o.breakindent = true
o.list = true
o.listchars = { tab = '» ', trail = '·', nbsp = '' }
-- Scrolloff
o.scrolloff = 15
-- Show which line your cursor is on
o.cursorline = true
-- Searching
o.ignorecase = true
o.smartcase = true
o.pumblend = 10 -- Popup blend
o.pumheight = 10 -- Maximum number of entries in a popup
vim.opt.hlsearch = true
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
local map = vim.keymap.set
map('v', "<leader>y", '"+y')
map('n', '<C-j>', ':Treewalker Down<CR>', { noremap = true })
map('n', '<C-k>', ':Treewalker Up<CR>', { noremap = true })
map('n', '<C-h>', ':Treewalker Left<CR>', { noremap = true })
map('n', '<C-l>', ':Treewalker Right<CR>', { noremap = true })
-- Diagnostic keymaps
map('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous [D]iagnostic message' })
map('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next [D]iagnostic message' })
map('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' })
map('v', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
-- Prevent CapsLock from interfering with movement keys
map('n', 'J', 'j', { noremap = true })
map('n', 'K', 'k', { noremap = true })
map('n', 'H', 'h', { noremap = true })
map('n', 'L', 'l', { noremap = true })
map('n', 'U', 'u', { noremap = true })
-- Better window navigation (works across splits)
map('n', '<C-h>', '<C-w>h', { desc = 'Move to left window' })
map('n', '<C-j>', '<C-w>j', { desc = 'Move to lower window' })
map('n', '<C-k>', '<C-w>k', { desc = 'Move to upper window' })
map('n', '<C-l>', '<C-w>l', { desc = 'Move to right window' })
-- Keep cursor centered during searches and jumps
map('n', 'n', 'nzzzv', { desc = 'Next search result (centered)' })
map('n', 'N', 'Nzzzv', { desc = 'Prev search result (centered)' })
map('n', 'G', 'Gzz', { desc = 'Jump to line (centered)' })
-- Clear last search highlight
map('n', '<leader>nh', ':nohlsearch<CR>', { desc = 'Clear search highlights' })
-- Half-page jumping with centered cursor
map('n', '<C-d>', '<C-d>zz')
map('n', '<C-u>', '<C-u>zz')
-- Move lines up/down in visual mode
map('v', 'J', ":m '>+1<CR>gv=gv", { desc = 'Move selection down' })
map('v', 'K', ":m '<-2<CR>gv=gv", { desc = 'Move selection up' })
-- Quick fix list navigation
map('n', '<C-q>', ':cnext<CR>', { desc = 'Next quickfix item' })
map('n', '<C-Q>', ':cprev<CR>', { desc = 'Previous quickfix item' })
-- System clipboard integration
map('n', '<leader>p', '"+p', { desc = 'Paste from system clipboard' })
map('n', '<leader>P', '"+P', { desc = 'Paste from system clipboard (before)' })
-- Better indentation
map('v', '<', '<gv', { desc = 'Unindent and stay in visual mode' })
map('v', '>', '>gv', { desc = 'Indent and stay in visual mode' })
-- Buffer navigation
map('n', '<leader>bn', ':bnext<CR>', { desc = 'Next buffer' })
map('n', '<leader>bp', ':bprevious<CR>', { desc = 'Previous buffer' })
map('n', '<leader>bd', ':bdelete<CR>', { desc = 'Delete buffer' })
-- Replace current word
map('n', '<leader>s', [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]],
{ desc = 'Replace current word' })
-- Keep search matches in middle
map('n', '*', '*zz', { desc = 'Search word under cursor (centered)' })
map('n', '#', '#zz', { desc = 'Search backward word (centered)' })
-- Quick save/quit
map('n', '<leader>w', ':w<CR>', { desc = 'Save file' })
map('n', '<leader>q', ':q<CR>', { desc = 'Quit window' })
-- Disable hell
map('n', 'Q', 'gq')
-- Toggle terminal
map('n', '<leader>tt', ':terminal<CR>',
{ desc = '[T]oggle [T]erminal' })
-- Escape terminal mode
map('t', '<Esc>', '<C-\\><C-n>',
{ desc = 'Exit terminal mode' })
-- Open chad tree
map('n', '<leader>.', ':CHADopen<CR>', { noremap = true })
-- Quick escape from insert mode
map('i', 'jk', '<Esc>', { desc = 'Exit insert mode' })
-- Clear search highlights
map('n', '<Esc>', '<cmd>nohlsearch<CR>',
{ desc = 'Clear search highlights' })
-- Toggle spellcheck
map('n', '<leader>ts', ':set spell!<CR>',
{ desc = '[T]oggle [S]pellcheck' })
-- Epic Golang JSON metadata macro, piss off pussies
map('n', '<leader>j', '_ywA<Space><Esc>pbeld$bguwciw"<Esc>pA"<Esc>F"<Ignore>ijson:<Esc>bi`<Esc>A`<Esc>_j', { noremap = true })
map('n', '<leader>_', 'ebcw_<Esc>', { noremap = true, desc = 'Replace word with _ (to ignore variable)' })
vim.call('plug#begin')
-- Style
Plug 'folke/tokyonight.nvim'
Plug 'olimorris/onedarkpro.nvim'
Plug 'xiyaowong/transparent.nvim'
Plug 'alexblackie/lunarised'
Plug 'starryleo/starry-vim-colorschemes'
-- lsp
Plug('williamboman/mason.nvim')
Plug('williamboman/mason-lspconfig.nvim')
-- more lsp
Plug('neovim/nvim-lspconfig')
Plug('L3MON4D3/LuaSnip', {
['tag'] = 'v2.*',
})
Plug 'marilari88/twoslash-queries.nvim'
Plug 'neovim/nvim-lspconfig'
-- auto complete
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
Plug 'zbirenbaum/copilot-cmp' -- copilot
Plug 'L3MON4D3/LuaSnip'
Plug 'saadparwaiz1/cmp_luasnip'
-- useful stuff
Plug 'echasnovski/mini.nvim'
Plug 'zbirenbaum/copilot.lua'
Plug 'ms-jpq/chadtree'
Plug 'ryanoasis/vim-devicons'
Plug 'kyazdani42/nvim-web-devicons'
Plug 'jetzig-framework/zmpl.vim'
Plug 'folke/which-key.nvim'
-- Personalization
Plug 'nvim-lualine/lualine.nvim'
Plug 'goolord/alpha-nvim'
Plug 'lukas-reineke/indent-blankline.nvim'
Plug 'karb94/neoscroll.nvim'
Plug 'folke/noice.nvim'
Plug 'MunifTanjim/nui.nvim'
-- More stuff
Plug 'SmiteshP/nvim-navic'
Plug 'kr40/nvim-macros'
-- tree sitter
Plug 'nvim-treesitter/nvim-treesitter'
Plug('aaronik/treewalker.nvim', {
opts = {
highlight = true
}
})
vim.call('plug#end')
vim.cmd('set background=dark')
-- Better Around/Inside textobjects
--
-- Examples:
-- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [']quote
-- - ci' - [C]hange [I]nside [']quote
require('mini.ai').setup { n_lines = 500 }
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require('mini.surround').setup()
-- Simple and easy statusline.
-- You could remove this setup call if you don't like it,
-- and try some other statusline plugin
local statusline = require 'mini.statusline'
-- set use_icons to true if you have a Nerd Font
statusline.setup { use_icons = vim.g.have_nerd_font }
-- You can configure sections in the statusline by overriding their
-- default behavior. For example, here we set the section for
-- cursor location to LINE:COLUMN
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function()
return '%2l:%-2v'
end
-- ... and there is more!
-- Check out: https://github.com/echasnovski/mini.nvim
require('mini.pairs').setup()
require('nvim-treesitter.configs').setup({
-- A list of parser names, or "all" (the listed parsers MUST always be installed)
ensure_installed = {'bash', 'c', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc'},
sync_install = false,
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
},
})
require("mason").setup()
local lspconfig = require('lspconfig')
lspconfig.zls.setup({
{cmd = '~/.zig/zls'}
})
local lsp_cmds = vim.api.nvim_create_augroup('lsp_cmds', {clear = true})
vim.api.nvim_create_autocmd('LspAttach', {
group = lsp_cmds,
desc = 'LSP actions',
callback = function()
local bufmap = function(mode, lhs, rhs)
vim.keymap.set(mode, lhs, rhs, {buffer = true})
end
bufmap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>')
bufmap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<cr>')
bufmap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>')
bufmap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<cr>')
bufmap('n', 'go', '<cmd>lua vim.lsp.buf.type_definition()<cr>')
bufmap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<cr>')
bufmap('n', 'gs', '<cmd>lua vim.lsp.buf.signature_help()<cr>')
bufmap('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<cr>')
bufmap({'n', 'x'}, '<F3>', '<cmd>lua vim.lsp.buf.format({async = true})<cr>')
bufmap('n', '<F4>', '<cmd>lua vim.lsp.buf.code_action()<cr>')
bufmap('n', 'gl', '<cmd>lua vim.diagnostic.open_float()<cr>')
bufmap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<cr>')
bufmap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<cr>')
end
})
require('mason-lspconfig').setup({
ensure_installed = {},
handlers = {
function(server)
lspconfig[server].setup({
capabilities = lsp_capabilities,
})
end,
}
})
vim.opt.completeopt = {'menu', 'menuone', 'noselect'}
require("copilot").setup({
suggestion = { enabled = false },
panel = { enabled = false },
})
require("copilot_cmp").setup()
local cmp = require('cmp')
local luasnip = require('luasnip')
local select_opts = {behavior = cmp.SelectBehavior.Select}
local has_words_before = function()
if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then return false end
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_text(0, line-1, 0, line-1, col, {})[1]:match("^%s*$") == nil
end
-- See :help cmp-config
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end
},
sources = {
{name = 'path'},
{name = 'nvim_lsp', keyword_length = 3},
{name = 'buffer', keyword_length = 3},
{name = 'luasnip', keyword_length = 2},
{name = 'copilot', group_index = 2}
},
window = {
documentation = cmp.config.window.bordered()
},
formatting = {
fields = {'menu', 'abbr', 'kind'},
format = function(entry, item)
local menu_icon = {
nvim_lsp = 'λ',
luasnip = '',
buffer = 'Ω',
path = '🖫',
}
item.menu = menu_icon[entry.source.name]
return item
end,
},
-- See :help cmp-mapping
mapping = {
['<Up>'] = cmp.mapping.select_prev_item(select_opts),
['<Down>'] = cmp.mapping.select_next_item(select_opts),
['<C-p>'] = cmp.mapping.select_prev_item(select_opts),
['<C-n>'] = cmp.mapping.select_next_item(select_opts),
['<C-u>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({select = false}),
['<C-d>'] = cmp.mapping(function(fallback)
if luasnip.jumpable(1) then
luasnip.jump(1)
else
fallback()
end
end, {'i', 's'}),
['<C-b>'] = cmp.mapping(function(fallback)
if luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, {'i', 's'}),
['<Tab>'] = cmp.mapping(function(fallback)
local col = vim.fn.col('.') - 1
if cmp.visible() and has_words_before() then
cmp.select_next_item({ behavior = cmp.SelectBehavior.Select })
elseif cmp.visible() then
cmp.select_next_item(select_opts)
elseif col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then
fallback()
else
cmp.complete()
end
end, {'i', 's'}),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item(select_opts)
else
fallback()
end
end, {'i', 's'}),
},
})
-- auto save
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = "hyprland.conf",
callback = function()
os.execute("hyprctl reload")
vim.cmd.edit()
end
})
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = "init.lua",
callback = function()
-- Reload config without restarting Neovim
vim.cmd("source $MYVIMRC")
end
})
-- Execute go tidy on save because nico told me so
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = "*.go",
callback = function()
vim.cmd("silent! !go mod tidy")
vim.cmd("silent! edit")
end
})
-- Format on save
vim.api.nvim_create_autocmd('BufWritePre', {
pattern = '*',
callback = function() vim.lsp.buf.format() end
})
-- Code actions menu
map('n', '<leader>ca', vim.lsp.buf.code_action,
{ desc = '[C]ode [A]ctions' })
-- Find references
map('n', '<leader>gr', vim.lsp.buf.references,
{ desc = '[G]oto [R]eferences' })
-- files to the right
local chadtree_settings = {
['view.open_direction'] = "right",
['view.width'] = 20
}
vim.api.nvim_set_var("chadtree_settings", chadtree_settings)
-- Customization
require('lualine').setup {
options = {
theme = 'tokyonight',
component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''},
globalstatus = true,
icons_enabled = true
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {
{
'filename',
path = 1, -- Show relative path
symbols = { modified = '', readonly = '' }
}
},
lualine_x = {
'encoding',
{
'fileformat',
symbols = { unix = ' LF' }
},
{
'filetype',
icons_enabled = true,
icon = { align = 'right' }
}
},
lualine_y = {'progress'},
lualine_z = {'location'}
},
extensions = {'chadtree', 'fugitive'}
}
local alpha = require'alpha'
local dashboard = require'alpha.themes.dashboard'
dashboard.section.header.val = {
[[ __ __ __ __ ______ __ __ ______ __ __ ]],
[[/\ \_\ \ /\ \/\ \ /\___ \ /\ \/\ \ /\ == \ /\ \/\ \ ]],
[[\ \____ \\ \ \_\ \\/_/ /__\ \ \_\ \\ \ __- \ \ \_\ \ ]],
[[ \/\_____\\ \_____\ /\_____\\ \_____\\ \_\ \_\\ \_____\]],
[[ \/_____/ \/_____/ \/_____/ \/_____/ \/_/ /_/ \/_____/]]
}
dashboard.section.buttons.val = {
dashboard.button("e", " New file", ":ene <BAR> startinsert <CR>"),
dashboard.button("f", "󰈞 Find file", ":CHADopen<CR>"),
dashboard.button("c", " Config", ":e ~/.config/nvim/init.lua<CR>"),
dashboard.button("q", " Quit", ":qa<CR>"),
}
alpha.setup(dashboard.config)
local highlight = {
"CursorColumn",
-- "Whitespace",
}
-- Indent guides
require('ibl').setup {
indent = { highlight = highlight, char = "" },
scope = { enabled = false },
}
-- Smooth scrolling
require('neoscroll').setup {
mappings = {'<C-u>', '<C-d>', 'zz', 'zt', 'zb'},
hide_cursor = true,
stop_eof = true,
respect_scrolloff = false,
}
require('nvim-navic').setup {
icons = {
File = "󰈙 ",
Module = "",
Namespace = "󰌗 ",
Package = "",
Class = "󰌗 ",
Method = "󰆧 ",
Property = "",
Field = "",
Constructor = "",
Enum = "󰕘",
Interface = "󰕘",
Function = "󰊕 ",
Variable = "󰆧 ",
Constant = "󰏿 ",
String = "󰀬 ",
Number = "󰎠 ",
Boolean = "",
Array = "󰅪 ",
Object = "󰅩 ",
Key = "󰌋 ",
Null = "󰟢 ",
EnumMember = "",
Struct = "󰌗 ",
Event = "",
Operator = "󰆕 ",
TypeParameter = "󰊄 ",
}
}
vim.o.winbar = "%{%v:lua.require'nvim-navic'.get_location()%}"
map('n', '<leader>tt', function()
local height = math.ceil(vim.o.lines * 0.3)
vim.api.nvim_command('botright split | resize ' .. height)
vim.api.nvim_command('terminal')
end, { desc = 'Open floating terminal' })
-- Better theme configuration
require('tokyonight').setup {
style = 'night',
transparent = true,
styles = {
floats = 'transparent',
sidebars = 'transparent'
},
on_highlights = function(hl, c)
hl.TelescopeBorder = { fg = c.bg_dark, bg = c.bg_dark }
hl.TelescopePromptBorder = { fg = c.orange, bg = c.bg }
end
}
vim.cmd.colorscheme('tokyonight')
-- Etc
require('noice').setup {
cmdline = {
view = 'cmdline_popup',
format = {
cmdline = { pattern = '^:', icon = '', lang = 'vim' },
search_down = { kind = 'search', pattern = '^/', icon = ' ', lang = 'regex' },
search_up = { kind = 'search', pattern = '^%?', icon = ' ', lang = 'regex' },
}
},
popupmenu = {
backend = 'nui',
},
views = {
cmdline_popup = {
position = { row = 5, col = '50%' },
size = { width = 60, height = 'auto' },
}
}
}
require('which-key').setup {
plugins = {
marks = true,
registers = true,
spelling = { enabled = true },
presets = {
operators = true,
motions = true,
text_objects = true,
windows = true,
nav = true,
z = true,
g = true
}
},
}

189
rofi/config.rasi Normal file
View File

@ -0,0 +1,189 @@
configuration {
font: "NerdFont JetBrains Mono 10";
show-icons: true;
icon-theme: "Deepin2022-Dark";
drun-display-format: "{icon} {name}";
display-drun: "Apps";
scroll-method: 0;
}
* {
background: rgba ( 19, 19, 25, 50% );
normal-background: none;
urgent-background: none;
active-background: none;
alternate-normal-background: none;
alternate-urgent-background: none;
alternate-active-background: none;
selected-urgent-background: none;
selected-normal-background: none;
selected-active-background: none;
foreground: rgba ( 255, 239, 222, 100% );
urgent-foreground: @foreground;
normal-foreground: @foreground;
active-foreground: rgba ( 101, 172, 255, 100 % );
alternate-normal-foreground: @foreground;
alternate-urgent-foreground: @urgent-foreground;
alternate-active-foreground: @active-foreground;
selected-urgent-foreground: none;
selected-normal-foreground: none;
selected-active-foreground: none;
alternate-normal-foreground: @foreground;
selected-normal-foreground: rgba ( 255, 200, 87, 100% );
spacing: 2;
separatorcolor: rgba ( 45, 48, 59, 1 % );
background-color: rgba ( 0, 0, 0, 0 % );
}
window {
background-color: @background;
border: 0;
padding: 30;
}
listview {
lines: 10;
columns: 3;
}
mainbox {
border: 0;
padding: 0;
}
message {
border: 2px 0px 0px ;
border-color: @separatorcolor;
padding: 1px ;
}
textbox {
text-color: @foreground;
}
listview {
fixed-height: 0;
border: 8px 0px 0px ;
border-color: @separatorcolor;
spacing: 8px ;
scrollbar: false;
padding: 2px 0px 0px ;
}
element {
border: 0;
padding: 1px ;
}
element-text {
background-color: inherit;
text-color: inherit;
}
element.normal.normal {
background-color: @normal-background;
text-color: @normal-foreground;
}
element.normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
element.normal.active {
background-color: @active-background;
text-color: @active-foreground;
}
element.selected.normal {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
element.selected.urgent {
background-color: @selected-urgent-background;
text-color: @selected-urgent-foreground;
}
element.selected.active {
background-color: @selected-active-background;
text-color: @selected-active-foreground;
}
element.alternate.normal {
background-color: @alternate-normal-background;
text-color: @alternate-normal-foreground;
}
element.alternate.urgent {
background-color: @alternate-urgent-background;
text-color: @alternate-urgent-foreground;
}
element.alternate.active {
background-color: @alternate-active-background;
text-color: @alternate-active-foreground;
}
scrollbar {
width: 4px ;
border: 0;
handle-color: @normal-foreground;
handle-width: 8px ;
padding: 0;
}
mode-switcher {
border: 2px 0px 0px ;
border-color: @separatorcolor;
}
button {
spacing: 0;
text-color: @normal-foreground;
}
button.selected {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
inputbar {
spacing: 0;
text-color: @normal-foreground;
padding: 1px ;
}
case-indicator {
spacing: 0;
text-color: @normal-foreground;
}
entry {
spacing: 0;
text-color: @normal-foreground;
}
prompt {
spacing: 0;
text-color: @normal-foreground;
}
inputbar {
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
}
textbox-prompt-colon {
expand: false;
str: ":";
margin: 0px 0.3em 0em 0em ;
text-color: @normal-foreground;
}

278
scripts/bloat Executable file
View File

@ -0,0 +1,278 @@
#!/bin/sh
# ==== Desktop Environment Bloat Detector ====
detect_de() {
# Hierarchy of shame
echo "🖥️ DESKTOP ENVIRONMENT ANALYSIS:"
# ==== Tier 1: Chromium-Level Bloat ====
if [ -n "$GNOME_DESKTOP_SESSION_ID" ] || pgrep -x "gnome-shell" >/dev/null; then
echo " ☢️ GNOME DETECTED:"
echo " - 1.2GB RAM just to display a clock"
echo " - Systemd-required for 'OK' button animations"
echo " - Your extensions are duct tape on a sinking blimp"
elif [ -n "$KDE_FULL_SESSION" ] || pgrep -x "plasmashell" >/dev/null; then
echo " 🎪 KDE PLASMA DETECTED:"
echo " - 300 configuration options for your taskbar's tooltip delay"
echo " - Ships with 17 text editors (kate, kwrite, kedit...)"
echo " - 'Lightweight' like a neutron star"
# ==== Tier 2: "Minimal" Bloat ====
elif [ -n "$HYPRLAND_INSTANCE_SIGNATURE" ] || pgrep -x "Hyprland" >/dev/null; then
echo " 🐍 HYPRLAND DETECTED:"
echo " - Requires 200-line config just to open Firefox"
echo " - 'GPU accelerated' but stutters on 4K terminals"
echo " - Your animations are powered by copium"
elif [ -n "$SWAYSOCK" ] || pgrep -x "sway" >/dev/null; then
echo " 🌊 SWAY DETECTED:"
echo " - 'i3 but Wayland' (somehow 3x heavier)"
echo " - Your config file has 15 binds just for workspace switching"
echo " - Still depends on systemd (lol)"
elif pgrep -x "i3" >/dev/null; then
echo " 🧊 I3 DETECTED:"
echo " - Config file longer than your thesis"
echo " - 'Lightweight' but requires 5 daemons for notifications"
echo " - You manually patched gaps support and now it's slower than GNOME"
# ==== Tier 3: Respectable Minimalism ====
elif pgrep -x "lxqt-session" >/dev/null; then
echo " 🏗️ LXQT DETECTED:"
echo " - Basically Qt for people who miss 2010"
echo " - Somehow still depends on DBus"
echo " - The 'I almost switched to dwm' starter pack"
elif pgrep -x "lxsession" >/dev/null; then
echo " 🚲 LXDE DETECTED:"
echo " - GTK2 in 2024 (retro computing vibe)"
echo " - Last updated when Bitcoin was $200"
echo " - Actually runs on a Raspberry Pi (points for honesty)"
# ==== Tier 4: Ascended Basedness ====
elif pgrep -x "dwm" >/dev/null; then
echo " 🚀 DWM DETECTED:"
echo " - Config? You mean editing config.h and recompiling?"
echo " - 2000 lines of C just to avoid a .config file"
echo " - You patched in systray support and now it's 0.0001% less based"
elif pgrep -x "xmonad" >/dev/null; then
echo " λ XMONAD DETECTED:"
echo " - Haskell-powered tiling (because C wasn't obscure enough)"
echo " - Your xmobar config is a Turing-complete program"
echo " - 'Lightweight' but depends on 47 Haskell libraries"
# ==== Tier 5: Terminal Purists ====
elif [ "$TERM" = "linux" ] && [ -z "$DISPLAY" ]; then
echo " 🖴 TTY DETECTED:"
echo " - Real men use framebuffer terminals"
echo " - Your 'desktop environment' is tmux + ncurses"
echo " - 100% bloat-free (but you still miss mouse support)"
else
echo " ❓ MYSTERY DE:"
echo " - Did you install Enlightenment by accident?"
echo " - Or are you lying about using CDE?"
fi
}
# System info
init_system=$(ps -p 1 -o comm=)
libc=$(ldd /bin/sh 2>/dev/null | grep -q "musl" && echo "musl" || echo "glibc")
priv=$(command -v doas >/dev/null && echo "doas" || (command -v sudo >/dev/null && echo "sudo" || echo "none"))
dbus_status=$(pgrep -x dbus-daemon >/dev/null && echo "running" || (command -v dbus-daemon >/dev/null && echo "installed" || echo "absent"))
shell=$(basename "${SHELL:-$(grep "^$(id -u):" /etc/passwd | cut -d: -f7)}")
# Coreutils detection
if readlink --version 2>&1 | grep -q 'GNU coreutils'; then
coreutils="GNU coreutils"
coreutils_shame="💀 CRIMES AGAINST MINIMALISM: Using GNU coreutils (bloated, 102 binaries, huge size). Use sbase/busybox."
elif readlink --help 2>&1 | head -n1 | grep -q 'BusyBox'; then
coreutils="BusyBox"
coreutils_shame="✅ Based: BusyBox user detected (1MB static binary)."
else
coreutils="Unknown"
coreutils_shame="❓ Mystery coreutils. Probably worse than GNU."
fi
# ===== Package Manager Detection =====
echo "System: $(source /etc/os-release; echo "$PRETTY_NAME")"
if command -v xbps-query >/dev/null; then
# Void Linux
total=$(xbps-query -l | wc -l)
conscious=$(xbps-query -m | wc -l)
gnu=$(xbps-query -s gnu | wc -l)
elif command -v pacman >/dev/null; then
# Arch Linux
total=$(pacman -Qq | wc -l)
conscious=$(pacman -Qqen | wc -l)
gnu=$(pacman -Qqs gnu | wc -l)
elif command -v dpkg >/dev/null; then
# Debian/Ubuntu
total=$(dpkg -l | grep '^ii' | wc -l)
conscious=$(apt-mark showmanual | wc -l)
gnu=$(apt-mark showmanual | grep -i gnu | wc -l)
elif command -v rpm >/dev/null && command -v dnf >/dev/null; then
# Fedora/RHEL
total=$(rpm -qa | wc -l)
conscious=$(dnf history userinstalled | grep -v '^ID' | wc -l)
gnu=$(yum list --installed | wc -l)
else
echo "Error: Unsupported package manager"
return 1
fi
# ===== Application Shame Detection =====
echo "🔴 SHAME LIST:"
# 1. GNU Coreutils
[ "$coreutils" = "GNU coreutils" ] && echo " - $coreutils_shame"
# 2. glibc
[ "$libc" = "glibc" ] && echo " - 💀 GLIBC DETECTED: Your binaries are fat with NSS+locale bloat. Use musl."
# 3. systemd
[ "$init_system" = "systemd" ] && echo " - 💀 SYSTEMD: Your boot is slower than Windows 10. Use runit/openrc."
# 4. dbus/elogind/pulseaudio
if [ "$dbus_status" != "absent" ]; then
echo " - 💀 DBUS: Your IPC is a Rube Goldberg machine. Try seatd+pipewire."
fi
command -v pulseaudio >/dev/null && echo " - 💀 PULSEAUDIO: Audio stack from 2007. PipeWire exists."
# 5. Bash/Zsh
case "$shell" in
*bash*) echo " - 💀 BASH: 1.5MB shell for people who autocomplete 'sudo rm -rf'" ;;
*zsh*) echo " - 💀 ZSH: Your .zshrc is 200 lines to change the prompt" ;;
*dash*) echo " - ✅ Based: dash user (100KB POSIX shell)" ;;
*ash*) echo " - ✅ Based: ash/busybox shell enjoyer" ;;
esac
# 6. Build systems
command -v cmake >/dev/null && echo " - 💀 CMAKE: Your build system generates Makefiles that generate Ninja files that run shell scripts"
command -v meson >/dev/null && echo " - 🐍 MESON: 'We replaced CMake with Python' (why?)"
# 7. sudo vs doas
[ "$priv" = "sudo" ] && echo " - 💀 SUDO: 5MB config parser with CVEs. doas is 50KB."
[ "$priv" = "none" ] && echo " - ⚠️ No privilege escalator found. Are you root or reckless?"
# ===== Flatpak/Snap/Distrobox Detection =====
flatpak_bloat=0
snap_bloat=0
if command -v flatpak >/dev/null; then
flatpak_bloat=$(flatpak list --columns=application | wc -l)
echo "🚀 Flatpak Detected:"
echo "Total Flatpaks : $flatpak_bloat"
echo "Top 5 Largest:"
flatpak list --columns=application,size | sort -k2 -hr | head -n5 | sed 's/^/ /'
[ $flatpak_bloat -gt 0 ] && echo " - 💀 FLATPAK: Your apps ship with their own copies of glibc (from 2018)"
fi
if command -v snap >/dev/null; then
snap_bloat=$(snap list | wc -l)
echo "🐦 Snap Detected:"
echo "Total Snaps : ${snap_bloat}"
echo "Top 5 Largest:"
snap list --all | awk 'NR>1 {print $1,$5}' | sort -k2 -hr | head -n5 | sed 's/^/ /'
[ $snap_bloat -gt 0 ] && echo " - 💀 SNAP: Congratulations on your 20GB /var/lib/snapd"
fi
# GIGACHAD Distrobox Bloat Inspector
# Checks your containers and roasts them appropriately
# 100% POSIX-compliant Distrobox Bloat Inspector
# No numfmt, no bashisms, no weak dependencies
bytes_to_human() {
bytes=$1
if [ "$bytes" -ge 1073741824 ]; then
printf "%.1fGiB" "$(echo "$bytes / 1073741824" | bc -l)"
elif [ "$bytes" -ge 1048576 ]; then
printf "%.1fMiB" "$(echo "$bytes / 1048576" | bc -l)"
elif [ "$bytes" -ge 1024 ]; then
printf "%dKiB" "$((bytes / 1024))"
else
printf "%dB" "$bytes"
fi
}
# Ultra-minimalist Distrobox Bloat Checker
# POSIX-compliant, dependency-free (except distrobox/docker)
echo "📦 Distrobox Containers Found:"
distrobox-list | tail -n +2 | while IFS='|' read -r id name status _; do
name=$(echo "$name" | xargs)
status=$(echo "$status" | xargs)
case "$status" in
Up*) echo " 🚀 $name: RUNNING (stop wasting RAM)" ;;
Exited*) echo " 💀 $name: DEAD (but still wasting disk space)" ;;
*) echo " ❓ $name: WEIRD STATE ('$status')" ;;
esac
done
# ===== Fedora Special Shame =====
if [[ "$distro_name" == *"Fedora"* ]]; then
echo "🐄 FEDORA USER DETECTED:"
echo " - Enjoy your 300MB 'dnf' transactions"
echo " - SELinux is judging you right now"
echo " - OpenBSD is more secure LMAO"
echo " - Your /usr/bin is 60% Python wrappers"
rpm -q fedora-release | grep -q 38 && echo " - Still on F38? Even Red Hat gave up on you"
fi
# Extra
echo "🔍 RUNNING APP SCAN:"
if pidof discord >/dev/null; then
discord_ram=$(ps -o rss= -p $(pidof discord) | awk '{print $1/1024}')
echo " - 💀 DISCORD: ${discord_ram%.*}MB RAM but now you can blame Activision Blizzard (use Revolt/Matrix)"
fi
if pgrep -x "spotify" >/dev/null; then
echo " - 💀 SPOTIFY: Your music player phones home more than a CIA operative"
echo " >> Try 'spotifyd' + 'ncspot' for actual Linux vibes"
fi
if pgrep -x "steam" >/dev/null; then
echo " - 💀 STEAM: Your gaming rig runs 3 copies of glibc (2012 edition)"
fi
# Final inspection
detect_de
# ===== Bloat Calculations =====
non_gnu=$((conscious - gnu))
[ "$conscious" -ne 0 ] || conscious=1
gnu_ratio=$((gnu * 100 / conscious))
total_bloat=$((gnu_ratio + flatpak_bloat + snap_bloat + (distrobox_bloat * 10)))
# ===== Bloat Report =====
echo "💣 THERMONUCLEAR BLOAT REPORT:"
echo "-------------------------------"
echo "Traditional Packages:"
echo " Total : $total"
echo " Conscious choices : $conscious"
echo " GNU ratio : ${gnu_ratio}%"
echo " Containerized Crimes:"
echo " Flatpaks : ${flatpak_bloat}"
echo " Snaps : ${snap_bloat}"
echo " Distrobox : ${distrobox_bloat} containers"
echo "-------------------------------"
echo "TOTAL BLOAT SCORE : ${total_bloat}/300"
# ===== Final Verdict =====
if [ $total_bloat -lt 50 ]; then
echo "Status: Alpine Linux would be proud 🏔️"
elif [ $total_bloat -lt 90 ]; then
echo "Status: Mild bloat (Debian netinstall tier) 🐖"
elif [ $total_bloat -lt 130 ]; then
echo "Status: Obese (Ubuntu desktop territory) 🐘"
else
echo "Status: GNOME-DE level catastrophe ☢️"
[ "$init_system" = "systemd" ] && echo " >> Your journalctl is a novel about failed starts"
[ $flatpak_bloat -gt 0 ] && echo " >> Flatpaks detected: Your ~/.var is a filesystem tumor"
fi

4
scripts/circumspicio Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
# circumspiciō: Latin for looking around, inspecting
du -a ~/my-repos/* | awk '{print $2}' | fzf | xargs -r $EDITOR

34
scripts/img Executable file
View File

@ -0,0 +1,34 @@
#!/bin/sh
# GIGACHAD image viewer script
# Usage: img [directory]
# Set default directory to current if none provided
dir="${1:-.}"
# Check if sxiv is installed
if ! command -v sxiv >/dev/null 2>&1; then
echo "ERROR: sxiv not found. Install this gigachad viewer first!" >&2
exit 1
fi
# Verify the directory exists
if [ ! -d "$dir" ]; then
echo "ERROR: Directory '$dir' not found" >&2
exit 1
fi
# Find images (common extensions) and pass to sxiv
find "$dir" -maxdepth 1 -type f \( \
-iname "*.jpg" -o \
-iname "*.jpeg" -o \
-iname "*.png" -o \
-iname "*.gif" -o \
-iname "*.bmp" -o \
-iname "*.tif" -o \
-iname "*.tiff" -o \
-iname "*.svg" -o \
-iname "*.webp" \
\) | sort | sxiv -i -f -
exit 0

9
scripts/killer Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
ps a | awk '
NR > 1 {
pid = $1
$1 = $2 = $3 = $4 = ""
sub(/^ */, "", $0)
print pid " " $0
}
' | (wofi --style ~/.config/wofi/style/style.css -dmenu -l 10 || exit 0) | awk '{print $1}' | xargs kill -9

24
scripts/lfub Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# This is a wrapper script for lf that allows it to create image previews with
# ueberzug. This works in concert with the lf configuration file and the
# lf-cleaner script.
set -e
cleanup() {
exec 3>&-
rm "$FIFO_UEBERZUG"
}
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
lf "$@"
else
[ ! -d "$HOME/.cache/lf" ] && mkdir -p "$HOME/.cache/lf"
export FIFO_UEBERZUG="$HOME/.cache/lf/ueberzug-$$"
mkfifo "$FIFO_UEBERZUG"
ueberzug layer -s <"$FIFO_UEBERZUG" -p json &
exec 3>"$FIFO_UEBERZUG"
trap cleanup HUP INT QUIT TERM PWR EXIT
lf "$@" 3>&-
fi

3
scripts/menu Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
kill $(pidof wofi) || wofi --style ~/.config/wofi/style/style.css --show drun

32
scripts/nekos Executable file
View File

@ -0,0 +1,32 @@
#!/bin/sh
api="https://nekos.life/api/v2/img/wallpaper"
MONITOR="HDMI-A-1"
TMPDIR=$(mktemp -d) || { echo "FAILED TO CREATE TMPDIR 🥀"; exit 1; }
wallpaper_url=$(curl -sf "$api" | awk -F'"' '/url/{print $4; exit}') || {
echo "API request failed 🥀"
exit 1
}
extension=$(echo "$wallpaper_url" | sed -E 's/.*\.([a-zA-Z]+).*/\1/' | head -c 5)
wallpaper="$TMPDIR/wallpaper.$extension"
echo $wallpaper_url " into " $wallpaper
curl -sfL "$wallpaper_url" -o "$TMPDIR/wallpaper.$extension" || {
echo "Download failed 🥀"
exit 1
}
if [ ! -s "$wallpaper" ]; then
echo "Empty wallpaper file 🥀"
exit 1
fi
# Ensure we unload them all
hyprctl hyprpaper unload all&>/dev/null
# Apply the selected wallpaper
hyprctl hyprpaper reload $MONITOR,"$wallpaper"&>/dev/null

2
scripts/rimor Normal file
View File

@ -0,0 +1,2 @@
#!/bin/sh
du -a ~/my-repos/* | awk '{print $2}' | fzf | xargs -r $EDITOR

3
scripts/stay Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
ghostty --command="$*; tput setaf 5 bold; read -p 'Press any key to exit' -s -n 1" >/dev/null 2>&1

46
scripts/steal Executable file
View File

@ -0,0 +1,46 @@
#!/bin/sh
# NO CUCKED ZSH OR BASH, JUST POSIX ASH/DASH
# BECAUSE THIS MUST RUN IN MY PC AND I USE VOID BTW
# cucked auth for simonet's minio instance
MINIO_KEY="suiVHTeAr9N7cpvQYEmz"
MINIO_SECRET="fA8PDZiCGXQuDSARiIlRCdHu9in6MpRF2NNBJlau"
# Usage: ./steal cunny "link to yuzu's website cuz it's full of cunny"
# EXPLANATION OF CUCKED VARIABLES
# $1 IS A STRING TO THE FOLDER NAME YOU WANT
# $2 IS A STRING TO THE URL YOU WANT TO STEAL FROM
# ALL WALLPAPERS WILL BE UPLOADED TO ENV VARIABLE 'BUCKET' (defaults to 'wallpapers')
# SET 'MINIO_KEY' TO YOUR KEY
# SET 'MINIO_SECRET' TO YOUR SECRET, CAREFUL, THIS MAY ONLY BE COPIED ONCE
# MATIAS IS A CUCKHOLD AND A FAGGOT LOL
# HARDCODED CHAD CONFIG (NO PUSSY VARIABLES)
MINIO_HOST="simxnet.andremor.eu.org:9000"
BUCKET="wallpapers"
sub_folder=$1
# CREATE TEMP DIR (GIGA CHAD STYLE)
TMPDIR=$(mktemp -d) || { echo "FAILED TO CREATE TMPDIR 🥀"; exit 1; }
trap 'rm -rf "$TMPDIR"' EXIT
# STEAL IMAGES LIKE A TRUE GENTLEMAN
# CREDIT TO SIMONET FOR THIS SNIPPET SHE GOONED HARD FOR IT
echo "🕵️‍♂️ STEALING WALLPAPERS FROM $2..."
gallery-dl --filter "extension in ('jpg','jpeg','png','webp')" \
--range 1-50 \
--no-skip \
-D "$TMPDIR" \
"$2" || { echo "❌ STEALING FAILED LOL YOU ARE A CUCK"; exit 1; }
# UPLOAD EACH FILE WITH MAXIMUM CHAD ENERGY
# THANKS TO INSPECT ELEMENT COPY AS VALUE/CURL + SOME TINKERING
find "$TMPDIR" -type f | while read -r file; do
echo "🚀 UPLOADING $(basename "$file")..."
sh -c 'curl -s -X PUT -T "$file" -H "Host: $MINIO_HOST" -H "Date: $(date -R)" -H "Content-Type: $(file -b --mime-type "$file" 2>/dev/null || echo 'application/octet-stream')" -H "Authorization: AWS $MINIO_KEY:$(echo -en "PUT\n\n$(file -b --mime-type "$file")\n$(date -R)\n/$BUCKET/$sub_folder/$(basename "$file")" | openssl sha1 -hmac "$MINIO_SECRET" -binary | base64)" "https://$MINIO_HOST/$BUCKET/$sub_folder/$(basename "$file")"' &
done
wait # WAIT FOR ALL UPLOADS TO FINISH
echo "✅ ALL WALLPAPERS STOLEN AND LOLLIES HIDDEN FROM THE FEDS"

25
scripts/upload Executable file
View File

@ -0,0 +1,25 @@
#!/bin/sh
grim -g "$(slurp)" -o screenshot /tmp/screenshot.png || {
notify-send "Screenshot Failed" "Selection cancelled"
exit 1
}
response=$(curl -X POST \
-H "Authorization: Bearer simxnet" \
-F "file=@/tmp/screenshot.png;type=image/png" \
https://simxnet.andremor.eu.org:8080/upload) || {
notify-send "Upload Failed" "Could not connect to server"
exit 1
}
path=$(echo "$response" | sed -E 's/.*"(\/file\/[a-f0-9-]+)".*/\1/')
url="https://simxnet.andremor.eu.org:8080$path"
wl-copy "$url"
# works with dbus so check if you have it
notify-send "Screenshot Uploaded" "URL copied to clipboard!" --app-name="Chad Uploader" --icon=dialog-information
rm -f /tmp/screenshot.png

BIN
wallpaper.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

134
waybar/config Normal file
View File

@ -0,0 +1,134 @@
{
"layer": "top",
// Using margin-bottom with a negative value in order to reduce the space between Hyprland window and waybar
"margin-bottom": -10,
"modules-left": ["custom/launcher", "clock", "hyprland/workspaces"],
"modules-right": ["custom/clipboard", "pulseaudio", "bluetooth", "cpu", "memory", "tray", "custom/power"],
"pulseaudio": {
"tooltip": false,
"scroll-step": 5,
"format": "{icon} {volume}%",
"format-muted": "{icon} {volume}%",
"on-click":"pactl set-sink-mute @DEFAULT_SINK@ toggle",
"format-icons": {
"default": ["", "", ""]
}
},
"network": {
// "interface": "wlp2*", // (Optional) To force the use of this interface
"format-wifi": "",
"format-ethernet": "",
"tooltip-format": "{essid} ({signalStrength}%)",
"format-linked": "{ifname} (No IP) ",
"format-disconnected": "⚠",
"format-alt": "{ifname}: {ipaddr}/{cidr}"
},
"tray":{
"icon-size":18,
"spacing": 10
},
"clock": {
"format": " {:%H:%M:%S}", // 24h full scientific
"format-alt": " {:%Y-%m-%d}"
},
"cpu": {
"interval": 15,
"format": " {}%",
"max-length": 10
},
"memory": {
"interval": 5,
"format": " {}%",
"max-length": 10
},
"custom/spotify": {
"interval": 1,
"return-type": "json",
"exec": "sh ~/.config/waybar/scripts/spotify.sh",
"exec-if": "pgrep spotify",
"escape": true
},
"custom/launcher":{
"format": " Run",
"on-click": "~/scripts/menu",
"on-click-right": "killall wofi"
},
"custom/power":{
"format": " Exit",
"on-click": "sh ~/.config/wofi/scripts/power.sh",
},
"bluetooth": {
"format": " {status}",
"format-disabled": "", // an empty format will hide the module
"format-connected": " Devices: #{num_connections}",
"tooltip-format": "{device_alias}",
"tooltip-format-connected": " {device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}",
"on-click": "sh ~/.config/wofi/scripts/bluetooth.sh"
},
"temperature": {
"format": " {temperatureC}°C",
"format-critical": " {temperatureC}°C",
"interval": 1,
"critical-threshold": 80
},
"custom/clipboard":{
"max-length": 10,
"format":"  ",
"on-click": "cliphist list | wofi --style ~/.config/wofi/style/style.css --show dmenu | cliphist decode | wl-copy",
"interval": 86400
},
"hyprland/workspaces": {
"persistent-workspaces": {
"*":[1,2,3,4,5,6],
},
"all-output": true,
"on-scroll-up": "hyprctl dispatch workspace r+1",
"on-scroll-down": "hyprctl dispatch workspace r-1",
"on-click-forward": "hyprctl dispatch workspace r+1",
"on-click-backward": "hyprctl dispatch workspace r-1",
"format": "{icon} {windows}",
"format-icons": {
"1": "",
"2": "󰖟",
"3": "",
"4": "󰯄",
"5": "󰙯",
"6": "",
"urgent": "",
"active": "",
"default": ""
},
"window-rewrite-default": "{title}",
"window-rewrite": {
"class<firefox>": "Web",
"class<thunderbird>": "Thunderbird",
// having set title in init.lua
// eg: vim.opt.title = true
"class<cm.mitchellh.ghostty> title<.*nvim.*>": "Code",
"class<com.mitchellh.ghostty>": "Ghostty",
"class<mpv>": "Video player",
"class<discord>": "Discord",
"class<session>": "Session",
"class<keepassxc>": "KeePassXC",
"title<.*MONERO.*>":"Monero",
"title<.*bluetooth.*>":"Bluetooth",
"title<.*searx.*>":"SearX",
"title<.*telegram.*>": "Telegram",
"title<.*discord.*>": "Cord",
"title<.*outlook.*>": "Outlook",
"title<.*youtube.*>": "Youtube",
"title<.*Gitea.*": "Gitea",
"title<.*Codeberg.*": "Codeberg",
"title<.*github.*>": "Github",
"title<.*gitlab.*>": "Gitlab",
"title<.*twitch.*>": "Twitch",
"title<.*reddit.*>": "Reddit",
"title<.*matrix.*>": "Matrix",
"title<.*signal.*>": "Signal",
"title<.*torrent.*>": "Torrent",
"title<.*yuzucchii.*>": "yuzucchii.xyz",
},
}
}

25
waybar/scripts/spotify.sh Executable file
View File

@ -0,0 +1,25 @@
#!/bin/sh
class=$(playerctl metadata --player=spotify --format '{{lc(status)}}')
icon=""
case "$class" in
"playing")
info=$(playerctl metadata --player=spotify --format '{{artist}} - {{title}}')
if [ "${#info}" -gt 40 ]; then
info=$(printf '%.40s...' "$info")
fi
text="$info $icon"
;;
"paused")
text="$icon"
;;
"stopped")
text=""
;;
*)
text=""
;;
esac
printf '{"text":"%s", "class":"%s"}\n' "$text" "$class"

182
waybar/style.css Normal file
View File

@ -0,0 +1,182 @@
@define-color glass-white rgba(255,255,255, 0.4);
@define-color glass-black rgba(0,0,0, 0.2);
* {
border: none;
font-family: "JetBrainsMono Nerd Font";
font-size: 13px;
min-height: 20px;
}
/*
window#waybar {
background:
linear-gradient(
160deg,
rgba(255, 255, 255, 0.95) 0%,
rgba(245, 240, 255, 0.85) 100%
),
radial-gradient(
circle at 90% 50%,
rgba(255, 255, 255, 0.6) 0%,
rgba(255, 255, 255, 0) 70%
);
box-shadow:
inset 0 4px 8px rgba(255, 255, 255, 0.6),
0 6px 12px rgba(0, 0, 0, 0.15),
0 0 0 1px rgba(255, 255, 255, 0.4);
border-bottom: 1px solid rgba(230, 225, 220, 0.8);
border-radius: 0 0 8px 8px;
}*/
window#waybar {
background:
/* Base glass layer */
linear-gradient(
160deg,
rgba(255, 255, 255, 0.85) 0%,
rgba(245, 245, 245, 0.75) 100%
),
/* Light streak */
radial-gradient(
circle at 95% 50%,
rgba(255, 255, 255, 0.7) 0%,
rgba(255, 255, 255, 0) 80%
),
/* Noise texture for frosted effect */
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEWFhYWDg4N3d3dtbW17e3t1dXWBgYGHh4d5eXlzc3OLi4ubm5uVlZWPj4+NjY19fX2JiYl/f39ra2uRkZGZmZlpaWmXl5dvb29xcXGTk5NnZ2c8TV1mAAAAG3RSTlNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvEOwtAAAFVklEQVR4XpWWB67c2BUFb3g557T/hRo9/WUMZHlgr4Bg8Z4qQgQJlHI4A8SzFVrapvmTF9O7dmYRFZ60YiBhJRCgh1FYhiLAmdvX0CzTOpNE77ME0Zty/nWWzchDtiqrmQDeuv3powQ5ta2eN0FY0InkqDD73lT9c9lEzwUNqgFHs9VQce3TVClFCQrSTfOiYkVJQBmpbq2L6iZavPnAPcoU0dSw0SUTqz/GtrGuXfbyyBniKykOWQWGqwwMA7QiYAxi+IlPdqo+hYHnUt5ZPfnsHJyNiDtnpJyayNBkF6cWoYGAMY92U2hXHF/C1M8uP/ZtYdiuj26UdAdQQSXQErwSOMzt/XWRWAz5GuSBIkwG1H3FabJ2OsUOUhGC6tK4EMtJO0ttC6IBD3kM0ve0tJwMdSfjZo+EEISaeTr9P3wYrGjXqyC1krcKdhMpxEnt5JetoulscpyzhXN5FRpuPHvbeQaKxFAEB6EN+cYN6xD7RYGpXpNndMmZgM5Dcs3YSNFDHUo2LGfZuukSWyUYirJAdYbF3MfqEKmjM+I2EfhA94iG3L7uKrR+GdWD73ydlIB+6hgref1QTlmgmbM3/LeX5GI1Ux1RWpgxpLuZ2+I+IjzZ8wqE4nilvQdkUdfhzI5QDWy+kw5Wgg2pGpeEVeCCA7b85BO3F9DzxB3cdqvBzWcmzbyMiqhzuYqtHRVG2y4x+KOlnyqla8AoWWpuBoYRxzXrfKuILl6SfiWCbjxoZJUaCBj1CjH7GIaDbc9kqBY3W/Rgjda1iqQcOJu2WW+76pZC9QG7M00dffe9hNnseupFL53r8F7YHSwJWUKP2q+k7RdsxyOB11n0xtOvnW4irMMFNV4H0uqwS5ExsmP9AxbDTc9JwgneAT5vTiUSm1E7BSflSt3bfa1tv8Di3R8n3Af7MNWzs49hmauE2wP+ttrq+AsWpFG2awvsuOqbipWHgtuvuaAE+A1Z/7gC9hesnr+7wqCwG8c5yAg3AL1fm8T9AZtp/bbJGwl1pNrE7RuOX7PeMRUERVaPpEs+yqeoSmuOlokqw49pgomjLeh7icHNlG19yjs6XXOMedYm5xH2YxpV2tc0Ro2jJfxC50ApuxGob7lMsxfTbeUv07TyYxpeLucEH1gNd4IKH2LAg5TdVhlCafZvpskfncCfx8pOhJzd76bJWeYFnFciwcYfubRc12Ip/ppIhA1/mSZ/RxjFDrJC5xifFjJpY2Xl5zXdguFqYyTR1zSp1Y9p+tktDYYSNflcxI0iyO4TPBdlRcpeqjK/piF5bklq77VSEaA+z8qmJTFzIWiitbnzR794USKBUaT0NTEsVjZqLaFVqJoPN9ODG70IPbfBHKK+/q/AWR0tJzYHRULOa4MP+W/HfGadZUbfw177G7j/OGbIs8TahLyynl4X4RinF793Oz+BU0saXtUHrVBFT/DnA3ctNPoGbs4hRIjTok8i+algT1lTHi4SxFvONKNrgQFAq2/gFnWMXgwffgYMJpiKYkmW3tTg3ZQ9Jq+f8XN+A5eeUKHWvJWJ2sgJ1Sop+wwhqFVijqWaJhwtD8MNlSBeWNNWTa5Z5kPZw5+LbVT99wqTdx29lMUH4OIG/D86ruKEauBjvH5xy6um/Sfj7ei6UUVk4AIl3MyD4MSSTOFgSwsH/QJWaQ5as7ZcmgBZkzjjU1UrQ74ci1gWBCSGHtuV1H2mhSnO3Wp/3fEV5a+4wz//6qy8JxjZsmxxy5+4w9CDNJY09T072iKG0EnOS0arEYgXqYnXcYHwjTtUNAcMelOd4xpkoqiTYICWFq0JSiPfPDQdnt+4/wuqcXY47QILbgAAAABJRU5ErkJggg==");
box-shadow:
inset 0 4px 8px rgba(255, 255, 255, 0.7),
inset 0 -2px 4px rgba(0, 0, 0, 0.1),
0 8px 16px rgba(0, 0, 0, 0.2),
0 0 0 1px rgba(255, 255, 255, 0.5);
border-bottom: 1px solid rgba(255, 255, 255, 0.4);
border-radius: 0 0 12px 12px;
}
/* Monochrome Workspaces */
#workspaces {
margin: 4px 10px;
}
#workspaces button {
color: #555;
background: linear-gradient(145deg,
rgba(250, 250, 250, 0.9) 0%,
rgba(235, 235, 235, 0.9) 100%);
border: 1px solid rgba(200, 200, 200, 0.4);
min-width: 40px;
/* little fix */
padding: 4px 8px 4px 10px;
border-radius: 6px;
margin: 2px 2px 2px;
transition: all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
box-shadow:
0 2px 4px rgba(0, 0, 0, 0.05),
inset 0 -1px 2px rgba(255, 255, 255, 0.5);
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
}
#workspaces button.active {
color: #222;
background: linear-gradient(145deg,
rgba(235, 220, 255, 0.9) 0%,
rgba(220, 200, 255, 0.9) 100%);
box-shadow:
0 3px 6px rgba(0, 0, 0, 0.1),
inset 0 -1px 2px rgba(255, 255, 255, 0.6);
text-shadow:
0 1px 1px rgba(255, 255, 255, 0.8);
}
#workspaces button:hover {
color: #0066cc; /* Dark blue text */
background: linear-gradient(145deg,
rgba(245, 245, 245, 0.9) 0%,
rgba(225, 225, 225, 0.9) 100%);
}
/* Monochrome Modules */
#bluetooth, #pulseaudio, #clock, #tray, #custom-clipboard, #custom-launcher, #custom-power {
margin: 6px 2px 6px;
padding: 0px 16px 0px;
background: linear-gradient(145deg,
rgba(255, 255, 255, 0.8) 0%,
rgba(245, 245, 245, 0.6) 100%);
border: 1px solid rgba(220, 220, 220, 0.4);
border-radius: 6px;
color: #444;
box-shadow:
0 2px 6px rgba(0, 0, 0, 0.06),
inset 0 1px 2px rgba(255, 255, 255, 0.6);
}
/* Monochrome Modules */
#network, #cpu, #memory {
background: none;
border: none;
padding: 0px 10px 0px;
color: #444;
}
/* Special buttons */
#custom-launcher {
margin-left: 6px;
padding: 2px 8px 2px;
}
#custom-power {
margin-right: 6px;
background: linear-gradient(145deg,
rgba(255, 230, 230, 0.8) 0%,
rgba(255, 200, 200, 0.6) 100%);
padding: 2px 8px 2px;
box-shadow:
0 2px 4px rgba(0, 0, 0, 0.08),
inset 0 1px 2px rgba(255, 255, 255, 0.6);
transition: all 0.2s ease;
}
#custom-power:hover {
background: linear-gradient(145deg,
rgba(255, 200, 200, 0.8) 0%,
rgba(255, 150, 150, 0.6) 100%);
}
/* Urgent in B&W */
#workspaces button.urgent {
animation: monochrome-pulse 2s infinite;
color: #000;
background: linear-gradient(145deg,
rgba(200, 200, 200, 0.9) 0%,
rgba(180, 180, 180, 0.9) 100%);
}
@keyframes monochrome-pulse {
0% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1); }
100% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.1); }
70% { box-shadow: 0 0 0 6px rgba(0, 0, 0, 0); }
}
/* Tray Adjustments */
#tray {
padding: 2px 8px 2px;
margin-right: 3px;
background: linear-gradient(145deg,
rgba(255, 255, 255, 0.7) 0%,
rgba(245, 245, 245, 0.5) 100%);
}
/* Hover States */
#bluetooth:hover,
#pulseaudio:hover,
#clock:hover,
#tray:hover,
#custom-launcher:hover,
#custom-clipboard:hover {
background: linear-gradient(145deg,
rgba(255, 255, 255, 0.9) 0%,
rgba(250, 250, 250, 0.7) 100%);
color: #0066cc; /* Dark blue text */
}

16
wofi/config Normal file
View File

@ -0,0 +1,16 @@
width=600
height=300
location=center
show=drun
filter_rate=100
allow_markup=true
no_actions=true
halign=fill
orientation=vertical
content_halign=fill
insensitive=true
allow_images=true
image_size=40
gtk_dark=true
dynamic_lines=true
hide_search=true

18
wofi/scripts/bluetooth.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
# List all paired devices and extract names and MAC addresses
bluetoothctl devices | while read -r _ mac name; do
printf '%s - %s\n' "$name" "$mac"
done > /tmp/bt_devices.$$
# Use wofi to display the list of devices and capture the selected one
selected_device=$(wofi --style ~/.config/wofi/style/style.css --show dmenu --prompt "Select Device" --width 300 --height 500 --lines 10 < /tmp/bt_devices.$$)
# Clean up temp file
rm -f /tmp/bt_devices.$$
# If a device is selected, connect to it
if [ -n "$selected_device" ]; then
mac_address=$(echo "$selected_device" | awk '{print $NF}')
bluetoothctl connect "$mac_address"
fi

1877
wofi/scripts/emojis.sh Executable file

File diff suppressed because it is too large Load Diff

29
wofi/scripts/power.sh Executable file
View File

@ -0,0 +1,29 @@
#!/bin/sh
OPTIONS="Shutdown\nSuspend\nLog Out\nReboot"
CHOICE=$(echo -e "$OPTIONS" | wofi --style ~/.config/wofi/style/style.css --show dmenu)
case "$CHOICE" in
"Shutdown")
# Confirm the shutdown and execute
echo "Shutting down..." && loginctl poweroff
;;
"Reboot")
# Confirm rebooting and execute
echo "Rebooting..." && loginctl reboot
;;
"Suspend")
# Confirm suspension and execute
echo "Suspending..." && loginctl suspend
;;
"Log Out")
# Log out of the session
echo "Logging out..." && hyprctl dispatch exit
;;
*)
# If no valid option is selected, exit the script
exit 0
;;
esac

82
wofi/style/emojis.css Normal file
View File

@ -0,0 +1,82 @@
* {
font-family: "JetBrainsMono Nerd Font", monospace;
padding: 3px;
}
/* Main window - Frosted glass */
window {
margin: 5px;
background-color: rgba(240, 240, 240, 0.85);
backdrop-filter: blur(12px); /* Glass effect */
border: 1px solid rgba(200, 200, 200, 0.6);
border-radius: 8px;
box-shadow:
0 2px 5px rgba(0, 0, 0, 0.2),
inset 0 1px 1px rgba(255, 255, 255, 0.4); /* Inner glow */
}
/* Input bar - Aero search box */
#input {
margin: 8px;
padding: 8px 12px;
background: linear-gradient(to bottom, #ffffff, #e6e6e6);
color: #000000;
border-radius: 6px;
border: 1px solid #aaaaaa;
font-size: 14px;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
/* Emoji grid - Bubbly items */
#entry {
padding: 8px 12px;
margin: 4px;
border-radius: 6px;
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(230, 240, 255, 0.5));
border: 1px solid rgba(180, 180, 180, 0.3);
transition: all 0.2s ease;
}
/* Selected emoji - Luminous highlight */
#entry:selected {
background: linear-gradient(to bottom, #bb86fc, #9a67ea); /* Purple gradient */
box-shadow: 0 0 8px rgba(187, 134, 252, 0.4); /* Glow */
color: #000;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
}
/* Hover effect - Subtle pop */
#entry:hover {
background: linear-gradient(to bottom, rgba(210, 220, 255, 0.8), rgba(180, 200, 255, 0.6));
transform: scale(1.02);
}
/* Container boxes - Transparent */
#outer-box {
margin: 5px;
background-color: transparent;
}
#inner-box {
margin: 5px;
background-color: rgba(255, 255, 255, 0.7);
border-radius: 6px;
}
/* Emoji items (fallback for older Wofi) */
item {
padding: 8px 12px;
margin: 4px;
border-radius: 6px;
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(230, 240, 255, 0.5));
transition: all 0.2s ease;
}
item.selected {
background: linear-gradient(to bottom, #bb86fc, #9a67ea);
box-shadow: 0 0 8px rgba(187, 134, 252, 0.4);
}
item:hover {
background: linear-gradient(to bottom, rgba(210, 220, 255, 0.8), rgba(180, 200, 255, 0.6));
}

67
wofi/style/style.css Normal file
View File

@ -0,0 +1,67 @@
* {
font-family: "JetBrainsMono Nerd Font", monospace;
line-height: 1.5;
padding: 3px;
}
/* Main window - Frosted glass effect */
window {
margin: 5px;
background-color: rgba(240, 240, 240, 0.85); /* Light translucent */
backdrop-filter: blur(12px); /* Glass blur */
border: 1px solid rgba(200, 200, 200, 0.6);
border-radius: 8px; /* Softer corners */
box-shadow:
0 2px 5px rgba(0, 0, 0, 0.2),
inset 0 1px 1px rgba(255, 255, 255, 0.4); /* Inner glow */
}
/* Input bar - Aero "search box" */
#input {
margin: 8px;
padding: 8px 12px;
background: linear-gradient(to bottom, #ffffff, #e6e6e6);
color: #000000;
border-radius: 6px;
border: 1px solid #aaaaaa;
font-size: 14px;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
/* Items - Bubbly and interactive */
#entry {
padding: 8px 12px;
margin: 4px 8px;
border-radius: 6px;
color: #333333;
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.7), rgba(230, 240, 255, 0.5));
border: 1px solid rgba(180, 180, 180, 0.3);
transition: all 0.2s ease;
}
/* Selected item - Luminous highlight */
#entry:selected {
background: linear-gradient(to bottom, #bb86fc, #9a67ea); /* Purple gradient */
color: #000;
border: 1px solid rgba(150, 100, 255, 0.5);
box-shadow: 0 0 8px rgba(187, 134, 252, 0.4); /* Glow */
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
}
/* Hover effect - Subtle "pop" */
#entry:hover {
background: linear-gradient(to bottom, rgba(210, 220, 255, 0.8), rgba(180, 200, 255, 0.6));
transform: scale(1.01);
}
/* Inner/outer boxes - Transparent layers */
#inner-box {
margin: 5px;
background-color: transparent;
border-radius: 6px;
}
#outer-box {
margin: 5px;
background-color: transparent;
}

76
wofi/style/style.old.css Normal file
View File

@ -0,0 +1,76 @@
window {
margin: 0px;
border: 5px solid #1e1e2e;
background-color: #cdd6f4;
border-radius: 15px;
}
#input {
padding: 4px;
margin: 4px;
padding-left: 20px;
border: none;
color: #cdd6f4;
font-weight: bold;
background-color: #1e1e2e;
background: ;
outline: none;
border-radius: 15px;
margin: 10px;
margin-bottom: 2px;
}
#input:focus {
border: 0px solid #1e1e2e;
margin-bottom: 0px;
}
#inner-box {
margin: 4px;
border: 10px solid #1e1e2e;
color: #cdd6f4;
font-weight: bold;
background-color: #1e1e2e;
border-radius: 15px;
}
#outer-box {
margin: 0px;
border: none;
border-radius: 15px;
background-color: #1e1e2e;
}
#scroll {
margin-top: 5px;
border: none;
border-radius: 15px;
margin-bottom: 5px;
/* background: rgb(255,255,255); */
}
#img:selected {
background-color: #89b4fa;
border-radius: 15px;
}
#text:selected {
color: #cdd6f4;
margin: 0px 0px;
border: none;
border-radius: 15px;
background-color: #89b4fa;
}
#entry {
margin: 0px 0px;
border: none;
border-radius: 15px;
background-color: transparent;
}
#entry:selected {
margin: 0px 0px;
border: none;
border-radius: 15px;
background-color: #89b4fa;
}