From fe391176783664923671a7c8b25c2bcd148a570d Mon Sep 17 00:00:00 2001 From: yuzu Date: Fri, 16 May 2025 13:00:29 -0500 Subject: [PATCH] . --- dunst/dunstrc | 73 ++ ghostty/config | 16 + ghostty/shaders | 1 + ghostty/themes/stardust | 31 + hypr/hypridle.conf | 23 + hypr/hyprland.conf | 263 +++++ hypr/hyprlock.conf | 84 ++ hypr/hyprpaper.conf | 4 + hypr/scripts/wallpaper.sh | 14 + lf/colors | 174 ++++ lf/icons | 377 +++++++ mako/config | 9 + nvim/init.lua | 346 +++++++ scripts/bloat | 258 +++++ waybar/config | 90 ++ waybar/scripts/bluetooth.sh | 18 + waybar/scripts/spotify.sh | 25 + waybar/style.css | 74 ++ wofi/config | 16 + wofi/scripts/emojis.sh | 1877 +++++++++++++++++++++++++++++++++++ wofi/scripts/power.sh | 29 + wofi/style/emojis.css | 82 ++ wofi/style/style.css | 61 ++ 23 files changed, 3945 insertions(+) create mode 100644 dunst/dunstrc create mode 100644 ghostty/config create mode 160000 ghostty/shaders create mode 100644 ghostty/themes/stardust create mode 100644 hypr/hypridle.conf create mode 100644 hypr/hyprland.conf create mode 100644 hypr/hyprlock.conf create mode 100644 hypr/hyprpaper.conf create mode 100755 hypr/scripts/wallpaper.sh create mode 100644 lf/colors create mode 100644 lf/icons create mode 100644 mako/config create mode 100644 nvim/init.lua create mode 100755 scripts/bloat create mode 100644 waybar/config create mode 100755 waybar/scripts/bluetooth.sh create mode 100755 waybar/scripts/spotify.sh create mode 100644 waybar/style.css create mode 100644 wofi/config create mode 100755 wofi/scripts/emojis.sh create mode 100755 wofi/scripts/power.sh create mode 100644 wofi/style/emojis.css create mode 100644 wofi/style/style.css diff --git a/dunst/dunstrc b/dunst/dunstrc new file mode 100644 index 0000000..d84350b --- /dev/null +++ b/dunst/dunstrc @@ -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 = "%s\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 diff --git a/ghostty/config b/ghostty/config new file mode 100644 index 0000000..6b163b6 --- /dev/null +++ b/ghostty/config @@ -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 diff --git a/ghostty/shaders b/ghostty/shaders new file mode 160000 index 0000000..a17573f --- /dev/null +++ b/ghostty/shaders @@ -0,0 +1 @@ +Subproject commit a17573fb254e618f92a75afe80faa31fd5e09d6f diff --git a/ghostty/themes/stardust b/ghostty/themes/stardust new file mode 100644 index 0000000..bddbcb7 --- /dev/null +++ b/ghostty/themes/stardust @@ -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 + diff --git a/hypr/hypridle.conf b/hypr/hypridle.conf new file mode 100644 index 0000000..53986e2 --- /dev/null +++ b/hypr/hypridle.conf @@ -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 +} diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..2b8903b --- /dev/null +++ b/hypr/hyprland.conf @@ -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 diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf new file mode 100644 index 0000000..e58f4ff --- /dev/null +++ b/hypr/hyprlock.conf @@ -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 "$(date)" + color = $text_color + font_size = 14 + font_family = $font_family + + position = 30, -30 + halign = left + valign = top +} diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf new file mode 100644 index 0000000..40fd89f --- /dev/null +++ b/hypr/hyprpaper.conf @@ -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 diff --git a/hypr/scripts/wallpaper.sh b/hypr/scripts/wallpaper.sh new file mode 100755 index 0000000..38e80c4 --- /dev/null +++ b/hypr/scripts/wallpaper.sh @@ -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" diff --git a/lf/colors b/lf/colors new file mode 100644 index 0000000..b65d3f0 --- /dev/null +++ b/lf/colors @@ -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 diff --git a/lf/icons b/lf/icons new file mode 100644 index 0000000..4022691 --- /dev/null +++ b/lf/icons @@ -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  diff --git a/mako/config b/mako/config new file mode 100644 index 0000000..cf8e480 --- /dev/null +++ b/mako/config @@ -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 + diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..0c77140 --- /dev/null +++ b/nvim/init.lua @@ -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', '', 'nohlsearch') + +local map = vim.keymap.set + +map('v', "y", '"+y') + +map('n', '', ':Treewalker Down', { noremap = true }) +map('n', '', ':Treewalker Up', { noremap = true }) +map('n', '', ':Treewalker Left', { noremap = true }) +map('n', '', ':Treewalker Right', { 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', 'e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' }) +map('v', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) + +map('n', 'Q', 'gq') + +map('n', '.', ':CHADopen') + +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', 'lua vim.lsp.buf.hover()') + bufmap('n', 'gd', 'lua vim.lsp.buf.definition()') + bufmap('n', 'gD', 'lua vim.lsp.buf.declaration()') + bufmap('n', 'gi', 'lua vim.lsp.buf.implementation()') + bufmap('n', 'go', 'lua vim.lsp.buf.type_definition()') + bufmap('n', 'gr', 'lua vim.lsp.buf.references()') + bufmap('n', 'gs', 'lua vim.lsp.buf.signature_help()') + bufmap('n', '', 'lua vim.lsp.buf.rename()') + bufmap({'n', 'x'}, '', 'lua vim.lsp.buf.format({async = true})') + bufmap('n', '', 'lua vim.lsp.buf.code_action()') + bufmap('n', 'gl', 'lua vim.diagnostic.open_float()') + bufmap('n', '[d', 'lua vim.diagnostic.goto_prev()') + bufmap('n', ']d', 'lua vim.diagnostic.goto_next()') + 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 = { + [''] = cmp.mapping.select_prev_item(select_opts), + [''] = cmp.mapping.select_next_item(select_opts), + + [''] = cmp.mapping.select_prev_item(select_opts), + [''] = cmp.mapping.select_next_item(select_opts), + + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + + [''] = cmp.mapping.abort(), + [''] = cmp.mapping.confirm({select = false}), + + [''] = cmp.mapping(function(fallback) + if luasnip.jumpable(1) then + luasnip.jump(1) + else + fallback() + end + end, {'i', 's'}), + + [''] = cmp.mapping(function(fallback) + if luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, {'i', 's'}), + + [''] = 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'}), + + [''] = 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 +}) diff --git a/scripts/bloat b/scripts/bloat new file mode 100755 index 0000000..17bf6b0 --- /dev/null +++ b/scripts/bloat @@ -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 diff --git a/waybar/config b/waybar/config new file mode 100644 index 0000000..6a51c74 --- /dev/null +++ b/waybar/config @@ -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 + }, +} diff --git a/waybar/scripts/bluetooth.sh b/waybar/scripts/bluetooth.sh new file mode 100755 index 0000000..a6906d7 --- /dev/null +++ b/waybar/scripts/bluetooth.sh @@ -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 diff --git a/waybar/scripts/spotify.sh b/waybar/scripts/spotify.sh new file mode 100755 index 0000000..80c6876 --- /dev/null +++ b/waybar/scripts/spotify.sh @@ -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" diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..5e0e547 --- /dev/null +++ b/waybar/style.css @@ -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); +} diff --git a/wofi/config b/wofi/config new file mode 100644 index 0000000..577debf --- /dev/null +++ b/wofi/config @@ -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 diff --git a/wofi/scripts/emojis.sh b/wofi/scripts/emojis.sh new file mode 100755 index 0000000..fe3da77 --- /dev/null +++ b/wofi/scripts/emojis.sh @@ -0,0 +1,1877 @@ +#!/bin/sh +EMOJI_LIST=$(cat <