144 lines
8.8 KiB
Nix
144 lines
8.8 KiB
Nix
# Можно запускать софт через "${pkgs.betterlockscreen}/bin/betterlockscreen -l dimblur";
|
||
# Но мне лень столько текста делать. И так сойдёт
|
||
# Стандартный конфиг https://github.com/baskerville/bspwm/blob/master/examples/sxhkdrc
|
||
|
||
let
|
||
notifyMute = ''dunstify -a "$(if [ "$(pamixer --get-mute)" = "true" ]; then echo " Muted"; else echo " Unmuted"; fi)" -r 91190 -t 8000'';
|
||
notifyMicMute = ''dunstify -a "$(if [ "$(pamixer --default-source --get-mute)" = "true" ]; then echo " Muted"; else echo " Unmuted"; fi)" -r 91190 -t 8000'';
|
||
notifyVolume = ''dunstify -a " Volume: $(pamixer --get-volume)" -r 91190 -t 800'';
|
||
# notifyMute = ''dunstify "t2" -a "$(if [ "$(pamixer --get-mute)" = "true" ]; then echo " Muted"; else echo " Unmuted"; fi)" -r 91190 -t 8000'';
|
||
# notifyMicMute = ''dunstify "t2" -a "$(if [ "$(pamixer --default-source --get-mute)" = "true" ]; then echo " Muted"; else echo " Unmuted"; fi)" -r 91190 -t 8000'';
|
||
# notifyVolume = ''dunstify "t2" -a " Volume: $(pamixer --get-volume)" -r 91190 -t 800'';
|
||
# Если указать "t2" перед "-a", то заголовок будет огромным.
|
||
# -r 91190: Это идентификатор уведомления (notification ID). Уведомления с одинаковым ID будут заменять друг друга.
|
||
# -t 800: Это время в миллисекундах, через которое уведомление будет автоматически закрыто.
|
||
|
||
terminalFirst = "alacritty";
|
||
terminalSecond = "kitty";
|
||
in {
|
||
services.sxhkd = { # Бинды системы https://manpages.org/sxhkd
|
||
enable = true;
|
||
|
||
keybindings = {
|
||
#########################################################
|
||
## bspwm (описание параметров есть в файле "bspwm.md") ##
|
||
#########################################################
|
||
|
||
"super + shift + ctrl + r" = "pkill -USR1 -x sxhkd; dunstify \"t2\" -a \" Sxhkd reloaded\""; # Make sxhkd reload its config files
|
||
"super + shift + ctrl + alt + {q,r}" = "bspc {quit,wm -r}"; # Quit/Restart bspwm
|
||
|
||
# "super + return" = "bspc desktop -l next"; # Fullscreen toggle (немного не тот)
|
||
# "super + ctrl + {m,x,y,z}" = "bspc node -g {marked,locked,sticky,private}"; # Set the node flags
|
||
|
||
"super + l" = "betterlockscreen -l dimblur"; # Lock screen
|
||
"super + q" = "bspc node -c"; # Quit. Закрыть приложение
|
||
"super + shift + q" = "bspc node -k"; # Kill. Убить приложение, если оно не отвечает
|
||
"super + f" = "bspc node -t ~floating"; # Floating toggle
|
||
"super + shift + f" = "bspc node -t ~tiled"; # Tiled toggle
|
||
"super + Return" = "bspc node -t ~fullscreen"; # Fullscreen toggle
|
||
|
||
# Перекидывает активное окно на предыдущий/следующий воркспейс и следует за ним
|
||
"super + ctrl + alt + {Left,Right}" = "bspc node -d {prev,next}.local --follow";
|
||
|
||
# Менять фокус приложения в указанном направлении
|
||
"super + {Left,Down,Up,Right}" = "bspc node -f {west,south,north,east}";
|
||
|
||
# Move a floating window
|
||
"super + alt + {Left,Down,Up,Right}" = "bspc node -v {-30 0,0 30,0 -30,30 0}";
|
||
|
||
# Свапает активное окно с самым большим на экране
|
||
"super + ctrl + alt + Down" = "bspc node -s biggest.window --follow";
|
||
|
||
# Перемещает активное окно в указанном направлении (либо -s, чтоб менять соседние окна местами)
|
||
"super + shift + ctrl + {Left,Down,Up,Right}" = "bspc node -n {west,south,north,east}.window --follow";
|
||
|
||
# Expand a window by moving one of its side outward
|
||
"super + shift + {Left,Down,Up,Right}" = "bspc node -z {left -30 0,bottom 0 30,top 0 -30,right 30 0}";
|
||
|
||
# Contract a window by moving one of its side inward
|
||
"super + shift + alt + {Left,Down,Up,Right}" = "bspc node -z {right -30 0,top 0 30,bottom 0 -30,left 30 0}";
|
||
|
||
# Переключает на предыдущий/следующий воркспейс внутри одного монитора.
|
||
"super + ctrl + {Left,Right}" = "bspc desktop -f {prev,next}.local";
|
||
|
||
# Прошлый воркспейс внутри одного монитора.
|
||
"super + Escape" = "bspc desktop -f last.local";
|
||
|
||
# Focus or send to the given desktop
|
||
"super + {_,shift + }{1-9,0}" = "bspc {desktop -f,node -d} {1-9,10}.local";
|
||
|
||
# Переключает на первый пустой воркспейс
|
||
"super + ctrl + Down" = "bspc desktop -f next.!occupied";
|
||
|
||
|
||
|
||
|
||
# Меняет позиционирование с горизонтального на вертикальный и обратно. Мб надо -R
|
||
# (хуй, и то и то требует аргументы, а не делает toggle, и даже с аргументами нихуя не работает)
|
||
# "super + s" = "bspc node -F";
|
||
|
||
|
||
##########
|
||
## rofi ##
|
||
##########
|
||
|
||
"super + a" = "rofi -show drun -show-icons"; # Applications. Запускатор софта
|
||
"super + c" = "rofi -show calc -modi calc -no-show-match -no-sort"; # Calculator имбовый. Можно даже написать `5600 USD to BTC` или `500 + 25%`.
|
||
"super + p" = "rofi-pass"; # Passwords. Пароли из утилиты pass
|
||
"super + v" = "clipmenu"; # История буфера обмена. Как ctrl+v, но через win.
|
||
#"super + tab" = ""; # Как alt+tab, переключение окон. На нужный воркспейс само перекинет
|
||
#"super + alt + t" = ""; # Timer. Думаю сделать через утилиту timer
|
||
#"super + shift + n" = ""; # Notification history. История оповещений. Мб не делать
|
||
#"super + backspace" = ""; # PowerMenu. Выключение пк
|
||
|
||
##################
|
||
## applications ##
|
||
##################
|
||
|
||
"super + b" = "librewolf"; # Browser LibreWolf. Основа
|
||
"super + shift + b" = "firefox"; # Browser Firefox. Паблик активность
|
||
"super + shift + ctrl + b" = "chromium"; # Browser Chromium. Пусть будет
|
||
"super + n" = "obsidian"; # Note taking app (obsidian)
|
||
"super + e" = "thunar"; # Explorer. Thunar file manager
|
||
"super + i" = "code"; # IDE, text editor
|
||
"super + m" = "${terminalFirst} -e btop"; # Monitor of resources (btop)
|
||
"super + g" = "io.github.alainm23.planify"; # Goals. Todo manager. Task tracker
|
||
"super + shift + c" = "xcolor -s"; # Color picker. Получить hex в буфер обмена
|
||
"super + ctrl + c" = "xcolor -s -f rgb"; # Color picker. Получить rgb в буфер обмена
|
||
|
||
##############
|
||
## terminal ##
|
||
##############
|
||
|
||
"super + t" = terminalFirst; # Терминал alacritty
|
||
"super + shift + t" = "${terminalFirst} --class floating-terminal"; # Floating терминал alacritty в центре экрана 600x300px
|
||
"super + ctrl + t" = terminalSecond; # Tерминал kitty
|
||
"super + ctrl + shift + t" = "${terminalSecond} --class floating-terminal"; # Floating терминал kitty в центре экрана 600x300px
|
||
|
||
#######################
|
||
## Колдунские кнопки ##
|
||
#######################
|
||
|
||
# В pamixer для настроек микро надо добавлять "--default-source"
|
||
|
||
"XF86AudioMute" = "pamixer -t; ${notifyMute}"; # Toggle mute
|
||
"XF86AudioMicMute" = "pamixer --default-source -t; ${notifyMicMute}"; # Toggle microphone mute
|
||
"XF86Audio{Lower,Raise}Volume" = "pamixer -{d,i} 5; ${notifyVolume}"; # Decrease/Increase volume
|
||
"XF86Audio{Play,Pause}" = "playerctl play-pause"; # Play/Pause
|
||
"XF86Audio{Next,Prev}" = "playerctl {next,previous}"; # Next/Previous track
|
||
|
||
# Простое редактирование яркости будет менять на 1% (Символ _ означает ничего, просто бинд яркости)
|
||
# С зажатым шифтом будет редактировать яркость на 10%
|
||
# С зажатой клавишей win будет менять между минимальным и максимальным значениями
|
||
# Не знаю работает ли эта команда, у меня не ноут. Добавил как написано в "man sxhkd"
|
||
"{_,shift + ,super + }XF86MonBrightness{Down,Up}" = "bright {-1,-10,min,+1,+10,max}"; # Increase/Decrease brightness
|
||
|
||
|
||
###########
|
||
## other ##
|
||
###########
|
||
|
||
};
|
||
};
|
||
}
|
||
|