LINUX.ORG.RU

Niri

 , , ,


1

2

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 --- */
★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 8)

Как по мне – выглядит симпатично и по-хорошему лаконично.

Но описание для подтверждения всё равно нужно: конфиги, что настраивал и др.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Всё, что настраивал, по сути, видно на скриншоте... Но ОК, сейчас допишу.

OldManClone ★★
() автор топика
Последнее исправление: OldManClone (всего исправлений: 1)
Ответ на: комментарий от OldManClone

Уже намного лучше.

Но я бы сами конфиги вставил в ОП (в лоркоде это тег [code]), движок умеет их сворачивать в компактный размер.

hobbit ★★★★★
()
Ответ на: комментарий от OldManClone

Он работает, но только при просмотре темы в списке:

https://www.linux.org.ru/gallery/screenshots/

Если зайти на страницу самой темы – он разворачивается.

Подтвердил, добавил подсветку синтаксиса (отдельной разметки для KDL нет, я немного жульнически указал для него JSON, хоть это и не совсем то; для CSS есть родная).

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)

типа тайлинг, но как окна… у меня вопрос: где скрытые окна живут? или это же тайлинг - тут другая концепция.

amd_amd ★★★★★
()
Ответ на: комментарий от amd_amd

убийца Hyprland

Как их кстати называют-то, ну этих… которые живых мертвецов и всякую нечисть изничтожают?

err
()
Ответ на: комментарий от amd_amd

типа тайлинг, но как окна… у меня вопрос: где скрытые окна живут? или это же тайлинг - тут другая концепция.

Другая, да. Ненужные окна уезжают вправо, за монитор. Получается такая длинная горизонтальная лента окон, на которую ты можешь смотреть через «дырку» экрана. И двигать экран по ней влево - вправо.

Ну и воркспейсы есть ещё.

OldManClone ★★
() автор топика
Ответ на: комментарий от kneedeep

Они вообще не призывают и не изгоняют, а гадают на останках. Будущее там предсказывают и всякое такое. А призывали и изгоняли по идее некромаги… но потом как-то смешалось, и теперь всё это (и причём предсказания в последнюю очередь) приписывается именно некромантам. Ну в какой-то степени это даже прикольно — значит жанр «живёт» и эволюционирует :)

CrX ★★★★★
()
Ответ на: комментарий от CrX

Раз вопрос был про всяких живых мертвецов, то и дальнейшее обсуждение предполагало что-то такое же фентезийное, а не близкое к реальности, а там да, слишком много фантазий и смешений из разных фольклоров.

kneedeep
()
Ответ на: комментарий от kneedeep

Да вот интересно, основа откуда? Я почему-то Хому Брута вспомнил, думаю из него вышел бы лихой охотник на вампиров… кабы судьба по иному распорядилась. Эдакий Ван-Хельсинг из Полтавской губернии :)

err
()
Ответ на: комментарий от err

Да вот интересно, основа откуда?

Да из фольклора славянского ведьмаки и были.

вышел бы лихой охотник на вампиров

Интересно на такое посмотреть, конечно, именно на методы борьбы с ними :)

kneedeep
()
Последнее исправление: kneedeep (всего исправлений: 1)
Ответ на: комментарий от kneedeep

Интересно на такое посмотреть, конечно :)

Тфу-тфу-тфу, спасибо, а то снимут еще одного Вия, бррр)

err
()
Последнее исправление: err (всего исправлений: 1)
Ответ на: комментарий от hobbit

Экзорцист

Не, у этого кажется узкая специализация: демонология что-ли?) Знаю что в некоторых играх есть «паладины», вот эти перцы как раз по всей нечести работают.

err
()

Это то самое что мне нужно было для vm легкое при этом удобное До этого пытался сидеть на i3 но не мое не могу без нормальной мышки плюс ставил для мышки дополнение но тоже не то все буду ставить себе и разбираться ) Спасибо ))

xikan
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.