mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 11:32:42 +00:00
docs(desktop): document Umbriel compositor configuration
This commit is contained in:
1 parent
32ede00c66
commit
21e108e13c
7 files changed
+182
-5
No files matched your search
@@ -68,6 +68,7 @@ Pulling a remote change before the refresh window: `chezmoi apply --refresh-exte
|
||||
| `arch.pacman` / `arch.aur` | `10-packages` (pacman / `yay` or `paru`; yay bootstrapped if neither exists) | every Linux role |
|
||||
| `arch.desktop.pacman` / `.aur` | same | roles `desktop`, `laptop` |
|
||||
| `arch.desktop.omarchy` | pacman, only if `pacman-conf -l` lists `omarchy` | Omarchy machines |
|
||||
| `arch.desktop.cachyos` | pacman, only if `pacman-conf -l` lists `cachyos` | CachyOS machines |
|
||||
| `darwin.brew` / `.cask` | Homebrew | macOS |
|
||||
| `shared.cargo` | `15-tools`, after installing rustup if `cargo` is missing | every OS |
|
||||
| `shared.mise` | `15-tools`: `mise use -g` for tools absent from the global config | every OS |
|
||||
|
||||
@@ -41,6 +41,7 @@ One manifest per platform, plus a `shared` block. Any edit to the file changes t
|
||||
| pacman | `niri`, `noctalia`, `xwayland-satellite`, `polkit-gnome`, `uwsm`, `xdg-user-dirs`; Wayland utilities `wl-clipboard`, `cliphist`, `wtype`, `ydotool`, `grim`, `slurp`, `hyprpicker`, `pamixer`, `brightnessctl`, `libnotify`; apps `nautilus`, `imv`, `mpv`, `evince`, `chromium`, `obsidian`; strata runtime deps `bubblewrap`, `desktop-file-utils`, `fontconfig`, `gstreamer`, `gst-libav`, `gst-plugins-base`, `gst-plugins-good`, `gtk4`, `gtksourceview5`, `gvfs`, `poppler-glib`, `xdg-utils` |
|
||||
| AUR (or a sync repo with the same name) | `vicinae-bin`, `tldraw-offline-bin`; desktop apps `beeper-bin`, `fastmail`, `1password`, `brave-origin-bin`, `claude-desktop`, `spotify` |
|
||||
| `[omarchy]` repo (`packages.arch.desktop.omarchy`, only when `pacman-conf -l` lists that repo) | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker` |
|
||||
| `[cachyos]` repo (`packages.arch.desktop.cachyos`, only when `pacman-conf -l` lists that repo) | `umbriel` (the AUR `umbriel` is a placeholder and `umbriel-git` conflicts with the repo build) |
|
||||
|
||||
Hyprland, Waybar and the `omarchy-*` commands come with the Omarchy install and are not declared. `niri-dynamic-workspaces` (niri startup) has no package; install it by hand. strata (the folder handler) has no package either; [15-tools](/chezmoi/scripts#15-tools) runs its installer.
|
||||
|
||||
|
||||
@@ -130,8 +130,14 @@ mise tool versions stay local to each machine and are not managed.
|
||||
.config/niri/**
|
||||
.config/hypr
|
||||
.config/hypr/**
|
||||
.config/umbriel
|
||||
.config/umbriel/**
|
||||
.config/uwsm
|
||||
.config/uwsm/**
|
||||
.config/noctalia
|
||||
.config/noctalia/**
|
||||
.config/vicinae
|
||||
.config/vicinae/**
|
||||
.config/niri-dynamic-workspaces
|
||||
.config/niri-dynamic-workspaces/**
|
||||
.config/fontconfig
|
||||
@@ -141,6 +147,7 @@ mise tool versions stay local to each machine and are not managed.
|
||||
.config/systemd/**
|
||||
.local/bin/kitty-day-save
|
||||
.local/bin/niri-launch
|
||||
.local/bin/umbriel-launch
|
||||
.config/fish/auto-Niri.fish
|
||||
.local/bin/cp-appid
|
||||
.local/bin/projects-sync
|
||||
@@ -157,6 +164,14 @@ The block is emitted, and these paths skipped, unless the OS is `linux` and the
|
||||
|
||||
See [Desktop](/desktop/niri) for what the layer contains. Gaps in the gate: the block lists `niri-launch` but not its siblings (`niri-launch-ai`, `niri-launch-browser`, `niri-launch-terminal`, `niri-launch-webapp`), and the waybar config (`dot_config/waybar/`) is not gated at all, so it applies on every role. `dot_config/niri/scripts/` is covered by `.config/niri/**`.
|
||||
|
||||
### Generated theme files
|
||||
|
||||
```txt
|
||||
.config/umbriel/noctalia.toml
|
||||
```
|
||||
|
||||
Noctalia's umbriel template rewrites this file on every theme change, so it stays out of the repo on every machine. `config.toml` includes it as an optional file; see [Umbriel](/desktop/umbriel#theme).
|
||||
|
||||
### Secrets in runtime state
|
||||
|
||||
```txt
|
||||
|
||||
@@ -49,7 +49,7 @@ Seven scripts run during `chezmoi apply`. Five live in `.chezmoiscripts/`, a dir
|
||||
|
||||
1. Uses `pacman` directly when running as root, otherwise `sudo pacman`.
|
||||
2. `pacman -T` filters each list down to names no installed package provides (so `mise-bin` satisfies `mise`, `yazi-git` satisfies `yazi`), then `pacman -S --needed --noconfirm` installs the rest of `packages.arch.pacman`.
|
||||
3. For roles `desktop` and `laptop`, the same for `packages.arch.desktop.pacman`, and, when `pacman-conf -l` lists an `omarchy` repo, for `packages.arch.desktop.omarchy`.
|
||||
3. For roles `desktop` and `laptop`, the same for `packages.arch.desktop.pacman`, and for `packages.arch.desktop.omarchy` / `packages.arch.desktop.cachyos` when `pacman-conf -l` lists an `omarchy` / `cachyos` repo.
|
||||
4. Builds the AUR list: `packages.arch.desktop.aur` plus `packages.arch.aur` for `desktop`/`laptop`, only `packages.arch.aur` for other roles, then drops every name `pacman -T` says is already provided. Desktop apps already installed from a sync repo (CachyOS, `[omarchy]`) are therefore neither rebuilt nor replaced.
|
||||
5. If anything is left and neither `yay` nor `paru` is installed, bootstraps `yay`: from a sync repo when `pacman -Si yay` finds one (CachyOS, chaotic-aur), otherwise by building `yay-bin` from the AUR with `makepkg -si` (installs `git` and `base-devel` first; skipped as root, since makepkg refuses root).
|
||||
6. Runs `yay -S --needed --noconfirm` on the remaining names, falling back to `paru`. yay prefers a sync repo over the AUR when both have the name. If no helper could be bootstrapped it prints `warning: no yay/paru and none could be bootstrapped — skipping AUR packages: …` and continues.
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
---
|
||||
title: Desktop
|
||||
description: The Linux desktop layer — niri and Hyprland compositors, the Waybar bar, fontconfig, and default applications.
|
||||
description: The Linux desktop layer — niri, Umbriel, and Hyprland compositors, the Waybar bar, fontconfig, and default applications.
|
||||
sidebar:
|
||||
label: Overview
|
||||
---
|
||||
|
||||
:::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/noctalia`, `~/.config/vicinae`, `~/.config/niri-dynamic-workspaces`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/systemd`, `~/.local/bin/kitty-day-save`, `~/.local/bin/niri-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/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.
|
||||
|
||||
`~/.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.
|
||||
:::
|
||||
|
||||
Two Wayland compositors are configured side by side. niri is the original setup, paired with the Noctalia shell. Hyprland runs on top of [Omarchy](https://omarchy.org), and its bindings are ported from the niri config: the same keys launch the same apps where both compositors support it. Waybar is the Hyprland bar. Noctalia replaces it under niri.
|
||||
Three Wayland compositors are configured side by side. niri is the original setup, paired with the Noctalia shell. Umbriel, Noctalia's own scrolling compositor, ports the niri config and adds Hyprland's per-app scratchpads, with Noctalia as the only session process. Hyprland runs on top of [Omarchy](https://omarchy.org), and its bindings are ported from the niri config: the same keys launch the same apps where both compositors support it. Waybar is the Hyprland bar. Noctalia replaces it under niri and Umbriel.
|
||||
|
||||
| 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` |
|
||||
| [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 |
|
||||
@@ -30,5 +31,6 @@ Two Wayland compositors are configured side by side. niri is the original setup,
|
||||
| pacman | `niri`, `noctalia` (the CachyOS build where that repo is configured, else `extra`), `xwayland-satellite`, `polkit-gnome`, `uwsm`, `xdg-user-dirs`, Wayland utilities (`wl-clipboard`, `cliphist`, `wtype`, `ydotool`, `grim`, `slurp`, `hyprpicker`, `pamixer`, `brightnessctl`, `libnotify`), the bound apps (`nautilus`, `imv`, `mpv`, `evince`, `chromium`, `obsidian`), and strata's runtime deps |
|
||||
| AUR via `yay`/`paru` (a sync repo wins when it has the name) | `vicinae-bin`, `tldraw-offline-bin`, and the desktop apps `beeper-bin`, `fastmail`, `1password`, `brave-origin-bin`, `claude-desktop`, `spotify` |
|
||||
| `[omarchy]` repo, when configured | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker` |
|
||||
| `[cachyos]` repo, when configured | `umbriel` |
|
||||
|
||||
AUR names that an installed package already provides are skipped; with no `yay` or `paru` the script bootstraps `yay` first. strata, the default file manager, comes from its own installer in [15-tools](/chezmoi/scripts#15-tools). Hyprland, Waybar, and the `omarchy-*` commands that the scripts call (`omarchy-menu`, `omarchy-launch-or-focus`, and others) come from an Omarchy install. This repo does not install them. See [chezmoi scripts](/chezmoi/scripts) for the full install flow and [packages.yaml](/chezmoi/data#packagesyaml) for the complete lists.
|
||||
@@ -3,5 +3,5 @@ import { defineMeta } from "blume";
|
||||
export default defineMeta({
|
||||
title: "Desktop",
|
||||
icon: "monitor",
|
||||
pages: ["index", "niri", "hyprland", "waybar", "fonts-and-apps", "vicinae"],
|
||||
pages: ["index", "niri", "umbriel", "hyprland", "waybar", "fonts-and-apps", "vicinae"],
|
||||
});
|
||||
@@ -0,0 +1,158 @@
|
||||
---
|
||||
title: Umbriel
|
||||
description: Umbriel scrolling compositor config — Noctalia-only session, niri layout and springs, Hyprland-style named scratchpads, outputs, and keybindings.
|
||||
---
|
||||
|
||||
[Umbriel](https://docs.noctalia.dev/umbriel/) is a wlroots scrolling compositor from the Noctalia project. The config ports the [niri](/desktop/niri) layout, rules, springs, and binds, and adds the per-app scratch workspaces from [Hyprland](/desktop/hyprland) as Umbriel scratchpads. The session starts only `noctalia`: its launcher, clipboard history, polkit agent, notifications, and OSD replace vicinae, cliphist, and polkit-gnome.
|
||||
|
||||
:::note
|
||||
Linux `desktop` and `laptop` roles only (`.chezmoiignore.tmpl`). The `umbriel` package comes from the `[cachyos]` repo (`packages.arch.desktop.cachyos`); the AUR `umbriel` is a placeholder and `umbriel-git` conflicts with the repo build, so other Arch machines install it by hand.
|
||||
:::
|
||||
|
||||
## Files
|
||||
|
||||
| Source (repo) | Target |
|
||||
| --- | --- |
|
||||
| `dot_config/umbriel/config.toml` | `~/.config/umbriel/config.toml`: includes, session, environment, input, layout, appearance, animation |
|
||||
| `dot_config/umbriel/outputs.toml` | `~/.config/umbriel/outputs.toml` |
|
||||
| `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` |
|
||||
|
||||
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.
|
||||
|
||||
### Theme [#theme]
|
||||
|
||||
`~/.config/umbriel/noctalia.toml` holds the colors. Noctalia's umbriel template writes it on every theme change and its post-hook keeps `"noctalia.toml"` last in `[include.optional]`; the file is not managed by chezmoi.
|
||||
|
||||
## Settings
|
||||
|
||||
| Area | Value | From |
|
||||
| --- | --- | --- |
|
||||
| Keyboard | `us`, repeat delay 400 ms, rate 50, NumLock on | niri |
|
||||
| Touchpad | natural scroll, tap, left-right-middle, sensitivity 1.0 | niri |
|
||||
| Tablet, touch | mapped to `eDP-1` | niri |
|
||||
| Cursor | `capitaine-cursors-light` 24, hidden while typing | niri |
|
||||
| Layout | gap 8, presets 0.333 / 0.5 / 0.667, new columns 0.5, focus never centers, a lone column centers | niri |
|
||||
| Appearance | corner radius 10, wallpaper-only blur on every window, tab bar hidden for one tab | niri |
|
||||
| Overview | zoom 0.4; no hot corner | niri |
|
||||
| Animation | springs `0.82,1125` (open), `0.88,2025` (close), `0.85,1463` (move, overview, scratchpad), `0.78,1350` (workspaces) | niri |
|
||||
| Environment | `ELECTRON_OZONE_PLATFORM_HINT=auto`, `QT_QPA_PLATFORM=wayland`, `QT_QPA_PLATFORMTHEME=kde`, `QT_STYLE_OVERRIDE=Darkly` | niri |
|
||||
|
||||
Umbriel owns `XDG_CURRENT_DESKTOP`, so niri's override is not carried over. niri's `XDG_MENU_PREFIX`/`kbuildsycoca6` startup (Dolphin associations) and the `INIR_*` quickshell variables are dropped.
|
||||
|
||||
## Outputs
|
||||
|
||||
Matched by monitor identity (`umbriel outputs` → `Config name`). The external scales bring each display to about 110 logical pixels per inch (the ultrawide's native density), so windows keep their size across them; the Studio Display and ultrawide match Hyprland. The laptop panel runs at 1.5 (149 logical ppi), denser than the externals, because scale 2 left too little room. It sits at the origin and every external sits directly to its left at negative x, bottoms aligned. The externals are used one at a time and share that slot.
|
||||
|
||||
| Display | Physical | Scale | Logical | Position | Other |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| Laptop (Tianma TL134ADXP03, `eDP-1`) | 2560x1600, 224 ppi | 1.5 | 1706x1066 | `0, 0` | VRR in fullscreen, cursor starts here, new columns full width |
|
||||
| Apple Studio Display | 5120x2880, 218 ppi | 2 | 2560x1440 | `-2560, -374` | new columns 0.5 |
|
||||
| Samsung S34CG50 ultrawide | 3440x1440@100, 110 ppi | 1 | 3440x1440 | `-3440, -374` | VRR in fullscreen, new columns 0.333 |
|
||||
| Portable HDMI (AOP 16PM1QB) | 1920x1080, 141 ppi, rotated 90° | 1.25 | 864x1536 | `-864, -470` | new columns full width |
|
||||
| Portable USB-C (ASUS MB16AC) | 1920x1080, 141 ppi | 1.25 | 1536x864 | `-1536, 202` | new columns full width |
|
||||
|
||||
The Studio Display's phantom 640x480 connector, which niri switched off as `DP-5`, needs no rule: Umbriel leaves connectors without a preferred mode or identity disabled.
|
||||
|
||||
## Scratchpads
|
||||
|
||||
Named scratchpads replace Hyprland's `special:*` workspaces and `omarchy-toggle-scratch`. A window rule sends each app into its scratchpad when it opens; toggling an empty scratchpad runs `spawn_when_empty`. Shown scratchpads are maximized over a desktop dimmed to 0.6, on the output under the pointer.
|
||||
|
||||
| Scratchpad | App id | Launch | Keys |
|
||||
| --- | --- | --- | --- |
|
||||
| `tern` | `so.stencil.tern` | `tern` | `Super+A`, `Super+Alt+Ctrl+H` |
|
||||
| `claude` | `com.anthropic.Claude` | `claude-desktop` | `Super+Alt+Ctrl+L`, `Super+Ctrl+A` |
|
||||
| `fastmail` | `com.fastmail.Fastmail` / `com-fastmail-fastmail` | `gtk-launch com.fastmail.Fastmail` | `Super+Alt+Ctrl+E` |
|
||||
| `beeper` | `Beeper` | `gtk-launch beeper` | `Super+Alt+Ctrl+M`, `Super+Alt+Ctrl+B` |
|
||||
| `home` | `brave-home.google.com__*` | `gtk-launch 'Google Home'` | `Super+Ctrl+H` |
|
||||
| `lmstudio` | `ai.elementlabs.lmstudio` | `gtk-launch ai.elementlabs.lmstudio` | `Super+Ctrl+L` |
|
||||
|
||||
## Window rules
|
||||
|
||||
| Match | Rule |
|
||||
| --- | --- |
|
||||
| every window | blur |
|
||||
| `Folo`, `Spotify`, `zen`, `brave-origin`, `gemini-desktop`, `claude-desktop`, `kitty*`, `zed`, `obsidian`, `Beeper`, `chromium`, `com.mitchellh.ghostty` | opacity 0.9, tiled, focused |
|
||||
| `dev.noctalia.Noctalia` | floating 1080 × 920 |
|
||||
| `dev.noctalia.UmbrielSharePicker` | floating 800 × 600 |
|
||||
| `io.github.lgse.Strata`, `org.gnome.Nautilus`, `com.gabm.satty` | floating, half the output wide, focused |
|
||||
| `brave-youtube.com__*` | floating, pinned, 30% × 30%, 10 px from the bottom-left (Hyprland) |
|
||||
| title `Picture-in-Picture` / `Picture in picture` | floating, unfocused, opaque, 24 px from the top-right of `eDP-1` |
|
||||
| YouTube and chat/mail/dashboard apps (`chromium`, Calendar, Discord, Slack, Gemini, Hermes, Todoist, Cloudflare web apps) | laptop panel, workspace 1, maximized |
|
||||
| `zed`, `obsidian`, sticky notes, `vacuumtube`, `Fladder`, `kitty`, `kitty-herdr`, `kitty-tmux` | Apple Studio Display |
|
||||
| the six scratchpad apps | their scratchpad |
|
||||
|
||||
Noctalia's bar, panels, notifications, dock, OSD, and desktop widgets get blur through a layer rule.
|
||||
|
||||
## Keybindings
|
||||
|
||||
`Mod` is Super. Where niri and Hyprland bound a key differently, niri's bind wins, except the scratchpad keys above, which follow Hyprland.
|
||||
|
||||
### Shell and session
|
||||
|
||||
| Keys | Action |
|
||||
| --- | --- |
|
||||
| `Mod+Space` | Noctalia launcher |
|
||||
| `Mod+Shift+Space` | Noctalia launcher, emoji search (`/emo`) |
|
||||
| `Mod+P` | Noctalia clipboard history |
|
||||
| `Mod+Period` / `Mod+Comma` | Noctalia control center / settings |
|
||||
| `Super+Alt+Ctrl+N` | Noctalia notes panel |
|
||||
| `Mod+Ctrl+R` | ostt recorder plugin |
|
||||
| `Mod+Tab` | overview |
|
||||
| `Mod+Shift+Q` | Noctalia session menu |
|
||||
| `Mod+Shift+E` | quit Umbriel (asks first) |
|
||||
| `Mod+Escape` | pass shortcuts through to the focused app (works while inhibited) |
|
||||
| `Mod+S`, `Print` | region screenshot |
|
||||
| `Mod+Ctrl+S`, `Ctrl+Print` | focused-monitor screenshot |
|
||||
| `Mod+Ctrl+Shift+S` | all-monitors screenshot |
|
||||
| `Mod+F24` | voxtype dictation (`--profile hermes`) |
|
||||
| media, volume, brightness keys | `noctalia msg …`, also on the lock screen |
|
||||
|
||||
### Apps
|
||||
|
||||
`umbriel-launch PATTERN COMMAND…` focuses the next window whose app id matches `PATTERN` (case-insensitive), cycling on repeated presses, and runs `COMMAND` through `umbriel msg spawn` when none is open. It skips scratchpad windows. The binds call it as `~/.local/bin/umbriel-launch` because the session `PATH` has no `~/.local/bin`.
|
||||
|
||||
| Keys | Cycles | Launches |
|
||||
| --- | --- | --- |
|
||||
| `Super+Alt+Ctrl+J` | kitty, alacritty, Ghostty | `kitty` |
|
||||
| `Super+Alt+Ctrl+K` | Brave Origin | `brave-origin` |
|
||||
| `Super+Alt+Ctrl+G` | Ghostty | `ghostty` |
|
||||
| `Super+Alt+Ctrl+O` | Obsidian | `obsidian` |
|
||||
| `Super+Alt+Ctrl+F` | strata | `gtk-launch io.github.lgse.Strata` |
|
||||
| `Super+Alt+Ctrl+W` | tldraw offline | `gtk-launch tldraw-offline` |
|
||||
| `Super+Alt+Ctrl+T` | Todoist | `gtk-launch todoist` |
|
||||
| `Super+Alt+Ctrl+Y` | web apps (`webapp-*`, `chrome-*`, `brave-*__*`) | `gtk-launch YouTube` |
|
||||
| `Super+Alt+Ctrl+Space` | Sticky Notes Canvas | `gtk-launch io.github.faridjaff.StickyNotesCanvas` |
|
||||
| `Super+Ctrl+G` | Gemini | `gemini-desktop` |
|
||||
| `Mod+Shift+G` | — | Goliath kitty (`--class=kitty-goliath`) |
|
||||
|
||||
### Windows and layout
|
||||
|
||||
| Keys | Action |
|
||||
| --- | --- |
|
||||
| `Mod+H` / `Mod+L` | focus left / right |
|
||||
| `Mod+J` / `Mod+K` | focus down / up, or the next / previous workspace at the edge |
|
||||
| `Mod+BackSpace` | previously focused window |
|
||||
| `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 |
|
||||
| `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 |
|
||||
| `Mod+Shift+O`, `Mod+Ctrl+Shift+J` / `Mod+Ctrl+Shift+K` | move window to next / previous output |
|
||||
| `Mod+R` / `Mod+Shift+R` | cycle width / height presets |
|
||||
| `Alt+Shift+H` / `Alt+Shift+L` | width −10% / +10% |
|
||||
| `Alt+Shift+J` / `Alt+Shift+K` | height −10% / +10% |
|
||||
| `Mod+F` | full-width column |
|
||||
| `Mod+Shift+F` | maximize to the output edges |
|
||||
| `Mod+Ctrl+F` | fullscreen |
|
||||
| `Mod+C` | center column |
|
||||
| `Mod+Ctrl+O` | toggle floating |
|
||||
| `Mod+W` | tab / untab the column |
|
||||
| `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).
|
||||
Reference in new issue
Block a user