Niri.
У окна есть одновременно border и focus-ring, что выглядит, на мой взгляд, симпатишно. Опять же, граница плавающего окна хорошо видна и на светлом, и на тёмном фоне.
Waybar светлый, кроме обычных элементов, на панели есть кнопки вызова лаунчера (fuzzel) и закрытия активного окна. Кнопка языка тоже кликабельна. В тултипе часов — календарь, колёсико мыши на часах листает месяцы.
А ещё Niri умеет запоминать свою языковую раскладку для каждого окна (как xxkb, если кто помнит).
Обоев нет, их всё равно никогда не видно.
Пока не решил, оставить динамические воркспейсы, или сделать именованные, с привязкой запуска приложений.
~/.config/niri/config.kdl
input {
keyboard {
// remember the layout for each window separately
track-layout "window"
xkb {
layout "us,ru"
options "grp:caps_toggle,grp_led:caps,lv3:ralt_switch"
variant ",winkeys"
}
numlock
}
touchpad {}
mouse {}
trackpoint {}
focus-follows-mouse max-scroll-amount="0%"
}
hotkey-overlay {
// skip-at-startup
}
animations {}
gestures {
hot-corners {
off
}
}
// forces applications to use server-side shadows and removes double borders
prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
// screenshot-path null
layout {
gaps 4
center-focused-column "never"
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
default-column-width { proportion 0.5; }
focus-ring {
width 3
active-color "#ff9000"
inactive-color "#7fc8ff"
}
border {
width 1
active-color "#505050"
inactive-color "#505050"
urgent-color "#9b0000"
}
shadow {
on
softness 30
spread 5
offset x=0 y=5
color "#00000064"
}
struts {}
}
//-=-=-=-=-=-=-=-=-= startup =-=-=-=-=-=-=-=-=-//
spawn-at-startup "dbus-update-activation-environment" "--all"
spawn-at-startup "fnott"
spawn-at-startup "waybar"
spawn-at-startup "xeyes"
//-=-=-=-=-=-=-=-=-=- rules -=-=-=-=-=-=-=-=-=-//
window-rule {
match app-id="XEyes"
match title="xeyes"
open-floating true
default-column-width { fixed 50; }
default-window-height { fixed 25; }
default-floating-position x=1680 y=-22 relative-to="top-left"
}
window-rule { // all windows
geometry-corner-radius 2
clip-to-geometry true
}
window-rule { // various floating apps
match app-id="galculator"
open-floating true
}
window-rule { // shadow off for non-floating windows
match is-floating=false
shadow { off; }
}
layer-rule { // fuzzel
match namespace="^launcher$"
shadow { on; }
geometry-corner-radius 5
}
//-=-=-=-=-=-=-=-=-=- binds -=-=-=-=-=-=-=-=-=-//
binds {
Mod+F1 { show-hotkey-overlay; }
Mod+A hotkey-overlay-title="Menu: fuzzel" { spawn "fuzzel"; }
Mod+W hotkey-overlay-title="Browser: vivaldi" { spawn "vivaldi-stable"; }
Mod+E hotkey-overlay-title="Editor: cream" { spawn "env" "GDK_BACKEND=x11" "cream"; }
Mod+T hotkey-overlay-title="Terminal: foot" { spawn "foot"; }
Mod+Y hotkey-overlay-title="Mail: sylpheed" { spawn "sylpheed"; }
Mod+I hotkey-overlay-title="IM: telegram" { spawn "Telegram"; }
Mod+C hotkey-overlay-title="Calculator" { spawn "galculator"; }
Mod+O repeat=false { toggle-overview; }
Mod+BackSpace repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
Mod+Shift+Left { move-column-left; }
Mod+Shift+Down { move-window-down; }
Mod+Shift+Up { move-window-up; }
Mod+Shift+Right { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Shift+Home { move-column-to-first; }
Mod+Shift+End { move-column-to-last; }
Mod+Ctrl+Left { focus-monitor-left; }
Mod+Ctrl+Right { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }
Mod+Shift+7 { move-column-to-workspace 7; }
Mod+Shift+8 { move-column-to-workspace 8; }
Mod+Shift+9 { move-column-to-workspace 9; }
Mod+Tab { focus-workspace-previous; }
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
Mod+Comma { consume-window-into-column; }
Mod+Period { expel-window-from-column; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-column-width-back; }
Mod+Ctrl+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
Mod+M { maximize-window-to-edges; }
Mod+Ctrl+F { expand-column-to-available-width; }
// Mod+C { center-column; }
// Mod+Ctrl+C { center-visible-columns; }
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
Mod+Space { toggle-window-floating; }
// Mod+Shift+Space { switch-focus-between-floating-and-tiling; }
Mod+Slash { switch-focus-between-floating-and-tiling; }
// Закрыть последнее уведомление (Fnott)
Mod+N { spawn "fnottctl" "dismiss"; }
Print { screenshot; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
// Mod+Shift+N hotkey-overlay-title="Restart Waybar" { spawn-sh "killall waybar && waybar"; }
Mod+F12 hotkey-overlay-title="Restart Waybar" { spawn-sh "killall waybar && waybar"; }
Ctrl+Alt+Delete { quit; }
}
//-=-=-=-=-=-=-=-=-=-= end =-=-=-=-=-=-=-=-=-=-//
~/.config/waybar/config.jsonc
[
{
"position": "top",
"layer": "bottom",
"modules-left": [ "custom/launcher", "niri/workspaces" ],
"modules-center": [ "niri/window" ],
"modules-right": [ "tray", "niri/language", "clock", "custom/close" ],
"niri/workspaces": {
"format": "{icon}",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"magic": "M"
},
"persistent-workspaces": {
"*": 9
},
"show-special": true,
"special-visible-only": true
},
"custom/launcher": {
"format": "≡",
"tooltip": true,
"tooltip-format": "Меню",
"on-click": "fuzzel"
},
"custom/close": {
"format": "×",
"tooltip": true,
"tooltip-format": "Закрыть окно",
"on-click": "niri msg action close-window"
},
"tray": {
"icon-size": 16,
"spacing": 1
},
"niri/language": {
"format-en": "en",
"format-ru": "ru",
"min-length": 3,
"on-click": "niri msg action switch-layout next"
},
"clock": {
"format": "{:%d %a %H:%M:%S}", // 17 Sun 12:15:00
"interval": 1, // every sec
"tooltip": true,
"tooltip-format": "<tt>{calendar}</tt>",
"calendar": {
"mode": "month",
"format": {
"months": "<span color='#1e1e2e'><b>{}</b></span>",
"weekdays": "<span color='#a0a2a6'><b>{}</b></span>",
"days": "<span color='#313244'>{}</span>",
"today": "<span background='#cc0000' color='#ffffff'><b>{}</b></span>"
}
},
"actions": { // scroll on clock -> shift calendar month
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
}
}
}
]
~/.config/waybar/style.css
* {
border: none;
border-radius: 0;
font-family: "Ubuntu";
font-size: 14px;
min-height: 0;
text-shadow: none;
}
/* --- geometry --- */
#workspaces button, #window, #tray, #language, #clock {
padding-top: 0px; padding-bottom: 0px;
padding-left: 0px; padding-right: 0px;
}
#workspaces button, #tray, #clock {
padding-left: 5px; padding-right: 5px;
}
/* --- color --- */
window#waybar { color: #000000; background: #ceccc8; }
#workspaces button.active { color: #000000; background: #ff9000; } /* #ce5c00 */
#workspaces button:hover { background: #aaaaaa; }
#language { font-weight: bold; color: #ffffff; background: #1020ff; margin: 2px; }
#language.ru { background: #dd0000; }
/* --- custom --- */
#custom-launcher, #custom-close { padding: 0 8px; font-size: 120%; }
#custom-launcher { margin-right: 4px; }
#custom-launcher:hover, #custom-close:hover { background: #aaaaaa; }
/* --- misc --- */
tooltip { background: rgba(249, 226, 175, 0.99); border: 1px solid #505050; border-radius: 6px; }
tooltip > box { padding: 0; margin: 0; }
tooltip label { padding: 0 10px; color: #333333; }
/* --- end --- */







