.
This commit is contained in:
commit
fe39117678
73
dunst/dunstrc
Normal file
73
dunst/dunstrc
Normal 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
16
ghostty/config
Normal 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
1
ghostty/shaders
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit a17573fb254e618f92a75afe80faa31fd5e09d6f
|
31
ghostty/themes/stardust
Normal file
31
ghostty/themes/stardust
Normal 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
23
hypr/hypridle.conf
Normal 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
263
hypr/hyprland.conf
Normal 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
84
hypr/hyprlock.conf
Normal 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
4
hypr/hyprpaper.conf
Normal 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
14
hypr/scripts/wallpaper.sh
Executable 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
174
lf/colors
Normal 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
377
lf/icons
Normal 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
9
mako/config
Normal 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
346
nvim/init.lua
Normal 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
258
scripts/bloat
Executable 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
90
waybar/config
Normal 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
18
waybar/scripts/bluetooth.sh
Executable 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
25
waybar/scripts/spotify.sh
Executable 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
74
waybar/style.css
Normal 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
16
wofi/config
Normal 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
1877
wofi/scripts/emojis.sh
Executable file
File diff suppressed because it is too large
Load Diff
29
wofi/scripts/power.sh
Executable file
29
wofi/scripts/power.sh
Executable 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
82
wofi/style/emojis.css
Normal 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
61
wofi/style/style.css
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user