This commit is contained in:
yuzu 2025-05-16 13:00:29 -05:00
commit fe39117678
23 changed files with 3945 additions and 0 deletions

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

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.5
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
macos-icon = xray

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 || chromium
$fileManager = $terminal --shell-integration=zsh --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 = wofi --style ~/.config/wofi/style/style.css --show drun
$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 = false
layout = dwindle
}
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%
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
}
dwindle {
pseudotile = true
preserve_split = true
}
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 = 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, B, exec, $browser # B = Browser
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)
# ==== Window Management ====
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, C, centerwindow # C = Center window (new!)
bind = $mainMod, M, exit # M = "Murder" Hyprland (emergency)
# ==== Navigation ====
bind = $mainMod, H, movefocus, l # Vim keys for focus
bind = $mainMod, J, movefocus, d
bind = $mainMod, K, movefocus, u
bind = $mainMod, L, movefocus, r
# ==== 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
# ==== 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

84
hypr/hyprlock.conf Normal file
View File

@ -0,0 +1,84 @@
$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)
# TODO: set some wallpaper
# path = {{ SWWW_WALL }}
# 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
}

4
hypr/hyprpaper.conf Normal file
View File

@ -0,0 +1,4 @@
preload = /home/yu/Pictures/wallpaper/2246.png
/home/yu/Pictures/wallpaper/0141.png
wallpaper = , /home/yu/Pictures/wallpaper/2246.png
/home/yu/Pictures/wallpaper/0141.png

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

@ -0,0 +1,14 @@
#!/usr/bin/env zsh
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"

174
lf/colors Normal file
View File

@ -0,0 +1,174 @@
# vim:ft=dircolors
# (This is not a dircolors file but it helps to highlight colors and comments)
# default values from dircolors
# (entries with a leading # are not implemented in lf)
# #no 00 # NORMAL
# fi 00 # FILE
# #rs 0 # RESET
# di 01;34 # DIR
# ln 01;36 # LINK
# #mh 00 # MULTIHARDLINK
# pi 40;33 # FIFO
# so 01;35 # SOCK
# #do 01;35 # DOOR
# bd 40;33;01 # BLK
# cd 40;33;01 # CHR
# or 40;31;01 # ORPHAN
# #mi 00 # MISSING
# su 37;41 # SETUID
# sg 30;43 # SETGID
# #ca 30;41 # CAPABILITY
# tw 30;42 # STICKY_OTHER_WRITABLE
# ow 34;42 # OTHER_WRITABLE
# st 37;44 # STICKY
# ex 01;32 # EXEC
# default values from lf (with matching order)
# ln 01;36 # LINK
# or 31;01 # ORPHAN
# tw 01;34 # STICKY_OTHER_WRITABLE
# ow 01;34 # OTHER_WRITABLE
# st 01;34 # STICKY
# di 01;34 # DIR
# pi 33 # FIFO
# so 01;35 # SOCK
# bd 33;01 # BLK
# cd 33;01 # CHR
# su 01;32 # SETUID
# sg 01;32 # SETGID
# ex 01;32 # EXEC
# fi 00 # FILE
# file types (with matching order)
ln 01;36 # LINK
or 31;01 # ORPHAN
tw 34 # STICKY_OTHER_WRITABLE
ow 34 # OTHER_WRITABLE
st 01;34 # STICKY
di 01;34 # DIR
pi 33 # FIFO
so 01;35 # SOCK
bd 33;01 # BLK
cd 33;01 # CHR
su 01;32 # SETUID
sg 01;32 # SETGID
ex 01;32 # EXEC
fi 00 # FILE
# archives or compressed (dircolors defaults)
*.tar 01;31
*.tgz 01;31
*.arc 01;31
*.arj 01;31
*.taz 01;31
*.lha 01;31
*.lz4 01;31
*.lzh 01;31
*.lzma 01;31
*.tlz 01;31
*.txz 01;31
*.tzo 01;31
*.t7z 01;31
*.zip 01;31
*.z 01;31
*.dz 01;31
*.gz 01;31
*.lrz 01;31
*.lz 01;31
*.lzo 01;31
*.xz 01;31
*.zst 01;31
*.tzst 01;31
*.bz2 01;31
*.bz 01;31
*.tbz 01;31
*.tbz2 01;31
*.tz 01;31
*.deb 01;31
*.rpm 01;31
*.jar 01;31
*.war 01;31
*.ear 01;31
*.sar 01;31
*.rar 01;31
*.alz 01;31
*.ace 01;31
*.zoo 01;31
*.cpio 01;31
*.7z 01;31
*.rz 01;31
*.cab 01;31
*.wim 01;31
*.swm 01;31
*.dwm 01;31
*.esd 01;31
# image formats (dircolors defaults)
*.jpg 01;35
*.jpeg 01;35
*.mjpg 01;35
*.mjpeg 01;35
*.gif 01;35
*.bmp 01;35
*.pbm 01;35
*.pgm 01;35
*.ppm 01;35
*.tga 01;35
*.xbm 01;35
*.xpm 01;35
*.tif 01;35
*.tiff 01;35
*.png 01;35
*.svg 01;35
*.svgz 01;35
*.mng 01;35
*.pcx 01;35
*.mov 01;35
*.mpg 01;35
*.mpeg 01;35
*.m2v 01;35
*.mkv 01;35
*.webm 01;35
*.ogm 01;35
*.mp4 01;35
*.m4v 01;35
*.mp4v 01;35
*.vob 01;35
*.qt 01;35
*.nuv 01;35
*.wmv 01;35
*.asf 01;35
*.rm 01;35
*.rmvb 01;35
*.flc 01;35
*.avi 01;35
*.fli 01;35
*.flv 01;35
*.gl 01;35
*.dl 01;35
*.xcf 01;35
*.xwd 01;35
*.yuv 01;35
*.cgm 01;35
*.emf 01;35
*.ogv 01;35
*.ogx 01;35
# audio formats (dircolors defaults)
*.aac 00;36
*.au 00;36
*.flac 00;36
*.m4a 00;36
*.mid 00;36
*.midi 00;36
*.mka 00;36
*.mp3 00;36
*.mpc 00;36
*.ogg 00;36
*.ra 00;36
*.wav 00;36
*.oga 00;36
*.opus 00;36
*.spx 00;36
*.xspf 00;36

