Собственно сабж, Calm Window Manager — стековый оконный менеджер ориентированный на управление с клавиатуры, начинался как серия патчей к evilwm, впоследствии полностью переписанный.
Отличительные особенности:
- Отсутствие декораций (помимо рамок).
- Чрезвычайно простой формат конфига и лаконичная документация: cwm(1), cwmrc(5).
- Вместо традиционных рабочих столов используется так называемая система групп, с более гибким подходом, позволяющая отображать несколько групп одновременно.
- Расширенная реальзация Alt-Tab: переключение по открытым окнам, по окнам группы, по классу приложения (WM_CLASS).
- Поиск по запущенным приложениям, а также возможность задавать метки окнам для более точного поиска. Поиск работает по мере ввода.
- Включает несколько меню: запуск приложений из PATH (аналогинчно dmenu), настраиваемое пользвательское меню, запуск сеанса ssh, переключение на другой wm.
- Фокус следует за указателем мыши, но окно не поднимает.
- Возможность манипулирования указателем мыши с помощью клавиатуры (необходим xdotool для эмуляции кнопок).
Пользуюсь данным вм вот уже лет 6, практически с самого переезда на линукс, зело доволен. Нравится одна особенность — ресайзит любое окно будь то видео или игра, если приложение не поддерживает такой финт, cwm просто добавляет чёрные полосы, таким образом можно какой-нибудь видосик максимизировать по вертикали и обоев не будет видно (второй скрин). Labwc например, который я не так давно пробовал так не может, не может stumpwm и похоже даже fvwm (в fvwm не стал углубляться, неоправданно сложный вм).
Минусы тоже будут: фиксированное количество групп, нет встроенной панели, а также – из-за отсутствия декораций – невозможность управлять мышкой одной рукой (разве что скриптами обмазаться).
- Theme: GTK — Adwaita и adw-gtk3 (порт libadwaita). Софта на Qt как такового у меня нет, помимо телеги и avidemux, для них хватает переменной
QT_QPA_PLATFORMTHEME=gtk3. Иконки — Papirus. Курсоры — X11-Default-Black (слегка изменённый иксовый left_ptr: указатель выбора перекрашен в чёрный, добавлены анимированный курсор загрузки и лупа) - ШГ: Adobe Source и Pragmata
Xft.autohint: 0
Xft.lcdfilter: lcdlight
Xft.hintstyle: hintnone
Xft.hinting: 0
Xft.antialias: 1
Xft.rgba: rgb
- Terminal: xterm + tmux
- FM: pcmanfm + lf
- Editor: vis
В качестве обоев использую скрипт, который качает картинку со страницы поисковика bing, резервная обоина тут:
#!/bin/sh
# fetch the day's wallpaper from bing
dir="/tmp/wallpaper"
name=$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 8)
cmd="xwallpaper --zoom"
[ -d "$dir" ] || mkdir -p "$dir"
for i in $(seq 1 30); do
if ping -c 1 -W 3 8.8.8.8 >/dev/null 2>&1; then
break
else
sleep 5
fi
done
url=$(curl -sS "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US" |
jq -r '"https://bing.com" + .images[0].url')
curl -sSLo "${dir}/${name}.jpg" "${url}"
${cmd} "${dir}/${name}.jpg"
Ещё один скрипт следит за батареей:
#!/bin/sh
SND_FILE="$HOME/.guix-home/profile/share/sounds/freedesktop/stereo/dialog-warning.oga"
ICON="battery-caution"
PLAY="paplay"
BATC=/sys/class/power_supply/BAT1/capacity
BATS=/sys/class/power_supply/BAT1/status
LEVL_WARNING=35
LEVL_SUSPEND=30
while :; do
# Open a lock file descriptor to prevent simultaneous runs
exec 200>"${XDG_RUNTIME_DIR}/battery_check.lock"
flock -n 200 || exit 1
CURC=$(sed 's/%//' "$BATC")
CURS=$(cat "$BATS")
if [ "$CURS" != "Charging" ]; then
if [ "$CURC" -le "$LEVL_SUSPEND" ]; then
loginctl suspend
elif [ "$CURC" -le "$LEVL_WARNING" ]; then
if pgrep -x "X"; then
$PLAY "$SND_FILE" &
notify-send -u critical -t 55000 -i "$ICON" "Battery low: ${CURC}%"
else
echo "Battery low: ${CURC}%"
fi
fi
fi
sleep 120
done
Дополнительно: dunst — уведомления, unclutter — скрывает указатель мыши, prewindowlayoutd — запоминает раскладку окон, autocutsel — синхронизирует буферы обмена, greenclip+dmenu — история буфера обмена, композитор — xcompmgr -cC -fF -r0 -D3
а также скрипт для переключения фокуса на приложение, либо его запуск в случае отсутствия:
#!/bin/sh
# set focus on application or run if it does not exist
program=$1
if ! wmctrl -x -a $program
then
$program &
fi
Делайте как яПросто делайте, и все будет хорошо! 😎




