# Logo key. Use Mod1 for Alt.
set $mod Mod4

# Add Vim key support
set $left h
set $down j
set $up k
set $right l

# Set default terminal emulator
set $term footclient

# Application launcher
set $launcher fuzzel

# Application menu
set $menu nwg-drawer

# Power Menu
set $powermenu ~/.config/sway/scripts/power_menu.sh

### Key bindings
#
# Basics:
#
    bindsym $mod+r reload

    # Launch the terminal
    bindsym $mod+Return exec $term
    bindsym $mod+Shift+Return exec foot

    # Open the power menu
    bindsym $mod+Shift+e exec $powermenu

    # Kill focused window
    bindsym $mod+Shift+q kill

    # Start your launcher
    bindsym $mod+d exec $launcher

    # Menu
    bindsym $mod+Shift+d exec $menu

    # Lock screen
    bindsym $mod+f1 exec gtklock

    # Activities
    bindsym $mod+p exec ~/.config/sway/scripts/window_switcher.sh

    # Move windows by holding down $mod and left mouse button.
    # Resize them with right mouse button + $mod.
    # Change "normal" to "inverse" to switch left and right
    floating_modifier $mod normal

    # Reload the configuration file
    bindsym $mod+Shift+c reload

#
# Moving around:
#
    bindsym {
        # Change window focus
        $mod+Left focus left
        $mod+Down focus down
        $mod+Up focus up
        $mod+Right focus right
        # Vim key support
        $mod+$left focus left
        $mod+$down focus down
        $mod+$up focus up
        $mod+$right focus right

        # Move the focused window
        $mod+Shift+Left move left
        $mod+Shift+Down move down
        $mod+Shift+Up move up
        $mod+Shift+Right move right
        # Vim key support
        $mod+Shift+$left move left
        $mod+Shift+$down move down
        $mod+Shift+$up move up
        $mod+Shift+$right move right
    }

#
# Workspaces:
#
    # Workspace bindings are using bindcode instead of bindsym for better Azerty compatibility.
    # https://github.com/EndeavourOS-Community-Editions/sway/pull/81
    # Use wev to find keycodes for setting up other bindings this way.

    bindcode {
        # Switch to workspace
        $mod+10 workspace number 1
        $mod+11 workspace number 2
        $mod+12 workspace number 3
        $mod+13 workspace number 4
        $mod+14 workspace number 5
        $mod+15 workspace number 6
        $mod+16 workspace number 7
        $mod+17 workspace number 8
        $mod+18 workspace number 9
        $mod+19 workspace number 10

        # Move focused container to workspace
        $mod+Shift+10 move container to workspace number 1
        $mod+Shift+11 move container to workspace number 2
        $mod+Shift+12 move container to workspace number 3
        $mod+Shift+13 move container to workspace number 4
        $mod+Shift+14 move container to workspace number 5
        $mod+Shift+15 move container to workspace number 6
        $mod+Shift+16 move container to workspace number 7
        $mod+Shift+17 move container to workspace number 8
        $mod+Shift+18 move container to workspace number 9
        $mod+Shift+19 move container to workspace number 10
    }
    # Note: workspaces can have any name you want, not just numbers.
    # We just use 1-10 as the default.

#
# Layout stuff:
#
    # Set how the current window will be split
    # Split the window vertically
    # bindsym $mod+v splitv
    # Split the window horizontally
    # bindsym $mod+b splith
    # Toggle
    bindsym $mod+q split toggle

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

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

    # Toggle between tiling and floating mode
    bindsym $mod+Shift+space floating toggle
    bindsym $mod+Ctrl+space sticky 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 focus to the child container
    bindsym $mod+Shift+a focus child

#
# Scratchpad:
#
    # Sway has a "scratchpad", which is a bag of holding for windows.
    # You can send windows there and get them back later.

    # 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

#
# Resizing containers:
#
    bindsym {
        # Resize with arrow keys
        $mod+ctrl+Right resize shrink width 10 px
        $mod+ctrl+Up resize grow height 10 px
        $mod+ctrl+Down resize shrink height 10 px
        $mod+ctrl+Left resize grow width 10 px
        # Resize with Vim keys
        $mod+ctrl+$right resize shrink width 10 px
        $mod+ctrl+$up resize grow height 10 px
        $mod+ctrl+$down resize shrink height 10 px
        $mod+ctrl+$left resize grow width 10 px
    }

    # Resize floating windows with mouse scroll:
    bindsym --whole-window --border {
        # Resize vertically
        $mod+button4 resize shrink height 5 px or 5 ppt
        $mod+button5 resize grow height 5 px or 5 ppt
        # Resize horizontally
        $mod+Shift+button4 resize shrink width 5 px or 5 ppt
        $mod+Shift+button5 resize grow width 5 px or 5 ppt
    }

#
# Media Keys
#
    bindsym {
        # Volume
        XF86AudioRaiseVolume exec pamixer -ui 2
        XF86AudioLowerVolume exec pamixer -ud 2
        XF86AudioMute exec pamixer --toggle-mute

        # Player
        XF86AudioPlay exec playerctl play-pause
        XF86AudioNext exec playerctl next
        XF86AudioPrev exec playerctl previous

        # Backlight
        XF86MonBrightnessUp exec brightnessctl -c backlight set +5%
        XF86MonBrightnessDown exec brightnessctl -c backlight set 5%-
    }

#
# App shortcuts
#
    bindsym $mod+u exec unipicker --command "rofi -dmenu | wl-copy"

    # Launch the file explorer
    bindsym $mod+b exec pcmanfm

    # Dismiss message
    bindsym $mod+n exec makoctl dismiss
    bindsym $mod+Shift+n exec makoctl dismiss -a

    # Launch the browser
    bindsym $mod+o exec qutebrowser

    # config tools
    set $mode_monitor (b) btop, (h) htop, (s) isd, (j) journal, (n) nvtop
    mode "$mode_monitor" {
        bindsym b exec $term_float btop, mode "default"
        bindsym h exec $term_float htop, mode "default"
        bindsym s exec $term_float isd, mode "default"
        bindsym j exec $term_float lazyjournal, mode "default"
        bindsym n exec $term_float nvtop, mode "default"

        bindsym Return mode "default"
        bindsym Escape mode "default"
    }
    bindsym $mod+m mode "$mode_monitor"

#
# Screenshots
#
    # Snip a selection and pipe to swappy
    bindsym print exec grim -g "$(slurp)" - | swappy -f -
    # Screenshot a window and pipe to swappy
    bindsym Ctrl+Print exec ~/.config/sway/scripts/screenshot_window.sh
    # Screenshot the current display and pipe to swappy
    bindsym Shift+Print exec ~/.config/sway/scripts/screenshot_display.sh

