# vim: filetype=i3

# This config file will use environmental variables such as $BROWSER and $TERMINAL.
# You can set these variables in ~/.profile or ~/.bash_profile if you have it as below:
#
# export TERMINAL="st"

# #---Basic Definitions---# #
set $inner_gaps 0
set $outer_gaps 0
set $term --no-startup-id $TERMINAL
set $mod Mod4
set $stoprec --no-startup-id dmenurecord kill
set $shutdown doas_askpass openrc-shutdown -h now
set $reboot doas_askpass openrc-shutdown -r now
set $netrefresh --no-startup-id doas_askpass rc-service NetworkManager restart
set $nettoggle --no startup-id [ $(doas rc-service NetworkManager | awk '{print $3}') != 'stopped' ] && doas rc-service NetworkManager stop || doas rc-service NetworkManager start
set $hibernate loginctl suspend

# #---Gaps---# #
for_window [class="^.*"] border pixel 2
gaps inner $inner_gaps
gaps outer $outer_gaps

# #---Dropdown Windows---# #
# General dropdown window traits. The order can matter.
for_window [instance="dropdown_*"] floating enable
for_window [instance="dropdown_*"] move scratchpad
for_window [instance="dropdown_*"] sticky enable
for_window [instance="dropdown_*"] scratchpad show
for_window [instance="dropdown_tmuxdd"] resize set 625 450
for_window [instance="dropdown_dropdowncalc"] resize set 800 300
for_window [instance="dropdown_tmuxdd"] border pixel 3
for_window [instance="dropdown_dropdowncalc"] border pixel 2
for_window [instance="dropdown_*"] move position center

bar {
	font pango:mono 10
	status_command i3blocks
	position top
	mode dock
	modifier None
}

# #---Basic Bindings---# #
bindsym $mod+Return 		exec $term
bindsym $mod+Shift+Return	exec --no-startup-id samedir

bindsym $mod+Shift+space 	floating toggle
bindsym $mod+space		focus mode_toggle

bindsym $mod+Escape		workspace prev
bindsym $mod+Shift+Escape	exec --no-startup-id prompt "Exit i3?" "i3 exit"

# bindsym $mod+BackSpace
bindsym $mod+Shift+BackSpace	exec --no-startup-id prompt "Reboot computer?" "$reboot"

##bindsym $mod+asciitilde

#STOP/HIDE EVERYTHING:
bindsym $mod+Shift+Delete	exec --no-startup-id pulsemixer --mute ; exec --no-startup-id mpc pause && pkill -RTMIN+10 i3blocks ; exec --no-startup-id pauseallmpv; workspace 0; exec $term -e htop ; exec $term -e lf

# Show selection:
bindsym $mod+Insert		exec --no-startup-id notify-send "📋 Clipboard contents:" "$(xclip -o -selection clipboard)"
##bindsym $mod+Pause

# #---Letter Key Bindings---# #
bindsym $mod+q			[con_id="__focused__" instance="^(?!dropdown_).*$"] kill
bindsym $mod+Shift+q		[con_id="__focused__" instance="^(?!dropdown_).*$"] exec --no-startup-id kill -9 `xdotool getwindowfocus getwindowpid`

bindsym $mod+w			exec --no-startup-id $BROWSER
bindsym $mod+Shift+w		exec $term -e nmtui
bindsym $mod+Ctrl+w		exec --no-startup-id qutebrowser

bindsym $mod+r			exec --no-startup-id element-desktop
bindsym $mod+Shift+r		exec --no-startup-id dmenuunicode

bindsym $mod+e 			exec $term -e lf
bindsym $mod+Shift+e		exec $term -e ranger

#bindsym $mod+y			exec $term -e calcurse
bindsym $mod+Shift+y		exec --no-startup-id i3resize left

bindsym $mod+u			exec --no-startup-id ddspawn tmuxdd
bindsym $mod+Shift+u		exec --no-startup-id i3resize down

bindsym $mod+i 			exec $term -e btop
bindsym $mod+Shift+i		exec --no-startup-id i3resize up

bindsym $mod+o			sticky toggle
bindsym $mod+Shift+o		exec --no-startup-id i3resize right

bindsym $mod+p			exec --no-startup-id mpc toggle
bindsym $mod+Shift+p		exec --no-startup-id mpc stop

bindsym $mod+a			exec --no-startup-id ddspawn dropdowncalc -f mono:pixelsize=24
bindsym $mod+Shift+a		exec $term -e alsamixer
bindsym $mod+Ctrl+a		exec $term -e pulsemixer

bindsym $mod+s			exec --no-startup-id signal-desktop --use-tray-icon
bindsym $mod+Shift+s		exec --no-startup-id slack

bindsym $mod+d			exec --no-startup-id dmenu_run
bindsym $mod+Shift+d		exec --no-startup-id discord

