# sway config file (v5)
# https://www.github.com/keyitdev/dotfiles
# Copyright (C) 2022-2026 Keyitdev
# https://github.com/swaywm/sway/wiki
# https://i3wm.org/docs/userguide.html

output DP-4 mode 2560x1440@200Hz 
output * bg ~/Pictures/wallpapers/background.png fill

input type:keyboard {
      xkb_layout "pl"
}

set $mod Mod4
floating_modifier $mod

font pango:Open sans 11

# kinda overkill, just to make sure every app respect dark theme
exec_always {
    #systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_RUNTIME_DIR
    #dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
    
    systemctl --user import-environment WAYLAND_DISPLAY DISPLAY SWAYSOCK XDG_RUNTIME_DIR XDG_SESSION_TYPE XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP DBUS_SESSION_BUS_ADDRESS
    export GTK_THEME="gtk-dark-keyitdev:dark"
    #exec --no-startup-id dbus-update-activation-environment --all
    dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY SWAYSOCK XDG_RUNTIME_DIR XDG_SESSION_TYPE XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP DBUS_SESSION_BUS_ADDRESS
    gsettings set org.gnome.desktop.interface gtk-theme 'gtk-dark-keyitdev:dark'
    gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
}

exec_always --no-startup-id sh -c 'pkill -x waybar; waybar'
exec_always --no-startup-id ~/system_monitor.sh &
exec_always --no-startup-id /usr/lib/mate-polkit/polkit-mate-authentication-agent-1 &
exec_always --no-startup-id dunst &

# 1st - lock
# 2nd - turn off screen
# 3rd - sleep
exec_always --no-startup-id killall swayidle; swayidle -w \
    timeout 300 'swaymsg "output * power off"' \
        resume 'swaymsg "output * power on"' \
    timeout 1200 'lock' \
    timeout 3600 'systemctl suspend'
#     before-sleep 'lock'

# exec_always --no-startup-id asus_fan_listener  &
# exec_always --no-startup-id battery_listener &
# bindsym Ctrl+F5 exec --no-startup-id asus_fan_toggle

bindsym --locked XF86AudioRaiseVolume exec --no-startup-id volume_control -s +5 -m 125 && volume_level
bindsym --locked XF86AudioLowerVolume exec --no-startup-id volume_control -s -5 -m 125 && volume_level
bindsym --locked XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && volume_mute
bindsym --locked XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && microphone_mute
bindsym --locked XF86MonBrightnessUp exec --no-startup-id brightness_control -s +2 && brightness_level
bindsym --locked XF86MonBrightnessDown exec --no-startup-id brightness_control -s -2 && brightness_level
bindsym --locked XF86ScreenSaver exec --no-startup-id swaymsg "output * dpms off"
bindsym --locked XF86TouchpadToggle exec --no-startup-id touchpad_toggle
bindsym --locked XF86AudioPlay exec playerctl play-pause
bindsym --locked XF86AudioPause exec playerctl play-pause
bindsym --locked XF86AudioPrev exec playerctl previous
bindsym --locked XF86AudioNext exec playerctl next
bindsym --locked XF86AudioStop exec playerctl stop
bindsym XF86Calculator exec --no-startup-id qalculate-gtk
# bindsym XF86RFKill
    
bindsym Pause exec screenshot -sa
bindsym Print exec screenshot -sf

# Run terminal (i3-sensible-terminal wannabe) 
bindsym $mod+Return exec sh -c 'for terminal in "$TERMINAL" x-terminal-emulator kitty alacritty mate-terminal gnome-terminal terminator xfce4-terminal urxvt rxvt termit Eterm aterm uxterm xterm roxterm termite lxterminal terminology st qterminal lilyterm tilix terminix konsole guake tilda hyper wezterm rio; do if command -v "$terminal" > /dev/null 2>&1; then exec "$terminal" "$@"; fi; done'

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

bindsym $mod+q exec --no-startup-id firefox-developer-edition
# bindsym $mod+w exec --no-startup-id code
bindsym $mod+w exec --no-startup-id "rofi -show vscode-recent -modi vscode-recent -no-default-config -config ~/.config/rofi/main.rasi -theme-str 'prompt { enabled: false; }'"
bindsym $mod+e exec --no-startup-id nemo

bindsym $mod+a exec --no-startup-id rofi -show drun -no-default-config -config ~/.config/rofi/dmenu.rasi
bindsym $mod+s exec --no-startup-id nemo ~/Pictures/screenshots/
bindsym $mod+d exec --no-startup-id rofi -show drun -no-default-config -config ~/.config/rofi/main.rasi

