Finally add all dotfiles correctly

This commit is contained in:
2025-07-19 14:24:57 -07:00
parent dc8976a1cd
commit 7cadf88d89
60 changed files with 7509 additions and 0 deletions

40
hypr/hypridle.conf Normal file
View File

@@ -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
}

315
hypr/hyprland.conf Normal file
View File

@@ -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

297
hypr/hyprland.conf.save Normal file
View File

@@ -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

35
hypr/hyprlock.conf Normal file
View File

@@ -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 = <i>Input Password...</i> # 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 = <i>$FAIL <b>($ATTEMPTS)</b></i> # 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
}

130
hypr/scripts/monitor_setup.sh Executable file
View File

@@ -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')"

View File

@@ -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)"

View File

@@ -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"