bindsym $mod+t			exec --no-startup-id thunderbird
bindsym $mod+Shift+t		exec --no-startup-id Telegram

set $freeze Distraction-free mode (super+shift+f to reactivate bindings)
mode "$freeze" { bindsym $mod+Shift+f mode "default"
}

bindsym $mod+f			fullscreen toggle
bindsym $mod+Shift+f		fullscreen global
#bindsym $mod+Shift+f		mode "$freeze" ;; exec --no-startup-id notify-send "Distraction-free mode activated." "Press Super+Shift+f to return."

bindsym $mod+g			workspace prev
bindsym $mod+Shift+g		exec --no-startup-id gimp; workspace $ws5

bindsym $mod+h			focus left
bindsym $mod+Shift+h		move left 30
bindsym $mod+Ctrl+h		move workspace to output left

bindsym $mod+j			focus down
bindsym $mod+Shift+j		move down 30
bindsym $mod+Ctrl+j		move workspace to output down

bindsym $mod+k			focus up
bindsym $mod+Shift+k		move up 30
bindsym $mod+Ctrl+k		move workspace to output up

bindsym $mod+l			focus right
bindsym $mod+Shift+l		move right 30
bindsym $mod+Ctrl+l		move workspace to output right

bindsym $mod+z			gaps outer current plus 5
bindsym $mod+Shift+z		gaps outer current minus 5

bindsym $mod+x			exec --no-startup-id xset dpms force off && mpc pause || pauseallmpv && slock
bindsym $mod+Shift+x		exec --no-startup-id sysact

bindsym $mod+c			exec --no-startup-id vscodium
bindsym $mod+Shift+c		exec --no-startup-id camtoggle

bindsym $mod+v			exec --no-startup-id $term -e $EDITOR -c "VimwikiIndex"
bindsym $mod+Shift+v		split toggle

bindsym $mod+b			bar mode toggle
bindsym $mod+Shift+b		floating toggle; sticky toggle; exec --no-startup-id hover left

bindsym $mod+n			exec $term -e newsboat && pkill -RTMIN+6 i3blocks
bindsym $mod+Shift+n		floating toggle; sticky toggle; exec --no-startup-id hover right

bindsym $mod+m 			exec --no-startup-id mpd-mpris ;; exec --no-startup-id $term -e ncmpcpp
bindsym $mod+Shift+m	exec --no-startup-id jellyfinmediaplayer
bindsym $mod+Ctrl+m		exec --no-startup-id feishin

# #---Workspace Bindings---# #
bindsym $mod+Home		workspace $ws1
bindsym $mod+Shift+Home		move container to workspace $ws1
bindsym $mod+End		workspace $ws10
bindsym $mod+Shift+End		move container to workspace $ws10
bindsym $mod+Prior		workspace prev
bindsym $mod+Shift+Prior	move container to workspace prev
bindsym $mod+Next		workspace next
bindsym $mod+Shift+Next		move container to workspace next
bindsym $mod+Tab		workspace back_and_forth
bindsym $mod+XF86Back		workspace prev
bindsym $mod+Shift+XF86Back	move container to workspace prev
bindsym $mod+XF86Forward	workspace next
bindsym $mod+Shift+XF86Forward	move container to workspace next
bindsym $mod+semicolon		workspace next
bindsym $mod+slash		split vertical ;; exec $term
bindsym $mod+Shift+slash	kill
bindsym $mod+backslash		workspace back_and_forth

set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"

# switch to workspace
bindsym $mod+1		workspace $ws1
bindsym $mod+2		workspace $ws2
bindsym $mod+3		workspace $ws3
bindsym $mod+4		workspace $ws4
bindsym $mod+5		workspace $ws5
bindsym $mod+6		workspace $ws6
bindsym $mod+7		workspace $ws7
bindsym $mod+8		workspace $ws8
bindsym $mod+9		workspace $ws9
bindsym $mod+0		workspace $ws10

# move focused container to workspace
bindsym $mod+Shift+1	move container to workspace $ws1
bindsym $mod+Shift+2	move container to workspace $ws2
bindsym $mod+Shift+3	move container to workspace $ws3
bindsym $mod+Shift+4	move container to workspace $ws4
bindsym $mod+Shift+5	move container to workspace $ws5
bindsym $mod+Shift+6	move container to workspace $ws6
bindsym $mod+Shift+7	move container to workspace $ws7
bindsym $mod+Shift+8	move container to workspace $ws8
bindsym $mod+Shift+9	move container to workspace $ws9
bindsym $mod+Shift+0	move container to workspace $ws10

