# Default config for sway
#
# Copy this to ~/.config/sway/config and edit it to your liking.
#
# Read `man 5 sway` for a complete reference.

### Variables
#
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
set $term foot
set $floatterm foot --app-id floating-foot
set $lock $HOME/.config/sway/lock.sh

# Your preferred application launcher
# Note: pass the final command to swaymsg so that the resulting window can be opened
# on the original workspace that the command was run on.
set $menu rofi -show combi | xargs swaymsg exec --

### Output configuration
#
# Default wallpaper (more resolutions are available in /run/current-system/sw/share/backgrounds/sway/)
# output * bg /run/current-system/sw/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
# output * bg /home/grue/Pictures/tiles/23.png tile
# output * bg /home/grue/Pictures/paper.jpg fill
output * bg ./wall.jpg fill

#
# Example configuration:
#
#   output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs

### Idle configuration
#
# Example configuration:
#
exec swayidle -w \
         timeout 300 $lock \
         timeout 303 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
         before-sleep $lock
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.

### Input configuration
#
# Example configuration:
#
  input type:touchpad {
      accel_profile adaptive
      click_method clickfinger
      dwt enabled
      dwtp enabled
      middle_emulation enabled
  }

  input type:keyboard {
      xkb_layout "us,ru"
      xkb_options "caps:ctrl_modifier,grp:alt_space_toggle"
  }
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.

focus_follows_mouse yes
# mouse_warping container
seat * hide_cursor 5000

### Key bindings
#
# Basics:
#
    # Start a terminal
    bindsym --to-code $mod+Return exec $term
    # start a floating terminal
    bindsym --to-code $mod+Shift+Return exec $floatterm
    for_window [app_id="floating-foot"] floating enable

    # Start a python shell
    bindsym --to-code $mod+z exec $floatterm python

    # Kill focused window
    bindsym --to-code $mod+Shift+q kill

    # Start your launcher
    bindsym --to-code $mod+d exec $menu

    # 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 --to-code $mod+Shift+c reload

    # Exit sway (logs you out of your Wayland session)
    bindsym --to-code $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'

    # Brightness
    bindsym --to-code --locked XF86MonBrightnessDown exec "brightnessctl set 5%-"
    bindsym --to-code --locked XF86MonBrightnessUp exec "brightnessctl set +5%"
    # Volume
    bindsym --to-code --locked XF86AudioRaiseVolume exec 'pamixer -i 1'
    bindsym --to-code --locked XF86AudioLowerVolume exec 'pamixer -d 1'
    bindsym --to-code --locked XF86AudioMute exec 'pamixer -t'
    # Screen locking
    bindsym --to-code $mod+Delete exec $lock
    # Screenshots
    bindsym --to-code Print exec 'grim -g "$(slurp)" - | wl-copy'
    bindsym --to-code $mod+p exec 'grim -g "$(slurp)" - | wl-copy'
    bindsym --to-code $mod+Print exec 'grim -g "$(slurp)" ~/Pictures/$(date +"%Y-%m-%d-%H-%M-%S").png'
    bindsym --to-code $mod+Mod1+p exec 'grim -g "$(slurp)" ~/Pictures/$(date +"%Y-%m-%d-%H-%M-%S").png'
    # Notifications
    bindsym --to-code $mod+m exec 'makoctl dismiss -a'
    bindsym --to-code $mod+Shift+m exec 'makoctl restore'
    # Check mail
    bindsym --to-code $mod+n exec 'systemctl --user start mbsync.service'


#
# Moving around:
#
    # Move your focus around
    bindsym --to-code $mod+$left focus left
    bindsym --to-code $mod+$down focus down
    bindsym --to-code $mod+$up focus up
    bindsym --to-code $mod+$right focus right
    # Or use $mod+[up|down|left|right]
    bindsym --to-code $mod+Left focus left
    bindsym --to-code $mod+Down focus down
    bindsym --to-code $mod+Up focus up
    bindsym --to-code $mod+Right focus right

    # Move the focused window with the same, but add Shift
    bindsym --to-code $mod+Shift+$left move left
    bindsym --to-code $mod+Shift+$down move down
    bindsym --to-code $mod+Shift+$up move up
    bindsym --to-code $mod+Shift+$right move right
    # Ditto, with arrow keys
    bindsym --to-code $mod+Shift+Left move left
    bindsym --to-code $mod+Shift+Down move down
    bindsym --to-code $mod+Shift+Up move up
    bindsym --to-code $mod+Shift+Right move right