bindsym $mod+z exec --no-startup-id kitty -e ncmpcpp 
bindsym $mod+x exec --no-startup-id rofi-powermenu
bindsym $mod+c exec --no-startup-id rofi-screenshot

bindsym $mod+i exec lock

bindsym $mod+b move workspace to output right
bindsym $mod+n exec "swaymsg output HDMI-A-1 enable; swaymsg output HDMI-A-1 pos 1920 0"
bindsym $mod+m exec "swaymsg output HDMI-A-1 disable"

bindsym ctrl+F1 exec --no-startup-id swaymsg "output * dpms off"
bindsym ctrl+F2 exec --no-startup-id swaymsg "output * dpms on"
bindsym ctrl+F4 exec --no-startup-id kitty
bindsym ctrl+F3 exec --no-startup-id dmenu_run

# bindsym $mod+d exec --no-startup-id dmenu_run

# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right

# alternatively, you can use the cursor keys:
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+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right

# alternatively, you can use the cursor keys:
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 in horizontal orientation
bindsym $mod+h split h

# split in vertical orientation
bindsym $mod+v split v

# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle

# change container layout (stacked, tabbed, toggle split)
# bindsym $mod+s layout stacking
# bindsym $mod+w layout tabbed
# bindsym $mod+e layout toggle split

# toggle tiling / floating
bindsym $mod+Shift+space floating toggle

# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle

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

# focus the child container
# bindsym $mod+d focus child

# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
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 number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10

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

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

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

# exit sway
bindsym $mod+Shift+e exec "swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway?' -B 'Yes, exit sway' 'swaymsg exit'"

# resize window (you can also use the mouse for that)
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode

        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym j resize shrink width 10 px or 10 ppt
        bindsym k resize grow height 10 px or 10 ppt
        bindsym l resize shrink height 10 px or 10 ppt
        bindsym semicolon resize grow width 10 px or 10 ppt

        # same bindings, but for the arrow keys
        bindsym Left resize shrink width 10 px or 10 ppt
        bindsym Down resize grow height 10 px or 10 ppt
        bindsym Up resize shrink height 10 px or 10 ppt
        bindsym Right resize grow width 10 px or 10 ppt

        # back to normal: Enter or Escape or $mod+r
        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym $mod+r mode "default"
}

bindsym $mod+r mode "resize"

# 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



### BODERS ###

hide_edge_borders none

#border width
default_border pixel 2

#border colors
client.focused #343746 #343746 #F8F8F2 #343746 #343746
client.focused_inactive #343746 #343746 #F8F8F2 #21222C #21222C
client.unfocused #343746 #343746 #F8F8F2 #21222C #21222C

### GAPS ###

# Set inner/outer gaps
gaps inner 8
gaps outer 0

# Smart gaps (gaps used if only more than one container on the workspace)
smart_gaps off

# Press $mod+g to enter the gap mode. Choose o or i for modifying outer/inner gaps. Press one of + / - (in-/decrement for current workspace) or 0 (remove gaps for current workspace). If you also press Shift with these keys, the change will be global for all workspaces.
set $mode_gaps Gaps: (o) outer, (i) inner
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+g mode "$mode_gaps"

mode "$mode_gaps" {
        bindsym o      mode "$mode_gaps_outer"
        bindsym i      mode "$mode_gaps_inner"
        bindsym Return mode "default"
        bindsym Escape mode "default"
}
mode "$mode_gaps_inner" {
        bindsym plus  gaps inner current plus 5
        bindsym minus gaps inner current minus 5
        bindsym 0     gaps inner current set 0

        bindsym Shift+plus  gaps inner all plus 5
        bindsym Shift+minus gaps inner all minus 5
        bindsym Shift+0     gaps inner all set 0

        bindsym Return mode "default"
        bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
        bindsym plus  gaps outer current plus 5
        bindsym minus gaps outer current minus 5
        bindsym 0     gaps outer current set 0

        bindsym Shift+plus  gaps outer all plus 5
        bindsym Shift+minus gaps outer all minus 5
        bindsym Shift+0     gaps outer all set 0

        bindsym Return mode "default"
        bindsym Escape mode "default"
}

### Windows ###

#for_window [app_id="qalculate-gtk"] floating enable, move position center, resize set 400 600
for_window [app_id="qalculate-gtk"] floating enable, sticky enable

for_window [app_id="Firefox Beta" title="Picture-in-Picture"] floating enable, sticky enable
for_window [app_id="firefox-developer-edition" title="Picture-in-Picture"] floating enable, sticky enable
for_window [app_id="firefox" title="Picture-in-Picture"] floating enable, sticky enable
