diff --git a/dotfiles/niri/.config/niri/cfg/layout.kdl b/dotfiles/niri/.config/niri/cfg/layout.kdl index d439c8d..7bea5d3 100644 --- a/dotfiles/niri/.config/niri/cfg/layout.kdl +++ b/dotfiles/niri/.config/niri/cfg/layout.kdl @@ -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 { diff --git a/dotfiles/niri/.config/niri/config.kdl b/dotfiles/niri/.config/niri/config.kdl index aee1c00..176892b 100644 --- a/dotfiles/niri/.config/niri/config.kdl +++ b/dotfiles/niri/.config/niri/config.kdl @@ -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" diff --git a/dotfiles/noctalia/.config/noctalia/config.toml b/dotfiles/noctalia/.config/noctalia/config.toml new file mode 100644 index 0000000..40de7e5 --- /dev/null +++ b/dotfiles/noctalia/.config/noctalia/config.toml @@ -0,0 +1,5 @@ +[shell] +polkit_agent = true + +[wallpaper] +directory = "/home/blank/.local/share/noctalia/wallpapers" diff --git a/dotfiles/noctalia/.local/state/noctalia/settings.toml b/dotfiles/noctalia/.local/state/noctalia/settings.toml new file mode 100644 index 0000000..f7f4c24 --- /dev/null +++ b/dotfiles/noctalia/.local/state/noctalia/settings.toml @@ -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 \ No newline at end of file diff --git a/dotfiles/zz-blankpad/niri/.config/niri/cfg/autostart.kdl b/dotfiles/zz-blankpad/niri/.config/niri/cfg/autostart.kdl index 1fea9d7..ec34e05 100644 --- a/dotfiles/zz-blankpad/niri/.config/niri/cfg/autostart.kdl +++ b/dotfiles/zz-blankpad/niri/.config/niri/cfg/autostart.kdl @@ -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" diff --git a/dotfiles/zz-blankpad/niri/.config/niri/cfg/desk-1-home.kdl b/dotfiles/zz-blankpad/niri/.config/niri/cfg/desk-1-home.kdl new file mode 100644 index 0000000..abf3d76 --- /dev/null +++ b/dotfiles/zz-blankpad/niri/.config/niri/cfg/desk-1-home.kdl @@ -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 +} diff --git a/dotfiles/zz-blankpad/niri/.config/niri/cfg/desk-2-portable.kdl b/dotfiles/zz-blankpad/niri/.config/niri/cfg/desk-2-portable.kdl new file mode 100644 index 0000000..1f1f7e6 --- /dev/null +++ b/dotfiles/zz-blankpad/niri/.config/niri/cfg/desk-2-portable.kdl @@ -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 +} diff --git a/dotfiles/zz-blankpad/niri/.config/niri/cfg/display.kdl b/dotfiles/zz-blankpad/niri/.config/niri/cfg/display.kdl deleted file mode 100644 index 814166d..0000000 --- a/dotfiles/zz-blankpad/niri/.config/niri/cfg/display.kdl +++ /dev/null @@ -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 -} diff --git a/dotfiles/zz-blankpad/niri/.config/niri/cfg/keybinds.kdl b/dotfiles/zz-blankpad/niri/.config/niri/cfg/keybinds.kdl index ab08974..de6cc4d 100644 --- a/dotfiles/zz-blankpad/niri/.config/niri/cfg/keybinds.kdl +++ b/dotfiles/zz-blankpad/niri/.config/niri/cfg/keybinds.kdl @@ -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. diff --git a/dotfiles/zz-blankpad/niri/.config/niri/cfg/switch-events.kdl b/dotfiles/zz-blankpad/niri/.config/niri/cfg/switch-events.kdl new file mode 100644 index 0000000..44d85fc --- /dev/null +++ b/dotfiles/zz-blankpad/niri/.config/niri/cfg/switch-events.kdl @@ -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"; } +}