diff --git a/docs/chezmoi/externals-and-ignore.mdx b/docs/chezmoi/externals-and-ignore.mdx index 1bd57d5..631ef32 100644 --- a/docs/chezmoi/externals-and-ignore.mdx +++ b/docs/chezmoi/externals-and-ignore.mdx @@ -149,6 +149,7 @@ mise tool versions stay local to each machine and are not managed. .local/bin/kitty-day-save .local/bin/niri-launch .local/bin/umbriel-launch +.local/bin/umbriel-smart-move .config/fish/auto-Niri.fish .local/bin/cp-appid .local/bin/projects-sync diff --git a/docs/desktop/index.mdx b/docs/desktop/index.mdx index fed6b09..d183a9c 100644 --- a/docs/desktop/index.mdx +++ b/docs/desktop/index.mdx @@ -6,7 +6,7 @@ sidebar: --- :::note[Role gating] -`.chezmoiignore.tmpl` skips the Linux desktop layer unless the machine runs Linux **and** its role is `desktop` or `laptop`. The gated targets are `~/.config/niri`, `~/.config/hypr`, `~/.config/umbriel`, `~/.config/uwsm`, `~/.config/noctalia`, `~/.config/vicinae`, `~/.config/niri-dynamic-workspaces`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/xdg-terminals.list`, `~/.config/systemd`, `~/.local/bin/kitty-day-save`, `~/.local/bin/niri-launch`, `~/.local/bin/umbriel-launch`, `~/.local/bin/cp-appid`, `~/.local/bin/projects-sync`, and `~/.config/fish/auto-Niri.fish`. On `mac` and `server` roles these are not applied. +`.chezmoiignore.tmpl` skips the Linux desktop layer unless the machine runs Linux **and** its role is `desktop` or `laptop`. The gated targets are `~/.config/niri`, `~/.config/hypr`, `~/.config/umbriel`, `~/.config/uwsm`, `~/.config/noctalia`, `~/.config/vicinae`, `~/.config/niri-dynamic-workspaces`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/xdg-terminals.list`, `~/.config/systemd`, `~/.local/bin/kitty-day-save`, `~/.local/bin/niri-launch`, `~/.local/bin/umbriel-launch`, `~/.local/bin/umbriel-smart-move`, `~/.local/bin/cp-appid`, `~/.local/bin/projects-sync`, and `~/.config/fish/auto-Niri.fish`. On `mac` and `server` roles these are not applied. `~/.config/waybar`, the `omarchy-*` scripts, the `niri-launch-ai` / `-browser` / `-terminal` / `-webapp` wrappers, and `~/.local/bin/tmux-niri-title` are **not** listed there, so chezmoi applies them on every role and OS. Only the exact path `.local/bin/niri-launch` is ignored, not the wrappers that call it. ::: @@ -16,7 +16,7 @@ Three Wayland compositors are configured side by side. niri is the original setu | Page | Covers | | --- | --- | | [niri](/desktop/niri) | `~/.config/niri` (base config, Noctalia colors, the `config.d/` fragments, per-display profiles), niri helper scripts, the `niri-launch*` launchers, `cp-appid`, the `nirinit` user service | -| [Umbriel](/desktop/umbriel) | `~/.config/umbriel` (session, layout, outputs, rules, scratchpads, binds) and `umbriel-launch` | +| [Umbriel](/desktop/umbriel) | `~/.config/umbriel` (session, layout, outputs, rules, scratchpads, binds), `umbriel-launch`, and `umbriel-smart-move` | | [Hyprland](/desktop/hyprland) | `~/.config/hypr` Lua config on Omarchy: bindings, input, look and feel, monitors, hyprsunset, the portal; every `omarchy-*` script in `~/.local/bin`. `~/.config/omarchy` (shell, hooks, menus, themes) is the [prdlk/omarchy](https://github.com/prdlk/omarchy) external, see [externals](/chezmoi/externals-and-ignore#app-externals) | | [Waybar](/desktop/waybar) | `~/.config/waybar`: module layout, stylesheet, the `window_pill.py` title module | | [Fonts and default apps](/desktop/fonts-and-apps) | `~/.config/fontconfig/fonts.conf`, `~/.config/mimeapps.list`, the Victor Mono Nerd Font packages | diff --git a/docs/desktop/umbriel.mdx b/docs/desktop/umbriel.mdx index 01167ab..7fdc5ab 100644 --- a/docs/desktop/umbriel.mdx +++ b/docs/desktop/umbriel.mdx @@ -18,6 +18,7 @@ Linux `desktop` and `laptop` roles only (`.chezmoiignore.tmpl`). `umbriel` and i | `dot_config/umbriel/rules.toml` | `~/.config/umbriel/rules.toml`: scratchpads, window and layer rules | | `dot_config/umbriel/binds.toml` | `~/.config/umbriel/binds.toml` | | `dot_local/bin/executable_umbriel-launch` | `~/.local/bin/umbriel-launch` | +| `dot_local/bin/executable_umbriel-smart-move` | `~/.local/bin/umbriel-smart-move` | Umbriel watches these files and applies a valid save immediately; `umbriel config validate` checks them without a session. Include paths resolve against the symlinks in `~/.config/umbriel`, not the chezmoi source. Defining `[keybinds]` replaces Umbriel's built-in binds, so `binds.toml` is the complete set. @@ -138,7 +139,7 @@ Noctalia's bar, panels, notifications, dock, OSD, and desktop widgets get blur t | `Mod+WheelUp` / `Mod+WheelDown` | focus left / right | | `Mod+Left` / `Mod+Right` / `Mod+Up` | focus the output in that direction | | `Mod+O`, `Super+Ctrl+J` / `Super+Ctrl+K` | next / previous output | -| `Mod+Shift+H` / `Mod+Shift+L` | move column left / right | +| `Mod+Shift+H` / `Mod+Shift+L` | [smart move](#smart-move) left / right: consume or expel, then on to the next output | | `Super+Ctrl+Shift+H` / `Super+Ctrl+Shift+L` | move column first / last | | `Mod+Shift+J` / `Mod+Shift+K` | move column to next / previous workspace | | `Mod+Shift+Down` / `Mod+Shift+Up` | move column to the right / left output | @@ -151,10 +152,22 @@ Noctalia's bar, panels, notifications, dock, OSD, and desktop widgets get blur t | `Mod+Ctrl+F` | fullscreen | | `Mod+C` | center column | | `Mod+Ctrl+O` | toggle floating | -| `Mod+W` | toggle the workspace between the scrolling and master layouts | -| `Mod+Shift+W` | tab / untab the column | +| `Mod+W` | toggle the workspace between the scrolling and dwindle layouts | +| `Mod+G` | tab the focused window with the windows stacked in its column, or stack a tab group again (scrolling layout; dwindle has no columns). Windows join a group by dragging onto its tab bar | | `Mod+Q` | close window | | `Mod+1`…`Mod+9`, `Alt+Q W E R Y U I O` | workspace 1–9 / 1–8 | | `Mod+Shift+1`…`9`, `Alt+Shift+Q`…`O` | move window to that workspace | Workspaces are dynamic per output. Not carried over: niri's named `w`/`h`/`x` workspaces (`niri-dynamic-workspaces`), center-visible-columns, window-only screenshots, the vicinae window switcher (use the overview), the Linear and AI-cycle launchers whose keys now toggle scratchpads, and the Omarchy-only Hyprland binds (`omarchy-pip`, `omarchy-summon`, notification dismiss, strata in the terminal's cwd). + +### Smart move [#smart-move] + +`umbriel-smart-move left|right` ports niri's `consume-or-expel-window-left/right` and continues across outputs. In the scrolling layout it picks one action for the focused window: + +| Focused window | Action | +| --- | --- | +| stacked with other windows in its column | expel it to a new column on that side | +| alone, with a column on that side | consume it into that column | +| alone, at the strip's end | move it to the output on that side (nothing at the outermost output) | + +Two presses step a window past its neighbour: the first stacks it into the neighbour's column, the second expels it on the far side. On dwindle and master workspaces it runs `window-move-or-output-left/right`. Floating and scratchpad windows stay put.