feat: add startup reminder notification and dark theme preference;

feat: implement privacy window tagging and screensharing protection rules;
feat: add cursor zoom keybinds and swapnext window keybinds;
feat: add keybinds for locking with sleep and shutdown;
refactor: change monitor swap keybind to focus monitor and adjust toggle mirror script;
chore: comment out hyprfocus and easymotion plugins;
feat: add random wallpaper mode for both monitors;
refactor: rewrite toggle mirror display script for mirror and normal modes
This commit is contained in:
2025-11-06 00:27:36 +03:00
parent ab1d58aed3
commit 070e44a5e0
4 changed files with 152 additions and 85 deletions

View File

@@ -24,6 +24,9 @@ $privateBrowser = env GTK_THEME=Adwaita:light zen-browser --private-window
### AUTOSTART ### ### AUTOSTART ###
################# #################
exec = sh -c '[[ $(cat "$HOME/.config/waybar/goal.txt") != "." ]] && swaync-client -C && notify-send -u critical -i "$HOME/Pictures/Fetch/atheism_paint.png" "Reminder" "$(cat $HOME/.config/waybar/goal.txt)"'
exec-once = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
# Autostart necessary processes (like notifications daemons, status bars, etc.) # Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this: # Or execute your favorite apps at launch like this:
@@ -60,6 +63,7 @@ exec-once = [workspace 8 silent] Telegram
env = XCURSOR_SIZE,24 env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24
# env = QT_QPA_PLATFORMTHEME,qt6ct
################### ###################
### PERMISSIONS ### ### PERMISSIONS ###
@@ -392,7 +396,7 @@ bind = $mainMod SHIFT, minus, movetoworkspacesilent, 11
bind = $mainMod SHIFT, equal, movetoworkspacesilent, 12 bind = $mainMod SHIFT, equal, movetoworkspacesilent, 12
# Cycle monitors # Cycle monitors
bind = $mainMod SHIFT, U, swapactiveworkspaces, eDP-1 HDMI-A-1 # bind = $mainMod SHIFT, U, swapactiveworkspaces, eDP-1 HDMI-A-1
bind = $mainMod, O, focusmonitor, +1 bind = $mainMod, O, focusmonitor, +1
# Example special workspace (scratchpad) # Example special workspace (scratchpad)
@@ -408,18 +412,16 @@ bind = $mainMod SHIFT, bracketright, workspace, m+1
bind = $mainMod, grave, togglespecialworkspace, dungeon bind = $mainMod, grave, togglespecialworkspace, dungeon
bind = $mainMod SHIFT, grave, movetoworkspace, special:dungeon bind = $mainMod SHIFT, grave, movetoworkspace, special:dungeon
# Cringy mouse movement
binde = $mainMod ALT, up, exec, ~/.config/hypr/scripts/weirdmouse.sh up
binde = $mainMod ALT, down, exec, ~/.config/hypr/scripts/weirdmouse.sh down
binde = $mainMod ALT, left, exec, ~/.config/hypr/scripts/weirdmouse.sh left
binde = $mainMod ALT, right, exec, ~/.config/hypr/scripts/weirdmouse.sh right
# Move/resize windows with mainMod + LMB/RMB and dragging # Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:272, movewindow
#bindm = SUPER, Shift_L, swapwindow #bindm = SUPER, Shift_L, swapwindow
bindm = $mainMod, mouse:273, resizewindow bindm = $mainMod, mouse:273, resizewindow
bindm = SUPER, ALT_L, resizewindow bindm = SUPER, ALT_L, resizewindow
# Zoom
binde = $mainMod CTRL, equal, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')
binde = $mainMod CTRL, minus, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')
# Move windows with keyboard # Move windows with keyboard
bind = $mainMod SHIFT, h, swapwindow, l bind = $mainMod SHIFT, h, swapwindow, l
bind = $mainMod SHIFT, l, swapwindow, r bind = $mainMod SHIFT, l, swapwindow, r
@@ -430,10 +432,13 @@ bind = $mainMod SHIFT, k, swapwindow, u
bind = $mainMod, C, cyclenext bind = $mainMod, C, cyclenext
bind = $mainMod SHIFT, C, cyclenext, prev bind = $mainMod SHIFT, C, cyclenext, prev
bind = $mainMod, R, swapnext
bind = $mainMod SHIFT, R, swapnext, prev
# Go to previous window and back # Go to previous window and back
bind = ALT, TAB, focuscurrentorlast bind = ALT, TAB, focuscurrentorlast
bind = $mainMod, I, focusurgentorlast bind = $mainMod, I, focusurgentorlast
bind = $mainMod, Tab, workspace, previous bindp = $mainMod, Tab, workspace, previous
# Resize windows in different directions via keyboard # Resize windows in different directions via keyboard
binde = $mainMod ALT, h, resizeactive, -60 0 binde = $mainMod ALT, h, resizeactive, -60 0
@@ -480,6 +485,8 @@ bindl = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindl = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle bindl = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
bindl = $mainMod, XF86MonBrightnessUp, exec, brightnessctl set 60%
bindl = $mainMod, XF86MonBrightnessDown, exec, brightnessctl set 0
# Requires playerctl # Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next bindl = , XF86AudioNext, exec, playerctl next
@@ -524,8 +531,17 @@ bind = $mainMod SHIFT, F, tagwindow, zawarudo
# Lock screen # Lock screen
bind = $mainMod, Backspace, exec, hyprlock bind = $mainMod, Backspace, exec, hyprlock
# Lock screen and sleep
bind = $mainMod ALT, Backspace, exec, systemctl suspend
# Shutdown
bind = $mainMod SHIFT, Backspace, exec, shutdown now bind = $mainMod SHIFT, Backspace, exec, shutdown now
# Toggle privacy for window
bind = $mainMod SHIFT, U, tagwindow, privacy
# Toggle privacy expose for window
bind = $mainMod SHIFT, I, tagwindow, privacyexpose
# Discord PTT # Discord PTT
bindr = , F8, sendshortcut, CTRL SHIFT, F8, class:^(vesktop)$ bindr = , F8, sendshortcut, CTRL SHIFT, F8, class:^(vesktop)$
@@ -540,9 +556,12 @@ bindrn = CTRL, Space, sendshortcut, , F6, class:^(zen)$
# OBS # OBS
bindrn = $mainMod CTRL, bracketleft, pass, class:^(com.obsproject.Studio)$ bindrn = $mainMod CTRL, bracketleft, pass, class:^(com.obsproject.Studio)$
bindrn = $mainMod CTRL, bracketright, pass, class:^(com.obsproject.Studio)$ bindrn = $mainMod CTRL, bracketright, pass, class:^(com.obsproject.Studio)$
bindrn = $mainMod CTRL, apostrophe, pass, class:^(com.obsproject.Studio)$
bind = , XF86PowerOff, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 35% & ristretto -f ~/Templates/Images/theorist.jpg & play ~/Templates/Sounds/scream.mp3 bind = , XF86PowerOff, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 35% & ristretto -f ~/Templates/Images/theorist.jpg & play ~/Templates/Sounds/scream.mp3
bind = $mainMod SHIFT, p, exec, .config/hypr/scripts/random_wallpaper.sh random
# Disable binds temporarily # Disable binds temporarily
bind = $mainMod, Escape, submap, clean bind = $mainMod, Escape, submap, clean
submap = clean submap = clean
@@ -579,6 +598,27 @@ windowrule = group override set always,class:^(vesktop)$
windowrule = workspace 8 silent,class:^(Element)$ windowrule = workspace 8 silent,class:^(Element)$
windowrule = group override set always,class:^(Element)$ windowrule = group override set always,class:^(Element)$
# Screensharing protection
windowrule = tag +privacy,class:^(org.telegram.desktop)$
windowrule = tag +privacy,class:^(Element)$
windowrule = tag +privacy,class:^(vesktop)$
windowrule = tag +privacy,class:^(com.github.hluk.copyq)$
windowrule = tag +privacy,class:^(org.keepassxc.KeePassXC)$
windowrule = tag +privacy,class:^(com.nextcloud.desktopclient.nextcloud)$
windowrule = tag +privacy,title:^(diary)$
windowrule = tag +privacy,class:thunar,title:.*(Downloads|Telegram Desktop).*
windowrule = tag +privacy,class:^(Mullvad VPN)$
windowrule = tag +privacy,class:^(Tor Browser)$
windowrule = tag +privacy,class:^(com.obsproject.Studio)$
# These aren't added in my version yet
# layerrule = noscreenshare, swaync-control-center
# layerrule = noscreenshare, swaync-notification-window
windowrule = noscreenshare, tag:privacy
windowrule = bordercolor rgba(cc00ffff) rgba(630063ff) 90deg,tag:privacy
windowrule = noscreenshare 0, tag:privacyexpose
windowrule = bordercolor rgba(ff0000ff) rgba(ff0000ff) 90deg,tag:privacyexpose
windowrule = dimaround, tag:privacyexpose
# Nextcloud # Nextcloud
windowrule = float,animation slide top,resize 800 600,move center,class:^(com.nextcloud.desktopclient.nextcloud)$ windowrule = float,animation slide top,resize 800 600,move center,class:^(com.nextcloud.desktopclient.nextcloud)$
@@ -601,19 +641,23 @@ windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned
# Animation for rofi # Animation for rofi
layerrule = ignorezero, rofi layerrule = ignorezero, rofi
layerrule = dimaround, rofi
layerrule = blur, rofi layerrule = blur, rofi
layerrule = animation slide bottom, rofi layerrule = animation slide bottom, rofi
# Animation fpr swaync # Animation fpr swaync
layerrule = blur, swaync-control-center layerrule = blur, swaync-control-center
layerrule = blur, swaync-notification-window
layerrule = abovelock, swaync-notification-window
layerrule = dimaround, swaync-control-center
layerrule = ignorezero, swaync-control-center layerrule = ignorezero, swaync-control-center
layerrule = ignorezero, swaync-notification-window
layerrule = animation slideIn right, swaync-control-center layerrule = animation slideIn right, swaync-control-center
# Waybar blur # Waybar blur
layerrule = ignorezero, waybar layerrule = ignorezero, waybar
layerrule = blur, waybar layerrule = blur, waybar
layerrule = ignorealpha 0.6, waybar layerrule = ignorealpha 0.6, waybar
# Adjustments for certain workspaces # Adjustments for certain workspaces
workspace = special:magic, gapsin:20, gapsout:50, shadow:false workspace = special:magic, gapsin:20, gapsout:50, shadow:false
workspace = 9, gapsin:15, gapsout:40 workspace = 9, gapsin:15, gapsout:40
@@ -623,73 +667,73 @@ workspace = 9, gapsin:15, gapsout:40
############### ###############
exec-once = hyprpm reload -n exec-once = hyprpm reload -n
# Easymotion # # Easymotion
bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{} # bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{}
# Close unfocused # Close unfocused
bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused # bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused
plugin { # plugin {
#
hyprfocus { # hyprfocus {
animation = hyprfocusIn, 1, 3, quick # animation = hyprfocusIn, 1, 3, quick
animation = hyprfocusOut, 1, 3, quick # animation = hyprfocusOut, 1, 3, quick
fade_opacity = 0.94 # fade_opacity = 0.94
mode = flash # mode = flash
} # }
#
easymotion { # easymotion {
#font size of the text # #font size of the text
textsize=72 # textsize=72
#
#color of the text, takes standard hyprland color format # #color of the text, takes standard hyprland color format
textcolor=rgba(ffffffff) # textcolor=rgba(ffffffff)
#
#background color of the label box. alpha is respected # #background color of the label box. alpha is respected
bgcolor=rgba(ff7777a0) # bgcolor=rgba(ff7777a0)
#
#enable blur. The bgcolor alpha must be at least semi-transparent. # #enable blur. The bgcolor alpha must be at least semi-transparent.
blur=0 # blur=0
#
#Set blur alpha value. Blur must be enabled (float value) # #Set blur alpha value. Blur must be enabled (float value)
blurA=1.0 # blurA=1.0
#
#Set xray. Blur must be enabled # #Set xray. Blur must be enabled
xray=0 # xray=0
#
#font to use for the label. This is passed directly to the pango font description # #font to use for the label. This is passed directly to the pango font description
textfont=Iosevka Nerd Font Mono # textfont=Iosevka Nerd Font Mono
#
#padding around the text (inside the label box) size in pixels, adjusted for # #padding around the text (inside the label box) size in pixels, adjusted for
#monitor scaling. This is the same format as hyprland's gapsin/gapsout workspace layout rule # #monitor scaling. This is the same format as hyprland's gapsin/gapsout workspace layout rule
#example: textpadding=2 5 5 2 (spaces not commas) # #example: textpadding=2 5 5 2 (spaces not commas)
textpadding=5 # textpadding=5
#
#size of the border around the label box. A border size of zero disables border rendering. # #size of the border around the label box. A border size of zero disables border rendering.
bordersize=2 # bordersize=2
#
#color of the border. takes the same format as hyprland's border (so it can be a gradient) # #color of the border. takes the same format as hyprland's border (so it can be a gradient)
bordercolor=rgba(ffffffff) # bordercolor=rgba(ffffffff)
#
#rounded corners? Same as hyprland's 'decoration:rounding' config # #rounded corners? Same as hyprland's 'decoration:rounding' config
rounding=1 # rounding=1
#
#what to do if a window is fullscreen # #what to do if a window is fullscreen
#none: nothing. (easymotion label won't be displayed on that window) # #none: nothing. (easymotion label won't be displayed on that window)
#toggle: take the window out of fullscreen entirely. # #toggle: take the window out of fullscreen entirely.
#maximize: convert the window to maximized. # #maximize: convert the window to maximized.
#windows are restored to fullscreen after easymotion is exited/selected # #windows are restored to fullscreen after easymotion is exited/selected
fullscreen_action=none # fullscreen_action=none
#
#which keys to use for selecting windows # #which keys to use for selecting windows
motionkeys=abcdefghijklmnopqrstuvwxyZ1234567890 # motionkeys=abcdefghijklmnopqrstuvwxyZ1234567890
#which keys to use for labeling windows # #which keys to use for labeling windows
motionlabels=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 # motionlabels=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
#
#if a monitor has a focused special workspace, only put easymotion labels on the windows in the special workspace # #if a monitor has a focused special workspace, only put easymotion labels on the windows in the special workspace
only_special = true # only_special = true
} # }
} # }
debug { debug {
disable_logs = false disable_logs = false

View File

@@ -1,4 +1,4 @@
monitor=eDP-1, 1920x1080, 0x0, 1 monitor=eDP-1, 1920x1080, 0x0, 1
monitor=HDMI-A-1, 1920x1080, -1920x-100, 1 monitor=HDMI-A-1, 1920x1080, -1920x-100, 1
# monitor=HDMI-A-1, disable
# monitor=HDMI-A-1, 1920x1080, -1920x-100, 1, mirror, eDP-1 # monitor=HDMI-A-1, 1920x1080, -1920x-100, 1, mirror, eDP-1

View File

@@ -39,4 +39,14 @@ loop() {
done done
} }
if [[ $1 = "random" ]]; then
random_wallpaper "eDP-1" &
sleep 1
random_wallpaper "HDMI-A-1" &
exit 0
elif [[ -z $1 ]]; then
loop loop
else
echo "Error: unknown command '$1'"
exit 1
fi

View File

@@ -3,20 +3,33 @@
# Define the file to modify # Define the file to modify
FILE="$HOME/.config/hypr/monitors.conf" FILE="$HOME/.config/hypr/monitors.conf"
# Get the last line of the file DELAY="0.5"
LAST_LINE=$(tail -n 1 "$FILE")
# Check if the first argument is "g" # Get specific lines from the file
LINE_DISABLE=$(sed -n '3p' "$FILE") # 3rd line: disable HDMI
LINE_MIRROR=$(sed -n '4p' "$FILE") # 4th line: mirror configuration
# Check if the first argument is "g" (get status)
if [ "$1" = "g" ]; then if [ "$1" = "g" ]; then
[[ $LAST_LINE == \#* ]] && echo false || echo true [[ $LINE_MIRROR == \#* ]] && echo false || echo true
exit 0 exit 0
fi fi
# Check if the last line is commented # Check if mirror mode is currently active (last line is NOT commented)
if [[ $LAST_LINE == \#* ]]; then if [[ $LINE_MIRROR != \#* ]]; then
# Uncomment the last line # Switching FROM mirror mode TO normal mode
sed -i '$s/^# //' "$FILE" # Comment the mirror line (disable mirror)
sed -i '4s/^/# /' "$FILE"
# Uncomment the disable line (temporarily disable HDMI)
sed -i '3s/^# //' "$FILE"
sleep $DELAY
sed -i '3s/^/# /' "$FILE"
else else
# Comment the last line sed -i '3s/^# //' "$FILE"
sed -i '$s/^/# /' "$FILE" # Switching TO mirror mode FROM normal mode
# Uncomment the mirror line (enable mirror)
sed -i '4s/^# //' "$FILE"
sleep $DELAY
# Comment the disable line (don't need explicit disable when using mirror)
sed -i '3s/^/# /' "$FILE"
fi fi