377
lf/icons Normal file
View File

@ -0,0 +1,377 @@
# vim:ft=conf
# These examples require Nerd Fonts or a compatible font to be used.
# See https://www.nerdfonts.com for more information.
# default values from lf (with matching order)
# ln l # LINK
# or l # ORPHAN
# tw t # STICKY_OTHER_WRITABLE
# ow d # OTHER_WRITABLE
# st t # STICKY
# di d # DIR
# pi p # FIFO
# so s # SOCK
# bd b # BLK
# cd c # CHR
# su u # SETUID
# sg g # SETGID
# ex x # EXEC
# fi - # FILE
# file types (with matching order)
ln  # LINK
or  # ORPHAN
tw t # STICKY_OTHER_WRITABLE
ow  # OTHER_WRITABLE
st t # STICKY
di  # DIR
pi p # FIFO
so s # SOCK
bd b # BLK
cd c # CHR
su u # SETUID
sg g # SETGID
ex  # EXEC
fi  # FILE
# disable some default filetype icons, let them choose icon by filename
# ln  # LINK
# or  # ORPHAN
# tw # STICKY_OTHER_WRITABLE
# ow # OTHER_WRITABLE
# st # STICKY
# di  # DIR
# pi # FIFO
# so # SOCK
# bd # BLK
# cd # CHR
# su # SETUID
# sg # SETGID
# ex # EXEC
# fi  # FILE
# file extensions (vim-devicons)
*.styl 
*.sass 
*.scss 
*.htm 
*.html 
*.slim 
*.haml 
*.ejs 
*.css 
*.less 
*.md 
*.mdx 
*.markdown 
*.rmd 
*.json 
*.webmanifest 
*.js 
*.mjs 
*.jsx 
*.rb 
*.gemspec 
*.rake 
*.php 
*.py 
*.pyc 
*.pyo 
*.pyd 
*.coffee 
*.mustache 
*.hbs 
*.conf 
*.ini 
*.yml 
*.yaml 
*.toml 
*.bat 
*.mk 
*.jpg 
*.jpeg 
*.bmp 
*.png 
*.webp 
*.gif 
*.ico 
*.twig 
*.cpp 
*.c++ 
*.cxx 
*.cc 
*.cp 
*.c 
*.cs 󰌛
*.h 
*.hh 
*.hpp 
*.hxx 
*.hs 
*.lhs 
*.nix 
*.lua 
*.java 
*.sh 
*.fish 
*.bash 
*.zsh 
*.ksh 
*.csh 
*.awk 
*.ps1 
*.ml λ
*.mli λ
*.diff 
*.db 
*.sql 
*.dump 
*.clj 
*.cljc 
*.cljs 
*.edn 
*.scala 
*.go 
*.dart 
*.xul 
*.sln 
*.suo 
*.pl 
*.pm 
*.t 
*.rss 
'*.f#' 
*.fsscript 
*.fsx 
*.fs 
*.fsi 
*.rs 
*.rlib 
*.d 
*.erl 
*.hrl 
*.ex 
*.exs 
*.eex 
*.leex 
*.heex 
*.vim 
*.ai 
*.psd 
*.psb 
*.ts 
*.tsx 
*.jl 
*.pp 
*.vue 
*.elm 
*.swift 
*.xcplayground 
*.tex 󰙩
*.r 󰟔
*.rproj 󰗆
*.sol 󰡪
*.pem 
# file names (vim-devicons) (case-insensitive not supported in lf)
*gruntfile.coffee 
*gruntfile.js 
*gruntfile.ls 
*gulpfile.coffee 
*gulpfile.js 
*gulpfile.ls 
*mix.lock 
*dropbox 
*.ds_store 
*.gitconfig 
*.gitignore 
*.gitattributes 
*.gitlab-ci.yml 
*.bashrc 
*.zshrc 
*.zshenv 
*.zprofile 
*.vimrc 
*.gvimrc 
*_vimrc 
*_gvimrc 
*.bashprofile 
*favicon.ico 
*license 
*node_modules 
*react.jsx 
*procfile 
*dockerfile 
*docker-compose.yml 
*docker-compose.yaml 
*compose.yml 
*compose.yaml 
*rakefile 
*config.ru 
*gemfile 
*makefile 
*cmakelists.txt 
*robots.txt 󰚩
# file names (case-sensitive adaptations)
*Gruntfile.coffee 
*Gruntfile.js 
*Gruntfile.ls 
*Gulpfile.coffee 
*Gulpfile.js 
*Gulpfile.ls 
*Dropbox 
*.DS_Store 
*LICENSE 
*React.jsx 
*Procfile 
*Dockerfile 
*Docker-compose.yml 
*Docker-compose.yaml 
*Rakefile 
*Gemfile 
*Makefile 
*CMakeLists.txt 
# file patterns (vim-devicons) (patterns not supported in lf)
# .*jquery.*\.js$ 
# .*angular.*\.js$ 
# .*backbone.*\.js$ 
# .*require.*\.js$ 
# .*materialize.*\.js$ 
# .*materialize.*\.css$ 
# .*mootools.*\.js$ 
# .*vimrc.* 
# Vagrantfile$ 
# file patterns (file name adaptations)
*jquery.min.js 
*angular.min.js 
*backbone.min.js 
*require.min.js 
*materialize.min.js 
*materialize.min.css 
*mootools.min.js 
*vimrc 
Vagrantfile 
# archives or compressed (extensions from dircolors defaults)
*.tar 
*.tgz 
*.arc 
*.arj 
*.taz 
*.lha 
*.lz4 
*.lzh 
*.lzma 
*.tlz 
*.txz 
*.tzo 
*.t7z 
*.zip 
*.z 
*.dz 
*.gz 
*.lrz 
*.lz 
*.lzo 
*.xz 
*.zst 
*.tzst 
*.bz2 
*.bz 
*.tbz 
*.tbz2 
*.tz 
*.deb 
*.rpm 
*.jar 
*.war 
*.ear 
*.sar 
*.rar 
*.alz 
*.ace 
*.zoo 
*.cpio 
*.7z 
*.rz 
*.cab 
*.wim 
*.swm 
*.dwm 
*.esd 
# image formats (extensions from dircolors defaults)
*.jpg 
*.jpeg 
*.mjpg 
*.mjpeg 
*.gif 
*.bmp 
*.pbm 
*.pgm 
*.ppm 
*.tga 
*.xbm 
*.xpm 
*.tif 
*.tiff 
*.png 
*.svg 
*.svgz 
*.mng 
*.pcx 
*.mov 
*.mpg 
*.mpeg 
*.m2v 
*.mkv 
*.webm 
*.ogm 
*.mp4 
*.m4v 
*.mp4v 
*.vob 
*.qt 
*.nuv 
*.wmv 
*.asf 
*.rm 
*.rmvb 
*.flc 
*.avi 
*.fli 
*.flv 
*.gl 
*.dl 
*.xcf 
*.xwd 
*.yuv 
*.cgm 
*.emf 
*.ogv 
*.ogx 
# audio formats (extensions from dircolors defaults)
*.aac 
*.au 
*.flac 
*.m4a 
*.mid 
*.midi 
*.mka 
*.mp3 
*.mpc 
*.ogg 
*.ra 
*.wav 
*.oga 
*.opus 
*.spx 
*.xspf 
# other formats
*.pdf 

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

