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 ###
#################
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.)
# Or execute your favorite apps at launch like this:
@@ -60,6 +63,7 @@ exec-once = [workspace 8 silent] Telegram
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
# env = QT_QPA_PLATFORMTHEME,qt6ct
###################
### PERMISSIONS ###
@@ -392,7 +396,7 @@ bind = $mainMod SHIFT, minus, movetoworkspacesilent, 11
bind = $mainMod SHIFT, equal, movetoworkspacesilent, 12
# 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
# Example special workspace (scratchpad)
@@ -408,18 +412,16 @@ bind = $mainMod SHIFT, bracketright, workspace, m+1
bind = $mainMod, grave, togglespecialworkspace, 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
bindm = $mainMod, mouse:272, movewindow
#bindm = SUPER, Shift_L, swapwindow
bindm = $mainMod, mouse:273, 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
bind = $mainMod SHIFT, h, swapwindow, l
bind = $mainMod SHIFT, l, swapwindow, r
@@ -430,10 +432,13 @@ bind = $mainMod SHIFT, k, swapwindow, u
bind = $mainMod, C, cyclenext
bind = $mainMod SHIFT, C, cyclenext, prev
bind = $mainMod, R, swapnext
bind = $mainMod SHIFT, R, swapnext, prev
# Go to previous window and back
bind = ALT, TAB, focuscurrentorlast
bind = $mainMod, I, focusurgentorlast
bind = $mainMod, Tab, workspace, previous
bindp = $mainMod, Tab, workspace, previous
# Resize windows in different directions via keyboard
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
bindel = ,XF86MonBrightnessUp, 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
bindl = , XF86AudioNext, exec, playerctl next
@@ -524,8 +531,17 @@ bind = $mainMod SHIFT, F, tagwindow, zawarudo
# Lock screen
bind = $mainMod, Backspace, exec, hyprlock
# Lock screen and sleep
bind = $mainMod ALT, Backspace, exec, systemctl suspend
# Shutdown
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
bindr = , F8, sendshortcut, CTRL SHIFT, F8, class:^(vesktop)$
@@ -540,9 +556,12 @@ bindrn = CTRL, Space, sendshortcut, , F6, class:^(zen)$
# OBS
bindrn = $mainMod CTRL, bracketleft, 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 = $mainMod SHIFT, p, exec, .config/hypr/scripts/random_wallpaper.sh random
# Disable binds temporarily
bind = $mainMod, Escape, submap, clean
submap = clean
@@ -579,6 +598,27 @@ windowrule = group override set always,class:^(vesktop)$
windowrule = workspace 8 silent,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
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
layerrule = ignorezero, rofi
layerrule = dimaround, rofi
layerrule = blur, rofi
layerrule = animation slide bottom, rofi
# Animation fpr swaync
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-notification-window
layerrule = animation slideIn right, swaync-control-center
# Waybar blur
layerrule = ignorezero, waybar
layerrule = blur, waybar
layerrule = ignorealpha 0.6, waybar
# Adjustments for certain workspaces
workspace = special:magic, gapsin:20, gapsout:50, shadow:false
workspace = 9, gapsin:15, gapsout:40
@@ -623,73 +667,73 @@ workspace = 9, gapsin:15, gapsout:40
###############
exec-once = hyprpm reload -n
# Easymotion
bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{}
# # Easymotion
# bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{}
# Close unfocused
bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused
# bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused
plugin {
hyprfocus {
animation = hyprfocusIn, 1, 3, quick
animation = hyprfocusOut, 1, 3, quick
fade_opacity = 0.94
mode = flash
}
easymotion {
#font size of the text
textsize=72
#color of the text, takes standard hyprland color format
textcolor=rgba(ffffffff)
#background color of the label box. alpha is respected
bgcolor=rgba(ff7777a0)
#enable blur. The bgcolor alpha must be at least semi-transparent.
blur=0
#Set blur alpha value. Blur must be enabled (float value)
blurA=1.0
#Set xray. Blur must be enabled
xray=0
#font to use for the label. This is passed directly to the pango font description
textfont=Iosevka Nerd Font Mono
#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
#example: textpadding=2 5 5 2 (spaces not commas)
textpadding=5
#size of the border around the label box. A border size of zero disables border rendering.
bordersize=2
#color of the border. takes the same format as hyprland's border (so it can be a gradient)
bordercolor=rgba(ffffffff)
#rounded corners? Same as hyprland's 'decoration:rounding' config
rounding=1
#what to do if a window is fullscreen
#none: nothing. (easymotion label won't be displayed on that window)
#toggle: take the window out of fullscreen entirely.
#maximize: convert the window to maximized.
#windows are restored to fullscreen after easymotion is exited/selected
fullscreen_action=none
#which keys to use for selecting windows
motionkeys=abcdefghijklmnopqrstuvwxyZ1234567890
#which keys to use for labeling windows
motionlabels=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
#if a monitor has a focused special workspace, only put easymotion labels on the windows in the special workspace
only_special = true
}
}
# plugin {
#
# hyprfocus {
# animation = hyprfocusIn, 1, 3, quick
# animation = hyprfocusOut, 1, 3, quick
# fade_opacity = 0.94
# mode = flash
# }
#
# easymotion {
# #font size of the text
# textsize=72
#
# #color of the text, takes standard hyprland color format
# textcolor=rgba(ffffffff)
#
# #background color of the label box. alpha is respected
# bgcolor=rgba(ff7777a0)
#
# #enable blur. The bgcolor alpha must be at least semi-transparent.
# blur=0
#
# #Set blur alpha value. Blur must be enabled (float value)
# blurA=1.0
#
# #Set xray. Blur must be enabled
# xray=0
#
# #font to use for the label. This is passed directly to the pango font description
# textfont=Iosevka Nerd Font Mono
#
# #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
# #example: textpadding=2 5 5 2 (spaces not commas)
# textpadding=5
#
# #size of the border around the label box. A border size of zero disables border rendering.
# bordersize=2
#
# #color of the border. takes the same format as hyprland's border (so it can be a gradient)
# bordercolor=rgba(ffffffff)
#
# #rounded corners? Same as hyprland's 'decoration:rounding' config
# rounding=1
#
# #what to do if a window is fullscreen
# #none: nothing. (easymotion label won't be displayed on that window)
# #toggle: take the window out of fullscreen entirely.
# #maximize: convert the window to maximized.
# #windows are restored to fullscreen after easymotion is exited/selected
# fullscreen_action=none
#
# #which keys to use for selecting windows
# motionkeys=abcdefghijklmnopqrstuvwxyZ1234567890
# #which keys to use for labeling windows
# motionlabels=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
#
# #if a monitor has a focused special workspace, only put easymotion labels on the windows in the special workspace
# only_special = true
# }
# }
debug {
disable_logs = false

View File

@@ -1,4 +1,4 @@
monitor=eDP-1, 1920x1080, 0x0, 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

View File

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

View File

@@ -3,20 +3,33 @@
# Define the file to modify
FILE="$HOME/.config/hypr/monitors.conf"
# Get the last line of the file
LAST_LINE=$(tail -n 1 "$FILE")
DELAY="0.5"
# 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
[[ $LAST_LINE == \#* ]] && echo false || echo true
[[ $LINE_MIRROR == \#* ]] && echo false || echo true
exit 0
fi
# Check if the last line is commented
if [[ $LAST_LINE == \#* ]]; then
# Uncomment the last line
sed -i '$s/^# //' "$FILE"
# Check if mirror mode is currently active (last line is NOT commented)
if [[ $LINE_MIRROR != \#* ]]; then
# Switching FROM mirror mode TO normal mode
# 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
# Comment the last line
sed -i '$s/^/# /' "$FILE"
sed -i '3s/^# //' "$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