mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 11:32:42 +00:00
docs(desktop): document Umbriel package and layout updates
This commit is contained in:
1 parent
229753f7ba
commit
7a51f522e4
6 files changed
+47
-19
No files matched your search
@@ -39,9 +39,8 @@ One manifest per platform, plus a `shared` block. Any edit to the file changes t
|
|||||||
| Source | Packages |
|
| Source | Packages |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| pacman | `niri`, `noctalia`, `xwayland-satellite`, `polkit`, `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` |
|
| pacman | `niri`, `noctalia`, `xwayland-satellite`, `polkit`, `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`, `bibata-cursor-translucent` (the `Bibata_Ghost` cursor); desktop apps `beeper-bin`, `fastmail`, `1password`, `brave-origin-bin`, `claude-desktop`, `spotify` |
|
| AUR (or a sync repo with the same name) | `vicinae-bin`, `tldraw-offline-bin`, `bibata-cursor-translucent` (the `Bibata_Ghost` cursor), `umbriel-git` (pulls in `xdg-desktop-portal-umbriel-git`; the `[cachyos]` `umbriel` lacks `window-move-by`); 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` |
|
| `[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`, `xdg-desktop-portal-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.
|
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.
|
||||||
|
|
||||||
|
|||||||
@@ -165,13 +165,14 @@ mise tool versions stay local to each machine and are not managed.
|
|||||||
.local/bin/niri-launch
|
.local/bin/niri-launch
|
||||||
.local/bin/umbriel-launch
|
.local/bin/umbriel-launch
|
||||||
.local/bin/umbriel-smart-move
|
.local/bin/umbriel-smart-move
|
||||||
|
.local/bin/umbriel-float-square
|
||||||
.config/fish/auto-Niri.fish
|
.config/fish/auto-Niri.fish
|
||||||
.local/bin/cp-appid
|
.local/bin/cp-appid
|
||||||
.local/bin/projects-sync
|
.local/bin/projects-sync
|
||||||
{{ end }}
|
{{ end }}
|
||||||
```
|
```
|
||||||
|
|
||||||
The block is emitted, and these paths skipped, unless the OS is `linux` and the role is `desktop` or `laptop`. `mac` and `server` machines, and any non-Linux machine regardless of role, never receive the niri, Umbriel, and Hyprland configs (`dot_config/niri/`, `dot_config/umbriel/`, `dot_config/hypr/`), the Noctalia external (`~/.config/noctalia`, never cloned there), fontconfig (`dot_config/fontconfig/fonts.conf`), default-app associations (`dot_config/mimeapps.list`), the fish auto-start hook (`dot_config/fish/auto-Niri.fish`), the systemd user units (`dot_config/systemd/user/kitty-day-save.service`, `projects-sync.service`, `projects-sync.timer`), or the `niri-launch`, `umbriel-launch`, `umbriel-smart-move`, `cp-appid`, `kitty-day-save` and `projects-sync` scripts. The `niri-dynamic-workspaces` rule matches nothing in the current source tree; it only takes effect if that config is added later.
|
The block is emitted, and these paths skipped, unless the OS is `linux` and the role is `desktop` or `laptop`. `mac` and `server` machines, and any non-Linux machine regardless of role, never receive the niri, Umbriel, and Hyprland configs (`dot_config/niri/`, `dot_config/umbriel/`, `dot_config/hypr/`), the Noctalia external (`~/.config/noctalia`, never cloned there), fontconfig (`dot_config/fontconfig/fonts.conf`), default-app associations (`dot_config/mimeapps.list`), the fish auto-start hook (`dot_config/fish/auto-Niri.fish`), the systemd user units (`dot_config/systemd/user/kitty-day-save.service`, `projects-sync.service`, `projects-sync.timer`), or the `niri-launch`, `umbriel-launch`, `umbriel-smart-move`, `umbriel-float-square`, `cp-appid`, `kitty-day-save` and `projects-sync` scripts. The `niri-dynamic-workspaces` rule matches nothing in the current source tree; it only takes effect if that config is added later.
|
||||||
|
|
||||||
| Machine | Desktop layer |
|
| Machine | Desktop layer |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
|
|||||||
@@ -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`.
|
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`.
|
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 for `packages.arch.desktop.omarchy` / `packages.arch.desktop.cachyos` when `pacman-conf -l` lists an `omarchy` / `cachyos` repo.
|
3. For roles `desktop` and `laptop`, the same for `packages.arch.desktop.pacman`, and for `packages.arch.desktop.omarchy` when `pacman-conf -l` lists an `omarchy` 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.
|
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).
|
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.
|
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.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ sidebar:
|
|||||||
---
|
---
|
||||||
|
|
||||||
:::note[Role gating]
|
:::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/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.
|
`.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/umbriel-float-square`, `~/.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.
|
`~/.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 |
|
| 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 |
|
| [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), `umbriel-launch`, and `umbriel-smart-move` |
|
| [Umbriel](/desktop/umbriel) | `~/.config/umbriel` (session, layout, outputs, rules, scratchpads, binds), `umbriel-launch`, `umbriel-smart-move`, and `umbriel-float-square` |
|
||||||
| [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) |
|
| [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 |
|
| [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 |
|
| [Fonts and default apps](/desktop/fonts-and-apps) | `~/.config/fontconfig/fonts.conf`, `~/.config/mimeapps.list`, the Victor Mono Nerd Font packages |
|
||||||
@@ -29,9 +29,8 @@ Three Wayland compositors are configured side by side. niri is the original setu
|
|||||||
| Source | Packages |
|
| Source | Packages |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| pacman | `niri`, `noctalia` (the CachyOS build where that repo is configured, else `extra`), `xwayland-satellite`, `polkit`, `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 |
|
| pacman | `niri`, `noctalia` (the CachyOS build where that repo is configured, else `extra`), `xwayland-satellite`, `polkit`, `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`, `bibata-cursor-translucent`, and the desktop apps `beeper-bin`, `fastmail`, `1password`, `brave-origin-bin`, `claude-desktop`, `spotify` |
|
| AUR via `yay`/`paru` (a sync repo wins when it has the name) | `vicinae-bin`, `tldraw-offline-bin`, `bibata-cursor-translucent`, `umbriel-git` (with `xdg-desktop-portal-umbriel-git`), 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` |
|
| `[omarchy]` repo, when configured | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker` |
|
||||||
| `[cachyos]` repo, when configured | `umbriel`, `xdg-desktop-portal-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.
|
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.
|
||||||
|
|
||||||
|
|||||||
+20
-11
@@ -8,7 +8,7 @@ description: Umbriel scrolling compositor config — Noctalia-only session, niri
|
|||||||
Noctalia's polkit agent is off by default. `~/.config/noctalia/config.toml` (the [prdlk/noctalia](https://github.com/prdlk/noctalia) external, see [externals](/chezmoi/externals-and-ignore#app-externals); merged under the GUI's unmanaged `~/.local/state/noctalia/settings.toml`) sets `[shell] polkit_agent = true`, so `pkexec` and other privileged actions prompt in a Noctalia panel. `polkitd` itself is D-Bus activated (`polkit.service` is static; nothing to enable). The setting also applies under niri, which still starts polkit-gnome: only one agent registers per session, whichever starts first.
|
Noctalia's polkit agent is off by default. `~/.config/noctalia/config.toml` (the [prdlk/noctalia](https://github.com/prdlk/noctalia) external, see [externals](/chezmoi/externals-and-ignore#app-externals); merged under the GUI's unmanaged `~/.local/state/noctalia/settings.toml`) sets `[shell] polkit_agent = true`, so `pkexec` and other privileged actions prompt in a Noctalia panel. `polkitd` itself is D-Bus activated (`polkit.service` is static; nothing to enable). The setting also applies under niri, which still starts polkit-gnome: only one agent registers per session, whichever starts first.
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
Linux `desktop` and `laptop` roles only (`.chezmoiignore.tmpl`). `umbriel` and its portal backend `xdg-desktop-portal-umbriel` (screenshots and screen sharing for portal clients) come 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 them by hand.
|
Linux `desktop` and `laptop` roles only (`.chezmoiignore.tmpl`). `umbriel-git` comes from the AUR (`packages.arch.desktop.aur`) and pulls in its portal backend `xdg-desktop-portal-umbriel-git` (screenshots and screen sharing for portal clients). The `[cachyos]` `umbriel` build (`0.1.0.r1213`) lacks `window-move-by`, which `binds.toml` uses, and rejects the config. `umbriel-git` conflicts with it, so on a machine that already has the repo build, swap them by hand once (`yay -S umbriel-git`, accepting the removal); the package script runs `--noconfirm`, which declines that removal.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Files
|
## Files
|
||||||
@@ -21,6 +21,7 @@ Linux `desktop` and `laptop` roles only (`.chezmoiignore.tmpl`). `umbriel` and i
|
|||||||
| `dot_config/umbriel/binds.toml` | `~/.config/umbriel/binds.toml` |
|
| `dot_config/umbriel/binds.toml` | `~/.config/umbriel/binds.toml` |
|
||||||
| `dot_local/bin/executable_umbriel-launch` | `~/.local/bin/umbriel-launch` |
|
| `dot_local/bin/executable_umbriel-launch` | `~/.local/bin/umbriel-launch` |
|
||||||
| `dot_local/bin/executable_umbriel-smart-move` | `~/.local/bin/umbriel-smart-move` |
|
| `dot_local/bin/executable_umbriel-smart-move` | `~/.local/bin/umbriel-smart-move` |
|
||||||
|
| `dot_local/bin/executable_umbriel-float-square` | `~/.local/bin/umbriel-float-square` |
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ Umbriel watches these files and applies a valid save immediately; `umbriel confi
|
|||||||
| Touchpad | natural scroll, tap, left-right-middle, sensitivity 1.0 | niri |
|
| Touchpad | natural scroll, tap, left-right-middle, sensitivity 1.0 | niri |
|
||||||
| Tablet, touch | mapped to `eDP-1` | niri |
|
| Tablet, touch | mapped to `eDP-1` | niri |
|
||||||
| Cursor | `Bibata_Ghost` (dark translucent Bibata, AUR `bibata-cursor-translucent`) 28, hidden while typing, follows keyboard focus (so scratchpads open on the output focus moved to). Umbriel exports it as `XCURSOR_THEME` and over XSETTINGS; GTK apps on Wayland read the GNOME settings instead, set once with `gsettings set org.gnome.desktop.interface cursor-theme Bibata_Ghost` and `… cursor-size 28` (dconf, not managed) | Umbriel |
|
| Cursor | `Bibata_Ghost` (dark translucent Bibata, AUR `bibata-cursor-translucent`) 28, hidden while typing, follows keyboard focus (so scratchpads open on the output focus moved to). Umbriel exports it as `XCURSOR_THEME` and over XSETTINGS; GTK apps on Wayland read the GNOME settings instead, set once with `gsettings set org.gnome.desktop.interface cursor-theme Bibata_Ghost` and `… cursor-size 28` (dconf, not managed) | Umbriel |
|
||||||
| Layout | gap 8, presets 0.333 / 0.5 / 0.667, new columns 1/3 on every output, focus never centers, a lone column centers | niri |
|
| Layout | gap 8, presets 0.333 / 0.5 / 0.667, new columns 1/3 (0.8 on the laptop panel, see [Outputs](#outputs)), focus never centers, a lone column centers | niri |
|
||||||
| Appearance | corner radius 10, no shadows, wallpaper-only blur on every window, tab bar hidden for one tab | niri |
|
| Appearance | corner radius 10, no shadows, wallpaper-only blur on every window, tab bar hidden for one tab | niri |
|
||||||
| Activation | apps may focus and reveal their windows (`focus_on_activate`), e.g. Noctalia notification actions | niri `honor-xdg-activation-with-invalid-serial` |
|
| Activation | apps may focus and reveal their windows (`focus_on_activate`), e.g. Noctalia notification actions | niri `honor-xdg-activation-with-invalid-serial` |
|
||||||
| Overview | zoom 0.4; no hot corner | niri |
|
| Overview | zoom 0.4; no hot corner | niri |
|
||||||
@@ -47,21 +48,23 @@ Umbriel owns `XDG_CURRENT_DESKTOP`, so niri's override is not carried over. niri
|
|||||||
|
|
||||||
## Outputs
|
## 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.
|
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 2 (112 logical ppi, 1280x800). 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 |
|
| 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 |
|
| Laptop (Tianma TL134ADXP03, `eDP-1`) | 2560x1600, 224 ppi | 2 | 1280x800 | `0, 0` | VRR in fullscreen, cursor starts here, new scrolling columns 0.8 wide |
|
||||||
| Apple Studio Display | 5120x2880, 218 ppi | 2 | 2560x1440 | `-2560, -374` | |
|
| Apple Studio Display | 5120x2880, 218 ppi | 2 | 2560x1440 | `-2560, -640` | |
|
||||||
| Samsung S34CG50 ultrawide | 3440x1440@100, 110 ppi | 1 | 3440x1440 | `-3440, -374` | VRR in fullscreen |
|
| Samsung S34CG50 ultrawide | 3440x1440@100, 110 ppi | 1 | 3440x1440 | `-3440, -640` | VRR in fullscreen, workspaces 1–9 start in dwindle |
|
||||||
| Portable HDMI (AOP 16PM1QB) | 1920x1080, 141 ppi, rotated 90° | 1.25 | 864x1536 | `-864, -470` | |
|
| Portable HDMI (AOP 16PM1QB) | 1920x1080, 141 ppi, rotated 90° | 1.25 | 864x1536 | `-864, -736` | |
|
||||||
| Portable USB-C (ASUS MB16AC) | 1920x1080, 141 ppi | 1.25 | 1536x864 | `-1536, 202` | |
|
| Portable USB-C (ASUS MB16AC) | 1920x1080, 141 ppi | 1.25 | 1536x864 | `-1536, -64` | |
|
||||||
|
|
||||||
|
Umbriel sets the layout mode per workspace, not per output, so the ultrawide's dwindle default is nine `[[workspace]]` rules in `outputs.toml`, one for each index 1–9 on that monitor. A workspace past 9 starts in scrolling. `Mod+W` still toggles any workspace between scrolling and dwindle.
|
||||||
|
|
||||||
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.
|
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
|
## 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`. A shown scratchpad window floats centered on the output under the pointer at 48% × 77% of its usable area (`default_floating_size`, the last window rule in `rules.toml`: 1638×1109 on the ultrawide, 819×799 on the laptop panel, 1229×1109 on the Studio Display) over a desktop dimmed to 0.6. `animation.scratchpad.maximize` is off. The size is a default: a resident that was already open before the rule changed keeps its old geometry until it is reopened.
|
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`. A shown scratchpad window floats centered on the output under the pointer at 48% × 77% of its usable area (`default_floating_size`, the last window rule in `rules.toml`: 1638×1109 on the ultrawide, 614×594 on the laptop panel, 1229×1109 on the Studio Display) over a desktop dimmed to 0.6. `animation.scratchpad.maximize` is off. The size is a default: a resident that was already open before the rule changed keeps its old geometry until it is reopened.
|
||||||
|
|
||||||
| Scratchpad | App id | Launch | Keys |
|
| Scratchpad | App id | Launch | Keys |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
@@ -103,6 +106,7 @@ Noctalia's bar, panels, notifications, dock, OSD, and desktop widgets get blur t
|
|||||||
| `Mod+P` | Noctalia clipboard history |
|
| `Mod+P` | Noctalia clipboard history |
|
||||||
| `Mod+Period` / `Mod+Comma` | Noctalia control center / settings |
|
| `Mod+Period` / `Mod+Comma` | Noctalia control center / settings |
|
||||||
| `Super+Alt+Ctrl+N` | Noctalia notes panel |
|
| `Super+Alt+Ctrl+N` | Noctalia notes panel |
|
||||||
|
| `Mod+Shift+B` | Noctalia bookmarks panel (`dunarand/bookmarks` plugin) |
|
||||||
| `Mod+Ctrl+R` | ostt recorder plugin |
|
| `Mod+Ctrl+R` | ostt recorder plugin |
|
||||||
| `Mod+Tab` | overview |
|
| `Mod+Tab` | overview |
|
||||||
| `Mod+Shift+Q` | Noctalia session menu |
|
| `Mod+Shift+Q` | Noctalia session menu |
|
||||||
@@ -121,7 +125,7 @@ Noctalia's bar, panels, notifications, dock, OSD, and desktop widgets get blur t
|
|||||||
| Keys | Cycles | Launches |
|
| Keys | Cycles | Launches |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `Super+Alt+Ctrl+J` | Ghostty, kitty, alacritty | `ghostty` |
|
| `Super+Alt+Ctrl+J` | Ghostty, kitty, alacritty | `ghostty` |
|
||||||
| `Super+Alt+Ctrl+K` | Brave Origin | `brave-origin` |
|
| `Super+Alt+Ctrl+K` | browsers: Brave Origin, Chromium, Firefox (not web apps) | `brave-origin` |
|
||||||
| `Super+Alt+Ctrl+G` | Ghostty | `ghostty` |
|
| `Super+Alt+Ctrl+G` | Ghostty | `ghostty` |
|
||||||
| `Super+Alt+Ctrl+O` | Obsidian | `obsidian` |
|
| `Super+Alt+Ctrl+O` | Obsidian | `obsidian` |
|
||||||
| `Super+Alt+Ctrl+F` | strata | `gtk-launch io.github.lgse.Strata` |
|
| `Super+Alt+Ctrl+F` | strata | `gtk-launch io.github.lgse.Strata` |
|
||||||
@@ -150,10 +154,11 @@ Noctalia's bar, panels, notifications, dock, OSD, and desktop widgets get blur t
|
|||||||
| `Mod+R` / `Mod+Shift+R` | cycle width / height presets |
|
| `Mod+R` / `Mod+Shift+R` | cycle width / height presets |
|
||||||
| `Alt+Shift+H` / `Alt+Shift+L` | width −10% / +10% |
|
| `Alt+Shift+H` / `Alt+Shift+L` | width −10% / +10% |
|
||||||
| `Alt+Shift+J` / `Alt+Shift+K` | height −10% / +10% |
|
| `Alt+Shift+J` / `Alt+Shift+K` | height −10% / +10% |
|
||||||
|
| `Alt+H` / `Alt+J` / `Alt+K` / `Alt+L` | move the focused floating window 50 px left / down / up / right (`window-move-by`, held keys repeat; kept inside the usable area) |
|
||||||
| `Mod+F` | full-width column |
|
| `Mod+F` | full-width column |
|
||||||
| `Mod+Shift+F` | maximize to the output edges |
|
| `Mod+Shift+F` | maximize to the output edges |
|
||||||
| `Mod+Ctrl+F` | fullscreen |
|
| `Mod+Ctrl+F` | fullscreen |
|
||||||
| `Mod+C` | center column |
|
| `Mod+C` | floating window: [square it](#float-square) at the usable height minus 4 px top and bottom, centered; tiled: center column |
|
||||||
| `Mod+T` | toggle floating |
|
| `Mod+T` | toggle floating |
|
||||||
| `Mod+W` | toggle the workspace between the scrolling and dwindle layouts |
|
| `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+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 |
|
||||||
@@ -174,3 +179,7 @@ Workspaces are dynamic per output. Not carried over: niri's named `w`/`h`/`x` wo
|
|||||||
| alone, at the strip's end | move it to the output on that side (nothing at the outermost output) |
|
| 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.
|
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.
|
||||||
|
|
||||||
|
### Float square [#float-square]
|
||||||
|
|
||||||
|
`umbriel-float-square` (`Mod+C`) acts on the window with keyboard focus (`.active` in `umbriel windows --json`). A floating window becomes a square whose side is the output's usable height (below Noctalia's bar) minus 4 px above and below (`PAD`): `window-set-secondary-extent` and `window-set-primary-extent` get that side as a fraction of the usable height and width. The script then waits up to 1 s for the client to commit the new width, because `window-center` centers the committed size, and centers it. On the laptop panel that is 764×764 at y 32; on the ultrawide 1404×1404. A tiled window gets `column-center`, the previous `Mod+C`.
|
||||||
@@ -32,6 +32,7 @@ Several scripts below also exist as fish functions of the same name (`ai`, `c2p`
|
|||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| [`ai`](#ai) | sh | Pick an AI CLI with gum and launch it |
|
| [`ai`](#ai) | sh | Pick an AI CLI with gum and launch it |
|
||||||
| [`atuin-pick`](#atuin-pick) | python3 | atuin history picker for a kitty or tmux split |
|
| [`atuin-pick`](#atuin-pick) | python3 | atuin history picker for a kitty or tmux split |
|
||||||
|
| [`brave-new-tab`](#brave-new-tab) | sh | Open a URL in a new Brave Origin tab |
|
||||||
| [`c2p`](#c2p) | sh | code2prompt with an fzf-picked template |
|
| [`c2p`](#c2p) | sh | code2prompt with an fzf-picked template |
|
||||||
| [`extract_agents`](#extract_agents) | sh | Copy all `AGENTS.md` files into a directory tree |
|
| [`extract_agents`](#extract_agents) | sh | Copy all `AGENTS.md` files into a directory tree |
|
||||||
| [`fab`](#fab) | sh | fzf picker for Fabric patterns |
|
| [`fab`](#fab) | sh | fzf picker for Fabric patterns |
|
||||||
@@ -79,6 +80,25 @@ It is written for launch contexts where atuin's shell init never ran. It runs `a
|
|||||||
|
|
||||||
**Needs:** `python3`, `atuin`, `fish`.
|
**Needs:** `python3`, `atuin`, `fish`.
|
||||||
|
|
||||||
|
## brave-new-tab
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brave-new-tab <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
Runs `brave-origin --new-tab <url>` detached with `setsid -f`. With Brave Origin running, the URL opens as a tab in its last active window; otherwise Brave Origin starts with it. Exits 2 unless given exactly one argument.
|
||||||
|
|
||||||
|
A URL without a scheme gets one from its host (port and path ignored): `localhost`, `*.localhost`, `*.local`, and `127.*` get `http://`, everything else `https://`. URLs containing `://`, and `about:` URLs, pass through unchanged.
|
||||||
|
|
||||||
|
| Argument | Opens |
|
||||||
|
| --- | --- |
|
||||||
|
| `example.com/path` | `https://example.com/path` |
|
||||||
|
| `localhost:3000` | `http://localhost:3000` |
|
||||||
|
| `printer.local` | `http://printer.local` |
|
||||||
|
| `http://example.com` | `http://example.com` |
|
||||||
|
|
||||||
|
**Needs:** `brave-origin` (`brave-origin-bin`), `setsid` (util-linux).
|
||||||
|
|
||||||
## c2p
|
## c2p
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|||||||
Reference in new issue
Block a user