#!/bin/sh
# ======================================================================
# SXHKDRC — Конфигурационный файл горячих клавиш
# ----------------------------------------------------------------------
# Менеджер горячих клавиш : sxhkd
# Оконный менеджер         : bspwm
# ======================================================================

# ======================================================================
# 1. НЕЗАВИСИМЫЕ ГОРЯЧИЕ КЛАВИШИ
# ======================================================================

# Запуск терминала Alacritty
super + Return
    alacritty

# Запуск меню приложений (Rofi)
super + @space
    rofi -show drun -theme $HOME/.config/rofi/themes/nord/nord.rasi

# Перезагрузка конфигурации sxhkd
super + Escape
    pkill -USR1 -x sxhkd

# Перезагрузка Polybar
super + shift + p
	sh $HOME/.config/polybar/launch.sh

# Смена языка
Alt_L + shift
	sh $HOME/bin/change_language.sh
# Смена языка
Shift_L + alt
	sh $HOME/bin/change_language.sh

# ======================================================================
# 2. УПРАВЛЕНИЕ BSPWM
# ======================================================================

# Выход / Перезапуск bspwm
super + alt + {q,r}
    bspc {quit,wm -r}

# Закрыть / Уничтожить текущее окно
super + {_,shift + }c
    bspc node -{c,k}

# Переключение layout (tiled/monocle)
super + m
    bspc desktop -l next

# Отправить помеченный узел к предустановленному
super + y
    bspc node newest.marked.local -n newest.!automatic.local

# Поменять местами текущий узел и самое большое окно
super + g
    bspc node -s biggest.window


# ======================================================================
# 3. СОСТОЯНИЯ И ФЛАГИ ОКНА
# ======================================================================

# Установить состояние окна (Tiled, Pseudo-tiled, Floating, Fullscreen)
super + {t,shift + t,s,f}
    bspc node -t {tiled,pseudo_tiled,floating,fullscreen}

# Установить флаги узла (Marked, Locked, Sticky, Private)
super + ctrl + {m,x,y,z}
    bspc node -g {marked,locked,sticky,private}


# ======================================================================
# 4. ФОКУС / ПЕРЕКЛЮЧЕНИЕ / SWAP
# ======================================================================

# Фокусировка / Перемещение узла
super + {_,shift + }{h,j,k,l}
    bspc node -{f,s} {west,south,north,east}

# Фокусировка по иерархии
super + {p,b,comma,period}
    bspc node -f @{parent,brother,first,second}

# Следующее / Предыдущее окно
super + {_,shift + }c
    bspc node -f {next,prev}.local.!hidden.window

# Следующий / Предыдущий рабочий стол
super + bracket{left,right}
    bspc desktop -f {prev,next}.local

# Последний активный узел / рабочий стол
super + {grave,Tab}
    bspc {node,desktop} -f last

# Старый / Новый узел в истории
super + {o,i}
    bspc wm -h off; bspc node {older,newer} -f; bspc wm -h on

# Фокус / Отправка окна на рабочий стол (1–9, 0)
super + {_,shift + }{1-9,0}
    bspc {desktop -f,node -d} '^{1-9,10}'


# ======================================================================
# 5. ПРЕДВЫБОР (Preselect)
# ======================================================================

# Предвыбор направления
super + ctrl + {h,j,k,l}
    bspc node -p {west,south,north,east}

# Предвыбор соотношения деления
super + ctrl + {1-9}
    bspc node -o 0.{1-9}

# Отмена предвыбора текущего узла
super + ctrl + space
    bspc node -p cancel

# Отмена предвыбора всех узлов
super + ctrl + shift + space
    bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel


# ======================================================================
# 6. РАЗМЕР И ПЕРЕМЕЩЕНИЕ (Resize / Move)
# ======================================================================

# Увеличение размера окна
super + alt + {h,j,k,l}
    bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}

# Уменьшение размера окна
super + alt + shift + {h,j,k,l}
    bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}

# Перемещение плавающего окна
super + {Left,Down,Up,Right}
    bspc node -v {-20 0,0 20,0 -20,20 0}