346
nvim/init.lua Normal file
View File

@ -0,0 +1,346 @@
local vim = vim
local Plug = vim.fn['plug#']
local o = vim.opt
local g = vim.g
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' })
map('n', 'Q', 'gq')
map('n', '<leader>.', '<cmd>:CHADopen<cr>')
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 'jetzig-framework/zmpl.vim'
-- tree sitter
Plug 'nvim-treesitter/nvim-treesitter'
Plug('aaronik/treewalker.nvim', {
opts = {
highlight = true
}
})
vim.call('plug#end')
vim.cmd('set background=dark')
vim.cmd('colorscheme nova')
-- 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.hls.setup({})
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 = {'hls'},
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'}),
},
})
-- hyprland
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = "hyprland.conf",
callback = function()
os.execute("hyprctl reload")
vim.cmd.edit()
end
})

258
scripts/bloat Executable file
View File

@ -0,0 +1,258 @@
#!/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 (i don't have a debian machine to test)
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 (i don't have a fedora machine to test)
total=$(rpm -qa | wc -l)
conscious=$(dnf history userinstalled | grep -v '^ID' | wc -l)
gnu=$(rpm -qa --queryformat '%{NAME}\n' | grep -i gnu | 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
# Distrobox containers
distrobox_bloat=0
if [ -d ~/.distrobox ]; then
echo "📦 Distrobox Containers:"
for container in ~/.distrobox/*; do
if [ -d "$container" ]; then
container_name=$(basename "$container")
size=$(du -sh "$container" 2>/dev/null | cut -f1)
distrobox_bloat=$((distrobox_bloat + 1))
echo " - $container_name: $size"
echo " 💀 DISTROBOX: '$container_name' is just Docker with extra steps (${size} wasted)"
fi
done
fi
# ===== 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

90
waybar/config Normal file
View File

@ -0,0 +1,90 @@
{
"layer": "top",
// Using margin-bottom with a negative value in order to reduce the space between Hyprland window and waybar
"margin-bottom": -10,
"margin-top": 10,
"modules-left": ["custom/launcher", "cpu","memory","custom/spotify", "bluetooth", "tray"],
"modules-center": ["hyprland/workspaces"],
"modules-right": ["custom/clipboard", "pulseaudio","clock", "temperature", "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": " ",
"on-click": "wofi --style ~/.config/wofi/style/style.css -d --show drun",
"on-click-right": "killall wofi"
},
"custom/power":{
"format": " ",
"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": "~/.config/waybar/scripts/bluetooth.sh"
},
// The code following below is given in the great documentation for Waybar status bar under Useful Utilities in Hyprland wiki
"hyrpland/workspaces": {
"format": "{icon}",
"on-click": "activate",
"on-scroll-up": "hyprctl dispatch workspace e-1",
"on-scroll-down": "hyprctl dispatch workspace e+1"
},
"temperature": {
"format": " {temperatureC}°C",
"format-critical": " {temperatureC}°C",
"interval": 1,
"critical-threshold": 80
},
"custom/clipboard":{
"format":"",
"on-click": "cliphist list | wofi --style ~/.config/wofi/style/style.css --show dmenu | cliphist decode | wl-copy",
"interval": 86400
},
}

18
waybar/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

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"

74
waybar/style.css Normal file
View File

@ -0,0 +1,74 @@
* {
border: none;
border-radius: 4px; /* Your sharp corners */
font-family: "JetBrainsMono Nerd Font";
font-size: 14px;
min-height: 10px;
}
window#waybar {
background: rgba(240, 240, 240, 0.8); /* Your original light gray */
}
/* Workspaces - Your original style */
#workspaces {
margin: 5px 8px;
background: linear-gradient(to bottom, #ffffff, #d9d9d9);
border: 1px solid #aaaaaa;
box-shadow: 0px 0px 4px rgba(0,0,0,0.2);
}
#workspaces button.active {
background: linear-gradient(to bottom, #ffffff, #c0d9f2);
border: 1px solid #66aaff;
color: #003366;
}
#workspaces button:hover {
background: linear-gradient(to bottom, #d9ecff, #a9cfff);
color: #003366;
}
/* Modules - Your structure + Aero accents */
#network, #bluetooth, #pulseaudio, #battery, #clock, #cpu, #memory, #tray, #backlight,
#custom-launcher, #custom-power, #custom-wallpaper, #custom-spotify, #custom-clipboard {
margin: 5px 5px;
padding: 5px 10px;
background: linear-gradient(to bottom, #ffffff, #e6e6e6);
border: 1px solid #aaaaaa;
color: #111;
box-shadow: 0px 0px 3px rgba(0,0,0,0.15);
transition: all 0.2s ease; /* Smooth hover */
}
/* Color coding (Aero-inspired) */
#pulseaudio {
color: #aa55ff; /* Purple for volume */
}
#cpu {
color: #0066cc; /* Blue for CPU */
}
#memory {
color: #0099ff; /* Lighter blue for RAM */
}
#battery {
color: #00aa44; /* Green for battery */
}
#clock {
color: #0077cc; /* Blue for clock */
}
#network {
color: #3366ff; /* Bright blue for Wi-Fi */
}
/* Hover effects (Aero glow) */
#network:hover, #bluetooth:hover, #pulseaudio:hover, #battery:hover, #clock:hover,
#cpu:hover, #memory:hover, #tray:hover, #backlight:hover, #custom-launcher:hover,
#custom-power:hover, #custom-wallpaper:hover, #custom-spotify:hover, #custom-clipboard:hover {
box-shadow: 0 0 8px rgba(100, 180, 255, 0.5);
}

16
wofi/config Normal file
View File

@ -0,0 +1,16 @@
width=600
height=300
location=center
show=drun
prompt=Search...
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

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));
}

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

@ -0,0 +1,61 @@
* {
font-family: "JetBrainsMono Nerd Font", monospace;
line-height: 1.5;
padding: 3px;
}
window {
margin: 5px;
background-color: rgba(240, 240, 240, 0.85);
backdrop-filter: blur(12px);
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);
}
#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);
}
#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;
}
#entry:selected {
background: linear-gradient(to bottom, #bb86fc, #9a67ea);
color: #000;
border: 1px solid rgba(150, 100, 255, 0.5);
box-shadow: 0 0 8px rgba(187, 134, 252, 0.4);
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
}
#entry:hover {
background: linear-gradient(to bottom, rgba(210, 220, 255, 0.8), rgba(180, 200, 255, 0.6));
transform: scale(1.01);
}
#inner-box {
margin: 5px;
background-color: transparent;
border-radius: 6px;
}
#outer-box {
margin: 5px;
background-color: transparent;
}