for_window [class="Pinentry"] sticky enable
for_window [class="sent"] border pixel 0px
for_window [title="GIMP Startup"] move workspace $ws5
for_window [class="Gimp"] move workspace $ws5
for_window [window_role="GtkFileChooserDialog"] resize set 800 600
for_window [window_role="GtkFileChooserDialog"] move position center
for_window [title="Default - Wine desktop"] floating enable

# Bindings to make the webcam float and stick.
for_window [title="mpvfloat"] floating enable
for_window [title="mpvfloat"] sticky enable
for_window [title="mpvfloat"] border pixel 0
no_focus [title="mpvfloat"]

# #---Function Buttons---# #
bindsym $mod+F1		exec --no-startup-id prompt "Lock computer?" "slock"
bindsym $mod+F2		restart
bindsym $mod+F3		exec --no-startup-id displayselect
bindsym $mod+F4		exec --no-startup-id prompt "Hibernate computer?" "$hibernate"
bindsym $mod+F5		exec --no-startup-id $netrefresh
bindsym $mod+F6		exec --no-startup-id torwrap
bindsym $mod+F7		exec --no-startup-id td-toggle
bindsym $mod+F8		exec --no-startup-id newsup
bindsym $mod+F9		exec --no-startup-id mounter
bindsym $mod+F10	exec --no-startup-id unmounter
bindsym $mod+F11	exec --no-startup-id ducksearch
bindsym $mod+F12	exec $term -e nmtui
bindsym $mod+Shift+F1	exec --no-startup-id slock

# #---Arrow Keys---# #
bindsym $mod+Left		focus left
bindsym $mod+Shift+Left		move left
bindsym $mod+Ctrl+Left		move workspace to output left
bindsym $mod+Down		focus down
bindsym $mod+Shift+Down		move down
bindsym $mod+Ctrl+Down		move workspace to output down
bindsym $mod+Up			focus up
bindsym $mod+Shift+Up		move up
bindsym $mod+Ctrl+Up		move workspace to output up
bindsym $mod+Right 		focus right
bindsym $mod+Shift+Right 	move right
bindsym $mod+Ctrl+Right		move workspace to output right

# #---Media Keys---# #
# Volume keys
#bindsym $mod+plus		exec --no-startup-id pulsemixer --change-volume +5 && pkill -RTMIN+10 i3blocks
#bindsym $mod+Shift+plus		exec --no-startup-id pulsemixer --change-volume +15 && pkill -RTMIN+10 i3blocks
#bindsym $mod+minus 		exec --no-startup-id pulsemixer --change-volume -5 && pkill -RTMIN+10 i3blocks
#bindsym $mod+Shift+minus	exec --no-startup-id pulsemixer --change-volume -15 && pkill -RTMIN+10 i3blocks
bindsym $mod+less 		exec --no-startup-id mpc prev
bindsym $mod+Shift+less		exec --no-startup-id mpc next
#bindsym $mod+greater		exec --no-startup-id mpc next
#bindsym $mod+Shift+greater	exec --no-startup-id mpc next

# For advancing forward/backward in an mpd song
#bindsym $mod+bracketleft 	exec --no-startup-id mpc seek -10
#bindsym $mod+Shift+bracketleft 	exec --no-startup-id mpc seek -120
#bindsym $mod+bracketright 	exec --no-startup-id mpc seek +10
#bindsym $mod+Shift+bracketright exec --no-startup-id mpc seek +120

# For screenshots and recording
bindsym Print 			exec --no-startup-id maim pic-full-"$(date '+%y%m%d-%H%M-%S').png"
bindsym Shift+Print 		exec --no-startup-id maimpick
bindsym $mod+Print		exec --no-startup-id dmenurecord
bindsym $mod+Shift+F12		exec --no-startup-id "killall screenkey || screenkey"
bindsym $mod+Delete		exec $stoprec
#bindsym XF86Launch1		exec --no-startup-id xset dpms force off

