# vim:ft=swayconfig

# start terminal
bindsym $mod+Return exec $term

# start neovide
bindsym $mod+n exec neovide

# kill focused window
bindsym $mod+w kill

# Modes for controlling gaps
set $mode_gaps Gaps: (o) outer, (i) inner
set $mode_gaps_outer Outer Gaps: j|k|0|r|i
set $mode_gaps_inner Inner Gaps: j|k|0|r|o
bindsym $mod+g mode "$mode_gaps"

mode "$mode_gaps" {
        bindsym o      mode "$mode_gaps_outer"
        bindsym i      mode "$mode_gaps_inner"
        bindsym Escape mode "default"
}

mode "$mode_gaps_inner" {
        bindsym j gaps inner all minus 1
        bindsym k gaps inner all plus 1
        bindsym 0 gaps inner all set 0
		bindsym r gaps inner all set 10
        bindsym o      mode "$mode_gaps_outer"
        bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
        bindsym j gaps outer all minus 1
        bindsym k gaps outer all plus 1
        bindsym 0 gaps outer all set 0
		bindsym r gaps outer all set 10
        bindsym i      mode "$mode_gaps_inner"
        bindsym Escape mode "default"
}

# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal

# reload the configuration file
bindsym $mod+Shift+r reload

# open link from clipboard in default application
bindsym $mod+Shift+o exec mimeo $(wl-paste)

# turn on and off internal screen
bindsym --locked XF86Search output eDP-1 toggle

# exit menu
bindsym $mod+Shift+e exec $term --app-id fzf-launcher --login-shell /bin/sh -c "$scripts/exit.sh"

# launch a program
bindsym $mod+d exec rofi -show drun
bindsym $mod+Shift+d exec rofi -show run

# manage clipboard
bindsym $mod+c exec clipman pick -t wofi

# manage notifications
bindsym $mod+Backspace exec makoctl invoke
bindsym Control+Escape exec makoctl dismiss

# activate lockscreen
bindsym Control+Shift+Backspace exec loginctl lock-session $(loginctl show-user $USER -p Sessions | cut -d'=' -f2)

# Move your focus around
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# Move focused window
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

# Split direction
bindsym $mod+y splith
bindsym $mod+x splitv

# Switch the current container between different layout styles
bindsym $mod+s layout stacking
bindsym $mod+e layout tabbed
bindsym $mod+t layout toggle split

# Make the current focus fullscreen
bindsym $mod+f fullscreen

# Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle

# Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle

# move focus to the parent container
bindsym $mod+a focus parent

# Move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad

# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show

mode "resize" {
    # left will shrink the containers width
    # right will grow the containers width
    # up will shrink the containers height
    # down will grow the containers height
    bindsym h resize grow width 10px
    bindsym j resize shrink height 10px
    bindsym k resize grow height 10px
    bindsym l resize shrink width 10px

    # ditto, with arrow keys
    bindsym Left resize grow width 10px
    bindsym Down resize shrink height 10px
    bindsym Up resize grow height 10px
    bindsym Right resize shrink width 10px

    # return to default mode
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"

# start browser
bindsym $mod+b exec $browser

# media keys
bindsym --locked XF86AudioRaiseVolume exec pamixer -ui 1 && pamixer --get-volume > $SWAYSOCK.wob
bindsym --locked XF86AudioLowerVolume exec pamixer -ud 1 && pamixer --get-volume > $SWAYSOCK.wob
bindsym --locked XF86AudioMute exec pamixer --toggle-mute && ( pamixer --get-mute && echo 0 > $SWAYSOCK.wob ) || pamixer --get-volume > $SWAYSOCK.wob
bindsym --locked XF86AudioNext exec playerctl next
bindsym --locked XF86AudioPrev exec playerctl previous
bindsym --locked XF86AudioPlay exec playerctl play-pause
bindsym --locked XF86AudioStop exec playerctl stop
bindsym --locked Ctrl+Alt+s exec playerctl stop

# rotate screen
bindsym $mod+Control+Right output eDP-1 transform 90
bindsym $mod+Control+Up output eDP-1 transform 0
bindsym $mod+Control+Down output eDP-1 transform 180
bindsym $mod+Control+Left output eDP-1 transform 270
bindsym $mod+Control+h output eDP-1 transform 270
bindsym $mod+Control+j output eDP-1 transform 180
bindsym $mod+Control+l output eDP-1 transform 90
bindsym $mod+Control+k output eDP-1 transform 0

# display brightness
bindsym --locked XF86MonBrightnessUp exec light -A 5 && light -G | cut -d'.' -f1 > $SWAYSOCK.wob
bindsym --locked XF86MonBrightnessDown exec light -U 5 && light -G | cut -d'.' -f1 > $SWAYSOCK.wob

# Some built-in keyboard keys
bindsym XF86Mail workspace 4
bindsym XF86Messenger workspace 3
bindsym XF86Calculator exec alacritty -e calc

# Switch to urgent workspace
bindsym $mod+u [urgent=latest] focus

# Switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10

# Move container to workspace
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10

# Move workspace to monitor in direction
bindsym Control+Shift+h move workspace to output left
bindsym Control+Shift+j move workspace to output down
bindsym Control+Shift+k move workspace to output up
bindsym Control+Shift+l move workspace to output right
bindsym Control+Shift+Left move workspace to output left
bindsym Control+Shift+Down move workspace to output down
bindsym Control+Shift+Up move workspace to output up
bindsym Control+Shift+Right move workspace to output right

# Take a screenshot to clipboard
bindsym Print exec grim -g "$(slurp -d)" - | wl-copy -t image/png

# Copy qr code to clipboard
bindsym Shift+Print exec grim -g "$(slurp -d)" - | zbarimg -q --raw PNG:- | wl-copy


# make Alt+hjkl emulate arrow keys
bindsym Alt+h exec ydotool key left
bindsym Alt+j exec ydotool key down
bindsym Alt+k exec ydotool key up
bindsym Alt+l exec ydotool key right

# Mumble push to talk
 bindsym --no-repeat F12 exec gdbus call -e -d net.sourceforge.mumble.mumble -o / -m net.sourceforge.mumble.Mumble.startTalk
 bindsym --release F12 exec gdbus call -e -d net.sourceforge.mumble.mumble -o / -m net.sourceforge.mumble.Mumble.stopTalk
