# Set programs that you use
$terminal = FONTCONFIG_FILE=/home/sudacode/.config/ghostty/ghostty-fonts.conf uwsm app -sa -- ghostty
$fileManager = uwsm app -sa -- thunar
# $menu = rofi -show drun
# https://github.com/Vladimir-csp/uwsm#2-service-startup-notification-and-vars-set-by-compositor
# $menu = rofi -show drun -run-command "uwsm app -- {cmd}"
$menu = $HOME/.config/rofi/launchers/type-6/launcher.sh 1
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = ALT # Sets "Windows" key as main modifier


# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = SUPER, SUPER_L, exec, $HOME/.config/rofi/launchers/type-2/launcher.sh 10
bind = $mainMod, RETURN, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod SHIFT, M, exec, uwsm stop
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, d, exec, $menu
# bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod SHIFT, p, exec, "$HOME/.local/bin/hyprland-pin.sh"
# bind = $mainMod, t, togglesplit, # dwindle
bind = $mainMod, f, fullscreen,
bind = $mainMod, i, swapnext

# Move focus with mainMod + arrow keys
bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r
bind = $mainMod, k, movefocus, u
bind = $mainMod, j, movefocus, d

bind = $mainMod SHIFT, j, movewindow, d
bind = $mainMod SHIFT, k, movewindow, u
bind = $mainMod SHIFT, h, movewindow, l
bind = $mainMod SHIFT, l, movewindow, r
bind = $mainMod+SHIFT, c, centerwindow


# Move focus to next monitor
bind = CTRL+ALT, j, focusmonitor, r
bind = CTRL+ALT, k, focusmonitor, l

# 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 = SUPER, S, togglespecialworkspace, magic
bind = CTRL 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 = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
bindel = ,F12, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,F11, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,F10, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle

# Requires playerctl
bindl = , XF86AudioNext, exec, mpc next
bindl = , XF86AudioPause, exec, mpc toggle
bindl = , XF86AudioPlay, exec, mpc toggle
bindl = , XF86AudioPrev, exec, mpc prev
bindl = , F9, exec, playerctl next
bindl = , F8, exec, playerctl play-pause
bindl = , F7, exec, playerctl previous
# bindl = , XF86AudioStop, exec, mpc stop

# rofi
bind = $mainMod SHIFT, v, exec, uwsm app -sb -- rofi-rbw
# bind = $mainMod, w, exec, rofi -show window -theme $HOME/.config/rofi/launchers/type-2/style-2.rasi -dpi 96  -theme-str 'window {width: 35%;}'
bind = $mainMod SHIFT, w, exec, "$HOME/.config/rofi/scripts/rofi-wallpaper.sh"
bind = $mainMod SHIFT, d, exec, "$HOME/.config/rofi/scripts/rofi-docs.sh"
bind = SUPER SHIFT, j, exec, "$HOME/.config/rofi/scripts/rofi-jellyfin-dir.sh"
bind = SUPER, t, exec, "$HOME/.config/rofi/scripts/rofi-launch-texthooker-steam.sh"
bind = $mainMod SHIFT, t, exec, "$HOME/projects/scripts/popup-ai-translator.py"
bind = SUPER SHIFT, g, exec, "$HOME/.config/rofi/scripts/rofi-vn-helper.sh"

# ncmcppp
bind = $mainMod, n, exec, uwsm app -sb -- ghostty --command=/usr/bin/ncmpcpp

# notifications
bind = $mainMod SHIFT, n, exec, swaync-client -t

# mpv add
bind = SUPER, m, exec, ~/.local/bin/mpv-add.sh

bind = SUPER SHIFT, s, exec, slurp | grim -g - - | wl-copy
bind = ,code:107, exec, ~/.local/bin/screenshot
bind = SHIFT ,code:107, exec, ~/.local/bin/screenshot-active-window.sh
bind = SUPER,code:107, exec, ~/.local/bin/screenshot-active-window.sh -s
bind = SUPER, o, exec, ~/.local/bin/ocr.sh
bind = $mainMod, o, exec, ~/.local/bin/rofi-open tab
# bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open window

# change wallpaper
bind = $mainMod CTRL, n, exec, ~/.local/bin/change-wallpaper

# toggle focus between current and last focused window
bind = ALT, Tab, focuscurrentorlast

bind = CTRL, F9, pass, class:^(com\.obsproject\.Studio)$
bind = CTRL, F10, pass, class:^(com\.obsproject\.Studio)$

bind = CTRL SHIFT, D, exec, ~/.local/bin/dragon
bind = CTRL ALT, F, exec, ~/.local/bin/favorite-wallpaper

bind = $mainMod, z, exec, uwsm app -sb -- zen-browser

bind = $mainMod SHIFT, s, exec , rofi -show ssh -theme "$HOME/.config/rofi/launchers/type-2/style-2.rasi" -terminal -theme-str 'window{width: 25%;} listview {columns: 1; lines: 10;}' ghostty -ssh-command "ghostty --initial-command='TERM=kitty ssh {host}'"

# reload monitors
bind = CTRL $mainMod SHIFT, R, exec, hyprctl dispatch dpms off && sleep 1 && hyprctl dispatch dpms on

# Disable keybinds with one master keybind
# https://wiki.hypr.land/0.49.0/Configuring/Uncommon-tips--tricks/#disabling-keybinds-with-one-master-keybind
# PAGE DOWN
bind = $mainMod, code:117, submap, clean
submap = clean
# PAGE UP
bind = $mainMod, code:112, submap, reset
submap = reset

bind = SUPER, l, exec, hyprlock

# ANKI
bind = $mainMod, a, exec, ~/.config/rofi/scripts/rofi-anki-script.sh
# bind = $mainMod SHIFT, a, exec, ~/projects/scripts/screenshot-anki.sh -cdMinecraft

# GSM
bindl = , mouse:275, exec, xdotool key alt+w # top mouse to texthooker
bindl = , mouse:276, exec, xdotool key alt+grave # bottom mouse to overlay
bind = ALT, g, exec, /opt/mpv-yomitan/mpv-yomitan.AppImage --toggle

# F5
# bind = ,code:71, exec, ~/projects/scripts/whisper_record_transcribe.py --mode toggle --output type
bind = ,code:71, exec, uv run --directory ~/projects/scripts/faster-whisper-transcribe faster-whisper-transcribe --backend ctranslate2 --device cpu --mode toggle --output type

# SubMiner
bind = ALT SHIFT, O, pass, class:^(SubMiner)$
bind = ALT SHIFT, I, pass, class:^(SubMiner)$
bind = ALT SHIFT, C, pass, class:^(SubMiner)$

# {{{ scrolling
bind = $mainMod, comma, layoutmsg, swapcol l
bind = $mainMod, period, layoutmsg, fit all
bind = $mainMod, slash, layoutmsg, fit active
# }}}
