diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf index 3fe0cb3..c177a27 100644 --- a/hypr/hyprland.conf +++ b/hypr/hyprland.conf @@ -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 diff --git a/hypr/monitors.conf b/hypr/monitors.conf index da082a9..ea6a8a4 100644 --- a/hypr/monitors.conf +++ b/hypr/monitors.conf @@ -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 diff --git a/hypr/scripts/random_wallpaper.sh b/hypr/scripts/random_wallpaper.sh index 4b71636..068fcd5 100755 --- a/hypr/scripts/random_wallpaper.sh +++ b/hypr/scripts/random_wallpaper.sh @@ -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 diff --git a/hypr/scripts/toggle_mirror_display.sh b/hypr/scripts/toggle_mirror_display.sh index f32de6f..5f4d0b4 100755 --- a/hypr/scripts/toggle_mirror_display.sh +++ b/hypr/scripts/toggle_mirror_display.sh @@ -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