# #---Extra XF86 Keys---# #
bindsym XF86AudioMute			exec --no-startup-id amixer sset Master toggle && pkill -RTMIN+10 i3blocks
#bindsym XF86AudioMicMute		exec --no-startup-id amixer sset Capture toggle
bindsym XF86AudioLowerVolume	exec --no-startup-id amixer sset Master 5%- && pkill -RTMIN+10 i3blocks
bindsym Shift+XF86AudioLowerVolume	exec --no-startup-id amixer sset Master 1%- && pkill -RTMIN+10 i3blocks
bindsym Control+XF86AudioLowerVolume	exec --no-startup-id amixer sset Master 10%- && pkill -RTMIN+10 i3blocks
bindsym XF86AudioRaiseVolume		exec --no-startup-id amixer sset Master 5%+ && pkill -RTMIN+10 i3blocks
bindsym Shift+XF86AudioRaiseVolume	exec --no-startup-id amixer sset Master 1%+ && pkill -RTMIN+10 i3blocks
bindsym Control+XF86AudioRaiseVolume	exec --no-startup-id amixer sset Master 10%+ && pkill -RTMIN+10 i3blocks
bindsym XF86MonBrightnessDown		exec --no-startup-id xbacklight -time 500 -steps 5 -dec 5
bindsym Shift+XF86MonBrightnessDown	exec --no-startup-id xbacklight -time 100 -steps 1 -dec 1
bindsym Control+XF86MonBrightnessDown	exec --no-startup-id xbacklight -time 1000 -steps 10 -dec 10
bindsym XF86MonBrightnessUp		exec --no-startup-id xbacklight -time 500 -steps 5 -inc 5
bindsym Shift+XF86MonBrightnessUp	exec --no-startup-id xbacklight -time 100 -steps 1 -inc 1
bindsym Control+XF86MonBrightnessUp	exec --no-startup-id xbacklight -time 1000 -steps 10 -inc 10
#bindsym XF86Display		exec --no-startup-id displayselect
#bindsym XF86WLAN		exec $nettoggle
#bindsym XF86Bluetooth		exec doas rfkill unblock bluetooth | $term bluetoothctl
##bindsym XF86Copy		exec
##bindsym XF86Open		exec
##bindsym XF86Paste		exec
##bindsym XF86Cut		exec
##bindsym XF86MenuKB		exec
#bindsym XF86Calculator	exec --no-startup-id ddspawn dropdowncalc -f mono:pixelsize=24
##bindsym XF86Sleep		This binding is typically mapped by systemd automatically.
##bindsym XF86WakeUp		exec
bindsym XF86PowerOff		exec --no-startup-id sysact
##bindsym XF86Explorer		exec $term -e lf
##bindsym XF86Send		exec
##bindsym XF86Xfer		exec
##bindsym XF86WWW		exec --no-startup-id $BROWSER
##bindsym XF86DOS		exec
#bindsym XF86ScreenSaver		exec exec --no-startup-id slock
##bindsym XF86RotateWindows	exec
##bindsym XF86TaskPane		exec
##bindsym XF86Favorites		exec
##bindsym XF86MyComputer	exec $term -e lf
##bindsym XF86Back		exec
##bindsym XF86Forward		exec
#bindsym XF86Eject		exec --no-startup-id dmenuumount
#bindsym XF86AudioNext		exec --no-startup-id mpc next
#bindsym XF86AudioPlay		exec --no-startup-id mpc toggle
#bindsym XF86AudioPrev		exec --no-startup-id mpc prev
#bindsym XF86AudioStop		exec --no-startup-id mpc toggle
#bindsym XF86AudioRecord		exec --no-startup-id $term -e ncmpcpp
#bindsym XF86AudioRewind		exec --no-startup-id mpc seek -10
#bindsym XF86AudioForward	exec --no-startup-id mpc seek +10
#bindsym XF86AudioMedia		exec --no-startup-id $term -e ncmpcpp
##bindsym XF86Phone		exec
##bindsym XF86Tools		exec
##bindsym XF86HomePage		exec $BROWSER
##bindsym XF86Reload		restart
##bindsym XF86ScrollUp		exec
##bindsym XF86ScrollDown	exec
##bindsym XF86New		exec
##bindsym XF86LaunchA		exec
##bindsym XF86LaunchB		exec
##bindsym XF86Launch2		exec
##bindsym XF86Launch3		exec
##bindsym XF86Launch4		exec
##bindsym XF86Launch5		exec
##bindsym XF86Launch6		exec
##bindsym XF86Launch7		exec
##bindsym XF86Launch8		exec
##bindsym XF86Launch9		exec
#bindsym XF86TouchpadToggle	exec --no-startup-id toggletouchpad
#bindsym XF86TouchpadOn		exec --no-startup-id synclient TouchpadOff=0
#bindsym XF86TouchpadOff		exec --no-startup-id synclient TouchpadOff=1
#bindsym XF86Suspend		exec --no-startup-id lockscreen
#bindsym XF86Close		kill
#bindsym XF86WebCam		exec --no-startup-id camtoggle
#bindsym XF86Mail		exec --no-startup-id thunderbird
#bindsym XF86Messenger		exec $term -e weechat
#bindsym XF86Search		exec $BROWSER https://duckduckgo.com
##bindsym XF86Go		exec
##bindsym XF86Finance		exec
##bindsym XF86Game		exec
#bindsym XF86Shop		exec $BROWSER https://ebay.com
#bindsym XF86KbdLightOnOff	exec
##bindsym XF86Reply		exec
##bindsym XF86MailForward	exec
##bindsym XF86Save		exec
#bindsym XF86Documents		exec $term -e lf ~/Documents
##bindsym XF86Battery		exec
