niri(blankpad): desk-profile system, keybind rework, lid handler, noctalia config tracked

- config.kdl: display include optional=true (desk profiles link it per-desk),
  new optional switch-events.kdl include (per-host, blankpad-only)
- keybinds: swap-window-left/right on Mod+CTRL+H/L+arrows (join/exit columns
  on pass), move-column demoted to Mod+CTRL+Alt+chords; Print trio -> flameshot
  full/gui/screen (CTRL+Shift trio kept); launcher Mod+CTRL+Return -> Mod+D;
  Alt+Tab noctalia window-switcher; Mod+V clipboard panel; Mod+Shift+Space
  handy post-process; Mod+Shift+D desk cycle
- layout: preset column widths 12.5/25/33/50/67/75/87.5%
- desk-1-home.kdl: EDID-identity-keyed positions (M34 + eDP long names; PM1601
  connector placeholder pending EDID capture), focus-at-startup M34-first
- desk-2-portable.kdl: skeleton, EDID capture TODO
- switch-events: lid-close -> noctalia session lock-and-suspend
- autostart: handy --start-hidden (replaces Handy self-autostart)
- noctalia config.toml + settings.toml now tracked
- zz-blankpad display.kdl retired to .AGENTTRASH (superseded by desk-1-home)
niri validate: pass (assembled blankpad layout)
This commit is contained in:
Frank
2026-10-09 14:17:21 -07:00
parent 1d32829428
commit 4ec47a5b7e
10 changed files with 339 additions and 36 deletions
+4 -1
View File
@@ -5,10 +5,13 @@
background-color "transparent" // <- needed for noctalia-shell to set wallpaper
preset-column-widths {
proportion 0.125
proportion 0.25
proportion 0.33333
proportion 0.5
proportion 0.66667
proportion 0.875
proportion 0.75
proportion 0.875
}
struts {
+2 -1
View File
@@ -8,10 +8,11 @@ gestures {
include "./cfg/autostart.kdl"
include "./cfg/keybinds.kdl"
include "./cfg/input.kdl"
include "./cfg/display.kdl"
include optional=true "./cfg/display.kdl"
include "./cfg/layout.kdl"
include "./cfg/rules.kdl"
include "./cfg/misc.kdl"
include optional=true "./cfg/switch-events.kdl"
include "noctalia.kdl"
@@ -0,0 +1,5 @@
[shell]
polkit_agent = true
[wallpaper]
directory = "/home/blank/.local/share/noctalia/wallpapers"
@@ -0,0 +1,253 @@
config_version = 14
[audio]
enable_overdrive = true
enable_sounds = true
[bar.default]
center = [ "cat" ]
end = [ "notifications", "clipboard", "network", "bluetooth", "tray", "battery", "session", "control-center", "clock" ]
font_family = "Terminess Nerd Font"
font_weight = 700
[location]
auto_locate = true
[lockscreen_widgets]
enabled = false
schema_version = 2
widget_order = [
"lockscreen-login-box@DP-1",
"lockscreen-login-box@HDMI-A-1",
"lockscreen-login-box@DP-2",
"lockscreen-login-box@eDP-1"
]
[lockscreen_widgets.grid]
cell_size = 16
major_interval = 4
visible = true
[lockscreen_widgets.widget."lockscreen-login-box@DP-1"]
box_height = 196.0
box_width = 810.0
cx = 640.0
cy = 538.0
output = "DP-1"
placement_height = 720.0
placement_width = 1280.0
rotation = 0.0
type = "login_box"
[lockscreen_widgets.widget."lockscreen-login-box@DP-1".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
center_password_text = false
input_opacity = 1.0
input_radius = 6.0
layout = "regular"
show_caps_lock = true
show_keyboard_layout = true
show_login_button = true
show_media = true
show_session_buttons = true
show_unlock_hint = true
show_weather = true
[lockscreen_widgets.widget."lockscreen-login-box@DP-2"]
box_height = 196.0
box_width = 810.0
cx = 1719.999755859375
cy = 1221.60009765625
output = "DP-2"
placement_height = 1440.0
placement_width = 3440.0
rotation = 0.0
type = "login_box"
[lockscreen_widgets.widget."lockscreen-login-box@DP-2".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
center_password_text = false
input_opacity = 1.0
input_radius = 6.0
layout = "regular"
show_caps_lock = true
show_keyboard_layout = true
show_login_button = true
show_media = true
show_session_buttons = true
show_unlock_hint = true
show_weather = true
[lockscreen_widgets.widget."lockscreen-login-box@HDMI-A-1"]
box_height = 196.0
box_width = 720.0
cx = 600.0
cy = 1628.800048828125
output = "HDMI-A-1"
placement_height = 1920.0
placement_width = 1200.0
rotation = 0.0
type = "login_box"
[lockscreen_widgets.widget."lockscreen-login-box@HDMI-A-1".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
center_password_text = false
input_opacity = 1.0
input_radius = 6.0
layout = "regular"
show_caps_lock = true
show_keyboard_layout = true
show_login_button = true
show_media = true
show_session_buttons = true
show_unlock_hint = true
show_weather = true
[lockscreen_widgets.widget."lockscreen-login-box@eDP-1"]
box_height = 196.0
box_width = 810.0
cx = 960.0
cy = 852.5
output = "eDP-1"
placement_height = 1080.0
placement_width = 1920.0
rotation = 0.0
type = "login_box"
[lockscreen_widgets.widget."lockscreen-login-box@eDP-1".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
center_password_text = false
input_opacity = 1.0
input_radius = 6.0
layout = "regular"
show_caps_lock = true
show_keyboard_layout = true
show_login_button = true
show_media = true
show_session_buttons = true
show_unlock_hint = true
show_weather = true
[nightlight]
enabled = true
[plugin_settings."dotnetrob/cat"]
panel_open_near_click = false
panel_placement = "floating"
panel_position = "center"
[plugins]
enabled = [
"noctalia/wallhaven",
"prponkshe/umbriel-displays",
"ashur-d/nvim-projects",
"thepunkoff/pomodoro",
"umedbazarov/webapp-maker",
"emiliovenegas/omp-launcher",
"yugaaank/better-clock",
"dotnetrob/cat",
"yuuto/calculator",
"joshuaslate/shelly"
]
[shell]
external_ip_enabled = true
font_family = "Terminess Nerd Font Propo"
[shell.panel]
transparency_mode = "glass"
[theme]
builtin = "Kanagawa"
community_palette = "Gruber Darker"
custom_palette = "Gruber Red"
mode = "dark"
shell_mode = "dark"
source = "custom"
[theme.templates]
builtin_ids = [
"alacritty",
"btop",
"cava",
"emacs",
"foot",
"gtk3",
"gtk4",
"ghostty",
"helix",
"hyprland",
"kcolorscheme",
"kitty",
"labwc",
"mango",
"niri",
"qt",
"scroll",
"starship",
"sway",
"umbriel",
"wezterm"
]
community_ids = [
"pi-agent",
"ytm-player",
"pywalfox",
"pywalfox-beta4",
"ungoogled-chromium",
"micro",
"neovim",
"obsidian",
"vscode",
"steam",
"rofi",
"fastfetch",
"bat",
"fzf",
"glow",
"herdr",
"lazygit",
"tmux"
]
[wallpaper]
transition = [ "fade" ]
[wallpaper.automation]
enabled = true
interval_seconds = 1200
[wallpaper.default]
path = "/home/blank/.local/share/noctalia/wallpapers/wallhaven_v9e2w3.jpg"
[wallpaper.last]
path = "/home/blank/.local/share/noctalia/wallpapers/wallhaven_v9e2w3.jpg"
[wallpaper.monitors.DP-1]
path = "/home/blank/.local/share/noctalia/wallpapers/wallhaven_nzz3gy.jpg"
[wallpaper.monitors.DP-2]
path = "/home/blank/.local/share/noctalia/wallpapers/wallhaven_v9e2w3.jpg"
[wallpaper.monitors.HDMI-A-1]
path = "/home/blank/.local/share/noctalia/wallpapers/wallhaven_v9e2w3.jpg"
[wallpaper.monitors.eDP-1]
path = "/home/blank/.local/share/noctalia/wallpapers/wallhaven_v9e2w3.jpg"
[weather]
unit = "imperial"
[widget.cat]
type = "dotnetrob/cat:cat"
[widget.tray]
drawer = true
@@ -2,3 +2,4 @@
// https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#spawn-sh-at-startup
spawn-at-startup "noctalia"
spawn-at-startup "handy" "--start-hidden"
@@ -0,0 +1,32 @@
// ────────────── Desk Profile: home (current rig) ──────────────
// Applied by symlinking this file to cfg/display.kdl (see scripts/desk.sh).
// Panels are keyed by EDID identity (manufacturer model serial), NOT by
// connector name — connector names reshuffle between desks; identity travels.
//
// requires: Sceptre Tech Inc Sceptre M34 Unknown
// requires: Lenovo Group Limited 0x40A9 Unknown
// optional: HDMI-A-1 (PM1601, dock-dependent)
output "Sceptre Tech Inc Sceptre M34 Unknown" {
mode "3440x1440@239.999"
scale 1
transform "normal"
position x=1581 y=-600
focus-at-startup
}
// PM1601 portrait panel (dock-dependent). EDID string NOT captured as of
// 2026-10-09 (panel disconnected) — connector-keyed placeholder.
// When plugged in: run `desk.sh capture`, re-key this block to the printed
// long name, update #optional above.
output "HDMI-A-1" {
scale 1
transform "90"
position x=1200 y=0
}
output "Lenovo Group Limited 0x40A9 Unknown" {
scale 1.0
position x=5021 y=-240
focus-at-startup
}
@@ -0,0 +1,18 @@
// ────────────── Desk Profile: portable (skeleton) ──────────────
// SKELETON — portable monitor EDID not captured yet. On first use at the
// portable desk: run `desk.sh capture`, replace PORTABLE-EDID-TBD below and
// in the requires list with the printed long name, adjust position to taste.
// requires: Lenovo Group Limited 0x40A9 Unknown
// requires: PORTABLE-EDID-TBD
output "Lenovo Group Limited 0x40A9 Unknown" {
scale 1.0
position x=0 y=0
focus-at-startup
}
// Assumed: 1920x1080 landscape panel right of the laptop panel.
output "PORTABLE-EDID-TBD" {
scale 1.0
position x=1920 y=0
}
@@ -1,29 +0,0 @@
// ────────────── Output Configuration ──────────────
// You can run `niri msg outputs` to get the correct name for your displays.
// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
//
// eDP-1 (laptop panel) is pinned too: an output block resets unspecified
// properties to defaults, so its 1.25 scale must be repeated here.
//
// Both external PM1601 panels run portrait. niri's transform is
// counter-clockwise: "90" = panel's top bezel faces left, "270" = top bezel
// faces right. In portrait a 180° flip is the 90<->270 swap.
output "DP-2" {
mode "3440x1440@239.999"
scale 1
transform "normal"
position x=1581 y=-600
}
output "HDMI-A-1" {
scale 1
transform "90"
position x=1200 y=0
}
output "eDP-1" {
scale 1.0 // MUST restate: dashed-out by the block otherwise
position x=5021 y=-240
}
@@ -16,9 +16,13 @@ binds {
Mod+Shift+Return hotkey-overlay-title="Open Wallpaper Selector: noctalia wallpaper toggle" { spawn-sh "noctalia msg panel-toggle wallpaper"; }
Mod+S hotkey-overlay-title="Open Control Center: noctalia controlCenter" { spawn-sh "noctalia msg panel-toggle control-center"; }
Mod+Shift+S hotkey-overlay-title="Open Settings: noctalia settings" { spawn-sh "noctalia msg settings-toggle"; }
Mod+CTRL+Return hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "noctalia msg panel-toggle launcher"; }
Mod+D hotkey-overlay-title="Open App Launcher: noctalia launcher" { spawn-sh "noctalia msg panel-toggle launcher"; }
Mod+ALT+L hotkey-overlay-title="Lock Screen: noctalia lock" { spawn-sh "noctalia msg session lock"; }
Mod+Shift+Q hotkey-overlay-title="Session Menu: noctalia sessionMenu" { spawn-sh "noctalia msg panel-toggle session"; }
Mod+V hotkey-overlay-title="Clipboard History: noctalia panel" { spawn-sh "noctalia msg panel-toggle clipboard"; }
Alt+TAB hotkey-overlay-title="Window Switcher: noctalia" { spawn-sh "noctalia msg window-switcher"; }
Mod+Shift+Space hotkey-overlay-title="Handy: toggle post-process recording" allow-when-locked=true { spawn-sh "handy --toggle-post-process"; }
Mod+Shift+D hotkey-overlay-title="Cycle Desk Profile" { spawn-sh "desk.sh cycle"; }
// Please set the text editor of your choice.
// Mod+Shift+E hotkey-overlay-title="Open Text Editor: Zed" { spawn "zed"; }
@@ -52,10 +56,15 @@ binds {
Mod+Down { focus-window-down; }
Mod+J { focus-window-down; }
Mod+CTRL+Left { move-column-left; }
Mod+CTRL+H { move-column-left; }
Mod+CTRL+Right { move-column-right; }
Mod+CTRL+L { move-column-right; }
// swap-window = window walks sideways, joining/exiting columns it passes
Mod+CTRL+Left { swap-window-left; }
Mod+CTRL+H { swap-window-left; }
Mod+CTRL+Right { swap-window-right; }
Mod+CTRL+L { swap-window-right; }
Mod+CTRL+Alt+Left { move-column-left; }
Mod+CTRL+Alt+H { move-column-left; }
Mod+CTRL+Alt+Right { move-column-right; }
Mod+CTRL+Alt+L { move-column-right; }
Mod+CTRL+UP { move-window-up; }
Mod+CTRL+K { move-window-up; }
Mod+CTRL+Down { move-window-down; }
@@ -149,6 +158,9 @@ binds {
CTRL+Shift+1 hotkey-overlay-title="Screenshot: flameshot full" { spawn-sh "flameshot full"; }
CTRL+Shift+2 hotkey-overlay-title="Screenshot: flameshot screen" { spawn-sh "flameshot screen"; }
CTRL+Shift+3 hotkey-overlay-title="Screenshot: flameshot region" { spawn-sh "flameshot gui"; }
Print hotkey-overlay-title="Screenshot: flameshot full" { spawn-sh "flameshot full"; }
Ctrl+Print hotkey-overlay-title="Screenshot: flameshot region" { spawn-sh "flameshot gui"; }
Alt+Print hotkey-overlay-title="Screenshot: flameshot screen" { spawn-sh "flameshot screen"; }
// ─── Emergency Escape Key ───
// Use this when a fullscreen app blocks your keybinds.
@@ -0,0 +1,7 @@
// ────────────── Switch (lid) Events — blankpad laptop ──────────────
// Included by config.kdl via include optional=true; only blankpad links this.
// Pair with logind: if HandleLidSwitch=ignore is set, this is the sole path.
switch-events {
lid-close { spawn "noctalia" "msg" "session" "lock-and-suspend"; }
}