diff --git a/hypr/hypridle.conf b/hypr/hypridle.conf new file mode 100644 index 0000000..7ed31f1 --- /dev/null +++ b/hypr/hypridle.conf @@ -0,0 +1,40 @@ +general { + lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. +} + +#listener { +# timeout = 15 # 2.5min. +# on-timeout = notify-send "Your are about to go idle" +# on-resume = "notify-send "Resumed" +#} + +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor. + on-resume = brightnessctl -r # monitor backlight restore. +} + +# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight. +listener { + timeout = 150 # 2.5min. + on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight. + on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight. +} + +listener { + timeout = 300 # 5min + on-timeout = loginctl lock-session # lock screen when timeout has passed +} + +listener { + timeout = 330 # 5.5min + on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed + on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired. +} + +listener { + timeout = 1800 # 30min + on-timeout = systemctl suspend # suspend pc +} diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..2395a0b --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,315 @@ + +# ####################################################################################### +# AUTOGENERATED HYPRLAND CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# This is an example Hyprland config file. +# Refer to the wiki for more information. +# https://wiki.hyprland.org/Configuring/ + +# Please note not all available settings / options are set here. +# For a full list, see the wiki + +# You can split this configuration into multiple files +# Create your files separately and then link them to this file like this: +# source = ~/.config/hypr/myColors.conf + +################ +### MONITORS ### +################ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +#monitor = , preferred, auto, 1 + + +################### +### MY PROGRAMS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ + +# Set programs that you use +$terminal = kitty +$fileManager = thunar +$menu = wofi --show drun + + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: +# exec-once = $terminal +# exec-once = nm-applet & +exec-once = wl-paste --type text --watch cliphist store +exec-once = wl-paste --type image --watch cliphist store +exec-once = waybar & disown +exec-once = librewolf & disown +exec-once = swaync & disown +exec-once = hypridle & disown +exec-once = ~/.config/hypr/scripts/monitor_setup.sh +exec-once = hyprctl dispatch exec "[workspace 3 silent] signal-desktop" +exec-once = hyprctl dispatch exec "[workspace 3 silent] discord" +exec-once = hyprctl dispatch exec "[workspace 3 silent] thunderbird" +#exec-once = hyprctl dispatch exec "[workspace 5 silent] steam" + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_SIZE,20 +env = HYPRCURSOR_SIZE,20 + +##################### +### LOOK AND FEEL ### +##################### + +# Refer to https://wiki.hyprland.org/Configuring/Variables/ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 0 + gaps_out = 0 + + border_size = 1 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 10 + rounding_power = 2 + + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 0.9 + + shadow { + enabled = false + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = no + + # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = easeOutQuint,0.23,1,0.32,1 + bezier = easeInOutCubic,0.65,0.05,0.36,1 + bezier = linear,0,0,1,1 + bezier = almostLinear,0.5,0.5,0.75,1.0 + bezier = quick,0.15,0,0.1,1 + + animation = global, 1, 10, default + animation = border, 1, 5.39, easeOutQuint + animation = windows, 1, 4.79, easeOutQuint + animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + animation = windowsOut, 1, 1.49, linear, popin 87% + animation = fadeIn, 1, 1.73, almostLinear + animation = fadeOut, 1, 1.46, almostLinear + animation = fade, 1, 3.03, quick + animation = layers, 1, 3.81, easeOutQuint + animation = layersIn, 1, 4, easeOutQuint, fade + animation = layersOut, 1, 1.5, linear, fade + animation = fadeLayersIn, 1, 1.79, almostLinear + animation = fadeLayersOut, 1, 1.39, almostLinear + animation = workspaces, 1, 1.94, almostLinear, fade + animation = workspacesIn, 1, 1.21, almostLinear, fade + animation = workspacesOut, 1, 1.94, almostLinear, fade +} + +# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# "Smart gaps" / "No gaps when only" +# uncomment all if you wish to use that. +# workspace = w[tv1], gapsout:0, gapsin:0 +# workspace = f[1], gapsout:0, gapsin:0 +# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] +# windowrule = rounding 0, floating:0, onworkspace:w[tv1] +# windowrule = bordersize 0, floating:0, onworkspace:f[1] +# windowrule = rounding 0, floating:0, onworkspace:f[1] + +# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +master { + new_status = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#misc +misc { + force_default_wallpaper = 0 # 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. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = false + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + + +################### +### KEYBINDINGS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, return, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, F, togglefloating, +bind = $mainMod, space, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod SHIFT, S, exec, hyprshot -m region --clipboard-only, +bind = $mainMod, L, exec, hyprlock +bind = $mainMod, backslash, exec, ~/.config/hypr/scripts/monitor_setup.sh +bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 + +# Example special workspace (scratchpad) +#bind = $mainMod, S, togglespecialworkspace, magic +#bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +bind = SUPER_ALT_CTRL, L, exec, hyprctl keyword monitor "eDP-1,preferred,auto,1" + +#Mouse Key Assignements +#bind = , code:191, exec, $terminal +#bind = , code:198, exec, $terminal + + +# Lid Open & Closed +bindl = , switch:off:Lid Switch, exec, ~/.config/hypr/scripts/monitor_setup.sh +# trigger when the switch is turning on +bindl = , switch:on:Lid Switch, exec, ~/.config/hypr/scripts/monitor_setup.sh + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule +# windowrule = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/hypr/hyprland.conf.save b/hypr/hyprland.conf.save new file mode 100644 index 0000000..b47e1fe --- /dev/null +++ b/hypr/hyprland.conf.save @@ -0,0 +1,297 @@ + +# ####################################################################################### +# AUTOGENERATED HYPRLAND CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# This is an example Hyprland config file. +# Refer to the wiki for more information. +# https://wiki.hyprland.org/Configuring/ + +# Please note not all available settings / options are set here. +# For a full list, see the wiki + +# You can split this configuration into multiple files +# Create your files separately and then link them to this file like this: +# source = ~/.config/hypr/myColors.conf + + +################ +### MONITORS ### +################ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +#monitor=eDP-1,disable +monitor=DP-3,5120x1440@120,0x1440,0.833333 +monitor=DP-4,3440x1440@60,840x0,0.833333 +monitor = , preferred, auto, 0.83 + + +################### +### MY PROGRAMS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ + +# Set programs that you use +$terminal = kitty +$fileManager = dolphin +$menu = wofi --show drun + + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: +# exec-once = $terminal +# exec-once = nm-applet & +exec-once = waybar & librewolf & swaync & hypridle + + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 + + +##################### +### LOOK AND FEEL ### +##################### + +# Refer to https://wiki.hyprland.org/Configuring/Variables/ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 0 + gaps_out = 0 + + border_size = 1 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 10 + rounding_power = 2 + + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 1.0 + + shadow { + enabled = true + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = yes, please :) + + # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = easeOutQuint,0.23,1,0.32,1 + bezier = easeInOutCubic,0.65,0.05,0.36,1 + bezier = linear,0,0,1,1 + bezier = almostLinear,0.5,0.5,0.75,1.0 + bezier = quick,0.15,0,0.1,1 + + animation = global, 1, 10, default + animation = border, 1, 5.39, easeOutQuint + animation = windows, 1, 4.79, easeOutQuint + animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + animation = windowsOut, 1, 1.49, linear, popin 87% + animation = fadeIn, 1, 1.73, almostLinear + animation = fadeOut, 1, 1.46, almostLinear + animation = fade, 1, 3.03, quick + animation = layers, 1, 3.81, easeOutQuint + animation = layersIn, 1, 4, easeOutQuint, fade + animation = layersOut, 1, 1.5, linear, fade + animation = fadeLayersIn, 1, 1.79, almostLinear + animation = fadeLayersOut, 1, 1.39, almostLinear + animation = workspaces, 1, 1.94, almostLinear, fade + animation = workspacesIn, 1, 1.21, almostLinear, fade + animation = workspacesOut, 1, 1.94, almostLinear, fade +} + +# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# "Smart gaps" / "No gaps when only" +# uncomment all if you wish to use that. +# workspace = w[tv1], gapsout:0, gapsin:0 +# workspace = f[1], gapsout:0, gapsin:0 +# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] +# windowrule = rounding 0, floating:0, onworkspace:w[tv1] +# windowrule = bordersize 0, floating:0, onworkspace:f[1] +# windowrule = rounding 0, floating:0, onworkspace:f[1] + +# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +master { + new_status = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#misc +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. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = false + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + + +################### +### KEYBINDINGS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, return, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, space, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, Q, exec, hyprshot -m region --clipboard-only, +bind = $mainMod, L, exec, hyprlock + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule +# windowrule = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +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..83f59d5 --- /dev/null +++ b/hypr/hyprlock.conf @@ -0,0 +1,35 @@ +background { + monitor = + color = rgba(0, 0, 0, 1.0) + +} +input-field { + monitor = + size = 200, 50 + outline_thickness = 3 + dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = false + dots_rounding = -1 # -1 default circle, -2 follow input-field rounding + outer_color = rgb(151515) + inner_color = rgb(200, 200, 200) + font_color = rgb(10, 10, 10) + fade_on_empty = true + fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered. + placeholder_text = Input Password... # Text rendered in the input box when it's empty. + hide_input = false + rounding = -1 # -1 means complete rounding (circle/oval) + check_color = rgb(204, 136, 34) + fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color + fail_text = $FAIL ($ATTEMPTS) # can be set to empty + fail_transition = 300 # transition time in ms between normal outer_color and fail_color + capslock_color = -1 + numlock_color = -1 + bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above) + invert_numlock = false # change color if numlock is off + swap_font_color = false # see below + + position = 0, -20 + halign = center + valign = center +} diff --git a/hypr/scripts/monitor_setup.sh b/hypr/scripts/monitor_setup.sh new file mode 100755 index 0000000..4474d01 --- /dev/null +++ b/hypr/scripts/monitor_setup.sh @@ -0,0 +1,130 @@ +#!/bin/bash +# ~/.config/hypr/scripts/monitor_setup.sh +notify-send -t 3000 "Monitor Setup" "Detecting display configuration..." +LAPTOP="eDP-1" +LID_STATE=$(grep -q "open" /proc/acpi/button/lid/LID/state && echo "open" || echo "closed") +MONITORS=$(hyprctl monitors -j) + +EXTERNAL=$(echo "$MONITORS" | jq -r '.[] | select(.name != "'$LAPTOP'") | .name' | head -1) + +# Improved function to get the maximum resolution with highest refresh rate +get_max_res() { + local monitor=$1 + + # Get all available modes for the monitor + local modes=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$monitor\") | .availableModes[]") + + if [[ -z "$modes" ]]; then + echo "preferred" + return + fi + + # Find the mode with the highest resolution and refresh rate + local max_pixels=0 + local max_refresh=0 + local best_mode="preferred" + + while IFS= read -r mode; do + # Extract width, height, and refresh rate + local width=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $1}') + local height=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $2}') + local refresh=$(echo "$mode" | awk -F'@' '{print $2}' | sed 's/Hz//') + + # Calculate total pixels (width × height) for better comparison + local pixels=$((width * height)) + + # First prioritize by total pixel count (resolution), then by refresh rate + if [[ $pixels -gt $max_pixels || ($pixels -eq $max_pixels && $(echo "$refresh > $max_refresh" | bc -l) -eq 1) ]]; then + max_pixels=$pixels + max_refresh=$refresh + best_mode="${width}x${height}@${refresh}" + fi + done <<< "$modes" + + echo "$best_mode" +} + +# Alternative method to get max resolution using hyprctl +get_max_res_alt() { + local monitor=$1 + local modes=$(hyprctl monitors -j | jq -r ".[] | select(.name == \"$monitor\") | .availableModes[]") + + if [[ -z "$modes" ]]; then + # Try querying wlr-randr directly as a fallback + if command -v wlr-randr &> /dev/null; then + modes=$(wlr-randr | grep -A 10 "$monitor" | grep -o '[0-9]\+x[0-9]\+@[0-9.]\+Hz') + fi + fi + + if [[ -z "$modes" ]]; then + echo "preferred" + return + fi + + # Find highest resolution with best refresh rate + local best_mode=$(echo "$modes" | sort -nr -k1 -t'x' -k2 -t'@' | head -1) + echo "$best_mode" +} + +# Get resolution for monitors - try both methods +EXT_RES=$(get_max_res "$EXTERNAL") +if [[ "$EXT_RES" == "preferred" ]]; then + EXT_RES=$(get_max_res_alt "$EXTERNAL") +fi + +LAPTOP_RES=$(get_max_res "$LAPTOP") +if [[ "$LAPTOP_RES" == "preferred" ]]; then + LAPTOP_RES=$(get_max_res_alt "$LAPTOP") +fi + +# Case 1: Only laptop +if [ -z "$EXTERNAL" ]; then + notify-send -t 3000 "Monitor Setup" "Laptop-only mode\nUsing: $LAPTOP_RES" + hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,1" + + for ws in {1..5}; do + hyprctl keyword "workspace $ws,monitor:$LAPTOP" >/dev/null 2>&1 + hyprctl dispatch workspace "$ws" >/dev/null 2>&1 + hyprctl dispatch moveworkspacetomonitor "$ws $LAPTOP" 2>/dev/null + done + exit 0 +fi + +# Case 2: External + open lid +if [ "$LID_STATE" = "open" ]; then + notify-send -t 3000 "Monitor Setup" "Dual monitor mode (Laptop + External)\nLaptop: $LAPTOP_RES\nExternal: $EXT_RES" + hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,1" + hyprctl keyword monitor "$EXTERNAL,$EXT_RES,auto,1" + + for ws in {1..3}; do + hyprctl keyword "workspace $ws,monitor:$LAPTOP" >/dev/null 2>&1 + hyprctl dispatch workspace "$ws" >/dev/null 2>&1 + hyprctl dispatch moveworkspacetomonitor "$ws $LAPTOP" 2>/dev/null + done + for ws in {4..5}; do + hyprctl keyword "workspace $ws,monitor:$EXTERNAL" >/dev/null 2>&1 + hyprctl dispatch workspace "$ws" >/dev/null 2>&1 + hyprctl dispatch moveworkspacetomonitor "$ws $EXTERNAL" 2>/dev/null + done +# Case 3: External + closed lid +else + notify-send -t 3000 "Monitor Setup" "External monitor only (Lid closed)\nUsing: $EXT_RES" + hyprctl dispatch dpms off "$LAPTOP" + hyprctl keyword monitor "$LAPTOP,disable" + hyprctl keyword monitor "$EXTERNAL,$EXT_RES,0x0,1" + + for ws in {1..5}; do + hyprctl keyword "workspace $ws,monitor:$EXTERNAL" >/dev/null 2>&1 + hyprctl dispatch workspace "$ws" >/dev/null 2>&1 + hyprctl dispatch moveworkspacetomonitor "$ws $EXTERNAL" 2>/dev/null + done +fi + +# Debug output - helpful for troubleshooting +echo "Monitor Configuration:" > /tmp/hypr_monitor_debug.log +echo "LAPTOP: $LAPTOP with resolution $LAPTOP_RES" >> /tmp/hypr_monitor_debug.log +echo "EXTERNAL: $EXTERNAL with resolution $EXT_RES" >> /tmp/hypr_monitor_debug.log +echo "LID_STATE: $LID_STATE" >> /tmp/hypr_monitor_debug.log +hyprctl monitors >> /tmp/hypr_monitor_debug.log + +notify-send -t 5000 "Monitor Setup Complete" "Active configuration:\n$(hyprctl monitors | grep -E 'Monitor|workspace|resolution')" diff --git a/hypr/scripts/monitor_setup.sh.dual-not_working b/hypr/scripts/monitor_setup.sh.dual-not_working new file mode 100755 index 0000000..b4ef309 --- /dev/null +++ b/hypr/scripts/monitor_setup.sh.dual-not_working @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# Robust Monitor Setup with Workspace Assignments + +notify-send "Monitor Setup" "Starting configuration..." + +# ------------------------------------------------------------------- +# Phase 1: Reset State +# ------------------------------------------------------------------- +#hyprctl keyword monitor "" # Clear all monitor rules +#hyprctl keyword workspace "" # Clear workspace assignments +#sleep 1 + +# ------------------------------------------------------------------- +# Phase 2: Hardware Detection +# ------------------------------------------------------------------- +MONITORS=$(hyprctl monitors -j all) +LAPTOP="eDP-1" +LID_STATE=$(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}') +EXTERNAL_MONITORS=($(echo "$MONITORS" | jq -r '.[] | select(.name != "eDP-1") | .name')) + +# ------------------------------------------------------------------- +# Phase 3: Configuration +# ------------------------------------------------------------------- + +# Case 1: No externals - Laptop only +if [ ${#EXTERNAL_MONITORS[@]} -eq 0 ]; then + notify-send "Monitor Setup" "Laptop-only mode" + hyprctl keyword monitor "$LAPTOP,1920x1200@60,0x0,1.5" + sleep 1 + + # Assign all workspaces to laptop + for ws in {1..10}; do + hyprctl keyword "workspace $ws, monitor:$LAPTOP" + done + +# Case 2: Any external monitors +else + # Try to identify known monitors by serial + ULTRAWIDE=$(echo "$MONITORS" | jq -r '.[] | select(.serial == "303NTLE84432") | .name') + STANDARD=$(echo "$MONITORS" | jq -r '.[] | select(.serial == "H4LN801666") | .name') + + # Dual monitor setup (known monitors) + if [ -n "$ULTRAWIDE" ] && [ -n "$STANDARD" ]; then + notify-send "Monitor Setup" "Dual monitor mode (Ultrawide + Standard)" + + # Configure monitors + hyprctl keyword monitor "$ULTRAWIDE,5120x1440@120,0x1440,1" + sleep 1 + hyprctl keyword monitor "$STANDARD,3440x1440@60,840x0,1" + sleep 1 + hyprctl dispatch dpms off "$LAPTOP" + + # Workspace assignments: + # 1-4 on Ultrawide, 5-10 on Standard + for ws in {1..4}; do + hyprctl keyword "workspace $ws, monitor:$ULTRAWIDE" + hyprctl dispatch moveworkspacetomonitor "$ws $ULTRAWIDE" + done + for ws in {5..9}; do + hyprctl keyword "workspace $ws, monitor:$STANDARD" + hyprctl dispatch moveworkspacetomonitor "$ws $STANDARD" + done + + hyprctl keyword "workspace 10, monitor:$LAPTOP" + hyprctl dispatch moveworkspacetomonitor "10 $LAPTOP" + + # Single external (any monitor) + else + EXT_MON=${EXTERNAL_MONITORS[0]} + notify-send "Monitor Setup" "Single external: $EXT_MON" + + # Get max resolution + MAX_RES=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$EXT_MON\") | .availableModes[0] | \"\(.width)x\(.height)@\(.refreshRate)\"") + + # Check lid state + if [ "$LID_STATE" == "closed" ]; then + # Lid closed - only external monitor + notify-send "Monitor Setup" "Lid closed - using external only" + hyprctl dispatch dpms off "$LAPTOP" + hyprctl keyword monitor "$EXT_MON,$MAX_RES,0x0,1" + sleep 1 + + hyprctl keyword "workspace 10, monitor:$LAPTOP" + hyprctl dispatch moveworkspacetomonitor "10 $LAPTOP" + + # Assign all workspaces to external + for ws in {1..9}; do + hyprctl keyword "workspace $ws, monitor:$EXT_MON" + hyprctl dispatch moveworkspacetomonitor "$ws $EXT_MON" + done + + else + # Lid open - both monitors + notify-send "Monitor Setup" "Lid open - using laptop + external" + hyprctl keyword monitor "$LAPTOP,1920x1200@60,0x0,1.5" + sleep 1 + hyprctl keyword monitor "$EXT_MON,$MAX_RES,1920x0,1" + sleep 1 + + # Workspace assignments: + # 1-4 on laptop, 5-10 on external + for ws in {1..4}; do + hyprctl keyword "workspace $ws, monitor:$LAPTOP" + hyprctl dispatch moveworkspacetomonitor "$ws $LAPTOP" + done + for ws in {5..10}; do + hyprctl keyword "workspace $ws, monitor:$EXT_MON" + hyprctl dispatch moveworkspacetomonitor "$ws $EXT_MON" + done + fi + fi +fi + +# ------------------------------------------------------------------- +# Finalization +# ------------------------------------------------------------------- +sleep 1 +notify-send "Monitor Setup Complete" "Active configuration:\n$(hyprctl monitors)" diff --git a/hypr/scripts/monitor_setup.sh.old b/hypr/scripts/monitor_setup.sh.old new file mode 100755 index 0000000..aece268 --- /dev/null +++ b/hypr/scripts/monitor_setup.sh.old @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Get all monitor info (including disabled) +MONITORS=$(hyprctl monitors -j all) +ALL_MONITORS=$(echo "$MONITORS" | jq -r '.[] | .name') +EXTERNAL_COUNT=$(echo "$ALL_MONITORS" | grep -v "eDP-1" | wc -l) + +#echo $MONITORS +#echo $ALL_MONITORS +#echo $EXTERNAL_COUNT + +# Case 1: No externals - laptop only +if [[ $EXTERNAL_COUNT -eq 0 ]]; then + hyprctl keyword monitor "eDP-1,1920x1200@60,0x0,1" + exit 0 +fi + +# Case 2: Single external monitor +if [[ $EXTERNAL_COUNT -eq 1 ]]; then + EXT_MON=$(echo "$ALL_MONITORS" | grep -v "eDP-1") + MODES=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$EXT_MON\") | .availableModes | join(\" \")") + MAX_RES=$(echo "$MODES" | grep -oE "[0-9]+x[0-9]+@[0-9.]+" | awk -F'[@x]' '{print $1,$2,$3}' | sort -k1,1nr -k2,2nr -k3,3nr | awk '{print $1"x"$2"@"$3}' | head -n1) + + hyprctl keyword monitor "eDP-1,1920x1200@60,0x0,1" + hyprctl keyword monitor "$EXT_MON,$MAX_RES,1920x0,1" # Right of laptop + exit 0 +fi + +# Identify our specific monitors +ULTRAWIDE="" +STANDARD_ULTRAWIDE="" + +for MON in $(echo "$ALL_MONITORS"); do + echo $MON + [[ $MON == "eDP-1" ]] && continue + + MODES=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$MON\") | .availableModes | join(\" \")") + + echo $MODES + + if [[ $MODES =~ "5120x1440" ]]; then + ULTRAWIDE=$MON + echo "Ultrawide = $ULTRAWIDE" + elif [[ $MODES =~ "3440x1440" ]]; then + STANDARD_ULTRAWIDE=$MON + echo "Standard = $STANDARD_ULTRAWIDE" + fi +done + +# Case 3: Dual monitor setup (only if we found both our specific monitors) +if [[ -n "$ULTRAWIDE" && -n "$STANDARD_ULTRAWIDE" ]]; then + echo "dual monitors" + hyprctl keyword monitor "eDP-1,disable" + hyprctl keyword monitor "$ULTRAWIDE,5120x1440@120,0x1440,1" # 49" at bottom + hyprctl keyword monitor "$STANDARD_ULTRAWIDE,3440x1440@60,840x0,1" # 34" at top-left + exit 0 +fi + +# If we get here, it's an unexpected configuration - do nothing +notify-send "Error detecting monitors, no changes" diff --git a/kitty/kitty.conf b/kitty/kitty.conf new file mode 100644 index 0000000..5ef9039 --- /dev/null +++ b/kitty/kitty.conf @@ -0,0 +1,20 @@ +include themes/gruvbox_dark.conf + +font_family Fira Code Regular # or JetBrains Mono +font_size 12 +bold_font auto +italic_font auto +bold_italic_font auto + +# Enable Wayland support +wayland_titlebar_color background +linux_display_server wayland + +# Basic appearance +font_size 12 +font_family Fira Code +background_opacity 0.9 + +# Key bindings +map ctrl+shift+n new_os_window +map ctrl+shift+t new_tab diff --git a/kitty/themes/gruvbox_dark.conf b/kitty/themes/gruvbox_dark.conf new file mode 100644 index 0000000..369da8d --- /dev/null +++ b/kitty/themes/gruvbox_dark.conf @@ -0,0 +1,49 @@ +# gruvbox dark by morhetz, https://github.com/morhetz/gruvbox +# This work is licensed under the terms of the MIT license. +# For a copy, see https://opensource.org/licenses/MIT. + +background #282828 +foreground #ebdbb2 + +cursor #928374 + +selection_foreground #928374 +selection_background #3c3836 + +color0 #282828 +color8 #928374 + +# red +color1 #cc241d +# light red +color9 #fb4934 + +# green +color2 #98971a +# light green +color10 #b8bb26 + +# yellow +color3 #d79921 +# light yellow +color11 #fabd2d + +# blue +color4 #458588 +# light blue +color12 #83a598 + +# magenta +color5 #b16286 +# light magenta +color13 #d3869b + +# cyan +color6 #689d6a +# lighy cyan +color14 #8ec07c + +# light gray +color7 #a89984 +# dark gray +color15 #928374 diff --git a/nvim/.luarc.json b/nvim/.luarc.json new file mode 100644 index 0000000..1e1765c --- /dev/null +++ b/nvim/.luarc.json @@ -0,0 +1,5 @@ +{ + "diagnostics.globals": [ + "vim" + ] +} \ No newline at end of file diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..9e9cba2 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,16 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +require("vim-options") +require("lazy").setup("plugins") + diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..6843e79 --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,31 @@ +{ + "LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" }, + "avante.nvim": { "branch": "main", "commit": "2f806ca34223a50435018dd21d443795f619828d" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "copilot.lua": { "branch": "master", "commit": "0929c92097a49b6ae3565aab157fa2bce398d953" }, + "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, + "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, + "fzf-lua": { "branch": "main", "commit": "66e620a7a724364809e78a1ae4b5bfe73e37df49" }, + "gruvbox.nvim": { "branch": "main", "commit": "00e38a379bab3389e187b3953566d67d494dfddd" }, + "img-clip.nvim": { "branch": "main", "commit": "08a02e14c8c0d42fa7a92c30a98fd04d6993b35d" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "lualine.nvim": { "branch": "master", "commit": "15884cee63a8c205334ab13ab1c891cd4d27101a" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "d39a75bbce4b8aad5d627191ea915179c77c100f" }, + "mason.nvim": { "branch": "main", "commit": "7c7318e8bae7e3536ef6b9e86b9e38e74f2e125e" }, + "mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" }, + "mini.pick": { "branch": "main", "commit": "fa1e449e1080bf7aa9b2890ee186d23b1b4e1287" }, + "neo-tree.nvim": { "branch": "v3.x", "commit": "f481de16a0eb59c985abac8985e3f2e2f75b4875" }, + "none-ls.nvim": { "branch": "main", "commit": "90e4a27ccaa25979a6b732b9f06dfa43b54957b7" }, + "nui.nvim": { "branch": "main", "commit": "f535005e6ad1016383f24e39559833759453564e" }, + "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, + "nvim-lspconfig": { "branch": "master", "commit": "61e5109c8cf24807e4ae29813a3a82b31821dd45" }, + "nvim-treesitter": { "branch": "master", "commit": "28d480e0624b259095e56f353ec911f9f2a0f404" }, + "nvim-web-devicons": { "branch": "master", "commit": "f1420728f59843eb2ef084406b3d0201a0a0932d" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "render-markdown.nvim": { "branch": "main", "commit": "a1b0988f5ab26698afb56b9c2f0525a4de1195c1" }, + "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, + "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, + "telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" }, + "vim-tmux-navigator": { "branch": "master", "commit": "33afa80db65113561dc53fa732b7f5e53d5ecfd0" } +} diff --git a/nvim/lua/.luarc.json b/nvim/lua/.luarc.json new file mode 100644 index 0000000..1e1765c --- /dev/null +++ b/nvim/lua/.luarc.json @@ -0,0 +1,5 @@ +{ + "diagnostics.globals": [ + "vim" + ] +} \ No newline at end of file diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/nvim/lua/plugins.lua @@ -0,0 +1 @@ +return {} diff --git a/nvim/lua/plugins/.luarc.json b/nvim/lua/plugins/.luarc.json new file mode 100644 index 0000000..1e1765c --- /dev/null +++ b/nvim/lua/plugins/.luarc.json @@ -0,0 +1,5 @@ +{ + "diagnostics.globals": [ + "vim" + ] +} \ No newline at end of file diff --git a/nvim/lua/plugins/avante.lua b/nvim/lua/plugins/avante.lua new file mode 100644 index 0000000..9d9a979 --- /dev/null +++ b/nvim/lua/plugins/avante.lua @@ -0,0 +1,59 @@ +return { + "yetone/avante.nvim", + event = "VeryLazy", + lazy = false, + version = false, -- Set this to "*" to always pull the latest release version, or set it to false to update to the latest code changes. + opts = { + -- add any opts here + -- for example + provider = "claude", + claude = { + endpoint = "https://api.anthropic.com", + model = "claude-3-haiku-20240307", + timeout = 30000, + temperature = 0, + max_tokens = 2048, + }, + }, + -- if you want to build from source then do `make BUILD_FROM_SOURCE=true` + build = "make", + -- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows + dependencies = { + "nvim-treesitter/nvim-treesitter", + "stevearc/dressing.nvim", + "nvim-lua/plenary.nvim", + "MunifTanjim/nui.nvim", + --- The below dependencies are optional, + "echasnovski/mini.pick", -- for file_selector provider mini.pick + "nvim-telescope/telescope.nvim", -- for file_selector provider telescope + "hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions + "ibhagwan/fzf-lua", -- for file_selector provider fzf + "nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons + "zbirenbaum/copilot.lua", -- for providers='copilot' + { + -- support for image pasting + "HakonHarnes/img-clip.nvim", + event = "VeryLazy", + opts = { + -- recommended settings + default = { + embed_image_as_base64 = false, + prompt_for_file_name = false, + drag_and_drop = { + insert_mode = true, + }, + -- required for Windows users + use_absolute_path = true, + }, + }, + }, + { + -- Make sure to set this up properly if you have lazy=true + 'MeanderingProgrammer/render-markdown.nvim', + opts = { + file_types = { "markdown", "Avante" }, + }, + ft = { "markdown", "Avante" }, + }, + }, +} diff --git a/nvim/lua/plugins/completions.lua b/nvim/lua/plugins/completions.lua new file mode 100644 index 0000000..2e7396a --- /dev/null +++ b/nvim/lua/plugins/completions.lua @@ -0,0 +1,44 @@ +return { + { + "hrsh7th/cmp-nvim-lsp" + }, + { + "L3MON4D3/LuaSnip", + dependencies = { + "saadparwaiz1/cmp_luasnip", + "rafamadriz/friendly-snippets", + }, + }, + { + "hrsh7th/nvim-cmp", + config = function() + local cmp = require("cmp") + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup({ + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, -- For luasnip users. + }, { + { name = "buffer" }, + }), + }) + end, + }, +} diff --git a/nvim/lua/plugins/gruvbox.lua b/nvim/lua/plugins/gruvbox.lua new file mode 100644 index 0000000..eb0297b --- /dev/null +++ b/nvim/lua/plugins/gruvbox.lua @@ -0,0 +1,21 @@ +return { + { + "ellisonleao/gruvbox.nvim", + lazy = false, + priority = 1000, + config = function() + require("gruvbox").setup({ + terminal_colors = true, + italic = { + strings = true, + emphasis = true, + comments = true, + operators = false, + folds = true, + }, + }) + vim.o.background = "dark" + vim.cmd([[colorscheme gruvbox]]) + end + } +} diff --git a/nvim/lua/plugins/lsp-config.lua b/nvim/lua/plugins/lsp-config.lua new file mode 100644 index 0000000..87d5bee --- /dev/null +++ b/nvim/lua/plugins/lsp-config.lua @@ -0,0 +1,36 @@ +return { + { + "williamboman/mason.nvim", + lazy = false, + config = function() + require("mason").setup() + end, + }, + { + "williamboman/mason-lspconfig.nvim", + lazy = false, + config = function() + require("mason-lspconfig").setup({ + ensure_installed = { "lua_ls" } + }) + end + }, + { + "neovim/nvim-lspconfig", + lazy = false, + config = function() + local capabilities = require('cmp_nvim_lsp').default_capabilities() + + local lspconfig = require("lspconfig") + lspconfig.lua_ls.setup({ + capabilities = capabilities + }) + + vim.keymap.set("n", "K", vim.lsp.buf.hover, {}) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, {}) + vim.keymap.set("n", "gr", vim.lsp.buf.references, {}) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, {}) + end, + }, + } + diff --git a/nvim/lua/plugins/lualine.lua b/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..56936fe --- /dev/null +++ b/nvim/lua/plugins/lualine.lua @@ -0,0 +1,221 @@ +return { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-tree/nvim-web-devicons' }, + config = function() + -- Color table for highlights + -- stylua: ignore + local colors = { + bg = '#202328', + fg = '#bbc2cf', + yellow = '#ECBE7B', + cyan = '#008080', + darkblue = '#081633', + green = '#98be65', + orange = '#FF8800', + violet = '#a9a1e1', + magenta = '#c678dd', + blue = '#51afef', + red = '#ec5f67', + } + + local conditions = { + buffer_not_empty = function() + return vim.fn.empty(vim.fn.expand('%:t')) ~= 1 + end, + hide_in_width = function() + return vim.fn.winwidth(0) > 80 + end, + check_git_workspace = function() + local filepath = vim.fn.expand('%:p:h') + local gitdir = vim.fn.finddir('.git', filepath .. ';') + return gitdir and #gitdir > 0 and #gitdir < #filepath + end, + } + + -- Config + local config = { + options = { + -- Disable sections and component separators + component_separators = '', + section_separators = '', + theme = 'gruvbox_dark', -- Using gruvbox_dark as the base theme + -- Theme can also be configured as shown in the original Eviline config + -- theme = { + -- normal = { c = { fg = colors.fg, bg = colors.bg } }, + -- inactive = { c = { fg = colors.fg, bg = colors.bg } }, + -- }, + }, + sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_b = {}, + lualine_y = {}, + lualine_z = {}, + -- These will be filled later + lualine_c = {}, + lualine_x = {}, + }, + inactive_sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_b = {}, + lualine_y = {}, + lualine_z = {}, + lualine_c = {}, + lualine_x = {}, + }, + } + + -- Inserts a component in lualine_c at left section + local function ins_left(component) + table.insert(config.sections.lualine_c, component) + end + + -- Inserts a component in lualine_x at right section + local function ins_right(component) + table.insert(config.sections.lualine_x, component) + end + + ins_left { + function() + return '▊' + end, + color = { fg = colors.blue }, -- Sets highlighting of component + padding = { left = 0, right = 1 }, -- We don't need space before this + } + + ins_left { + -- mode component + function() + return '' + end, + color = function() + -- auto change color according to neovims mode + local mode_color = { + n = colors.red, + i = colors.green, + v = colors.blue, + ['␖'] = colors.blue, + V = colors.blue, + c = colors.magenta, + no = colors.red, + s = colors.orange, + S = colors.orange, + ['␓'] = colors.orange, + ic = colors.yellow, + R = colors.violet, + Rv = colors.violet, + cv = colors.red, + ce = colors.red, + r = colors.cyan, + rm = colors.cyan, + ['r?'] = colors.cyan, + ['!'] = colors.red, + t = colors.red, + } + return { fg = mode_color[vim.fn.mode()] } + end, + padding = { right = 1 }, + } + + ins_left { + -- filesize component + 'filesize', + cond = conditions.buffer_not_empty, + } + + ins_left { + 'filename', + cond = conditions.buffer_not_empty, + color = { fg = colors.magenta, gui = 'bold' }, + } + + ins_left { 'location' } + + ins_left { 'progress', color = { fg = colors.fg, gui = 'bold' } } + + ins_left { + 'diagnostics', + sources = { 'nvim_diagnostic' }, + symbols = { error = ' ', warn = ' ', info = ' ' }, + diagnostics_color = { + error = { fg = colors.red }, + warn = { fg = colors.yellow }, + info = { fg = colors.cyan }, + }, + } + + -- Insert mid section. You can make any number of sections in neovim :) + -- for lualine it's any number greater then 2 + ins_left { + function() + return '%=' + end, + } + + ins_left { + -- Lsp server name . + function() + local msg = 'No Active Lsp' + local buf_ft = vim.api.nvim_get_option_value('filetype', { buf = 0 }) + local clients = vim.lsp.get_clients() + if next(clients) == nil then + return msg + end + for _, client in ipairs(clients) do + local filetypes = client.config.filetypes + if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then + return client.name + end + end + return msg + end, + icon = ' LSP:', + color = { fg = '#ffffff', gui = 'bold' }, + } + + -- Add components to right sections + ins_right { + 'o:encoding', -- option component same as &encoding in viml + fmt = string.upper, -- I'm not sure why it's upper case either ;) + cond = conditions.hide_in_width, + color = { fg = colors.green, gui = 'bold' }, + } + + ins_right { + 'fileformat', + fmt = string.upper, + icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh + color = { fg = colors.green, gui = 'bold' }, + } + + ins_right { + 'branch', + icon = '', + color = { fg = colors.violet, gui = 'bold' }, + } + + ins_right { + 'diff', + -- Is it me or the symbol for modified us really weird + symbols = { added = ' ', modified = '󰝤 ', removed = ' ' }, + diff_color = { + added = { fg = colors.green }, + modified = { fg = colors.orange }, + removed = { fg = colors.red }, + }, + cond = conditions.hide_in_width, + } + + ins_right { + function() + return '▊' + end, + color = { fg = colors.blue }, + padding = { left = 1 }, + } + + -- Now don't forget to initialize lualine + require('lualine').setup(config) + end +} diff --git a/nvim/lua/plugins/neo-tree.lua b/nvim/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..904ce46 --- /dev/null +++ b/nvim/lua/plugins/neo-tree.lua @@ -0,0 +1,13 @@ +return { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", + "MunifTanjim/nui.nvim", + }, + config = function() + vim.keymap.set("n", "", ":Neotree filesystem reveal left", {}) + vim.keymap.set("n", "bf", ":Neotree buffers reveal float", {}) + end, +} diff --git a/nvim/lua/plugins/none-ls.lua b/nvim/lua/plugins/none-ls.lua new file mode 100644 index 0000000..10e7a48 --- /dev/null +++ b/nvim/lua/plugins/none-ls.lua @@ -0,0 +1,16 @@ +return { + "nvimtools/none-ls.nvim", + config = function() + local null_ls = require("null-ls") + null_ls.setup({ + sources = { + null_ls.builtins.formatting.stylua, + null_ls.builtins.formatting.prettier, + null_ls.builtins.formatting.black, + null_ls.builtins.formatting.isort, + }, + }) + + vim.keymap.set("n", "gf", vim.lsp.buf.format, {}) + end, +} diff --git a/nvim/lua/plugins/nvim-tmux-naviation.lua b/nvim/lua/plugins/nvim-tmux-naviation.lua new file mode 100644 index 0000000..11c99cd --- /dev/null +++ b/nvim/lua/plugins/nvim-tmux-naviation.lua @@ -0,0 +1,18 @@ +return { + "christoomey/vim-tmux-navigator", + cmd = { + "TmuxNavigateLeft", + "TmuxNavigateDown", + "TmuxNavigateUp", + "TmuxNavigateRight", + "TmuxNavigatePrevious", + "TmuxNavigatorProcessList", + }, + keys = { + { "", "TmuxNavigateLeft" }, + { "", "TmuxNavigateDown" }, + { "", "TmuxNavigateUp" }, + { "", "TmuxNavigateRight" }, + { "", "TmuxNavigatePrevious" }, + }, +} diff --git a/nvim/lua/plugins/snacks.lua b/nvim/lua/plugins/snacks.lua new file mode 100644 index 0000000..057b5ff --- /dev/null +++ b/nvim/lua/plugins/snacks.lua @@ -0,0 +1,46 @@ +return { + "folke/snacks.nvim", + dependencies = { + "echasnovski/mini.icons", + }, + priority = 1000, + lazy = false, + opts = { + bigfile = { enabled = true }, + dashboard = { + enabled = true, + preset = { + header = [[ +  + ████ ██████ █████ ██ + ███████████ █████  + █████████ ███████████████████ ███ ███████████ + █████████ ███ █████████████ █████ ██████████████ + █████████ ██████████ █████████ █████ █████ ████ █████ + ███████████ ███ ███ █████████ █████ █████ ████ █████ + ██████ █████████████████████ ████ █████ █████ ████ ██████ + ]], + }, + }, + indent = { enabled = true }, + input = { enabled = true }, + git = { enabled = true }, + picker = { enabled = true }, + notifier = { enabled = true }, + quickfile = { enabled = true }, + scroll = { enabled = false }, + statuscolumn = { enabled = true }, + words = { enabled = true }, + }, + keys = { + { "sf", function() Snacks.scratch() end, desc = "Toggle Scratch Buffer" }, + { "S", function() Snacks.scratch.select() end, desc = "Select Scratch Buffer" }, + { "gl", function() Snacks.lazygit.log_file() end, desc = "Lazygit Log (cwd)" }, + { "lg", function() Snacks.lazygit() end, desc = "Lazygit" }, + { "", function() Snacks.picker.pick("files") end, desc = "Find Files" }, + { "", function() Snacks.picker.recent() end, desc = "Recent Files" }, + { "fb", function() Snacks.picker.buffers() end, desc = "Buffers" }, + { "fg", function() Snacks.picker.grep() end, desc = "Grep Files" }, + { "", function() Snacks.explorer() end, desc = "Explorer" }, + } + } diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..710d0e8 --- /dev/null +++ b/nvim/lua/plugins/telescope.lua @@ -0,0 +1,25 @@ +return { + { + "nvim-telescope/telescope-ui-select.nvim", + }, + { + "nvim-telescope/telescope.nvim", + tag = "0.1.5", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + require("telescope").setup({ + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown({}), + }, + }, + }) + local builtin = require("telescope.builtin") + vim.keymap.set("n", "", builtin.find_files, {}) + vim.keymap.set("n", "fg", builtin.live_grep, {}) + vim.keymap.set("n", "", builtin.oldfiles, {}) + + require("telescope").load_extension("ui-select") + end, + }, +} diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..6312070 --- /dev/null +++ b/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,14 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + local config = require("nvim-treesitter.configs") + config.setup({ + auto_install = true, + highlight = { enable = true }, + indent = { enable = true }, + }) + end + } +} diff --git a/nvim/lua/plugins/vim-test.lua b/nvim/lua/plugins/vim-test.lua new file mode 100644 index 0000000..500e95c --- /dev/null +++ b/nvim/lua/plugins/vim-test.lua @@ -0,0 +1,14 @@ +return { + "vim-test/vim-test", + dependencies = { + "preservim/vimux" + }, + config = function() + vim.keymap.set("n", "t", ":TestNearest", {}) + vim.keymap.set("n", "T", ":TestFile", {}) + vim.keymap.set("n", "a", ":TestSuite", {}) + vim.keymap.set("n", "l", ":TestLast", {}) + vim.keymap.set("n", "g", ":TestVisit", {}) + vim.cmd("let test#strategy = 'vimux'") + end, +} diff --git a/nvim/lua/vim-options.lua b/nvim/lua/vim-options.lua new file mode 100644 index 0000000..a885300 --- /dev/null +++ b/nvim/lua/vim-options.lua @@ -0,0 +1,12 @@ +vim.cmd("set expandtab") +vim.cmd("set tabstop=2") +vim.cmd("set softtabstop=2") +vim.cmd("set shiftwidth=2") +vim.g.mapleader= " " +vim.opt.relativenumber = true +vim.opt.nu = true + +vim.keymap.set('n', '', ':wincmd k') +vim.keymap.set('n', '', ':wincmd j') +vim.keymap.set('n', '', ':wincmd h') +vim.keymap.set('n', '', ':wincmd l') diff --git a/pavucontrol.ini b/pavucontrol.ini new file mode 100644 index 0000000..d67bbba --- /dev/null +++ b/pavucontrol.ini @@ -0,0 +1,8 @@ +[window] +width=500 +height=400 +sinkInputType=1 +sourceOutputType=1 +sinkType=0 +sourceType=1 +showVolumeMeters=1 diff --git a/waybar/config.jsonc b/waybar/config.jsonc new file mode 100644 index 0000000..fc9305c --- /dev/null +++ b/waybar/config.jsonc @@ -0,0 +1,489 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "custom/wireguard", // wireguard + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "weeks-pos": "right", + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/wireguard": { + "format": "{}", + "return-type": "json", + "interval": 10, + "exec": "~/.config/waybar/scripts/wireguard-status.sh", + "tooltip": true + }, + + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 180, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/config.jsonc.original b/waybar/config.jsonc.original new file mode 100644 index 0000000..86194e0 --- /dev/null +++ b/waybar/config.jsonc.original @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/scripts/battery-level.sh b/waybar/scripts/battery-level.sh new file mode 100755 index 0000000..ddde6ea --- /dev/null +++ b/waybar/scripts/battery-level.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +# Original script by Eric Murphy +# https://github.com/ericmurphyxyz/dotfiles/blob/master/.local/bin/battery-alert +# +# Modified by Jesse Mirabel (@sejjy) +# https://github.com/sejjy/mechabar + +# This script sends a notification when the battery is full, low, or critical. +# icon theme used: tela-circle-icon-theme-dracula +# +# (see the bottom of the script for more information) + +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" + +# battery levels +WARNING_LEVEL=20 +CRITICAL_LEVEL=10 + +# get the battery state and percentage using upower (waybar dependency) +BAT_PATH=$(upower -e | grep BAT | head -n 1) +BATTERY_STATE=$(upower -i "$BAT_PATH" | awk '/state:/ {print $2}') +BATTERY_LEVEL=$(upower -i "$BAT_PATH" | awk '/percentage:/ {print $2}' | tr -d '%') + +# prevent multiple notifications +FILE_FULL=/tmp/battery-full +FILE_WARNING=/tmp/battery-warning +FILE_CRITICAL=/tmp/battery-critical + +# remove the files if the battery is no longer in that state +if [ "$BATTERY_STATE" == "discharging" ]; then + rm -f $FILE_FULL +elif [ "$BATTERY_STATE" == "charging" ]; then + rm -f "$FILE_WARNING" "$FILE_CRITICAL" +fi + +# if the battery is full and is plugged in +if [ "$BATTERY_LEVEL" -eq 100 ] && [ "$BATTERY_STATE" == "fully-charged" ] && [ ! -f $FILE_FULL ]; then + notify-send -a "state" "Battery Charged (${BATTERY_LEVEL}%)" "You might want to unplug your PC." -i "battery-full" -r 9991 + touch $FILE_FULL + +# if the battery is low and is discharging +elif [ "$BATTERY_LEVEL" -le $WARNING_LEVEL ] && [ "$BATTERY_STATE" == "discharging" ] && [ ! -f $FILE_WARNING ]; then + notify-send -a "state" "Battery Low (${BATTERY_LEVEL}%)" "You might want to plug in your PC." -u critical -i "battery-caution" -r 9991 -h string:fgcolor:\#fab387 -h string:frcolor:\#fab387 + touch $FILE_WARNING + +# if the battery is critical and is discharging +elif [ "$BATTERY_LEVEL" -le $CRITICAL_LEVEL ] && [ "$BATTERY_STATE" == "discharging" ] && [ ! -f $FILE_CRITICAL ]; then + notify-send -a "state" "Battery Critical (${BATTERY_LEVEL}%)" "Plug in your PC now." -u critical -i "battery-empty" -r 9991 + touch $FILE_CRITICAL +fi + +# systemd service +# Add the following to ~/.config/systemd/user/battery-level.service: + +# [Unit] +# Description=Battery Level Checker +# After=graphical.target +# +# [Service] +# ExecStart=%h/.config/waybar/scripts/battery-level.sh +# Type=oneshot + +# systemd timer +# Add the following to ~/.config/systemd/user/battery-level.timer: + +# [Unit] +# Description=Run Battery Level Checker +# +# [Timer] +# OnBootSec=1min +# OnUnitActiveSec=1min +# Unit=battery-level.service +# +# [Install] +# WantedBy=timers.target + +# enable the timer by running the following commands: +# systemctl --user daemon-reload +# systemctl --user enable --now battery-level.timer diff --git a/waybar/scripts/battery-state.sh b/waybar/scripts/battery-state.sh new file mode 100755 index 0000000..d7cf5fc --- /dev/null +++ b/waybar/scripts/battery-state.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +# Original script by Eric Murphy +# https://github.com/ericmurphyxyz/dotfiles/blob/master/.local/bin/battery-alert +# +# Modified by Jesse Mirabel (@sejjy) +# https://github.com/sejjy/mechabar + +# This script sends a notification when the battery is charging or discharging. +# icon theme used: tela-circle-icon-theme-dracula +# +# (see the bottom of the script for more information) + +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" + +# get the battery state from the udev rule +BATTERY_STATE=$1 + +# get the battery percentage using upower (waybar dependency) +BAT_PATH=$(upower -e | grep BAT | head -n 1) +BATTERY_LEVEL=$(upower -i "$BAT_PATH" | awk '/percentage:/ {print $2}' | tr -d '%') + +# set the battery charging state and icon +case "$BATTERY_STATE" in +"charging") + BATTERY_CHARGING="Charging" + BATTERY_ICON="090-charging" + ;; +"discharging") + BATTERY_CHARGING="Disharging" + BATTERY_ICON="090" + ;; +esac + +# send the notification +notify-send -a "state" "Battery ${BATTERY_CHARGING} (${BATTERY_LEVEL}%)" -u normal -i "battery-${BATTERY_ICON}" -r 9991 + +# udev rule +# Add the following to /etc/udev/rules.d/60-power.rules: + +# ACTION=="change", SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="0", ENV{DISPLAY}=":0", RUN+="/usr/bin/su -c '$HOME/.config/waybar/scripts/battery-state.sh discharging'" +# ACTION=="change", SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="1", ENV{DISPLAY}=":0", RUN+="/usr/bin/su -c '$HOME/.config/waybar/scripts/battery-state.sh charging'" + +# the number 60 in the udev rule can be changed to any number between 0 and 99. +# the lower the number, the higher the priority. +# +# $USER does not work, so you have to replace "" with your username. + +# reload udev rules by running the following command: +# sudo udevadm control --reload-rules diff --git a/waybar/scripts/bluetooth-menu.sh b/waybar/scripts/bluetooth-menu.sh new file mode 100755 index 0000000..40642fd --- /dev/null +++ b/waybar/scripts/bluetooth-menu.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash + +# Author: Jesse Mirabel (@sejjy) +# GitHub: https://github.com/sejjy/mechabar + +# Rofi config +config="$HOME/.config/rofi/bluetooth-menu.rasi" + +# Rofi window override +override_disabled="mainbox { children: [ textbox-custom, listview ]; } listview { lines: 1; padding: 6px 6px 8px; }" + +get_device_icon() { + local device_mac=$1 + device_info=$(bluetoothctl info "$device_mac") + device_icon=$(echo "$device_info" | grep "Icon:" | awk '{print $2}') + + case "$device_icon" in + "audio-headphones" | "audio-headset") echo "󰋋 " ;; # Headphones + "video-display" | "computer") echo "󰍹 " ;; # Monitor + "audio-input-microphone") echo "󰍬 " ;; # Microphone + "input-keyboard") echo "󰌌 " ;; # Keyboard + "audio-speakers") echo "󰓃 " ;; # Speakers + "input-mouse") echo "󰍽 " ;; # Mouse + "phone") echo "󰏲 " ;; # Phone + *) + echo "󰂱 " # Default + ;; + esac +} + +while true; do + # Get list of paired devices + bluetooth_devices=$(bluetoothctl devices | while read -r line; do + device_mac=$(echo "$line" | awk '{print $2}') + device_name=$(echo "$line" | awk '{$1=$2=""; print substr($0, 3)}') + icon=$(get_device_icon "$device_mac") + echo "$icon $device_name" + done) + + options=$( + echo "󰏌 Scan for devices" + echo "󰂲 Disable Bluetooth" + echo "$bluetooth_devices" + ) + option="󰂯 Enable Bluetooth" + + # Get Bluetooth status + bluetooth_status=$(bluetoothctl show | grep "Powered:" | awk '{print $2}') + + if [[ "$bluetooth_status" == "yes" ]]; then + selected_option=$(echo -e "$options" | rofi -dmenu -i -selected-row 1 -config "${config}" -p " " || pkill -x rofi) + else + selected_option=$(echo -e "$option" | rofi -dmenu -i -selected-row 1 -config "${config}" -theme-str "${override_disabled}" -p " " || pkill -x rofi) + fi + + # Exit if no option is selected + if [ -z "$selected_option" ]; then + exit + fi + + # Actions based on selected option + case "$selected_option" in + *"Enable Bluetooth") + notify-send "Bluetooth Enabled" -i "package-installed-outdated" + rfkill unblock bluetooth + bluetoothctl power on + sleep 1 + ;; + *"Disable Bluetooth") + notify-send "Bluetooth Disabled" -i "package-broken" + rfkill block bluetooth + bluetoothctl power off + exit + ;; + *"Scan for devices") + notify-send "Press '?' to show help." -i "package-installed-outdated" + kitty --title '󰂱 Bluetooth TUI' bash -c "bluetui" # Launch bluetui + ;; + *) + # Extract device name + device_name="${selected_option#* }" + device_name="${device_name## }" + + if [[ -n "$device_name" ]]; then + # Get MAC address + device_mac=$(bluetoothctl devices | grep "$device_name" | awk '{print $2}') + + # Trust and pair device + bluetoothctl trust "$device_mac" >/dev/null 2>&1 + bluetoothctl pair "$device_mac" >/dev/null 2>&1 + + # Connect to device + bluetoothctl connect "$device_mac" & + sleep 3 + connection_status=$(bluetoothctl info "$device_mac" | grep "Connected:" | awk '{print $2}') + + if [[ "$connection_status" == "yes" ]]; then + notify-send "Connected to \"$device_name\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$device_name\"." -i "package-broken" + fi + fi + ;; + esac +done diff --git a/waybar/scripts/brightness-control.sh b/waybar/scripts/brightness-control.sh new file mode 100755 index 0000000..28fa223 --- /dev/null +++ b/waybar/scripts/brightness-control.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +# Print error message for invalid arguments +print_error() { + cat <<"EOF" +Usage: ./brightnesscontrol.sh +Valid actions are: + i -- ncrease brightness [+2%] + d -- ecrease brightness [-2%] +EOF +} + +# Send a notification with brightness info +send_notification() { + brightness=$(brightnessctl info | grep -oP "(?<=\()\d+(?=%)") + notify-send -a "state" -r 91190 -i "gpm-brightness-lcd" -h int:value:"$brightness" "Brightness: ${brightness}%" -u low +} + +# Get the current brightness percentage and device name +get_brightness() { + brightness=$(brightnessctl -m | grep -o '[0-9]\+%' | head -c-2) + device=$(brightnessctl -m | head -n 1 | awk -F',' '{print $1}' | sed 's/_/ /g; s/\<./\U&/g') # Get device name + current_brightness=$(brightnessctl -m | head -n 1 | awk -F',' '{print $3}') # Get current brightness + max_brightness=$(brightnessctl -m | head -n 1 | awk -F',' '{print $5}') # Get max brightness +} +get_brightness + +# Handle options +while getopts o: opt; do + case "${opt}" in + o) + case $OPTARG in + i) # Increase brightness + if [[ $brightness -lt 10 ]]; then + brightnessctl set +1% + else + brightnessctl set +2% + fi + send_notification + ;; + d) # Decrease brightness + if [[ $brightness -le 1 ]]; then + brightnessctl set 1% + elif [[ $brightness -le 10 ]]; then + brightnessctl set 1%- + else + brightnessctl set 2%- + fi + send_notification + ;; + *) + print_error + ;; + esac + ;; + *) + print_error + ;; + esac +done + +# Determine the icon based on brightness level +get_icon() { + if ((brightness <= 5)); then + icon="" + elif ((brightness <= 15)); then + icon="" + elif ((brightness <= 30)); then + icon="" + elif ((brightness <= 45)); then + icon="" + elif ((brightness <= 55)); then + icon="" + elif ((brightness <= 65)); then + icon="" + elif ((brightness <= 80)); then + icon="" + elif ((brightness <= 95)); then + icon="" + else + icon="" + fi +} + +# Backlight module and tooltip +get_icon +module="${icon} ${brightness}%" + +tooltip="Device Name: ${device}" +tooltip+="\nBrightness: ${current_brightness} / ${max_brightness}" + +echo "{\"text\": \"${module}\", \"tooltip\": \"${tooltip}\"}" diff --git a/waybar/scripts/cpu-temp.sh b/waybar/scripts/cpu-temp.sh new file mode 100755 index 0000000..b6f2355 --- /dev/null +++ b/waybar/scripts/cpu-temp.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +model=$(awk -F ': ' '/model name/{print $2}' /proc/cpuinfo | head -n 1 | sed 's/@.*//; s/ *\((R)\|(TM)\)//g; s/^[ \t]*//; s/[ \t]*$//') + +# get CPU clock speeds +get_cpu_frequency() { + freqlist=$(awk '/cpu MHz/ {print $4}' /proc/cpuinfo) + maxfreq=$(sed 's/...$//' /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq) + if [ -z "$freqlist" ] || [ -z "$maxfreq" ]; then + echo "--" + return + fi + average_freq=$(echo "$freqlist" | tr ' ' '\n' | awk "{sum+=\$1} END {printf \"%.0f/%s MHz\", sum/NR, $maxfreq}") + echo "$average_freq" +} + +# get CPU temp +get_cpu_temperature() { + temp=$(sensors | awk '/Package id 0/ {print $4}' | awk -F '[+.]' '{print $2}') + if [[ -z "$temp" ]]; then + temp=$(sensors | awk '/Tctl/ {print $2}' | tr -d '+°C') + fi + if [[ -z "$temp" ]]; then + temp="--" + temp_f="--" + else + temp=${temp%.*} + temp_f=$(awk "BEGIN {printf \"%.1f\", ($temp * 9 / 5) + 32}") + fi + # Celsius and Fahrenheit + echo "${temp:---} ${temp_f:---}" +} + +get_temperature_icon() { + temp_value=$1 + if [ "$temp_value" = "--" ]; then + icon="󱔱" # none + elif [ "$temp_value" -ge 80 ]; then + icon="󰸁" # high + elif [ "$temp_value" -ge 70 ]; then + icon="󱃂" # medium + elif [ "$temp_value" -ge 60 ]; then + icon="󰔏" # normal + else + icon="󱃃" # low + fi + echo "$icon" +} + +cpu_frequency=$(get_cpu_frequency) +read -r temp_info < <(get_cpu_temperature) +temp=$(echo "$temp_info" | awk '{print $1}') +temp_f=$(echo "$temp_info" | awk '{print $2}') +thermo_icon=$(get_temperature_icon "$temp") + +# high temp warning +if [ "$temp" == "--" ] || [ "$temp" -ge 80 ]; then + text_output="${thermo_icon} ${temp}°C" +else + text_output="${thermo_icon} ${temp}°C" +fi + +tooltip=":: ${model}\n" +tooltip+="Clock Speed: ${cpu_frequency}\nTemperature: ${temp_f}°F" + +# module and tooltip +echo "{\"text\": \"$text_output\", \"tooltip\": \"$tooltip\"}" diff --git a/waybar/scripts/current-theme.sh b/waybar/scripts/current-theme.sh new file mode 100755 index 0000000..b7d5db6 --- /dev/null +++ b/waybar/scripts/current-theme.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +CURRENT_THEME_FILE="$HOME/.config/waybar/themes/current-theme" + +# Get the current theme +current_theme=$(cat "$CURRENT_THEME_FILE" 2>/dev/null || echo "") +current_theme_name="Default" + +# Get the theme name +if [[ -n "$current_theme" ]]; then + current_theme_name=$(basename "$current_theme" .css) + + # Convert "theme-name" to "Theme Name" + formatted_theme_name="${current_theme_name//-/ }" + formatted_theme_name=$(echo "$formatted_theme_name" | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2)}1') +else + formatted_theme_name="Default" +fi + +tooltip="Theme: $formatted_theme_name" +tooltip+="\nStyle: Classic" # hard-coded for now + +# Tooltip +echo "{\"tooltip\": \"$tooltip\"}" diff --git a/waybar/scripts/power-menu.sh b/waybar/scripts/power-menu.sh new file mode 100755 index 0000000..ae971c9 --- /dev/null +++ b/waybar/scripts/power-menu.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +config="$HOME/.config/rofi/power-menu.rasi" + +actions=$(echo -e " Lock\n Shutdown\n Reboot\n Suspend\n Hibernate\n󰞘 Logout") + +# Display logout menu +selected_option=$(echo -e "$actions" | rofi -dmenu -i -config "${config}" || pkill -x rofi) + +# Perform actions based on the selected option +case "$selected_option" in +*Lock) + loginctl lock-session + ;; +*Shutdown) + systemctl poweroff + ;; +*Reboot) + systemctl reboot + ;; +*Suspend) + systemctl suspend + ;; +*Hibernate) + systemctl hibernate + ;; +*Logout) + loginctl kill-session "$XDG_SESSION_ID" + ;; +esac diff --git a/waybar/scripts/system-update.sh b/waybar/scripts/system-update.sh new file mode 100755 index 0000000..2c3c62b --- /dev/null +++ b/waybar/scripts/system-update.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +# Check release +if [ ! -f /etc/arch-release ]; then + exit 0 +fi + +pkg_installed() { + local pkg=$1 + + if pacman -Qi "${pkg}" &>/dev/null; then + return 0 + elif pacman -Qi "flatpak" &>/dev/null && flatpak info "${pkg}" &>/dev/null; then + return 0 + elif command -v "${pkg}" &>/dev/null; then + return 0 + else + return 1 + fi +} + +get_aur_helper() { + if pkg_installed yay; then + aur_helper="yay" + elif pkg_installed paru; then + aur_helper="paru" + fi +} + +get_aur_helper +export -f pkg_installed + +# Trigger upgrade +if [ "$1" == "up" ]; then + trap 'pkill -RTMIN+20 waybar' EXIT + command=" + $0 upgrade + ${aur_helper} -Syu + if pkg_installed flatpak; then flatpak update; fi + printf '\n' + read -n 1 -p 'Press any key to continue...' + " + kitty --title " System Update" sh -c "${command}" +fi + +# Check for AUR updates +if [ -n "$aur_helper" ]; then + aur_updates=$(${aur_helper} -Qua | grep -c '^') +else + aur_updates=0 +fi + +# Check for official repository updates +official_updates=$( + (while pgrep -x checkupdates >/dev/null; do sleep 1; done) + checkupdates | grep -c '^' +) + +# Check for Flatpak updates +if pkg_installed flatpak; then + flatpak_updates=$(flatpak remote-ls --updates | grep -c '^') +else + flatpak_updates=0 +fi + +# Calculate total available updates +total_updates=$((official_updates + aur_updates + flatpak_updates)) + +# Handle formatting based on AUR helper +if [ "$aur_helper" == "yay" ]; then + [ "${1}" == upgrade ] && printf "Official: %-10s\nAUR ($aur_helper): %-10s\nFlatpak: %-10s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" && exit + + tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates" + +elif [ "$aur_helper" == "paru" ]; then + [ "${1}" == upgrade ] && printf "Official: %-10s\nAUR ($aur_helper): %-10s\nFlatpak: %-10s\n\n" "$official_updates" "$aur_updates" "$flatpak_updates" && exit + + tooltip="Official: $official_updates\nAUR ($aur_helper): $aur_updates\nFlatpak: $flatpak_updates" +fi + +# Module and tooltip +if [ $total_updates -eq 0 ]; then + echo "{\"text\":\"󰸟\", \"tooltip\":\"Packages are up to date\"}" +else + echo "{\"text\":\"\", \"tooltip\":\"${tooltip//\"/\\\"}\"}" +fi diff --git a/waybar/scripts/theme-switcher.sh b/waybar/scripts/theme-switcher.sh new file mode 100755 index 0000000..d5f1aca --- /dev/null +++ b/waybar/scripts/theme-switcher.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +WAYBAR_CSS_DIR="$HOME/.config/waybar/themes/css" +WAYBAR_CSS_FILE="$HOME/.config/waybar/theme.css" +WAYBAR_JSONC_DIR="$HOME/.config/waybar/themes/jsonc" +WAYBAR_JSONC_FILE="$HOME/.config/waybar/config.jsonc" +ROFI_THEMES_DIR="$HOME/.config/rofi/themes" +ROFI_THEME_FILE="$HOME/.config/rofi/theme.rasi" +CURRENT_THEME_FILE="$HOME/.config/waybar/themes/current-theme" + +for dir in "$WAYBAR_CSS_DIR" "$WAYBAR_JSONC_DIR" "$ROFI_THEMES_DIR"; do + [[ ! -d "$dir" ]] && echo "Error: $dir not found" && exit 1 +done + +# Get all themes +waybar_css=("$WAYBAR_CSS_DIR"/*.css) +waybar_jsonc=("$WAYBAR_JSONC_DIR"/*.jsonc) +rofi_themes=("$ROFI_THEMES_DIR"/*.rasi) + +if [[ ${#waybar_css[@]} -eq 0 || ${#waybar_jsonc[@]} -eq 0 || ${#rofi_themes[@]} -eq 0 ]]; then + echo "Error: No themes found in one of the directories" + exit 1 +fi + +# Get the current theme +current_theme=$(cat "$CURRENT_THEME_FILE" 2>/dev/null || echo "") + +# Find the index of the current theme +next_theme_index=0 +for i in "${!waybar_css[@]}"; do + [[ "${waybar_css[$i]}" == "$current_theme" ]] && next_theme_index=$(((i + 1) % ${#waybar_css[@]})) && break +done + +# Get the new theme +new_waybar_css="${waybar_css[$next_theme_index]}" +new_waybar_jsonc="${waybar_jsonc[$next_theme_index]}" +new_rofi_theme="${rofi_themes[$next_theme_index]}" + +# Save the new theme +echo "$new_waybar_css" >"$CURRENT_THEME_FILE" + +declare -A theme_files=( + ["$new_waybar_css"]="$WAYBAR_CSS_FILE" + ["$new_waybar_jsonc"]="$WAYBAR_JSONC_FILE" + ["$new_rofi_theme"]="$ROFI_THEME_FILE" +) + +for src in "${!theme_files[@]}"; do + cp "$src" "${theme_files[$src]}" +done + +# Restart Waybar to apply changes +killall waybar || true +nohup waybar --config "$HOME/.config/waybar/config.jsonc" --style "$HOME/.config/waybar/style.css" >/dev/null 2>&1 & diff --git a/waybar/scripts/volume-control.sh b/waybar/scripts/volume-control.sh new file mode 100755 index 0000000..76bb2f7 --- /dev/null +++ b/waybar/scripts/volume-control.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash + +# Define functions +print_error() { + cat <<"EOF" +Usage: ./volumecontrol.sh -[device] +...valid devices are... + i -- input device + o -- output device + p -- player application +...valid actions are... + i -- increase volume [+2] + d -- decrease volume [-2] + m -- mute [x] +EOF + exit 1 +} + +icon() { + vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//') + mute=$(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') + + if [ "$mute" = "yes" ] || [ "$vol" -eq 0 ]; then + icon="volume-level-muted" + elif [ "$vol" -lt 33 ]; then + icon="volume-level-low" + elif [ "$vol" -lt 66 ]; then + icon="volume-level-medium" + else + icon="volume-level-high" + fi +} + +send_notification() { + icon + notify-send -a "state" -r 91190 -i "$icon" -h int:value:"$vol" "Volume: ${vol}%" -u low +} + +notify_mute() { + mute=$(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') + if [ "$mute" = "yes" ]; then + notify-send -a "state" -r 91190 -i "volume-level-muted" "Volume: Muted" -u low + else + icon + notify-send -a "state" -r 91190 -i "$icon" "Volume: Unmuted" -u low + fi +} + +action_volume() { + case "${1}" in + i) + # Increase volume if below 100 + current_vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//') + if [ "$current_vol" -lt 100 ]; then + new_vol=$((current_vol + 2)) + [ "$new_vol" -gt 100 ] && new_vol=100 + pactl set-sink-volume @DEFAULT_SINK@ "${new_vol}%" + fi + ;; + d) + # Decrease volume if above 0 + current_vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}' | sed 's/%//') + new_vol=$((current_vol - 2)) + [ "$new_vol" -lt 0 ] && new_vol=0 + pactl set-sink-volume @DEFAULT_SINK@ "${new_vol}%" + ;; + esac +} + +select_output() { + if [ "$@" ]; then + desc="$*" + device=$(pactl list sinks | grep -C2 -F "Description: $desc" | grep Name | cut -d: -f2 | xargs) + if pactl set-default-sink "$device"; then + notify-send -r 91190 "Activated: $desc" + else + notify-send -r 91190 "Error activating $desc" + fi + else + pactl list sinks | grep -ie "Description:" | awk -F ': ' '{print $2}' | sort + fi +} + +# Evaluate device option +while getopts iops: DeviceOpt; do + case "${DeviceOpt}" in + i) + nsink=$(pactl list sources short | awk '{print $2}') + [ -z "${nsink}" ] && echo "ERROR: Input device not found..." && exit 0 + srce="--default-source" + ;; + o) + nsink=$(pactl list sinks short | awk '{print $2}') + [ -z "${nsink}" ] && echo "ERROR: Output device not found..." && exit 0 + srce="" + ;; + p) + nsink=$(playerctl --list-all | grep -w "${OPTARG}") + [ -z "${nsink}" ] && echo "ERROR: Player ${OPTARG} not active..." && exit 0 + # shellcheck disable=SC2034 + srce="${nsink}" + ;; + s) + # Select an output device + select_output "$@" + exit + ;; + *) print_error ;; + esac +done + +# Set default variables +shift $((OPTIND - 1)) + +# Execute action +case "${1}" in +i) action_volume i ;; +d) action_volume d ;; +m) pactl set-sink-mute @DEFAULT_SINK@ toggle && notify_mute && exit 0 ;; +*) print_error ;; +esac + +send_notification diff --git a/waybar/scripts/wifi-menu.sh b/waybar/scripts/wifi-menu.sh new file mode 100755 index 0000000..470722c --- /dev/null +++ b/waybar/scripts/wifi-menu.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash + +# Author: Jesse Mirabel (@sejjy) +# GitHub: https://github.com/sejjy/mechabar + +# Rofi config +config="$HOME/.config/rofi/wifi-menu.rasi" + +options=$( + echo " Manual Entry" + echo "󰤮 Disable Wi-Fi" +) +option_disabled="󰤥 Enable Wi-Fi" + +# Rofi window override +override_ssid="entry { placeholder: \"Enter SSID\"; } listview { lines: 0; padding: 20px 6px; }" +override_password="entry { placeholder: \"Enter password\"; } listview { lines: 0; padding: 20px 6px; }" +override_disabled="mainbox { children: [ textbox-custom, listview ]; } listview { lines: 1; padding: 6px 6px 8px; }" + +# Prompt for password +get_password() { + rofi -dmenu -password -config "${config}" -theme-str "${override_password}" -p " " || pkill -x rofi +} + +while true; do + wifi_list() { + nmcli --fields "SECURITY,SSID" device wifi list | + tail -n +2 | # Skip the header line from nmcli output + sed 's/ */ /g' | # Replace multiple spaces with a single space + sed -E "s/WPA*.?\S/󰤪 /g" | # Replace 'WPA*' with a Wi-Fi lock icon + sed "s/^--/󰤨 /g" | # Replace '--' (open networks) with an open Wi-Fi icon + sed "s/󰤪 󰤪/󰤪/g" | # Remove duplicate Wi-Fi lock icons + sed "/--/d" | # Remove lines containing '--' (empty SSIDs) + awk '!seen[$0]++' # Filter out duplicate SSIDs + } + + # Get Wi-Fi status + wifi_status=$(nmcli -fields WIFI g) + + case "$wifi_status" in + *"enabled"*) + selected_option=$(echo "$options"$'\n'"$(wifi_list)" | + rofi -dmenu -i -selected-row 1 -config "${config}" -p " " || pkill -x rofi) + ;; + *"disabled"*) + selected_option=$(echo "$option_disabled" | + rofi -dmenu -i -config "${config}" -theme-str "${override_disabled}" || pkill -x rofi) + ;; + esac + + # Extract selected SSID + read -r selected_ssid <<<"${selected_option:3}" + + # Actions based on selected option + case "$selected_option" in + "") + exit + ;; + *"Enable Wi-Fi") + notify-send "Scanning for networks..." -i "package-installed-outdated" + nmcli radio wifi on + nmcli device wifi rescan + sleep 3 + ;; + *"Disable Wi-Fi") + notify-send "Wi-Fi Disabled" -i "package-broken" + nmcli radio wifi off + exit + ;; + *"Manual Entry") + # Prompt for SSID + manual_ssid=$(rofi -dmenu -config "${config}" -theme-str "${override_ssid}" -p " " || pkill -x rofi) + + # Exit if no option is selected + if [ -z "$manual_ssid" ]; then + exit + fi + + # Prompt for Wi-Fi password + wifi_password=$(get_password) + + if [ -z "$wifi_password" ]; then + # Without password + if nmcli device wifi connect "$manual_ssid" | grep -q "successfully"; then + notify-send "Connected to \"$manual_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$manual_ssid\"." -i "package-broken" + fi + else + # With password + if nmcli device wifi connect "$manual_ssid" password "$wifi_password" | grep -q "successfully"; then + notify-send "Connected to \"$manual_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$manual_ssid\"." -i "package-broken" + fi + fi + ;; + *) + # Get saved connections + saved_connections=$(nmcli -g NAME connection) + + if echo "$saved_connections" | grep -qw "$selected_ssid"; then + if nmcli connection up id "$selected_ssid" | grep -q "successfully"; then + notify-send "Connected to \"$selected_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$selected_ssid\"." -i "package-broken" + fi + else + # Handle secure network connection + if [[ "$selected_option" =~ ^"󰤪" ]]; then + wifi_password=$(get_password) + fi + + if nmcli device wifi connect "$selected_ssid" password "$wifi_password" | grep -q "successfully"; then + notify-send "Connected to \"$selected_ssid\"." -i "package-installed-outdated" + exit + else + notify-send "Failed to connect to \"$selected_ssid\"." -i "package-broken" + fi + fi + ;; + esac +done diff --git a/waybar/scripts/wifi-status.sh b/waybar/scripts/wifi-status.sh new file mode 100755 index 0000000..7a13711 --- /dev/null +++ b/waybar/scripts/wifi-status.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +if ! command -v nmcli &>/dev/null; then + echo "{\"text\": \"󰤫\", \"tooltip\": \"nmcli utility is missing\"}" + exit 1 +fi + +# Check if Wi-Fi is enabled +wifi_status=$(nmcli radio wifi) + +if [ "$wifi_status" = "disabled" ]; then + echo "{\"text\": \"󰤮\", \"tooltip\": \"Wi-Fi Disabled\"}" + exit 0 +fi + +wifi_info=$(nmcli -t -f active,ssid,signal,security dev wifi | grep "^yes") + +# If no ESSID is found, set a default value +if [ -z "$wifi_info" ]; then + essid="No Connection" + signal=0 + tooltip="No Connection" +else + # Some defaults + ip_address="127.0.0.1" + security=$(echo "$wifi_info" | awk -F: '{print $4}') + signal=$(echo "$wifi_info" | awk -F: '{print $3}') + + # Get active WiFi device, ignoring WireGuard interfaces (wg0, wg1, wg2) + active_device=$(nmcli -t -f DEVICE,TYPE,STATE device status | + grep -E 'wifi:connected$' | + grep -v -E '^(wg0|wg1|wg2):' | + awk -F: '{print $1}') + + if [ -n "$active_device" ]; then + output=$(nmcli -e no -g ip4.address,ip4.gateway,general.hwaddr device show "$active_device") + + ip_address=$(echo "$output" | sed -n '1p') + + line=$(nmcli -e no -t -f active,bssid,chan,freq device wifi | grep "^yes") + + chan=$(echo "$line" | awk -F':' '{print $8}') + freq=$(echo "$line" | awk -F':' '{print $9}') + chan="$chan ($freq)" + + # Get the current Wi-Fi ESSID + essid=$(echo "$wifi_info" | awk -F: '{print $2}') + + tooltip=":: ${essid}" + tooltip+="\nIP Address: ${ip_address}" + tooltip+="\nSecurity: ${security}" + tooltip+="\nChannel: ${chan}" + tooltip+="\nStrength: ${signal} / 100" + fi +fi + +# Determine Wi-Fi icon based on signal strength +if [ "$signal" -ge 80 ]; then + icon="󰤨" # Strong signal +elif [ "$signal" -ge 60 ]; then + icon="󰤥" # Good signal +elif [ "$signal" -ge 40 ]; then + icon="󰤢" # Weak signal +elif [ "$signal" -ge 20 ]; then + icon="󰤟" # Very weak signal +else + icon="󰤯" # No signal +fi + +# Module and tooltip +echo "{\"text\": \"${icon}\", \"tooltip\": \"${tooltip}\"}" diff --git a/waybar/scripts/wireguard-status.sh b/waybar/scripts/wireguard-status.sh new file mode 100755 index 0000000..2cca6cf --- /dev/null +++ b/waybar/scripts/wireguard-status.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# WireGuard status using ip command (no wg show needed) +ICON_ACTIVE="󰯄" # Shield with checkmark +ICON_INACTIVE="󰒙" # Shield disabled + +# Get all WireGuard interfaces +wg_interfaces=$(ip a | grep -o 'wg[0-9]\+' | sort -u) + +active_info="" +tooltip="WireGuard Status" + +for interface in $wg_interfaces; do + # Check if interface has an IP address + ip_addr=$(ip -4 addr show dev "$interface" | grep -oP '(?<=inet\s)\d+(\.\d+){3}') + + if [ -n "$ip_addr" ]; then + # Interface is active + if [ -z "$active_info" ]; then + active_info="%{F#a3be8c}$ICON_ACTIVE%{F-} $interface:$ip_addr" + else + active_info+=" $interface:$ip_addr" + fi + tooltip+="\n\n$interface" + tooltip+="\nStatus: Active" + tooltip+="\nIP: $ip_addr" + else + # Interface exists but inactive + tooltip+="\n\n$interface" + tooltip+="\nStatus: Inactive" + fi +done + +if [ -z "$wg_interfaces" ]; then + # No WireGuard interfaces found + echo "{\"text\":\"$ICON_INACTIVE\",\"tooltip\":\"No WireGuard interfaces configured\"}" +elif [ -z "$active_info" ]; then + # Interfaces exist but none active + echo "{\"text\":\"$ICON_INACTIVE\",\"tooltip\":\"$tooltip\"}" +else + # Active interfaces found + echo "{\"text\":\"$ICON_ACTIVE\",\"tooltip\":\"$tooltip\"}" +fi diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..0a44cfe --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,476 @@ +@import "theme.css"; + +* { + min-height: 0; + border: none; + margin: 0; + padding: 0; +} + +/* ----------------------------------------------------- MAIN BACKGROUND --- */ + +window#waybar>box { + background: @main-bg; + margin: 2px; +} + +/* --------------------------------------------------------- DROP SHADOW --- */ + +window#waybar { + background: @shadow; +} + +/* ------------------------------------------------------------ TOOLTIPS --- */ + +tooltip { + background: @main-bg; + border: 1.5px solid @main-br; + border-radius: 8px; +} + +tooltip label { + color: @main-fg; + margin: -1.5px 3px; +} + +/* ---------------------------------------- WORKSPACE BUTTONS and LABELS --- */ + +#workspaces button { + color: @module-fg; + border-radius: 8px; + box-shadow: none; + margin: 2px 0; + padding: 0 2px; + transition: none; +} + +#workspaces button:hover { + color: @hover-fg; + background: @hover-bg; + text-shadow: none; +} + +#workspaces button.active { + color: @active-fg; + background: @active-bg; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.4); + margin: 2px; + padding: 0 6px; +} + +/* ------------------------------------------------------------- GENERAL --- */ + +#custom-ws, +#workspaces, +#window, +#custom-temperature, +#memory, +#cpu, +#idle_inhibitor, +#clock, +#custom-wifi, +#custom-wireguard, +#bluetooth, +#custom-update, +#mpris, +#pulseaudio, +#backlight, +#battery, +#custom-power { + opacity: 1; + color: @module-fg; + padding: 0 4px; +} + +#custom-left1, +#custom-left2, +#custom-left3, +#custom-left4, +#custom-left5, +#custom-left6, +#custom-left7, +#custom-left8 { + margin-bottom: 0; + text-shadow: -2px 0 2px rgba(0, 0, 0, 0.5); +} + +#custom-right1, +#custom-right2, +#custom-right3, +#custom-right4, +#custom-right5 { + margin-bottom: 0; + padding-right: 3px; + text-shadow: 2px 0 2px rgba(0, 0, 0, 0.5); +} + +/* ------------------------------------------------------------- MODULES --- */ + +/* --------------------------------------------------------- window icon --- */ + +#custom-ws { + background: @main-bg; +} + +#custom-ws:hover { + color: @hover-fg; +} + +/* ---------------------------------------------------------- workspaces --- */ + +#custom-left1 { + color: @workspaces; + background: @main-bg; + margin-bottom: 0; + padding-left: 2px; +} + +#workspaces { + background: @workspaces; +} + +#custom-right1 { + color: @workspaces; + background: @main-bg; + text-shadow: 3px 0 2px rgba(0, 0, 0, 0.4); + margin-bottom: 0; +} + +/* --------------------------------------------------------- temperature --- */ + +#custom-paddc { + padding-right: 22px; +} + +#custom-left2 { + color: @temperature; + background: @main-bg; + padding-left: 3px; +} + +#custom-temperature { + background: @temperature; + padding: 0 0 0 1px; +} + +/* -------------------------------------------------------------- memory --- */ + +#custom-left3 { + color: @memory; + background: @temperature; + padding-left: 3px; +} + +#memory { + background: @memory; + padding: 0 0 0 1px; +} + +#memory.warning { + color: @warning; +} + +#memory.critical { + color: @critical; +} + +/* ----------------------------------------------------------------- cpu --- */ + +#custom-left4 { + color: @cpu; + background: @memory; + padding-left: 3px; +} + +#cpu { + background: @cpu; +} + +#custom-leftin1 { + color: @cpu; + margin-bottom: -1px; +} + +/* --------------------------------------------------------- distro icon --- */ + +#custom-left5 { + color: @distro-bg; + background: @main-bg; + text-shadow: none; + margin-bottom: -2px; + padding-left: 3px; +} + +#custom-distro { + color: @distro-fg; + background: @distro-bg; + margin: 0 -1px -2px 0; + padding: 0 0 0 3px; + text-shadow: 0 0 1.5px rgba(0, 0, 0, 1); +} + +#custom-right2 { + color: @distro-bg; + background: @main-bg; + text-shadow: none; + margin-bottom: -2px; +} + +/* ---------------------------------------------------------------- time --- */ + +#custom-rightin1 { + color: @time; + margin-bottom: -1px; +} + +#idle_inhibitor { + background: @time; + padding: 0 0 0 7px; +} + +#idle_inhibitor:hover { + color: @hover-fg; +} + +#clock.time { + background: @time; + margin-left: -2px; + padding: 0 3px 0 0; +} + +#custom-right3 { + color: @time; + background: @date; +} + +/* ---------------------------------------------------------------- date --- */ + +#clock.date { + background: @date; +} + +#clock.date:hover { + color: @hover-fg; +} + +#custom-right4 { + color: @date; + background: @tray; +} + +/* ---------------------------------------------------------------- tray --- */ + +#custom-wifi { + background: @tray; + padding: 0 8px 0 5px; +} + +#custom-wifi:hover { + color: @hover-fg; +} + +#custom-wireguard { + background: @tray; + padding: 0 8px 0 5px; +} + +#custom-wireguard:hover { + color: @hover-fg; +} + +#bluetooth { + background: @tray; + padding-right: 5px; +} + +#bluetooth:hover { + color: @hover-fg; +} + +#custom-update { + padding-right: 8px; + background: @tray; +} + +#custom-update:hover { + color: @hover-fg; +} + +#custom-right5 { + color: @tray; + background: @main-bg; +} + +/* ---------------------------------------------------------- media info --- */ + +#mpris { + background: @main-bg; + padding: 0 8px 0; +} + +#mpris:hover { + color: @hover-fg; +} + +/* + output device +*/ + +#custom-left6 { + color: @pulseaudio; + background: @main-bg; + padding-left: 3px; +} + +#pulseaudio { + background: @pulseaudio; +} + +#pulseaudio:hover { + color: @hover-fg; +} + +/* ---------------------------------------------------------- brightness --- */ + +#custom-left7 { + color: @backlight; + background: @pulseaudio; + padding-left: 2px; +} + +#backlight { + background: @backlight; +} + +/* ------------------------------------------------------------- battery --- */ + +#custom-left8 { + color: @battery; + background: @backlight; + padding-left: 2px; +} + +#battery { + color: @module-fg; + background: @battery; +} + +#battery.warning { + color: @warning; +} + +#battery.critical { + color: @critical; +} + +#battery.charging { + color: @charging; +} + +/* -------------------------------------------------------- power button --- */ + +#custom-leftin2 { + color: @battery; + background: @main-bg; + margin-bottom: -1px; +} + +#custom-power { + color: @main-bg; + background: @power; + text-shadow: 0 0 2px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.6); + border-radius: 10px; + margin: 2px 4px 2px 0; + padding: 0 6px 0 9px; +} + +#custom-power:hover { + color: @hover-fg; + background: @hover-bg; + text-shadow: none; + box-shadow: none; +} + +/* ---------------------------------------------------------- FONT SIZES --- */ + +/* + NOTE: Be careful when changing font sizes, as they + can affect alignment. + + Try adjusting whole numbers first, then refine with + decimals. + + If you increase or decrease a value, make the same + change to all properties in this section to keep + the layout consistent. +*/ + +* { + font-family: "JetBrainsMono Nerd Font"; + font-size: 10px; + font-weight: bold; +} + +tooltip label, +#window label, +#mpris { + font-weight: normal; +} + +/* ----------------------------------------------- left and right arrows --- */ + +#custom-left1, +#custom-left2, +#custom-left3, +#custom-left4, +#custom-left5, +#custom-left6, +#custom-left7, +#custom-left8, +#custom-right1, +#custom-right2, +#custom-right3, +#custom-right4, +#custom-right5 { + font-size: 14.68px; +} + +/* ---------------------------------------------- left and right inverse --- */ + +#custom-leftin1, +#custom-leftin2, +#custom-rightin1 { + font-size: 15.5px; +} + +/* -------------------------------------------------------------- distro --- */ + +#custom-distro { + font-size: 14.6px; +} + +#custom-left5, +#custom-right2 { + font-size: 15.68px; +} + +/* + Adjust these properties as well to keep the design + consistent. +*/ + +#workspaces button { + border-radius: 8px; + padding: 0 2px; +} + +#workspaces button.active { + padding: 0 6px; +} + +#custom-power { + border-radius: 10px; + padding: 0 6px 0 9px; +} diff --git a/waybar/theme.css b/waybar/theme.css new file mode 100644 index 0000000..32ce8d7 --- /dev/null +++ b/waybar/theme.css @@ -0,0 +1,75 @@ +/* Gruvbox Dark */ + +@define-color bg0_h #1d2021; +@define-color bg0 #282828; +@define-color bg1 #3c3836; +@define-color bg2 #504945; +@define-color bg3 #665c54; +@define-color bg4 #7c6f64; +@define-color gray #928374; +@define-color fg4 #a89984; +@define-color fg3 #bdae93; +@define-color fg2 #d5c4a1; +@define-color fg1 #ebdbb2; +@define-color fg0 #fbf1c7; +@define-color red #cc241d; +@define-color bright_red #fb4934; +@define-color green #98971a; +@define-color bright_green #b8bb26; +@define-color yellow #d79921; +@define-color bright_yellow #fabd2f; +@define-color blue #458588; +@define-color bright_blue #83a598; +@define-color purple #b16286; +@define-color bright_purple #d3869b; +@define-color aqua #689d6a; +@define-color bright_aqua #8ec07c; +@define-color orange #d65d0e; +@define-color bright_orange #fe8019; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@bg0_h, 0.5); +@define-color main-fg @fg0; +@define-color main-bg @bg0_h; +@define-color main-br @fg0; + +@define-color active-bg @yellow; +@define-color active-fg @bg0_h; + +@define-color hover-bg @bg2; +@define-color hover-fg alpha(@fg0, 0.75); + +/* Module Colors */ + +@define-color module-fg @fg0; +@define-color workspaces @bg0; + +@define-color temperature @bg0; +@define-color memory @bg1; +@define-color cpu @bg2; +@define-color distro-fg @black; +@define-color distro-bg @yellow; +@define-color time @bg2; +@define-color date @bg1; +@define-color tray @bg0; + +@define-color pulseaudio @bg0; +@define-color backlight @bg1; +@define-color battery @bg2; +@define-color power @yellow; + +/* State Colors */ + +@define-color warning @bright_orange; +@define-color critical @bright_red; +@define-color charging @fg0; diff --git a/waybar/themes/css/catppuccin-frappe.css b/waybar/themes/css/catppuccin-frappe.css new file mode 100644 index 0000000..a079f18 --- /dev/null +++ b/waybar/themes/css/catppuccin-frappe.css @@ -0,0 +1,75 @@ +/* Catppuccin Frappe */ + +@define-color rosewater #f2d5cf; +@define-color flamingo #eebebe; +@define-color pink #f4b8e4; +@define-color mauve #ca9ee6; +@define-color red #e78284; +@define-color maroon #ea999c; +@define-color peach #ef9f76; +@define-color yellow #e5c890; +@define-color green #a6d189; +@define-color teal #81c8be; +@define-color sky #99d1db; +@define-color sapphire #85c1dc; +@define-color blue #8caaee; +@define-color lavender #babbf1; +@define-color text #c6d0f5; +@define-color subtext1 #b5bfe2; +@define-color subtext0 #a5adce; +@define-color overlay2 #949cbb; +@define-color overlay1 #838ba7; +@define-color overlay0 #737994; +@define-color surface2 #626880; +@define-color surface1 #51576d; +@define-color surface0 #414559; +@define-color base #303446; +@define-color mantle #292c3c; +@define-color crust #232634; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/catppuccin-latte.css b/waybar/themes/css/catppuccin-latte.css new file mode 100644 index 0000000..ecd734f --- /dev/null +++ b/waybar/themes/css/catppuccin-latte.css @@ -0,0 +1,75 @@ +/* Catppuccin Latte */ + +@define-color rosewater #dc8a78; +@define-color flamingo #dd7878; +@define-color pink #ea76cb; +@define-color mauve #8839ef; +@define-color red #d20f39; +@define-color maroon #e64553; +@define-color peach #fe640b; +@define-color yellow #df8e1d; +@define-color green #40a02b; +@define-color teal #179299; +@define-color sky #04a5e5; +@define-color sapphire #209fb5; +@define-color blue #1e66f5; +@define-color lavender #7287fd; +@define-color text #4c4f69; +@define-color subtext1 #5c5f77; +@define-color subtext0 #6c6f85; +@define-color overlay2 #7c7f93; +@define-color overlay1 #8c8fa1; +@define-color overlay0 #9ca0b0; +@define-color surface2 #acb0be; +@define-color surface1 #bcc0cc; +@define-color surface0 #ccd0da; +@define-color base #eff1f5; +@define-color mantle #e6e9ef; +@define-color crust #dce0e8; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/catppuccin-macchiato.css b/waybar/themes/css/catppuccin-macchiato.css new file mode 100644 index 0000000..cdc4737 --- /dev/null +++ b/waybar/themes/css/catppuccin-macchiato.css @@ -0,0 +1,75 @@ +/* Catppuccin Macchiato */ + +@define-color rosewater #f4dbd6; +@define-color flamingo #f0c6c6; +@define-color pink #f5bde6; +@define-color mauve #c6a0f6; +@define-color red #ed8796; +@define-color maroon #ee99a0; +@define-color peach #f5a97f; +@define-color yellow #eed49f; +@define-color green #a6da95; +@define-color teal #8bd5ca; +@define-color sky #91d7e3; +@define-color sapphire #7dc4e4; +@define-color blue #8aadf4; +@define-color lavender #b7bdf8; +@define-color text #cad3f5; +@define-color subtext1 #b8c0e0; +@define-color subtext0 #a5adcb; +@define-color overlay2 #939ab7; +@define-color overlay1 #8087a2; +@define-color overlay0 #6e738d; +@define-color surface2 #5b6078; +@define-color surface1 #494d64; +@define-color surface0 #363a4f; +@define-color base #24273a; +@define-color mantle #1e2030; +@define-color crust #181926; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/catppuccin-mocha.css b/waybar/themes/css/catppuccin-mocha.css new file mode 100644 index 0000000..244598f --- /dev/null +++ b/waybar/themes/css/catppuccin-mocha.css @@ -0,0 +1,75 @@ +/* Catppuccin Mocha */ + +@define-color rosewater #f5e0dc; +@define-color flamingo #f2cdcd; +@define-color pink #f5c2e7; +@define-color mauve #cba6f7; +@define-color red #f38ba8; +@define-color maroon #eba0ac; +@define-color peach #fab387; +@define-color yellow #f9e2af; +@define-color green #a6e3a1; +@define-color teal #94e2d5; +@define-color sky #89dceb; +@define-color sapphire #74c7ec; +@define-color blue #89b4fa; +@define-color lavender #b4befe; +@define-color text #cdd6f4; +@define-color subtext1 #bac2de; +@define-color subtext0 #a6adc8; +@define-color overlay2 #9399b2; +@define-color overlay1 #7f849c; +@define-color overlay0 #6c7086; +@define-color surface2 #585b70; +@define-color surface1 #45475a; +@define-color surface0 #313244; +@define-color base #1e1e2e; +@define-color mantle #181825; +@define-color crust #11111b; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@crust, 0.5); +@define-color main-fg @text; +@define-color main-bg @crust; +@define-color main-br @text; + +@define-color active-bg @overlay2; +@define-color active-fg @crust; + +@define-color hover-bg @surface0; +@define-color hover-fg alpha(@text, 0.75); + +/* Module Colors */ + +@define-color module-fg @text; +@define-color workspaces @mantle; + +@define-color temperature @mantle; +@define-color memory @base; +@define-color cpu @surface0; +@define-color distro-fg @black; +@define-color distro-bg @overlay2; +@define-color time @surface0; +@define-color date @base; +@define-color tray @mantle; + +@define-color pulseaudio @mantle; +@define-color backlight @base; +@define-color battery @surface0; +@define-color power @overlay2; + +/* State Colors */ + +@define-color warning @yellow; +@define-color critical @red; +@define-color charging @text; diff --git a/waybar/themes/css/gruvbox-dark.css b/waybar/themes/css/gruvbox-dark.css new file mode 100644 index 0000000..32ce8d7 --- /dev/null +++ b/waybar/themes/css/gruvbox-dark.css @@ -0,0 +1,75 @@ +/* Gruvbox Dark */ + +@define-color bg0_h #1d2021; +@define-color bg0 #282828; +@define-color bg1 #3c3836; +@define-color bg2 #504945; +@define-color bg3 #665c54; +@define-color bg4 #7c6f64; +@define-color gray #928374; +@define-color fg4 #a89984; +@define-color fg3 #bdae93; +@define-color fg2 #d5c4a1; +@define-color fg1 #ebdbb2; +@define-color fg0 #fbf1c7; +@define-color red #cc241d; +@define-color bright_red #fb4934; +@define-color green #98971a; +@define-color bright_green #b8bb26; +@define-color yellow #d79921; +@define-color bright_yellow #fabd2f; +@define-color blue #458588; +@define-color bright_blue #83a598; +@define-color purple #b16286; +@define-color bright_purple #d3869b; +@define-color aqua #689d6a; +@define-color bright_aqua #8ec07c; +@define-color orange #d65d0e; +@define-color bright_orange #fe8019; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@bg0_h, 0.5); +@define-color main-fg @fg0; +@define-color main-bg @bg0_h; +@define-color main-br @fg0; + +@define-color active-bg @yellow; +@define-color active-fg @bg0_h; + +@define-color hover-bg @bg2; +@define-color hover-fg alpha(@fg0, 0.75); + +/* Module Colors */ + +@define-color module-fg @fg0; +@define-color workspaces @bg0; + +@define-color temperature @bg0; +@define-color memory @bg1; +@define-color cpu @bg2; +@define-color distro-fg @black; +@define-color distro-bg @yellow; +@define-color time @bg2; +@define-color date @bg1; +@define-color tray @bg0; + +@define-color pulseaudio @bg0; +@define-color backlight @bg1; +@define-color battery @bg2; +@define-color power @yellow; + +/* State Colors */ + +@define-color warning @bright_orange; +@define-color critical @bright_red; +@define-color charging @fg0; diff --git a/waybar/themes/css/gruvbox-light.css b/waybar/themes/css/gruvbox-light.css new file mode 100644 index 0000000..01db6d1 --- /dev/null +++ b/waybar/themes/css/gruvbox-light.css @@ -0,0 +1,75 @@ +/* Gruvbox Light */ + +@define-color bg0_h #f9f5d7; +@define-color bg0 #fbf1c7; +@define-color bg1 #ebdbb2; +@define-color bg2 #d5c4a1; +@define-color bg3 #bdae93; +@define-color bg4 #a89984; +@define-color gray #928374; +@define-color fg4 #7c6f64; +@define-color fg3 #665c54; +@define-color fg2 #504945; +@define-color fg1 #3c3836; +@define-color fg0 #282828; +@define-color red #cc241d; +@define-color bright_red #9d0006; +@define-color green #98971a; +@define-color bright_green #79740e; +@define-color yellow #d79921; +@define-color bright_yellow #b57614; +@define-color blue #458588; +@define-color bright_blue #076678; +@define-color purple #b16286; +@define-color bright_purple #8f3f71; +@define-color aqua #689d6a; +@define-color bright_aqua #427b58; +@define-color orange #d65d0e; +@define-color bright_orange #af3a03; + +@define-color white #ffffff; +@define-color black #000000; + +/* + bg - background + fg - foreground + br - border +*/ + +/* Main Colors */ + +@define-color shadow shade(@bg0_h, 0.5); +@define-color main-fg @fg0; +@define-color main-bg @bg0_h; +@define-color main-br @fg0; + +@define-color active-bg @yellow; +@define-color active-fg @bg0_h; + +@define-color hover-bg @bg2; +@define-color hover-fg alpha(@fg0, 0.75); + +/* Module Colors */ + +@define-color module-fg @fg0; +@define-color workspaces @bg0; + +@define-color temperature @bg0; +@define-color memory @bg1; +@define-color cpu @bg2; +@define-color distro-fg @black; +@define-color distro-bg @yellow; +@define-color time @bg2; +@define-color date @bg1; +@define-color tray @bg0; + +@define-color pulseaudio @bg0; +@define-color backlight @bg1; +@define-color battery @bg2; +@define-color power @yellow; + +/* State Colors */ + +@define-color warning @bright_orange; +@define-color critical @bright_red; +@define-color charging @fg0; diff --git a/waybar/themes/current-theme b/waybar/themes/current-theme new file mode 100644 index 0000000..6a7a63c --- /dev/null +++ b/waybar/themes/current-theme @@ -0,0 +1 @@ +/home/saeijou/.config/waybar/themes/css/gruvbox-dark.css diff --git a/waybar/themes/jsonc/catppuccin-frappe.jsonc b/waybar/themes/jsonc/catppuccin-frappe.jsonc new file mode 100644 index 0000000..d740ef9 --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-frappe.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/catppuccin-latte.jsonc b/waybar/themes/jsonc/catppuccin-latte.jsonc new file mode 100644 index 0000000..a76e81f --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-latte.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/catppuccin-macchiato.jsonc b/waybar/themes/jsonc/catppuccin-macchiato.jsonc new file mode 100644 index 0000000..86194e0 --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-macchiato.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/catppuccin-mocha.jsonc b/waybar/themes/jsonc/catppuccin-mocha.jsonc new file mode 100644 index 0000000..4125b3d --- /dev/null +++ b/waybar/themes/jsonc/catppuccin-mocha.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/gruvbox-dark.jsonc b/waybar/themes/jsonc/gruvbox-dark.jsonc new file mode 100644 index 0000000..64dad16 --- /dev/null +++ b/waybar/themes/jsonc/gruvbox-dark.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/waybar/themes/jsonc/gruvbox-light.jsonc b/waybar/themes/jsonc/gruvbox-light.jsonc new file mode 100644 index 0000000..42e5f7d --- /dev/null +++ b/waybar/themes/jsonc/gruvbox-light.jsonc @@ -0,0 +1,478 @@ +{ + "layer": "top", + "position": "top", + "mode": "dock", + "reload_style_on_change": true, + "gtk-layer-shell": true, + + // <<--< Positions >-->> + + "modules-left": [ + "custom/ws", // window icon + "custom/left1", + + "hyprland/workspaces", // workspaces + "custom/right1", + + "custom/paddw", + "hyprland/window" // window title + ], + + "modules-center": [ + "custom/paddc", + "custom/left2", + "custom/temperature", // temperature + + "custom/left3", + "memory", // memory + + "custom/left4", + "cpu", // cpu + "custom/leftin1", + + "custom/left5", + "custom/distro", // distro icon + "custom/right2", + + "custom/rightin1", + "idle_inhibitor", // idle inhibitor + "clock#time", // time + "custom/right3", + + "clock#date", // date + "custom/right4", + + "custom/wifi", // wi-fi + "bluetooth", // bluetooth + "custom/update", // system update + "custom/right5" + ], + + "modules-right": [ + "mpris", // media info + + "custom/left6", + "pulseaudio", // output device + + "custom/left7", + "backlight", // brightness + + "custom/left8", + "battery", // battery + + "custom/leftin2", + "custom/power" // power button + ], + + // <<--< Modules >-->> + + "custom/ws": { + "exec": "~/.config/waybar/scripts/current-theme.sh", + "return-type": "json", + "format": " 󰤕 ", + "on-click": "~/.config/waybar/scripts/theme-switcher.sh", + "min-length": 3, + "max-length": 3 + }, + + "hyprland/workspaces": { + "on-scroll-up": "hyprctl dispatch workspace -1", + "on-scroll-down": "hyprctl dispatch workspace +1", + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] + } + }, + + "hyprland/window": { + "format": "{}", + "tooltip": false, + "min-length": 5, + + "rewrite": { + // Desktop + "": + " Hyprland", + + // Terminal + "~": " Terminal", + "zsh": " Terminal", + "kitty": " Terminal", + + "tmux(.*)": + " Tmux", + + // Browser + + "(.*)Mozilla Firefox": + "󰈹 Firefox", + "(.*) — Mozilla Firefox": + "󰈹 $1", + + "(.*)Zen Browser": + "󰺕 Zen Browser", + "(.*) — Zen Browser": + "󰺕 $1", + + // Development + + "(.*) - Visual Studio Code": + "󰨞 $1", + "(.*)Visual Studio Code": + "󰨞 Visual Studio Code", + + "nvim": + " Neovim", + "nvim (.*)": + " $1", + + "vim": + " Vim", + "vim (.*)": + " $1", + + // Media + + "(.*)Spotify": + " Spotify", + "(.*)Spotify Premium": + " Spotify Premium", + + "OBS(.*)": + " OBS Studio", + + "VLC media player": + "󰕼 VLC Media Player", + "(.*) - VLC media player": + "󰕼 $1", + + "(.*) - mpv": + " $1", + + "qView": " qView", + + "(.*).jpg": " $1.jpg", + "(.*).png": " $1.png", + "(.*).svg": " $1.svg", + + // Social + + "vesktop": + " Discord", + + "• Discord(.*)": "Discord$1", + "(.*)Discord(.*)": + " $1Discord$2", + + // Documents + + "ONLYOFFICE Desktop Editors": + " OnlyOffice Desktop", + + "(.*).docx": + " $1.docx", + "(.*).xlsx": + " $1.xlsx", + "(.*).pptx": + " $1.pptx", + "(.*).pdf": + " $1.pdf", + + // System + "Authenticate": " Authenticate" + } + }, + + "custom/temperature": { + "exec": "~/.config/waybar/scripts/cpu-temp.sh", + "return-type": "json", + "format": "{}", + "interval": 5, + "min-length": 8, + "max-length": 8 + }, + + "memory": { + "states": { + "warning": 75, + "critical": 90 + }, + + "format": "󰘚 {percentage}%", + "format-critical": "󰀦 {percentage}%", + "tooltip": false, + // "tooltip-format": "Memory Used: {used:0.1f} GB / {total:0.1f} GB", + "interval": 5, + "min-length": 7, + "max-length": 7 + }, + + "cpu": { + "format": "󰻠 {usage}%", + "tooltip": false, + "interval": 5, + "min-length": 6, + "max-length": 6 + }, + + "custom/distro": { + "format": " ", + "tooltip": false + }, + + "idle_inhibitor": { + "format": "{icon}", + + "format-icons": { + "activated": "󰈈 ", + "deactivated": "󰈉 " + }, + + "tooltip-format-activated": "Presentation Mode", + "tooltip-format-deactivated": "Idle Mode", + "start-activated": false + }, + + "clock#time": { + "format": "{:%H:%M}", + "tooltip": false, + // "tooltip-format": "Standard Time: {:%I:%M %p}", + "min-length": 6, + "max-length": 6 + }, + + "clock#date": { + "format": "󰨳 {:%m-%d}", + "tooltip-format": "{calendar}", + + "calendar": { + "mode": "month", + "mode-mon-col": 6, + "on-click-right": "mode", + + "format": { + "months": + "{}", + "weekdays": + "{}", + "today": + "{}" + } + }, + + "actions": { + "on-click": "mode", + "on-click-right": "mode" + }, + + "min-length": 8, + "max-length": 8 + }, + + "custom/wifi": { + "exec": "~/.config/waybar/scripts/wifi-status.sh", + "return-type": "json", + "format": "{}", + "on-click": "~/.config/waybar/scripts/wifi-menu.sh", + "on-click-right": "kitty --title '󰤨 Network Manager TUI' bash -c nmtui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "bluetooth": { + "format": "󰂰", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "format-connected-battery": "󰂱", + + "tooltip-format": + "{num_connections} connected", + "tooltip-format-disabled": + "Bluetooth Disabled", + "tooltip-format-connected": + "{device_enumerate}", + "tooltip-format-enumerate-connected": + "{device_alias}", + "tooltip-format-enumerate-connected-battery": + ":: {device_alias}: 󱊣 {device_battery_percentage}%", + + "on-click": "~/.config/waybar/scripts/bluetooth-menu.sh", + "on-click-right": "kitty --title '󰂯 Bluetooth TUI' bash -c bluetui", + "interval": 1, + "min-length": 1, + "max-length": 1 + }, + + "custom/update": { + "exec": "~/.config/waybar/scripts/system-update.sh", + "return-type": "json", + "format": "{}", + "on-click": "hyprctl dispatch exec '~/.config/waybar/scripts/system-update.sh up'", + "interval": 30, + "min-length": 1, + "max-length": 1 + }, + + "mpris": { + "format": "{player_icon} {title} - {artist}", + "format-paused": "{status_icon} {title} - {artist}", + + "player-icons": { + "default": "󰝚 ", + "spotify": "󰓇 ", + "firefox": "󰗃 " + }, + "status-icons": { + "paused": "\u200A\u200A󰏤\u2009\u2009" + }, + + "tooltip-format": "Playing: {title} - {artist}", + "tooltip-format-paused": "Paused: {title} - {artist}", + "min-length": 5, + "max-length": 35 + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + + "format-icons": { + "default": ["󰕿", "󰖀", "󰕾"], + "headphone": "󰋋", + "headset": "󰋋" + }, + + "tooltip-format": "Device: {desc}", + "on-click": "~/.config/waybar/scripts/volume-control.sh -o m", + "on-scroll-up": "~/.config/waybar/scripts/volume-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/volume-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "backlight": { + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "tooltip": false, + "on-scroll-up": "~/.config/waybar/scripts/brightness-control.sh -o i", + "on-scroll-down": "~/.config/waybar/scripts/brightness-control.sh -o d", + "min-length": 6, + "max-length": 6 + }, + + "battery": { + "states": { + "warning": 20, + "critical": 10 + }, + + "format": "{icon} {capacity}%", + "format-icons": ["󰂎", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-charging": " {capacity}%", + + "tooltip-format": "Discharging: {time}", + "tooltip-format-charging": "Charging: {time}", + "interval": 1, + "min-length": 6, + "max-length": 6 + }, + + "custom/power": { + "format": " ", + "tooltip": false, + // "tooltip-format": "Power Menu", + "on-click": "~/.config/waybar/scripts/power-menu.sh" + }, + + // <<--< Padding >-->> + + "custom/paddw": { + "format": " ", + "tooltip": false + }, + + "custom/paddc": { + "format": " ", + "tooltip": false + }, + + // Left Arrows + + "custom/left1": { + "format": "", + "tooltip": false + }, + "custom/left2": { + "format": "", + "tooltip": false + }, + "custom/left3": { + "format": "", + "tooltip": false + }, + "custom/left4": { + "format": "", + "tooltip": false + }, + "custom/left5": { + "format": "", + "tooltip": false + }, + "custom/left6": { + "format": "", + "tooltip": false + }, + "custom/left7": { + "format": "", + "tooltip": false + }, + "custom/left8": { + "format": "", + "tooltip": false + }, + + // Right Arrows + + "custom/right1": { + "format": "", + "tooltip": false + }, + "custom/right2": { + "format": "", + "tooltip": false + }, + "custom/right3": { + "format": "", + "tooltip": false + }, + "custom/right4": { + "format": "", + "tooltip": false + }, + "custom/right5": { + "format": "", + "tooltip": false + }, + + // Left Inverse + + "custom/leftin1": { + "format": "", + "tooltip": false + }, + "custom/leftin2": { + "format": "", + "tooltip": false + }, + + // Right Inverse + + "custom/rightin1": { + "format": "", + "tooltip": false + } +} diff --git a/wofi/style.css b/wofi/style.css new file mode 100644 index 0000000..f3b8b39 --- /dev/null +++ b/wofi/style.css @@ -0,0 +1,46 @@ +window { + margin: 0px; + border: 2px solid #3c3836; + background-color: #282828; + font-family: "Fira Code", "JetBrains Mono", monospace; + font-size: 14px; +} + +#input { + margin: 5px; + border: none; + color: #ebdbb2; + background-color: #3c3836; +} + +#inner-box { + margin: 5px; + border: none; + background-color: #282828; +} + +#outer-box { + margin: 5px; + border: none; + background-color: #282828; +} + +#scroll { + margin: 0px; + border: none; +} + +#text { + margin: 5px; + border: none; + color: #ebdbb2; +} + +#entry:selected { + background-color: #458588; + color: #fbf1c7; +} + +#entry:selected #text { + color: #fbf1c7; +}