#
# Workspaces:
#
    # define outputs
    set $builtin_out eDP-1
    set $home_out DP-8
    # bind workspaces to inputs
    workspace 1 output $home_out $builtin_out
    workspace 2 output $home_out $builtin_out
    workspace 3 output $home_out $builtin_out
    workspace 4 output $home_out $builtin_out
    workspace 5 output $home_out $builtin_out
    workspace 6 output $home_out $builtin_out
    workspace 7 output $home_out $builtin_out
    workspace 8 output $home_out $builtin_out
    workspace 9 output $home_out $builtin_out
    workspace 10 output $home_out $builtin_out
    workspace 11 output $builtin_out
    workspace 12 output $builtin_out
    workspace 13 output $builtin_out
    workspace 14 output $builtin_out
    workspace 15 output $builtin_out
    workspace 16 output $builtin_out
    workspace 17 output $builtin_out
    workspace 18 output $builtin_out
    workspace 19 output $builtin_out
    workspace 20 output $builtin_out

    # move workspace between inputs
    bindsym $mod+Mod1+Left move workspace to output left
    bindsym $mod+Mod1+Right move workspace to output right
    bindsym $mod+Mod1+Up move workspace to output up
    bindsym $mod+Mod1+Down move workspace to output down
    # Switch to workspace
    bindsym --to-code $mod+1 workspace number 1
    bindsym --to-code $mod+2 workspace number 2
    bindsym --to-code $mod+3 workspace number 3
    bindsym --to-code $mod+4 workspace number 4
    bindsym --to-code $mod+5 workspace number 5
    bindsym --to-code $mod+6 workspace number 6
    bindsym --to-code $mod+7 workspace number 7
    bindsym --to-code $mod+8 workspace number 8
    bindsym --to-code $mod+9 workspace number 9
    bindsym --to-code $mod+0 workspace number 10
    # Move focused container to workspace
    bindsym --to-code $mod+Shift+1 move container to workspace number 1
    bindsym --to-code $mod+Shift+2 move container to workspace number 2
    bindsym --to-code $mod+Shift+3 move container to workspace number 3
    bindsym --to-code $mod+Shift+4 move container to workspace number 4
    bindsym --to-code $mod+Shift+5 move container to workspace number 5
    bindsym --to-code $mod+Shift+6 move container to workspace number 6
    bindsym --to-code $mod+Shift+7 move container to workspace number 7
    bindsym --to-code $mod+Shift+8 move container to workspace number 8
    bindsym --to-code $mod+Shift+9 move container to workspace number 9
    bindsym --to-code $mod+Shift+0 move container to workspace number 10
    # Switch to workspace
    bindsym --to-code $mod+Mod1+1 workspace number 11
    bindsym --to-code $mod+Mod1+2 workspace number 12
    bindsym --to-code $mod+Mod1+3 workspace number 13
    bindsym --to-code $mod+Mod1+4 workspace number 14
    bindsym --to-code $mod+Mod1+5 workspace number 15
    bindsym --to-code $mod+Mod1+6 workspace number 16
    bindsym --to-code $mod+Mod1+7 workspace number 17
    bindsym --to-code $mod+Mod1+8 workspace number 18
    bindsym --to-code $mod+Mod1+9 workspace number 19
    bindsym --to-code $mod+Mod1+0 workspace number 20
    # Move focused container to workspace
    bindsym --to-code $mod+Mod1+Shift+1 move container to workspace number 11
    bindsym --to-code $mod+Mod1+Shift+2 move container to workspace number 12
    bindsym --to-code $mod+Mod1+Shift+3 move container to workspace number 13
    bindsym --to-code $mod+Mod1+Shift+4 move container to workspace number 14
    bindsym --to-code $mod+Mod1+Shift+5 move container to workspace number 15
    bindsym --to-code $mod+Mod1+Shift+6 move container to workspace number 16
    bindsym --to-code $mod+Mod1+Shift+7 move container to workspace number 17
    bindsym --to-code $mod+Mod1+Shift+8 move container to workspace number 18
    bindsym --to-code $mod+Mod1+Shift+9 move container to workspace number 19
    bindsym --to-code $mod+Mod1+Shift+0 move container to workspace number 20
    # Note: workspaces can have any name you want, not just numbers.
    # We just use 1-10 as the default.
