adds overview, removes old stuff

This commit is contained in:
2026-08-19 20:47:29 +02:00
parent 6a9ae98c26
commit 67d50fb504
75 changed files with 3558 additions and 1691 deletions
-15
View File
@@ -1,15 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Animations Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
# https://wiki.hyprland.org/0.45.0/Configuring/Animations/
animations {
enabled = yes
bezier = overshot, 0.13, 0.99, 0.29, 1.1
animation = windowsIn, 1, 4, overshot, popin
animation = windowsOut, 1, 5, default, popin 80%
animation = border, 1, 5, default
animation = workspacesIn, 1, 6, overshot, slide
animation = workspacesOut, 1, 6, overshot, slidefade 80%
}
-35
View File
@@ -1,35 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Autostart Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
source = ~/.config/hypr/config/defaults.conf
# Autostart wiki https://wiki.hyprland.org/0.45.0/Configuring/Keywords/#executing #
exec-once = qs
exec-once = blueman-applet &
exec-once = fcitx5 -d &
exec-once = mako &
exec-once = nm-applet --indicator &
exec-once = bash -c "mkfifo /tmp/$HYPRLAND_INSTANCE_SIGNATURE.wob && tail -f /tmp/$HYPRLAND_INSTANCE_SIGNATURE.wob | wob -c ~/.config/hypr/wob.ini & disown" &
exec-once = /usr/lib/polkit-kde-authentication-agent-1 &
exec-once = waypaper --restore
# ## Slow app launch fix
exec-once = systemctl --user import-environment &
exec-once = hash dbus-update-activation-environment 2>/dev/null &
exec-once = dbus-update-activation-environment --systemd &
# ## Idle configuration
exec-once = $idlehandler
# Clipboard fix
# https://github.com/hyprwm/Hyprland/issues/2319#issuecomment-2409983376
#exec-once = wl-paste -t text -w xclip -selection clipboard &
#exec-once = wl-paste --watch cliphist store &
# vicinae
exec-once = vicinae server
# pyprland
exec-once = /usr/bin/pypr --debug /tmp/pypr.log
-19
View File
@@ -1,19 +0,0 @@
$wallpaper = /usr/share/wallpapers/downloaded/pexels-8kspain-21564213.jpg
$background = rgb(252425)
$foreground = rgb(F9F1D9)
$color0 = rgb(505051)
$color1 = rgb(9C604E)
$color2 = rgb(807A52)
$color3 = rgb(908BAB)
$color4 = rgb(B7815F)
$color5 = rgb(B9BECA)
$color6 = rgb(EED793)
$color7 = rgb(EEE3C1)
$color8 = rgb(A79F87)
$color9 = rgb(9C604E)
$color10 = rgb(807A52)
$color11 = rgb(908BAB)
$color12 = rgb(B7815F)
$color13 = rgb(B9BECA)
$color14 = rgb(EED793)
$color15 = rgb(EEE3C1)
+19 -19
View File
@@ -1,22 +1,22 @@
-- config/colors.lua
-- Centralised palette
-- Use these Lua globals throughout every other module.
background = "rgb(090A0D)"
foreground = "rgb(B1B2B5)"
color0 = "rgb(484338)"
color1 = "rgb(5C564B)"
color2 = "rgb(54708A)"
color3 = "rgb(8B7C56)"
color4 = "rgb(537FBA)"
color5 = "rgb(E3D096)"
color6 = "rgb(6886F3)"
color7 = "rgb(86898D)"
color8 = "rgb(5E6063)"
color9 = "rgb(5C564B)"
color10 = "rgb(54708A)"
color11 = "rgb(8B7C56)"
color12 = "rgb(537FBA)"
color13 = "rgb(E3D096)"
color14 = "rgb(6886F3)"
color15 = "rgb(86898D)"
wallpaper = "/usr/share/wallpapers/downloaded/pexels-philippedonn-1114690.jpg"
background = "rgb(080701)"
foreground = "rgb(AEADA7)"
color0 = "rgb(463E37)"
color1 = "rgb(3B3E4D)"
color2 = "rgb(5D8071)"
color3 = "rgb(464E89)"
color4 = "rgb(1982B3)"
color5 = "rgb(609D75)"
color6 = "rgb(73BAFF)"
color7 = "rgb(848279)"
color8 = "rgb(5C5B54)"
color9 = "rgb(3B3E4D)"
color10 = "rgb(5D8071)"
color11 = "rgb(464E89)"
color12 = "rgb(1982B3)"
color13 = "rgb(609D75)"
color14 = "rgb(73BAFF)"
color15 = "rgb(848279)"
wallpaper = "/usr/share/wallpapers/downloaded/pexels-jplenio-1102908.jpg"
-33
View File
@@ -1,33 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Decorations Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
source = ~/.config/hypr/config/colors.conf
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#decoration
decoration {
active_opacity = 1
inactive_opacity = 0.7
rounding = 1
dim_inactive = true
dim_strength = 0.1
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#blur
blur {
size = 30
passes = 2 # more passes = more resource intensive.
xray = true
noise = 0.01
}
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#shadow
shadow {
enabled = true
range = 10
}
}
-12
View File
@@ -1,12 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Defaults Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
$filemanager = nemo
#$applauncher = tofi-drun --drun-launch=true
#$applauncher = rofi -show combi -modi window,run,combi -combi-modi window,run
$dmenu = vicinae dmenu --placeholder
$applauncher = vicinae toggle
$terminal = kitty
$idlehandler = swayidle -w timeout 300 'swaylock -f -c 000000' before-sleep 'swaylock -f -c 000000'
$capturing = grim -g "$(slurp)" - | swappy -f -
-21
View File
@@ -1,21 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Enviroment Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
envd = HYPRCURSOR_THEME,vimix-kanagawa-hyprcursors-lotus
envd = HYPRCURSOR_SIZE,34
env = XCURSOR_THEME,vimix-kanagawa-hyprcursors-lotus
envd = XCURSOR_SIZE,34
envd = QT_CURSOR_SIZE,34
# Force electron apps to use wayland
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = QT_QPA_PLATFORM, wayland
env = SDL_VIDEODRIVER, wayland
env = CLUTTER_BACKEND, wayland
env = XDG_SESSION_TYPE, wayland
env = MOZ_ENABLE_WAYLAND, 1
env = NIXOS_OZONE_WL, 1
# fixes full screen flickering
env = WLR_DRM_NO_DIRECT_SCANOUT,1
-12
View File
@@ -1,12 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Input Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
# Input wiki https://wiki.hyprland.org/0.45.0/Configuring/Variables/#input
input {
kb_layout = de
follow_mouse = 2 # 0|1|2|3
float_switch_override_focus = 2
numlock_by_default = true
}
-175
View File
@@ -1,175 +0,0 @@
# 0. Includes
source = ~/.config/hypr/config/defaults.conf
# 1. Applications
# https://wiki.hyprland.org/Configuring/Binds/
bindd = $mainMod, RETURN, Opens your preferred terminal emulator ($terminal), exec, $terminal
bindd = $mainMod, E, Opens your preferred filemanager ($filemanager), exec, $filemanager
#bindd = $mainMod, A, Screen capture selection, exec, $capturing
bindd = $mainMod, Q, Closes (not kill) current window, killactive,
bindd = $mainMod SHIFT, M, Exits Hyprland by terminating the user sessions, exec, loginctl terminate-user ""
bindd = $mainMod, V, Switches current window between floating and tiling mode, togglefloating,
bindd = $mainMod, SPACE, Runs your application launcher, exec, $applauncher
bindd = $mainMod, F, Toggles current window fullscreen mode, fullscreen
bindd = $mainMod, Y, Pin current window (shows on all workspaces),pin
bindd = $mainMod, J, Toggles curren window split mode, togglesplit, # dwindle
# ======= Grouping Windows =======
bindd = $mainMod, K, Toggles current window group mode (ungroup all related), togglegroup,
bindd = $mainMod, Tab, Switches to the next window in the group, changegroupactive, f
# ======= Volume Control =======
bindel = , XF86AudioRaiseVolume, exec, ~/.config/hypr/scripts/volume-helper.sh up
bindel = , XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/volume-helper.sh down
bindel = , XF86AudioMute, exec, ~/.config/hypr/scripts/volume-helper.sh toggle
# ======= Playback Control =======
bindd = , XF86AudioPlay, Toggles play/pause, exec, playerctl play-pause
bindd = , XF86AudioNext, Next track, exec, playerctl next
bindd = , XF86AudioPrev, Previous track, exec, playerctl previous
# ======= Screen Brightness =======
bindel = , XF86MonBrightnessUp, exec, brightnessctl s +5% #Increases brightness 5%
bindel = , XF86MonBrightnessDown, exec, brightnessctl s 5%- #Decreases brightness 5%
bindd = $mainMod SHIFT, P, Runs the calculator application, exec, gnome-calculator
bindd = $mainMod, L, Lock the screen, exec, ~/.config/swaylock/lockscript.sh
bindd = $mainMod, O, Reload/restarts Waybar, exec, killall -SIGUSR2 waybar
# ======= Window Actions =======
## Move window with mainMod + LMB/RMB and dragging
bindd = $mainMod, mouse:272, Move the window towards a direction, movewindow
## Move window towards a direction
bindd = $mainMod SHIFT, left, Move active window to the left, movewindow, l
bindd = $mainMod SHIFT, right, Move active window to the right, movewindow, r
bindd = $mainMod SHIFT, up, Move active window upwards, movewindow, u
bindd = $mainMod SHIFT, down, Move active window downwards, movewindow, d
## Move focus with mainMod + arrow keys
bindd = $mainMod, left, Move focus to the left, movefocus, l
bindd = $mainMod, right, Move focus to the right, movefocus, r
bindd = $mainMod, up, Move focus upwards, movefocus, u
bindd = $mainMod, down, Move focus downwards, movefocus, d
## Resizing windows
# Activate keyboard window resize mode
# https://wiki.hyprland.org/Configuring/Binds/#submaps
bindd = $mainMod, R, Activates window resizing mode, submap, resize
submap = resize
bindd = , right, Resize to the right (resizing mode), resizeactive, 15 0
bindd = , left, Resize to the left (resizing mode), resizeactive, -15 0
bindd = , up, Resize upwards (resizing mode), resizeactive, 0 -15
bindd = , down, Resize downwards (resizing mode), resizeactive, 0 15
bindd = , l, Resize to the right (resizing mode), resizeactive, 15 0
bindd = , h, Resize to the left (resizing mode), resizeactive, -15 0
bindd = , k, Resize upwards (resizing mode), resizeactive, 0 -15
bindd = , j, Resize downwards (resizing mode), resizeactive, 0 15
bindd = , escape, Ends window resizing mode, submap, reset
submap = reset
# Quick resize window with keyboard
# !!! added $mainMod here because CTRL + SHIFT is used for word selection in various text editors
bindd = $mainMod CTRL SHIFT, right, Resize to the right, resizeactive, 25 0
bindd = $mainMod CTRL SHIFT, left, Resize to the left, resizeactive, -25 0
bindd = $mainMod CTRL SHIFT, up, Resize upwards, resizeactive, 0 -25
bindd = $mainMod CTRL SHIFT, down, Resize downwards, resizeactive, 0 25
bindd = $mainMod CTRL SHIFT, l, Resize to the right, resizeactive, 15 0
bindd = $mainMod CTRL SHIFT, h, Resize to the left, resizeactive, -15 0
bindd = $mainMod CTRL SHIFT, k, Resize upwards, resizeactive, 0 -15
bindd = $mainMod CTRL SHIFT, j, Resize downwards, resizeactive, 0 15
# Resize window with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:273, resizewindow #Resize the window towards a direction
bindm = $mainMod, mouse:272, movewindow #Drag window
## Resizing Windows End #
## Move active window to a workspace with $mainMod + CTRL + [0-9]
bindd = $mainMod CTRL, 1, Move window and switch to workspace 1, movetoworkspace, 1
bindd = $mainMod CTRL, 2, Move window and switch to workspace 2, movetoworkspace, 2
bindd = $mainMod CTRL, 3, Move window and switch to workspace 3, movetoworkspace, 3
bindd = $mainMod CTRL, 4, Move window and switch to workspace 4, movetoworkspace, 4
bindd = $mainMod CTRL, 5, Move window and switch to workspace 5, movetoworkspace, 5
bindd = $mainMod CTRL, 6, Move window and switch to workspace 6, movetoworkspace, 6
bindd = $mainMod CTRL, 7, Move window and switch to workspace 7, movetoworkspace, 7
bindd = $mainMod CTRL, 8, Move window and switch to workspace 8, movetoworkspace, 8
bindd = $mainMod CTRL, 9, Move window and switch to workspace 9, movetoworkspace, 9
bindd = $mainMod CTRL, 0, Move window and switch to workspace 10, movetoworkspace, 10
bindd = $mainMod CTRL, left, Move window and switch to the next workspace, movetoworkspace, -1
bindd = $mainMod CTRL, right, Move window and switch to the previous workspace, movetoworkspace, +1
## Same as above, but doesn't switch to the workspace
bindd = $mainMod SHIFT, 1, Move window silently to workspace 1, movetoworkspacesilent, 1
bindd = $mainMod SHIFT, 2, Move window silently to workspace 2, movetoworkspacesilent, 2
bindd = $mainMod SHIFT, 3, Move window silently to workspace 3, movetoworkspacesilent, 3
bindd = $mainMod SHIFT, 4, Move window silently to workspace 4, movetoworkspacesilent, 4
bindd = $mainMod SHIFT, 5, Move window silently to workspace 5, movetoworkspacesilent, 5
bindd = $mainMod SHIFT, 6, Move window silently to workspace 6, movetoworkspacesilent, 6
bindd = $mainMod SHIFT, 7, Move window silently to workspace 7, movetoworkspacesilent, 7
bindd = $mainMod SHIFT, 8, Move window silently to workspace 8, movetoworkspacesilent, 8
bindd = $mainMod SHIFT, 9, Move window silently to workspace 9, movetoworkspacesilent, 9
bindd = $mainMod SHIFT, 0, Move window silently to workspace 10, movetoworkspacesilent, 10
# Window actions End #
# ======= Workspace Actions =======
# Switch workspaces with mainMod + [0-9]
bindd = $mainMod, 1, Switch to workspace 1, workspace, 1
bindd = $mainMod, 2, Switch to workspace 2, workspace, 2
bindd = $mainMod, 3, Switch to workspace 3, workspace, 3
bindd = $mainMod, 4, Switch to workspace 4, workspace, 4
bindd = $mainMod, 5, Switch to workspace 5, workspace, 5
bindd = $mainMod, 6, Switch to workspace 6, workspace, 6
bindd = $mainMod, 7, Switch to workspace 7, workspace, 7
bindd = $mainMod, 8, Switch to workspace 8, workspace, 8
bindd = $mainMod, 9, Switch to workspace 9, workspace, 9
bindd = $mainMod, 0, Switch to workspace 10, workspace, 10
# Scroll through existing workspaces with mainMod + , or .
bindd = $mainMod, PERIOD, Scroll through workspaces incrementally, workspace, e+1
bindd = $mainMod, COMMA, Scroll through workspaces decrementally, workspace, e-1
# With $mainMod + Alt + Left / Right
bindd = $mainMod ALT, left, Switch to the previous workspace, workspace, e-1
bindd = $mainMod ALT, right, Switch to the next workspace, workspace, e+1
# With $mainMod + scroll
bindd = $mainMod, mouse_down, Scroll through workspaces incrementally, workspace, e+1
bindd = $mainMod, mouse_up, Scroll through workspaces decrementally, workspace, e-1
bindd = $mainMod, slash, Switch to the previous workspace, workspace, previous
# Special workspaces (scratchpads)
bindd = $mainMod, minus, Move active window to Special workspace, movetoworkspace,special
bindd = $mainMod, equal, Toggles the Special workspace, togglespecialworkspace, special
bindd = $mainMod, F1, Call special workspace scratchpad, togglespecialworkspace, scratchpad
bindd = $mainMod ALT SHIFT, F1, Move active window to s~/.config/hypr/scripts/pecial workspace scratchpad, movetoworkspacesilent, special:scratchpad
# ======= Screenshot =======
# Screenshot a window
bind = $mainMod, PRINT, exec, hyprshot -m window
# Screenshot a monitor
bind = , PRINT, exec, hyprshot -m output
# Screenshot a region
bind = $shiftMod, PRINT, exec, hyprshot -m region
# Screenrec
bind = $mainMod, S, exec, ~/.config/hypr/scripts/record-or-screenshot.sh -d "$dmenu"
# ======= Color Picker =======
bindd = $mainMod, P, Launch hyprpicker to pick a color, exec, hyprpicker -a
# ======= Additional Settings =======
#bind = $mainMod, c, exec, cliphist list | tofi --prompt-text="clip:" | cliphist decode | wl-copy
bind = $mainMod, c, exec, vicinae vicinae://extensions/vicinae/clipboard/history
# https://wiki.hyprland.org/Configuring/Binds
binds {
allow_workspace_cycles = 1
workspace_back_and_forth = 1
workspace_center_on = 1
movefocus_cycles_fullscreen = true
window_direction_monitor_fallback = true
}
# Toggle Waybar
bind = $mainMod, W, exec, killall -SIGUSR1 waybar
bind = $mainMod SHIFT, W, exec, killall -SIGUSR2 waybar # restart
# ======= Monitors =======
# Toggle Monitor Flip
bind = $mainMod, F7, exec, ~/.config/hypr/scripts/rotate_current_screen.sh
bind = $mainMod, F8, exec, ~/.config/hypr/scripts/monitor-toggle.sh toggle-externals
# bind = $mainMod, F8, exec, ~/.config/hypr/scripts/monitor-toggle.sh laptop
bind = $mainMod, F9, exec, ~/.config/hypr/scripts/monitor-toggle.sh dual
bind = $mainMod, F10, exec, ~/.config/hypr/scripts/monitor-toggle.sh triple
+10 -1
View File
@@ -17,7 +17,16 @@ hl.bind(S .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
-- ── Groups ───────────────────────────────────────────────────
hl.bind(S .. " + K", hl.dsp.group.toggle())
hl.bind(S .. " + Tab", hl.dsp.group.next( window ))
-- hl.bind(S .. " + Tab", hl.dsp.group.next( window ))
hl.bind(S .. " + Tab", function()
local w = hl.get_active_window()
if w and w.group then
hl.dispatch(hl.dsp.group.next())
else
hl.dispatch(hl.dsp.exec_cmd("qs ipc -c own call overview toggle"))
end
end)
-- ── Volume ───────────────────────────────────────────────────
local vol = "~/.config/hypr/scripts/volume-helper.sh"
-21
View File
@@ -1,21 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Monitor Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
# Monitor wiki https://wiki.hyprland.org/0.45.0/Configuring/Monitors/
monitor = eDP-2, highres@highrr, 0x0, 1, vrr, 1
#monitor = HDMI-A-1, highres@highrr, auto-right, 1, transform, 1
#monitor = desc:Samsung Electric Company S24F350 H4ZR302705, highres@highrr, auto-right, 1
monitor = desc:Samsung Electric Company S24F350 H4ZK111233, highres@highrr, 1920x0, 1#, transform, 1
# monitor = HDMI-A-1, highres@highrr, auto-right, 1, vrr, 0
# If you need to scale things like steam etc, please uncomment these lines.
# Adjust GDK_SCALE accordingly to your liking.
#xwayland {
# force_zero_scaling = true # Unscale XWayland
#}
#env = GDK_SCALE, 1.25 # GDK Scaling Factor
-12
View File
@@ -1,12 +0,0 @@
# https://github.com/sandwichfarm/hyprexpo-plus
# currently not working
plugin {
hyprexpo {
columns = 3
gap_size = 5
workspace_method = center current # [center/first] [workspace] e.g. first 1 or center m+1
keynav_enable = 1
keynav_wrap_h = 1 # wrap horizontally at row edges
keynav_wrap_v = 1 # wrap vertically at column edges
}
}
-89
View File
@@ -1,89 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Variables Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
source = ~/.config/hypr/config/colors.conf
# https://wiki.hypr.land/Configuring/Variables/#general
general {
gaps_in = 2
gaps_out = 1
border_size = 1
col.active_border = $color4
col.inactive_border = $color2
layout = dwindle # master|dwindle
resize_on_border = true
extend_border_grab_area = 10
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#snap
snap {
enabled = true
}
}
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#group
group {
col.border_active = $color6
col.border_inactive = $color2
col.border_locked_active = $color3
col.border_locked_inactive = $color0
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#groupbar
groupbar {
font_size = 13
height = 1
indicator_height = 16
rounding = 2
font_family = "Roboto Sanss"
text_color = $foreground
text_offset = -8
font_weight_active = ultraheavy
font_weight_inactive = semibold
col.active = $color6
col.inactive = $color2
col.locked_active = $color3
col.locked_inactive = $color0
}
}
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#misc
misc {
font_family = "Roboto Sans"
splash_font_family = "Roboto Sans"
disable_hyprland_logo = true
col.splash = $color2
background_color = $background
enable_swallow = true
swallow_regex = ^(cachy-browser|firefox|nautilus|nemo|thunar|btrfs-assistant.)$
focus_on_activate = true
vrr = 0
# Hypridle cmatrix fix:
session_lock_xray = true
middle_click_paste = false
}
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#render
render {
direct_scanout = true
}
# See https://wiki.hyprland.org/0.45.0/Configuring/Dwindle-Layout/ for more
dwindle {
special_scale_factor = 0.8
pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true
}
# See https://wiki.hyprland.org/0.45.0/Configuring/Master-Layout/ for more
master {
new_status = master
special_scale_factor = 0.8
}
cursor {
no_hardware_cursors = true
}
device {
name = logitech-gaming-mouse-g502
sensitivity=0.9
}
+9 -9
View File
@@ -23,21 +23,21 @@ hl.config({
},
group = {
["col.border_active"] = color6,
["col.border_active"] = color9,
["col.border_inactive"] = color2,
["col.border_locked_active"] = color3,
["col.border_locked_inactive"] = color0,
groupbar = {
font_size = 13,
height = 1,
font_size = 12,
height = 16,
indicator_height = 16,
rounding = 2,
rounding = 3,
font_family = "Roboto Sans",
text_color = foreground,
text_offset = -8,
font_weight_active = "ultraheavy",
font_weight_inactive = "semibold",
["col.active"] = color6,
text_color = background,
text_offset = -16,
font_weight_active = "bold",
font_weight_inactive = "normal",
["col.active"] = color4,
["col.inactive"] = color2,
["col.locked_active"] = color3,
["col.locked_inactive"] = color0,
-315
View File
@@ -1,315 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Windowrules Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
# Windows Rules https://wiki.hyprland.org/0.45.0/Configuring/Window-Rules/ #
# Float Necessary Windows
windowrule {
name = windowrule-1
float = on
match:title = Rofi
}
windowrule {
name = windowrule-2
float = on
match:class = ^(org.pulseaudio.pavucontrol)
}
windowrule {
name = windowrule-3
float = on
match:class = ^()$
match:title = ^(Picture in picture)$
}
windowrule {
name = windowrule-4
float = on
match:class = ^()$
match:title = ^(Save File)$
}
windowrule {
name = windowrule-5
float = on
match:class = ^()$
match:title = ^(Open File)$
}
windowrule {
name = windowrule-6
float = on
match:class = ^(LibreWolf)$
match:title = ^(Picture-in-Picture)$
}
windowrule {
name = windowrule-7
float = on
match:class = ^(blueman-manager)$
}
windowrule {
name = windowrule-8
float = on
match:class = ^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland)(.*)$
}
windowrule {
name = windowrule-9
float = on
size = 260 340
match:class = ^(pomodorolm)$
}
windowrule {
name = windowrule-10
float = on
match:title = ^(Extension:.*)$
}
windowrule {
name = windowrule-11
float = on
match:class = ^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.org.kde.polkit-kde-authentication-agent-1)(.*)$
}
windowrule {
name = windowrule-12
float = on
match:class = ^(CachyOSHello)$
}
windowrule {
name = windowrule-13
float = on
match:class = ^(zenity)$
}
windowrule {
name = windowrule-14
float = on
match:class = ^()$
match:title = ^(Steam - Self Updater)$
}
windowrule {
name = windowrule-15
float = on
match:class = ^(Zotero)$
match:title = ^(Progress)$
}
# Increase the opacity
windowrule {
name = windowrule-16
opacity = 0.92
match:class = ^(thunar|nemo|dolphin)$
}
windowrule {
name = windowrule-17
opacity = 0.96
match:class = ^(discord|armcord|webcord)$
}
windowrule {
name = windowrule-18
opacity = 0.95
match:title = ^(QQ|Telegram)$
}
windowrule {
name = windowrule-19
opacity = 0.95
match:title = ^(NetEase Cloud Music Gtk4)$
}
windowrule {
name = windowrule-20
opacity = 1
match:class = ^(kitty)$
}
# General window rules
windowrule {
name = windowrule-21
float = on
size = 960 540
move = ((monitor_w*0.25)-)
match:title = ^(Picture-in-Picture)$
}
windowrule {
name = windowrule-22
float = on
match:title = ^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp|nwg-look|nwg-displays)$
}
windowrule {
name = windowrule-23
move = ((monitor_w*0.25)-)
size = 960 540
match:title = ^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$
}
windowrule {
name = windowrule-24
pin = on
match:title = ^(danmufloat)$
}
windowrule {
name = windowrule-25
rounding = 5
match:title = ^(danmufloat|termfloat)$
}
windowrule {
name = windowrule-26
animation = slide right
match:class = ^(kitty|Alacritty)$
}
windowrule {
name = windowrule-27
no_blur = on
match:class = ^(org.mozilla.firefox)$
}
windowrule {
name = windowrule-28
no_dim = on
match:class = ^(zen)$
}
windowrule {
name = windowrule-29
float = on
match:title = ^(Zotero Settings)$
}
# Decorations related to floating windows on workspaces 1 to 10
windowrule {
name = windowrule-30
border_size = 2
border_color = $color4
rounding = 8
match:float = 1
match:workspace = w[fv1-10]
}
# Decorations related to tiling windows on workspaces 1 to 10
windowrule {
name = windowrule-31
border_size = 3
rounding = 4
match:float = 0
match:workspace = f[1-10]
}
windowrule {
name = windowrule-32
opacity = 0.9
match:title = ^(.+nvim$)
}
# Windows Rules End #
# Workspaces Rules https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/ #
# workspace = 1, default:true, monitor:$priMon
# workspace = 6, default:true, monitor:$secMon
# Workspace selectors https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/#workspace-selectors
# workspace = r[1-5], monitor:$priMon
# workspace = r[6-10], monitor:$secMon
# workspace = special:scratchpad, on-created-empty:$applauncher
# no_gaps_when_only deprecated instead workspaces rules with selectors can do the same
# Smart gaps from 0.45.0 https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/#smart-gaps
#workspace = w[tv1-10], gapsout:5, gapsin:3
#workspace = f[1], gapsout:5, gapsin:3
# Workspaces Rules End #
# Layers Rules #
layerrule {
name = layerrule-1
animation = slide top
match:namespace = logout_dialog
}
# layerrule = animation popin 50%, waybar
layerrule {
name = layerrule-2
animation = slide down
match:namespace = waybar
}
layerrule {
name = layerrule-3
animation = fade 50%
match:namespace = wallpaper
}
# vicinae
layerrule {
name = vicinae-blur
blur = on
animation = popin
dim_around = on
ignore_alpha = 1
match:namespace = vicinae
}
# Layers Rules End #
# Zotero Libreoffice
windowrule {
name = windowrule-33
float = on
center = on
no_anim = on
match:class = ^(Zotero)$
match:title = ^(Citation Dialog)$
}
windowrule {
name = libreoffice-opaque
match:class = ^(libreoffice.*)$
# active, inactive, fullscreen (all forced to 1.0)
opacity = 1.0 override 1.0 override 1.0 override
}
# gnome calendar
windowrule {
name = windowrule-cal
float = on
center = on
match:class = ^(org.gnome.Calendar)$
match:title = ^(Calendar)$
animation = popin
opacity = 0.8
}
windowrule {
name = waypaper-fix
match:class = ^(waypaper)$
float = on
center = on
}
windowrule {
name = calcure
match:title = ^(calcure)$
float = on
center = on
}
windowrule {
name = gnome-calculator-fix
match:class = ^(org.gnome.Calculator)$
float = on
center = on
}
-77
View File
@@ -1,77 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Windowrules Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
# Windows Rules https://wiki.hyprland.org/0.45.0/Configuring/Window-Rules/ #
# Float Necessary Windows
windowrule = float, title:Rofi
windowrule = float, class:^(org.pulseaudio.pavucontrol)
windowrule = float, class:^()$,title:^(Picture in picture)$
windowrule = float, class:^()$,title:^(Save File)$
windowrule = float, class:^()$,title:^(Save File)$
windowrule = float, class:^()$,title:^(Open File)$
windowrule = float, class:^(LibreWolf)$,title:^(Picture-in-Picture)$
windowrule = float, class:^(blueman-manager)$
windowrule = float, class:^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland)(.*)$
windowrule = float, class:^(pomodorolm)$
windowrule = float, title:^(Extension:.*)$
windowrule = float, class:^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.org.kde.polkit-kde-authentication-agent-1)(.*)$
windowrule = float, class:^(CachyOSHello)$
windowrule = float, class:^(zenity)$
windowrule = float, class:^()$,title:^(Steam - Self Updater)$
windowrule = float, class:^(Zotero)$,title:^(Progress)$
# Increase the opacity
windowrule = opacity 0.92, class:^(thunar|nemo|dolphin)$
windowrule = opacity 0.96, class:^(discord|armcord|webcord)$
windowrule = opacity 0.95, title:^(QQ|Telegram)$
windowrule = opacity 0.95, title:^(NetEase Cloud Music Gtk4)$
windowrule = opacity 1, class:^(kitty)$
# General window rules
windowrule = size 260 340, class:^(pomodorolm)$
windowrule = float, title:^(Picture-in-Picture)$
windowrule = size 960 540, title:^(Picture-in-Picture)$
windowrule = move 25%-, title:^(Picture-in-Picture)$
windowrule = float, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp|nwg-look|nwg-displays)$
windowrule = move 25%-, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$
windowrule = size 960 540, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$
windowrule = pin, title:^(danmufloat)$
windowrule = rounding 5, title:^(danmufloat|termfloat)$
windowrule = animation slide right, class:^(kitty|Alacritty)$
windowrule = noblur, class:^(org.mozilla.firefox)$
windowrule = nodim, class:^(zen)$
windowrule = float, title:^(Zotero Settings)$
# Decorations related to floating windows on workspaces 1 to 10
windowrule = bordersize 2, floating:1, onworkspace:w[fv1-10]
windowrule = bordercolor $color4, floating:1, onworkspace:w[fv1-10]
windowrule = rounding 8, floating:1, onworkspace:w[fv1-10]
# Decorations related to tiling windows on workspaces 1 to 10
windowrule = bordersize 3, floating:0, onworkspace:f[1-10]
windowrule = rounding 4, floating:0, onworkspace:f[1-10]
windowrule = opacity 0.9, title:^(.+nvim$)
# Windows Rules End #
# Workspaces Rules https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/ #
# workspace = 1, default:true, monitor:$priMon
# workspace = 6, default:true, monitor:$secMon
# Workspace selectors https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/#workspace-selectors
# workspace = r[1-5], monitor:$priMon
# workspace = r[6-10], monitor:$secMon
# workspace = special:scratchpad, on-created-empty:$applauncher
# no_gaps_when_only deprecated instead workspaces rules with selectors can do the same
# Smart gaps from 0.45.0 https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/#smart-gaps
#workspace = w[tv1-10], gapsout:5, gapsin:3
#workspace = f[1], gapsout:5, gapsin:3
# Workspaces Rules End #
# Layers Rules #
layerrule = animation slide top, logout_dialog
# layerrule = animation popin 50%, waybar
layerrule = animation slide down, waybar
layerrule = animation fade 50%, wallpaper
# Layers Rules End #
# Zotero Libreoffice
windowrule = float,class:^(Zotero)$,title:^(Citation Dialog)$
windowrule = center,class:^(Zotero)$,title:^(Citation Dialog)$
windowrule = noanim,class:^(Zotero)$,title:^(Citation Dialog)$
-14
View File
@@ -1,14 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Monitor Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
workspace = 1, monitor:eDP-2
workspace = 2, monitor:eDP-2
workspace = 3, monitor:eDP-2
workspace = 4, monitor:eDP-2
workspace = 5, monitor:eDP-2
workspace = 6, monitor:eDP-2
workspace = 7, monitor:eDP-2
workspace = 8, monitor:DP-2
workspace = 9, monitor:HDMI-A-1
-29
View File
@@ -1,29 +0,0 @@
general {
lock_cmd = pidof swaylock || swaylock # avoid starting multiple hyprlock instances.
before_sleep_cmd = brightnessctl -r # 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 = 7200 # 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 = 7200 # 2.5min.
on-timeout = brightnessctl -sd asus::kbd_backlight set 0 # turn off keyboard backlight.
on-resume = brightnessctl -rd asus::kbd_backlight # turn on keyboard backlight.
}
listener {
timeout = 7200 # 5min
on-timeout = ~/.config/swaylock/lockscript.sh # lock screen when timeout has passed
}
# listener {
# timeout = 900 # 15min
# on-timeout = hyprctl dispatch dpms off 5.5 # screen off when timeout has passed
# on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
# }
-24
View File
@@ -1,24 +0,0 @@
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ CachyOS Hyprland Configuration ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
$mainMod = SUPER
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
# ┃ Source Files ┃
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
source = ~/.config/hypr/config/animations.conf
source = ~/.config/hypr/config/autostart.conf
source = ~/.config/hypr/config/decorations.conf
source = ~/.config/hypr/config/environment.conf
source = ~/.config/hypr/config/input.conf
source = ~/.config/hypr/config/keybinds.conf
source = ~/.config/hypr/config/monitor.conf
source = ~/.config/hypr/config/variables.conf
source = ~/.config/hypr/config/windowrules.conf
source = ~/.config/hypr/config/workspaces.conf
source = ~/.config/hypr/config/plugins.conf
# Modifying these configs can be done by creating a user defined config in the home directory, e.g.
## ~/.config/hypr/config/user-config.conf
# source ~/.config/hypr/config/user-config.conf
-6
View File
@@ -1,6 +0,0 @@
# Generated by nwg-displays on 2026-02-04 at 14:45:07. Do not edit manually.
monitor=desc:BOE NE156FHM-NX6,1920x1080@144.0,0x0,1.0
monitor=desc:Samsung Electric Company S24F350 H4ZK111233,1920x1080@60.0,1920x0,1.0
monitor=desc:Samsung Electric Company S24F350 H4ZK111233,transform,1
monitor=desc:Samsung Electric Company S24F350 H4ZR302705,1920x1080@60.0,3000x0,1.0
-4
View File
@@ -1,4 +0,0 @@
[pyprland]
plugins = [
"shift_monitors",
]
-33
View File
@@ -1,33 +0,0 @@
#!/bin/bash
# start waybar if not started
if ! pgrep -x "waybar" > /dev/null; then
waybar &
fi
# current checksums
current_checksum_config=$(md5sum ~/.config/waybar/config)
current_checksum_style=$(md5sum ~/.config/waybar/style.css)
current_checksum_colors=$(md5sum ~/.config/waybar/colors-wallust.css)
# loop forever
while true; do
# new checksums
new_checksum_config=$(md5sum ~/.config/waybar/config)
new_checksum_style=$(md5sum ~/.config/waybar/style.css)
new_checksum_colors==$(md5sum ~/.config/waybar/colors-wallust.css)
# if checksums are different
if [ "$current_checksum_config" != "$new_checksum_config" ] || [ "$current_checksum_style" != "$new_checksum_style" ] || [ "$current_checksum_colors" != "$new_checksum_colors" ]; then
# kill waybar
killall waybar
# start waybar
waybar &
# update checksums
current_checksum_config=$new_checksum_config
current_checksum_style=$new_checksum_style
current_checksum_colors=$new_checksum_colors
fi
done
+32 -223
View File
@@ -2,256 +2,65 @@
set -euo pipefail
PRIMARY="eDP-2"
RIGHT_EXTERNAL_NAME="DP-2"
MIDDLE_EXTERNAL_NAME="HDMI-A-1"
DP_OUT="DP-2"
HDMI_OUT="HDMI-A-1"
# Exact enable lines (from your config)
EXT1='desc:Samsung Electric Company S24F350 H4ZR302705, highres@highrr, auto-right, 1'
EXT2='desc:Samsung Electric Company S24F350 H4ZK111233, highres@highrr, auto-right, 1, transform, 1'
# In dual mode, which one do we prefer?
DUAL_MAIN="$EXT1"
# Optional: restart Waybar after layout changes (0=off, 1=on)
RESTART_WAYBAR=1
# Dock/MST settle timing (tune if needed)
SETTLE_SECS=1.0
DPMS_KICK_RETRIES=2
DPMS_KICK_SLEEP=0.35
# eDP-2 at scale 1.5 → logical width 1280px → externals start at x=1280
# DP-2 at 1920px wide → HDMI starts at x=1280+1920=3200
notify() {
if command -v notify-send >/dev/null 2>&1; then
notify-send -a "Hyprland" "$1" "${2:-}"
else
[ -n "${2:-}" ] && printf '%s: %s\n' "$1" "$2" >&2 || printf '%s\n' "$1" >&2
fi
notify-send -a "monitor-toggle" "$1" "${2:-}" 2>/dev/null || true
}
hypr() {
local out
if ! out="$(hyprctl "$@" 2>&1)"; then
notify "hyprctl failed" "$out"
exit 1
fi
printf '%s' "$out"
active_monitors() {
hyprctl -j monitors | jq -r '.[] | select(.disabled != true) | .name'
}
hypr_batch() {
local out
if ! out="$(hyprctl --batch "$1" 2>&1)"; then
notify "hyprctl --batch failed" "$out"
exit 1
fi
printf '%s' "$out"
}
restart_waybar() {
[ "${RESTART_WAYBAR:-0}" -eq 1 ] || return 0
if pgrep -x waybar >/dev/null 2>&1; then
pkill -SIGUSR2 waybar >/dev/null 2>&1 || true
fi
}
jqok() { command -v jq >/dev/null 2>&1; }
monjson() { hyprctl -j monitors 2>/dev/null || true; }
sleep_s() { python - <<PY 2>/dev/null || sleep 1
import time
time.sleep(float("$1"))
PY
}
# --- monitor discovery helpers ---
enabled_monitor_names() {
if jqok; then
monjson | jq -r '.[] | select(.disabled != true) | .name'
else
# Fallback is weaker; jq is strongly recommended
hyprctl monitors | awk '
/^Monitor /{name=$2}
/disabled: false/{print name}
'
fi
}
focused_monitor_name() {
if jqok; then
monjson | jq -r '.[] | select(.focused==true) | .name // empty'
else
hyprctl monitors | awk '
/^Monitor /{name=$2}
/focused: yes/{print name; exit}
'
fi
}
external_enabled() {
local n
while IFS= read -r n; do
[ "$n" != "$PRIMARY" ] && return 0
done < <(enabled_monitor_names)
return 1
}
# We dont try to parse desc lines; we just treat them as “enable rules”
enable_rule() {
local rule="$1"
[ -n "$rule" ] && printf 'keyword monitor %s; ' "$rule"
}
disable_by_name() {
local name="$1"
[ -n "$name" ] && printf 'keyword monitor %s, disable; ' "$name"
}
# Disable all *currently enabled* externals by name (minimal churn)
batch_disable_enabled_externals() {
local batch="" n=""
while IFS= read -r n; do
[ "$n" = "$PRIMARY" ] && continue
batch+="$(disable_by_name "$n")"
done < <(enabled_monitor_names)
printf '%s' "$batch"
}
# Dock settle wait: give MST/alt-mode time to re-enumerate before we apply rules / kick DPMS
dock_settle() {
sleep_s "$SETTLE_SECS"
}
# DPMS kick for all enabled externals (works well for dock hotplug weirdness)
kick_externals() {
local names=() n=""
if jqok; then
mapfile -t names < <(monjson | jq -r --arg P "$PRIMARY" '
.[] | select(.name != $P and (.disabled != true)) | .name
')
else
mapfile -t names < <(enabled_monitor_names | awk -v P="$PRIMARY" '$0!=P')
fi
[ "${#names[@]}" -eq 0 ] && return 0
for _ in $(seq 1 "$DPMS_KICK_RETRIES"); do
for n in "${names[@]}"; do hypr dispatch dpms off "$n" >/dev/null 2>&1 || true; done
sleep_s "$DPMS_KICK_SLEEP"
for n in "${names[@]}"; do hypr dispatch dpms on "$n" >/dev/null 2>&1 || true; done
sleep_s "$DPMS_KICK_SLEEP"
done
}
enforce_triple_order() {
# Keep HDMI between the laptop panel and DP-2, with DP-2 always on the right.
enabled_monitor_names | grep -qx "$MIDDLE_EXTERNAL_NAME" || return 0
enabled_monitor_names | grep -qx "$RIGHT_EXTERNAL_NAME" || return 0
local py=0 px=0 pspan=1920 mspan=1920 mx rx
if jqok; then
read -r px py pspan < <(monjson | jq -r --arg N "$PRIMARY" '
.[] | select(.name == $N) |
(.transform // 0) as $t |
"\(.x // 0) \(.y // 0) \(if (($t % 2) == 1) then (.height // 1080) else (.width // 1920) end)"
')
read -r mspan < <(monjson | jq -r --arg N "$MIDDLE_EXTERNAL_NAME" '
.[] | select(.name == $N) |
(.transform // 0) as $t |
"\(if (($t % 2) == 1) then (.height // 1080) else (.width // 1920) end)"
')
fi
mx=$((px + pspan))
rx=$((mx + mspan))
hypr keyword monitor "$MIDDLE_EXTERNAL_NAME, highres@highrr, ${mx}x${py}, 1, transform, 1" >/dev/null 2>&1 || true
hypr keyword monitor "$RIGHT_EXTERNAL_NAME, highres@highrr, ${rx}x${py}, 1" >/dev/null 2>&1 || true
}
apply_profile() {
local label="$1"
local batch="$2"
dock_settle
[ -n "$batch" ] && hypr_batch "$batch" >/dev/null
dock_settle
kick_externals
notify "Profile: $label" ""
restart_waybar
has_external() {
active_monitors | grep -qvx "$PRIMARY"
}
profile_laptop() {
# Minimal: disable only currently enabled externals
local batch=""
batch+="$(batch_disable_enabled_externals)"
apply_profile "Laptop-only" "$batch"
wlr-randr --output "$DP_OUT" --off 2>/dev/null || true
wlr-randr --output "$HDMI_OUT" --off 2>/dev/null || true
notify "Laptop only"
}
profile_dual() {
# Disable enabled externals, then enable preferred main external rule
local batch=""
batch+="$(batch_disable_enabled_externals)"
batch+="$(enable_rule "$DUAL_MAIN")"
apply_profile "Dual" "$batch"
wlr-randr --output "$PRIMARY" --on --mode 1920x1080@144 --pos 0,0 --scale 1
wlr-randr --output "$HDMI_OUT" --on --mode 1920x1080@60 --pos 1920,0 --scale 1
wlr-randr --output "$DP_OUT" --off 2>/dev/null || true
notify "Dual"
}
profile_triple() {
# Disable enabled externals, then enable both rules
# Order: EXT2 first so it tends to appear “middle” with auto-right
local batch=""
batch+="$(batch_disable_enabled_externals)"
batch+="$(enable_rule "$EXT2")"
batch+="$(enable_rule "$EXT1")"
apply_profile "Triple" "$batch"
dock_settle
enforce_triple_order
wlr-randr --output "$PRIMARY" --on --mode 1920x1080@144 --pos 0,0 --scale 1
wlr-randr --output "$HDMI_OUT" --on --mode 1920x1080@60 --pos 1920,0 --scale 1
wlr-randr --output "$DP_OUT" --on --mode 1920x1080@60 --pos 3840,0 --scale 1 --transform 90
notify "Triple"
}
toggle_externals() {
if external_enabled; then
toggle() {
if has_external; then
profile_laptop
else
if [ -n "$EXT1" ] && [ -n "$EXT2" ]; then
profile_triple
else
profile_dual
fi
profile_triple
fi
}
dpms_toggle_focused() {
local name
name="$(focused_monitor_name)"
[ -z "$name" ] && { notify "No focused monitor" ""; exit 2; }
hypr dispatch dpms toggle "$name" >/dev/null
notify "DPMS toggle" "$name"
}
status() {
echo "Enabled monitors:"
enabled_monitor_names | sed 's/^/ - /'
echo
echo "Focused: $(focused_monitor_name || true)"
echo "Active monitors:"
active_monitors | sed 's/^/ - /'
}
case "${1:-}" in
laptop) profile_laptop ;;
dual) profile_dual ;;
triple) profile_triple ;;
toggle-externals) toggle_externals ;;
dpms-toggle-focused) dpms_toggle_focused ;;
kick-externals) dock_settle; kick_externals; notify "Kicked externals (DPMS)" "" ;;
status) status ;;
laptop) profile_laptop ;;
dual) profile_dual ;;
triple) profile_triple ;;
toggle) toggle ;;
status) status ;;
*)
cat <<EOF
Usage:
$(basename "$0") laptop # eDP-2 only (disable enabled externals)
$(basename "$0") dual # eDP-2 + preferred external
$(basename "$0") triple # eDP-2 + both externals
$(basename "$0") toggle-externals # laptop-only <-> (dual/triple)
$(basename "$0") dpms-toggle-focused # blank/unblank focused output (layout unchanged)
$(basename "$0") kick-externals # DPMS off/on for enabled externals
$(basename "$0") status # print enabled + focused
EOF
exit 2
echo "Usage: $(basename "$0") laptop|dual|triple|toggle|status"
exit 1
;;
esac
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/env bash
#!/usr/bin/env bash
# CLI options
DMENU_CMD=""
@@ -31,7 +31,7 @@ else
elif [[ $line =~ ^[[:space:]]*description:[[:space:]]*(.*)$ ]]; then
DESC="${BASH_REMATCH[1]}"
elif [[ $line =~ ^[[:space:]]*transform:[[:space:]]*([0-9]+)$ ]]; then
TFORM="${BASHREMATCH[1]}"
TFORM="${BASH_REMATCH[1]}"
elif [[ $line =~ ^[[:space:]]*focused:[[:space:]]*yes$ ]]; then
FOC=1
elif [[ -z $line ]]; then
View File