#
# Layout stuff:
#
    # You can "split" the current object of your focus with
    # $mod+b or $mod+v, for horizontal and vertical splits
    # respectively.
    bindsym --to-code $mod+b splith
    bindsym --to-code $mod+v splitv

    # Switch the current container between different layout styles
    bindsym --to-code $mod+s layout stacking
    bindsym --to-code $mod+w layout tabbed
    bindsym --to-code $mod+e layout toggle split

    # Make the current focus fullscreen
    bindsym --to-code $mod+f fullscreen

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

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

    # Move focus to the parent container
    bindsym --to-code $mod+a focus parent
    bindsym --to-code $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 --to-code $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 --to-code $mod+minus scratchpad show
#
# Resizing containers:
#
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 --to-code $left resize shrink width 30px
    bindsym --to-code $down resize grow height 30px
    bindsym --to-code $up resize shrink height 30px
    bindsym --to-code $right resize grow width 30px

    # Ditto, with arrow keys
    bindsym --to-code Left resize shrink width 10px
    bindsym --to-code Down resize grow height 10px
    bindsym --to-code Up resize shrink height 10px
    bindsym --to-code Right resize grow width 10px

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

## Styling: colors
include colors

## Window styling
#                       Border      BG          Text        Indicator   Child Border
client.focused          $color06    $color06    $color00    $color07    $color06
#client.focused_inactive $color00    $color00    $color00    $color00    $color00

#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
    position top
    font pango:Ttyp0 8
    icon_theme "Adwaita"
    status_command /run/current-system/sw/bin/i3status-rs
    colors {
        background  $colorBG
        separator   $color05
        # statusline $color15

        # STATE             Border      BG          Text
        focused_workspace   $color06    $color06    $color00
    }
}

# default border
default_border pixel 2
# Set font
font pango:Ttyp0 8

# bindsym --to-code $mod+t input type:touchpad toggle

# Startup applications
exec iwgtk -i
exec blueman-applet
# exec wlsunset -l 52 -L 5
# exec gammastep-indicator
exec kanshi
# exec udiskie --tray --no-automount

# window rules
# floating
for_window [app_id="imv"] floating enable; border normal
for_window [app_id="org.twosheds.iwgtk"] floating enable; border normal
for_window [app_id=".blueman-manager-wrapped"] floating enable; border normal
for_window [app_id="com.nextcloud.desktopclient.nextcloud"] floating enable; border normal

# tabbed containers
for_window [app_id="CubicSDR"] layout tabbed
for_window [app_id="org.wireshark.Wireshark"] layout tabbed

for_window [app_id="zoom" title="^zoom$"] border none, floating enable
# For specific Zoom windows
for_window [app_id="zoom" title="^(Zoom|About)$"] border pixel, floating enable
for_window [app_id="zoom" title="Settings"] floating enable, floating_minimum_size 960 x 700
# Open Zoom Meeting windows on a new workspace (a bit hacky)
for_window [app_id="zoom" title="Zoom Meeting(.*)?"] workspace next_on_output --create, move container to workspace current, floating disable, inhibit_idle open
# kill firefox sharing indicator
for_window [app_id="firefox" title="Firefox — Sharing Indicator"] kill
# fix picture-in-picture behaviour
for_window [app_id="firefox" title="Picture-in-Picture"] floating enable, sticky enable, border none

include ./config.d/*
include /etc/sway/config.d/*
