Compare commits
1
Commits
main
...
mac-binding
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ffdc71b5cd |
No files matched your search
+91
-61
@@ -16,11 +16,12 @@ Hyprland Lua config layered on Omarchy — scrolling layout, centered Ghostty ma
|
||||
| `dot_config/hypr/hyprland.lua` | `~/.config/hypr/hyprland.lua` | Entry point, workspace and window rules |
|
||||
| `dot_config/hypr/autostart.lua` | `~/.config/hypr/autostart.lua` | Extra autostart (empty) |
|
||||
| `dot_config/hypr/bindings.lua` | `~/.config/hypr/bindings.lua` | Keybindings |
|
||||
| `dot_config/hypr/command.lua` | `~/.config/hypr/command.lua` | Command layer: `SUPER + key` → the app's `CTRL + key` (macOS Command semantics) |
|
||||
| `dot_config/hypr/input.lua` | `~/.config/hypr/input.lua` | Key repeat, tablet/touch mapping |
|
||||
| `dot_config/hypr/looknfeel.lua` | `~/.config/hypr/looknfeel.lua` | Layout, decoration, blur |
|
||||
| `dot_config/hypr/monitors.lua` | `~/.config/hypr/monitors.lua` | Monitor modes and positions |
|
||||
| `dot_config/hypr/nav.lua` | `~/.config/hypr/nav.lua` | `SUPER + [SHIFT +] H/J/K/L` focus and move |
|
||||
| `dot_config/hypr/pip.lua` | `~/.config/hypr/pip.lua` | `SUPER + SHIFT + P` picture-in-picture that follows the focused monitor |
|
||||
| `dot_config/hypr/nav.lua` | `~/.config/hypr/nav.lua` | `ALT [+ SHIFT] + H/J/K/L` focus and move |
|
||||
| `dot_config/hypr/pip.lua` | `~/.config/hypr/pip.lua` | `ALT + SHIFT + P` picture-in-picture that follows the focused monitor |
|
||||
| `dot_config/hypr/master.lua` | `~/.config/hypr/master.lua` | Keeps Ghostty the master on master-layout workspaces |
|
||||
| `dot_config/hypr/hyprsunset.conf` | `~/.config/hypr/hyprsunset.conf` | Night-light profile |
|
||||
| `dot_config/hypr/xdph.conf` | `~/.config/hypr/xdph.conf` | xdg-desktop-portal-hyprland |
|
||||
@@ -66,7 +67,7 @@ Omarchy's default bindings stay enabled. `omarchy_default_bindings` and `omarchy
|
||||
| --- | --- |
|
||||
| `^brave-www\.tldraw\.com__-Default$` | Workspace 3 |
|
||||
| `^tldraw-offline$` | Workspace 5, fullscreen |
|
||||
| `^so\.stencil\.tern$` | `special:scratchpad silent` |
|
||||
| `^kitty-scratch$` | `special:scratchpad silent` |
|
||||
| `^com\.anthropic\.Claude$` | `name:claude`, maximized (follows the window there) |
|
||||
| `^com\.fastmail\.Fastmail$` | `name:fastmail`, maximized (follows) |
|
||||
| `^Beeper$` | `name:beeper`, maximized (follows) |
|
||||
@@ -84,7 +85,7 @@ kitty and Ghostty are separate group families, and Brave Origin never shares a g
|
||||
|
||||
- `window.open_early`: when the new window conflicts with the focused group, `group.auto_group` is switched off for that one map (restored by a 1 ms timer), so the window opens as a group of its own.
|
||||
- `window.update_rules` with a group of two or more: the group keeps the family of its first kitty or Ghostty tab that is not the focused window (the one that just arrived); conflicting members are moved out, kitty and Ghostty as a group of their own, Brave as a plain window. This catches the move-into-group dispatchers (`SUPER + ALT + arrows`, `nav.lua`) and groupbar drags.
|
||||
- `window.update_rules` on an ungrouped Ghostty: it becomes a group of its own again, so Ghostty is always tabbed, even after `SUPER + ALT + G` (move out of group) or `SUPER + G`.
|
||||
- `window.update_rules` on an ungrouped Ghostty: it becomes a group of its own again, so Ghostty is always tabbed, even after `SUPER + ALT + G` (move out of group) or `ALT + ,`.
|
||||
|
||||
Scratch residents are placed `silent` so that [`omarchy-toggle-scratch`](#omarchy-toggle-scratch) decides when to reveal them. The YouTube rule matches both `youtube.com` and `www.youtube.com` because Chromium's class changes once a video plays. It excludes the picture-in-picture overlay so Omarchy's own PiP rule still applies.
|
||||
|
||||
@@ -184,27 +185,58 @@ Configures lua-language-server for the Lua config: the library path is `/usr/sha
|
||||
|
||||
## Keybindings
|
||||
|
||||
Every binding defined in `bindings.lua`. Bindings not listed here are Omarchy defaults. The *Replaces* column gives the Omarchy default that was unbound first.
|
||||
Every binding defined in `bindings.lua` and `command.lua`. Bindings not listed here are Omarchy defaults. The *Replaces* column gives the Omarchy default that was unbound first.
|
||||
|
||||
The Corne keeps its macOS keymap, and the layers follow a Mac running AeroSpace: right thumb `RGui_T Space` is `SUPER` here and Command on macOS, left thumb `LAlt_T Tab` is `ALT` / Option, left thumb `LCtl_T Space` is `CTRL`, and the one-shot `OSM CAG` key is `CTRL + ALT + SUPER` for the next key.
|
||||
|
||||
| Layer | Job |
|
||||
| --- | --- |
|
||||
| `ALT [+ SHIFT] + key` | Window management: focus and move `H/J/K/L`, layout, size, workspaces on `Q W E R Y U I O`. |
|
||||
| `SUPER [+ SHIFT] + key` | The app's own shortcut, Command-style (`command.lua`, below). System keys left on it: `Q`, `O` / `SHIFT + O`, `TAB`, `SPACE`, `ESCAPE`, `BACKSPACE`. |
|
||||
| `SUPER + CTRL [+ SHIFT] + key` | System: screenshots, Omarchy panels and menus, a few apps. |
|
||||
| `SUPER + CTRL + ALT [+ SHIFT] + key` | Apps and numbered workspaces: tap `OSM CAG`, then the key (`SHIFT` held for the second set). |
|
||||
|
||||
`ALT` chords never reach an app. tmux's `M-h/j/k/l` pane resize (`tmux.conf`) and fish's `alt+h/j/k/l/c/t/m/x/z/a` lose their keys; `ALT + B/D/F`, `ALT + .` and `ALT + 1..9` (tmux windows) stay free on purpose. With dictation installed, Omarchy's `ALT + Alt_R` is push-to-talk, so `ALT` belongs on the left thumb.
|
||||
|
||||
`hl.unbind` matches the chord as it was written, modifier order included: an unbind of `SUPER + CTRL + SHIFT + R` leaves Omarchy's `SUPER + SHIFT + CTRL + R` bound. Unbinds copy Omarchy's spelling.
|
||||
|
||||
### Command layer (`command.lua`)
|
||||
|
||||
`SUPER + key` arrives in the focused app as `CTRL + key`, `SHIFT` kept: `Cmd+C`/`V`/`X`/`Z` clipboard and undo, `Cmd+Shift+Z` redo, `Cmd+T`/`W`/`Shift+T` tabs, `Cmd+L` address bar, `Cmd+R` reload, `Cmd+F` find, `Cmd+1..9` tab N, `Cmd+=`/`-`/`0` zoom, `Cmd+,` settings, `Cmd+/` comment, `Cmd+Return` send. Translated chords: `SUPER [+ SHIFT] + A..Z` except `Q` and `O`, and `SUPER + 0..9`, `,`, `/`, `-`, `=`, `Return` (63 binds; each unbinds whatever Omarchy had there first, which is why it loads last). It is Omarchy's universal-clipboard mechanism (`send_key_state` down, then up 50 ms later, mods given explicitly so the held `SUPER` does not leak into the chord), applied to every key.
|
||||
|
||||
Terminals never get a bare `CTRL` chord (`Ctrl+C` is SIGINT, `Ctrl+W` deletes a word):
|
||||
|
||||
| Focused window | `SUPER [+ SHIFT] + key` becomes |
|
||||
| --- | --- |
|
||||
| Ghostty (`com.mitchellh.ghostty`) | `CTRL + SHIFT + key`, Ghostty's tmux chords (`Super+T` new tmux window, `Super+C` copy, `Super+1` window 1), only when `~/.config/ghostty/config` binds that `ctrl+shift` chord; otherwise nothing, since Ghostty passes an unbound one on as a CSI-u key. The config is read when Hyprland loads: `hyprctl reload` after adding a Ghostty `ctrl+shift` bind. See [Ghostty](../terminal/ghostty.md). |
|
||||
| Other terminal (Omarchy's `terminal` tag: kitty, foot, Omarchy TUIs) | `CTRL + SHIFT + C` / `V` for `SUPER + C` / `V`; every other chord as the `SUPER` chord itself, so kitty's own `super` maps keep working (kitty encodes an unmapped one as CSI-u). |
|
||||
| Anything else (Brave Origin, web apps, Electron, GTK, Omarchy panels) | `CTRL [+ SHIFT] + key`. |
|
||||
|
||||
Omarchy's binds on those chords are gone: select all and universal clipboard (subsumed), `SUPER + 1..0` workspaces (now `CAG + 1..0`), toggle floating (now `ALT + T`), grouping (now `ALT + ,`), input method (now `CAG + I`), Docker and Activity (now `CAG + SHIFT + D` / `T`), monitor scaling up (now `SUPER + CTRL + /`). The `SUPER + SHIFT + letter` browser, calendar, editor, Omawrite and X launchers are dropped; vicinae and the apps menu start them.
|
||||
|
||||
### Windows
|
||||
|
||||
| Keys | Action | Replaces |
|
||||
| --- | --- | --- |
|
||||
| `SUPER + Q` | Close window | same (made explicit) |
|
||||
| `SUPER + W` | `omarchy-toggle-layout` — flip workspace layout | close window |
|
||||
| `SUPER + CTRL + W` | `omarchy-toggle-master` — master layout on/off for the active workspace | background switcher |
|
||||
| `SUPER + BACKSPACE` | Focus last window | toggle transparency |
|
||||
| `ALT + H` / `J` / `K` / `L` | Focus left / down / up / right (`nav.focus`); at the edge, the monitor that way | — |
|
||||
| `ALT + SHIFT + H` / `L` | Move left / right (`nav.move`): swap the column; at the edge, carry the window to the monitor that way. Floating: bottom-left / bottom-right corner | — |
|
||||
| `ALT + SHIFT + J` / `K` | Move down / up: swap within the column; at its bottom / top, carry the window to the next / previous workspace on this monitor. Floating: top-left / top-right corner | — |
|
||||
| `ALT + /` | `omarchy-toggle-layout` — flip workspace layout | — |
|
||||
| `ALT + SHIFT + /` | `omarchy-toggle-master` — master layout on/off for the active workspace | — |
|
||||
| `ALT + X` | Toggle split (dwindle `togglesplit`) | — |
|
||||
| `ALT + T` | Toggle floating/tiling | — |
|
||||
| `ALT + ,` | Toggle window grouping (tabs) | — |
|
||||
| `ALT + C` | Center the window (floating) or its column (scrolling) | — |
|
||||
| `ALT + M` | Maximize | — |
|
||||
| `ALT + SHIFT + M` | Full screen | — |
|
||||
| `ALT + SHIFT + P` | `pip.toggle` — toggle picture-in-picture (below) | — |
|
||||
| `SUPER + CTRL + F` | Zen mode: Omarchy's full-screen-desktop toggle (bar hidden, gaps 0) | tiled full screen |
|
||||
| `SUPER + BACKSPACE` | Toggle the Quake console (`special:qconsole`) | toggle transparency |
|
||||
| `SUPER + TAB` | Birdseye overview: `omarchy-shell shell toggle erasmus.birdseye` (live thumbnails of every window on every workspace; Tab / arrows select, Enter jumps, Escape closes) | next workspace |
|
||||
| `SUPER + SHIFT + TAB` | Previous window in the active workspace | previous workspace |
|
||||
| `SUPER + H` / `J` / `K` / `L` | Focus left / down / up / right (`nav.focus`); at the edge, the monitor that way | `J`: toggle split, `K`: keybindings menu, `L`: toggle layout |
|
||||
| `SUPER + D` | Toggle split (dwindle `togglesplit`) | — |
|
||||
| `SUPER + SHIFT + H` / `L` | Move left / right (`nav.move`): swap the column; at the edge, carry the window to the monitor that way. Floating: bottom-left / bottom-right corner | — |
|
||||
| `SUPER + SHIFT + J` / `K` | Move down / up: swap within the column; at its bottom / top, carry the window to the next / previous workspace on this monitor. Floating: top-left / top-right corner | — |
|
||||
| `SUPER + SHIFT + P` | `pip.toggle` — toggle picture-in-picture (below) | Google Photos |
|
||||
| `SUPER + M` | Unbound | minimize window to the dock |
|
||||
|
||||
`SUPER + SHIFT + TAB` walks a ring built only from the active workspace's mapped windows, ordered by `stable_id`. Grouped windows stay in the ring and hidden ones are skipped. It raises the focused window afterwards. It avoids `cyclenext`, which would pull in a hidden scratchpad.
|
||||
|
||||
`ALT + TAB` / `ALT + SHIFT + TAB` keep Omarchy's next / previous window. `SUPER + SHIFT + TAB` walks a ring built only from the active workspace's mapped windows, ordered by `stable_id`. Grouped windows stay in the ring and hidden ones are skipped. It raises the focused window afterwards. It avoids `cyclenext`, which would pull in a hidden scratchpad.
|
||||
`pip.lua` makes the active window a picture-in-picture window: leaves maximized/fullscreen (a maximized window refuses to float or pin), tags it `follow-pip`, floats and pins it, resizes it to a 16:9 box 30% of the focused monitor's width (480×270 on `eDP-1`, 768×432 on the Studio Display), and places it in the bottom-left corner, 10 px (matching `general:gaps_out`) inside the reserved area. Pressing it on a tagged window removes the tag, unpins and re-tiles it. Being pinned, the window shows on every workspace of its monitor; a `monitor.focused` listener moves every `follow-pip` window to the newly focused monitor and refits it there one loop later (Hyprland keeps a floating window's pixel size and offset across monitors). Focus stays where it was. The tag survives `hyprctl reload`. Pin and float are dispatched with `on`/`off` because `set` toggles on Hyprland 0.56.
|
||||
|
||||
`nav.lua` picks the neighbor itself rather than using Hyprland's directional focus, which searches the whole layout: on the scrolling tape, `J`/`K` with nothing above or below jumped to an off-screen column. A neighbor must lie past the focused window's centre on the move axis and overlap it on the other axis; inactive group tabs share their group's cell and are skipped. So `J`/`K` stay in the column and `H`/`L` walk the columns.
|
||||
@@ -218,16 +250,14 @@ Every binding defined in `bindings.lua`. Bindings not listed here are Omarchy de
|
||||
|
||||
| Keys | Action | Replaces |
|
||||
| --- | --- | --- |
|
||||
| `SUPER + CTRL + J` | Next workspace (`e+1`) | — |
|
||||
| `SUPER + CTRL + K` | Previous workspace (`e-1`) | Herdr keybindings |
|
||||
| `ALT + Q` / `W` / `E` / `R` | Switch to workspace 1 / 2 / 3 / 4 (main external display) | — |
|
||||
| `ALT + Y` / `U` / `I` / `O` | Switch to workspace 5 / 6 / 7 / 8 (laptop panel) | — |
|
||||
| `ALT + SHIFT + Q` / `W` / `E` / `R` / `Y` / `U` / `I` / `O` | Move window to workspace 1–8 | — |
|
||||
| `SUPER + CTRL + S` | `omarchy-toggle-scratch scratchpad` | share menu |
|
||||
| `SUPER + A` | `omarchy-toggle-scratch scratchpad` (Tern) | — |
|
||||
| `SUPER + O`, `SUPER + SHIFT + O` | Unbound | pop window out, Obsidian |
|
||||
| `ALT + SHIFT + J` | Move window to next monitor | — |
|
||||
| `ALT + SHIFT + K` | Move window to previous monitor | — |
|
||||
| `SUPER + CTRL + ALT + 1..0` | Switch to workspace 1–10 | — (Omarchy's `SUPER + 1..0`) |
|
||||
| `SUPER + CTRL + ALT + SHIFT + 1..0` | Move window to workspace 1–10 | — (Omarchy's `SUPER + SHIFT + 1..0`, unbound) |
|
||||
| `ALT + A` | `omarchy-toggle-scratch scratchpad`: a scratch kitty (`kitty --class=kitty-scratch --session=none`) | — |
|
||||
| `SUPER + O` | Focus next monitor | pop window out |
|
||||
| `SUPER + SHIFT + O` | Move window to next monitor | Obsidian |
|
||||
| `SUPER + SHIFT + CTRL + ALT + W` | Workspace `name:w` | — |
|
||||
| `SUPER + SHIFT + CTRL + ALT + H` | Workspace `name:h` | — |
|
||||
| `SUPER + CTRL + ALT + X` | Workspace `name:x` | — |
|
||||
@@ -238,58 +268,58 @@ Named workspaces provide the per-app workspaces. `SUPER + ALT + S` (send to scra
|
||||
|
||||
| Keys | Action |
|
||||
| --- | --- |
|
||||
| `SUPER + R` | `omarchy-cycle-window-size` — next preset size |
|
||||
| `SUPER + SHIFT + R` | `omarchy-cycle-window-size prev` |
|
||||
| `ALT + SHIFT + H` / `SUPER + ,` | Width −100 px |
|
||||
| `ALT + SHIFT + L` / `SUPER + .` | Width +100 px |
|
||||
| `SUPER + CTRL + K` | Height −100 px |
|
||||
| `SUPER + CTRL + J` | Height +100 px |
|
||||
| `ALT + Z` | `omarchy-cycle-window-size` — next preset size |
|
||||
| `ALT + SHIFT + Z` | `omarchy-cycle-window-size prev` |
|
||||
| `ALT + -` / `ALT + =` | Width −100 / +100 px |
|
||||
| `ALT + SHIFT + -` / `ALT + SHIFT + =` | Height −100 / +100 px |
|
||||
| `SUPER + ALT + C` | Fit active column (scrolling layout only) |
|
||||
| `SUPER + SHIFT + ALT + C` | Fit visible columns (scrolling layout only) |
|
||||
| `SUPER + CTRL + F` | Zen mode: `omarchy-toggle-fullscreen-desktop` hides the bar and sets gaps to 0; moved from `SUPER + CTRL + ALT + F`, replaces Omarchy's tiled full screen |
|
||||
|
||||
### Applications
|
||||
|
||||
`CAG` is `SUPER + CTRL + ALT`: one tap of the Corne's `OSM CAG`, then the key.
|
||||
|
||||
| Keys | Action | Replaces |
|
||||
| --- | --- | --- |
|
||||
| `SUPER + CTRL + A` | Claude Desktop: `omarchy-launch-or-focus com.anthropic.Claude claude-desktop`, on its own workspace `name:claude` on `eDP-1` | audio panel |
|
||||
| `SUPER + CTRL + G` | Gemini: `omarchy-launch-or-focus gemini "gtk-launch gemini-desktop"` | — |
|
||||
| `SUPER + CTRL + ALT + H` | `omarchy-toggle-scratch hermes` (Hermes desktop) | — |
|
||||
| `SUPER + CTRL + ALT + J` | `omarchy-cycle-terminal` | — |
|
||||
| `SUPER + CTRL + ALT + K` | `omarchy-cycle-browser` | — |
|
||||
| `SUPER + CTRL + ALT + G` | `omarchy-cycle ghostty` | — |
|
||||
| `SUPER + CTRL + ALT + O` | `omarchy-cycle obsidian` | — |
|
||||
| `SUPER + CTRL + ALT + F` | strata: `omarchy-launch-or-focus io.github.lgse.Strata "gtk-launch io.github.lgse.Strata"` | full screen desktop (now `SUPER + CTRL + F`) |
|
||||
| `SUPER + CTRL + ALT + E` | Fastmail: `omarchy-launch-or-focus com.fastmail.Fastmail "gtk-launch com.fastmail.Fastmail"`, on `name:fastmail` on `eDP-1` | World clock (`omarchy.elsewhen` panel) |
|
||||
| `SUPER + CTRL + ALT + M` | Beeper: `omarchy-launch-or-focus Beeper "gtk-launch beeper"`, on `name:beeper` on `eDP-1` | — |
|
||||
| `SUPER + CTRL + H` | `omarchy-toggle-scratch home` (Google Home) | toggle window gaps |
|
||||
| `SUPER + CTRL + L` | `omarchy-toggle-scratch lmstudio` (LM Studio) | toggle window gaps |
|
||||
| `SUPER + CTRL + ALT + Y` | YouTube: `omarchy-launch-or-focus 'brave-(www\.)?youtube\.com__' "gtk-launch YouTube"`, on `name:youtube` on `eDP-1` | web apps cycle |
|
||||
| `SUPER + SHIFT + Y` | Same as `SUPER + CTRL + ALT + Y` | YouTube desktop entry (new window every press) |
|
||||
| `SUPER + CTRL + ALT + T` | tldraw offline: `omarchy-launch-or-focus tldraw-offline "gtk-launch tldraw-offline"` | show time |
|
||||
| `SUPER + CTRL + ALT + W` | tldraw: `omarchy-launch-or-focus tldraw "gtk-launch TLDraw"` | toggle weather |
|
||||
| `SUPER + CTRL + ALT + SPACE` | Sticky Notes Canvas via `gtk-launch io.github.faridjaff.StickyNotesCanvas` | — |
|
||||
| `SUPER + SHIFT + G` | Goliath: `kitty --class=kitty-goliath --title=goliath --session=none --config ~/.config/kitty/goliath.conf mosh goliath`; new tabs and splits there are goliath sessions too (see [kitty](../terminal/kitty.md#goliath-super--shift--g), [SSH and mosh](../tools/ssh.md)) | Signal |
|
||||
| `CAG + H` | `omarchy-toggle-scratch hermes` (Hermes desktop) | — |
|
||||
| `CAG + J` | `omarchy-cycle-terminal` | — |
|
||||
| `CAG + K` | `omarchy-cycle-browser` | — |
|
||||
| `CAG + G` | `omarchy-cycle ghostty` | — |
|
||||
| `CAG + O` | `omarchy-cycle obsidian` | — |
|
||||
| `CAG + F` | strata: `omarchy-launch-or-focus io.github.lgse.Strata "gtk-launch io.github.lgse.Strata"` | full screen desktop (now `SUPER + CTRL + F`) |
|
||||
| `CAG + E` | Fastmail: `omarchy-launch-or-focus com.fastmail.Fastmail "gtk-launch com.fastmail.Fastmail"`, on `name:fastmail` on `eDP-1` | World clock (`omarchy.elsewhen` panel) |
|
||||
| `CAG + M` | Beeper: `omarchy-launch-or-focus Beeper "gtk-launch beeper"`, on `name:beeper` on `eDP-1` | — |
|
||||
| `CAG + Y` | YouTube: `omarchy-launch-or-focus 'brave-(www\.)?youtube\.com__' "gtk-launch YouTube"`, on `name:youtube` on `eDP-1` | web apps cycle |
|
||||
| `CAG + T` | tldraw offline: `omarchy-launch-or-focus tldraw-offline "gtk-launch tldraw-offline"` | show time |
|
||||
| `CAG + W` | Unbound | toggle weather |
|
||||
| `CAG + I` / `CAG + SHIFT + I` | `omarchy-input-method cycle` / `cycle back` | — |
|
||||
| `CAG + SHIFT + G` | Goliath: `kitty --class=kitty-goliath --title=goliath --session=none --config ~/.config/kitty/goliath.conf mosh goliath`; new tabs and splits there are goliath sessions too (see [kitty](../terminal/kitty.md), [SSH and mosh](../tools/ssh.md)) | — |
|
||||
| `CAG + SHIFT + D` | Docker TUI (`omarchy-launch-docker-tui`) | — |
|
||||
| `CAG + SHIFT + T` | Activity (`btop`) | — |
|
||||
| `SUPER + CTRL + /` | Monitor scaling up (`SUPER + ALT + /` scales down) | — |
|
||||
| `SUPER + ALT + SHIFT + F` | `uwsm-app -- "$HOME/.local/bin/strata" "$(omarchy-cmd-terminal-cwd)"` — strata in the terminal's cwd | unbound first (default unnamed) |
|
||||
|
||||
strata is the default file manager: `inode/directory` in `mimeapps.list` and the `org.freedesktop.FileManager1` D-Bus service both point at it ([15-tools](../chezmoi/scripts.md#15-tools)). The cwd bind uses the absolute path because `~/.local/bin` may be missing from uwsm-app's `PATH`. Omarchy's own file-manager bind on `SUPER + SHIFT + F` is replaced by full screen (below). A rule tagging `com.thisisgm.flea.picker` as `+floating-window` still sits between `flea --picker` marker comments, which the `flea` tool writes and removes itself.
|
||||
strata is the default file manager: `inode/directory` in `mimeapps.list` and the `org.freedesktop.FileManager1` D-Bus service both point at it ([15-tools](../chezmoi/scripts.md#15-tools)). The cwd bind uses the absolute path because `~/.local/bin` may be missing from uwsm-app's `PATH`. A rule tagging `com.thisisgm.flea.picker` as `+floating-window` still sits between `flea --picker` marker comments, which the `flea` tool writes and removes itself.
|
||||
|
||||
### Screenshots, session, menus
|
||||
|
||||
| Keys | Action | Replaces |
|
||||
| --- | --- | --- |
|
||||
| `SUPER + S` | `omarchy-capture-screenshot region` | toggle scratchpad |
|
||||
| `SUPER + SHIFT + S` | `omarchy-capture-screenshot windows` | Google Maps |
|
||||
| `SUPER + CTRL + S` | `omarchy-capture-screenshot region` | share menu |
|
||||
| `SUPER + CTRL + SHIFT + S` | `omarchy-capture-screenshot windows` | — |
|
||||
| `SUPER + SHIFT + ALT + S` | `omarchy-capture-screenshot fullscreen` | — |
|
||||
| `SUPER + SHIFT + E` | `omarchy-menu toggle system` | Email |
|
||||
| `SUPER + SHIFT + Q` | `omarchy-menu toggle system` | — |
|
||||
| `SUPER + CTRL + C` | Capture menu (screenshots and recordings), Omarchy default | — |
|
||||
| `SUPER + SHIFT + Q` | `omarchy-menu toggle system` | Calculator (`XF86Calculator` still opens it) |
|
||||
| `SUPER + SHIFT + BACKSPACE` | Dismiss last notification | toggle window gaps |
|
||||
| `SUPER + CTRL + X` | `omarchy-dictation toggle` (only when `o.dictation_installed()`) | — |
|
||||
| `F9` (hold) | Push-to-talk: `omarchy-dictation start` on press, `stop` on release (only when `o.dictation_installed()`) | — |
|
||||
| `SUPER + SPACE` | `vicinae toggle` (launcher; server is the `vicinae.service` user unit) | pseudo window |
|
||||
| `SUPER + SHIFT + SPACE` | Emoji picker (`omarchy-shell shell toggle omarchy.emojis`) | toggle top bar |
|
||||
| `SUPER + P` | Clipboard manager (`omarchy-shell shell toggle omarchy.clipboard`) | pseudo window |
|
||||
| `ALT + TAB` | ScrollOverview `toggle all` (only when the plugin is loaded) | Omarchy's two `ALT + TAB` binds |
|
||||
| `SUPER + SPACE` | `vicinae toggle` (launcher; server is the `vicinae.service` user unit) | Omarchy menu |
|
||||
| `SUPER + SHIFT + SPACE` | Unbound | toggle top bar |
|
||||
|
||||
`SUPER + ALT + SPACE` (apps menu) keeps its Omarchy default. `SUPER + RETURN` (terminal) and `SUPER + SHIFT + RETURN` (browser) are unbound; terminals and browsers live on `SUPER + CTRL + ALT + J` / `K`.
|
||||
`SUPER + ALT + SPACE` (apps menu) keeps its Omarchy default, as do the `SUPER + CTRL` panels (`T` theme, `R` / `SHIFT + R` reminders, `B` Bluetooth, `N` network, …). `SUPER + RETURN` and `SUPER + SHIFT + RETURN` lose Omarchy's terminal and browser launchers; terminals and browsers live on `CAG + J` / `K`, and `SUPER + RETURN` is `Ctrl+Return` in apps.
|
||||
|
||||
### ScrollOverview plugin
|
||||
|
||||
@@ -326,7 +356,7 @@ Focuses an app's window, cycles to the next one on repeated presses, or launches
|
||||
| `ghostty` | `ghostty` | `ghostty` |
|
||||
| `browser` | zen, brave, chromium, google-chrome, firefox, librewolf, vivaldi, microsoft-edge, helium — excluding `chrome-`/`webapp-` web apps | `omarchy-launch-browser` |
|
||||
| `brave` | `^brave` (Brave Origin and its web apps) | `omarchy-launch-browser` |
|
||||
| `terminal` | kitty, alacritty, ghostty, foot, wezterm (Tern, the scratchpad terminal, does not match) | `omarchy-launch-terminal` (`xdg-terminal-exec`: the OS default terminal from `~/.config/xdg-terminals.list`, in the focused terminal's cwd) |
|
||||
| `terminal` | kitty, alacritty, ghostty, foot, wezterm (the `kitty-scratch` scratchpad kitty is excluded) | `omarchy-launch-terminal` (`xdg-terminal-exec`: the OS default terminal from `~/.config/xdg-terminals.list`, in the focused terminal's cwd) |
|
||||
| `ai` | `claude\|hermes` | `hermes desktop` |
|
||||
| anything else | `^APP$` | the argument as a command |
|
||||
|
||||
@@ -356,7 +386,7 @@ Steps the focused window through preset widths `0.333, 0.5, 0.667` of the monito
|
||||
- **Floating:** resizes to the fraction × monitor width and 0.8 × monitor height, then centers. The index is stored per window.
|
||||
- **Dwindle/master (tiled):** sets `splitratio` to `2 × fraction`, mirrored when the window is on the right or bottom half, clamped to 0.1–1.9. The index is stored per workspace.
|
||||
|
||||
Indices are stored in `$XDG_STATE_HOME/omarchy/window-sizes/`. Bound to `SUPER + R` and `SUPER + SHIFT + R`.
|
||||
Indices are stored in `$XDG_STATE_HOME/omarchy/window-sizes/`. Bound to `ALT + Z` and `ALT + SHIFT + Z`.
|
||||
|
||||
### omarchy-toggle-layout
|
||||
|
||||
@@ -364,7 +394,7 @@ Indices are stored in `$XDG_STATE_HOME/omarchy/window-sizes/`. Bound to `SUPER +
|
||||
omarchy-toggle-layout [width]
|
||||
```
|
||||
|
||||
Runs `omarchy-hyprland-workspace-layout-toggle`, then polls the workspace layout (6 × 50 ms). If it became `scrolling`, it runs `colresize all <width>` (default `0.75`). Dwindle needs no widths. Bound to `SUPER + W`.
|
||||
Runs `omarchy-hyprland-workspace-layout-toggle`, then polls the workspace layout (6 × 50 ms). If it became `scrolling`, it runs `colresize all <width>` (default `0.75`). Dwindle needs no widths. Bound to `ALT + /`.
|
||||
|
||||
### omarchy-toggle-master
|
||||
|
||||
@@ -372,7 +402,7 @@ Runs `omarchy-hyprland-workspace-layout-toggle`, then polls the workspace layout
|
||||
omarchy-toggle-master
|
||||
```
|
||||
|
||||
Switches the active numbered workspace to the `master` layout through Omarchy's `o.workspace_mode`, saving it in `~/.local/state/omarchy/workspace-layouts/<id>.lua` like `omarchy-hyprland-workspace-layout-toggle`, so it survives reloads and `SUPER + W` sees it. The layout it replaced is kept in `~/.local/state/omarchy/master-toggle/<id>`; the next press restores it (or the default layout if none was kept), and the saved-mode file is removed when that is the default. Named workspaces are skipped, as in Omarchy. Shares Omarchy's layout notification. Switching to master also runs `require("hypr.master").enforce()`, since a layout change fires no event. Bound to `SUPER + CTRL + W`.
|
||||
Switches the active numbered workspace to the `master` layout through Omarchy's `o.workspace_mode`, saving it in `~/.local/state/omarchy/workspace-layouts/<id>.lua` like `omarchy-hyprland-workspace-layout-toggle`, so it survives reloads and `ALT + /` sees it. The layout it replaced is kept in `~/.local/state/omarchy/master-toggle/<id>`; the next press restores it (or the default layout if none was kept), and the saved-mode file is removed when that is the default. Named workspaces are skipped, as in Omarchy. Shares Omarchy's layout notification. Switching to master also runs `require("hypr.master").enforce()`, since a layout change fires no event. Bound to `ALT + SHIFT + /`.
|
||||
|
||||
`master.lua` makes every Ghostty node (a group counts once) a master and every other window a slave on the active workspace when it uses the master layout and holds a Ghostty window. It runs one loop after `window.open`, `window.move_to_workspace`, `window.destroy`, `workspace.active`, and `config.reloaded`. A Ghostty slave first swaps places with a non-Ghostty master (`window.swap` with `window` and `target`, focus untouched); Ghostty windows left over get `addmaster` and non-Ghostty masters left over get `removemaster`, both of which act on the focused window, so focus visits them and returns to the window that just opened, or else the one that was active. `addmaster` alone fails with two windows: Hyprland refuses to leave no slave while `master:allow_small_split` is off. Only the active workspace is fixed, because focusing a window elsewhere would switch workspace or monitor; other workspaces are fixed when they become active. Several Ghostty nodes stack in the center column.
|
||||
|
||||
@@ -384,12 +414,12 @@ omarchy-toggle-scratch [scratchpad|home|lmstudio|hermes]
|
||||
|
||||
| Profile | Special workspace | Home monitor | Residents (class → launch) |
|
||||
| --- | --- | --- | --- |
|
||||
| `scratchpad` | `special:scratchpad` | Studio Display, else Samsung ultrawide | `so.stencil.tern` → `tern` |
|
||||
| `scratchpad` | `special:scratchpad` | Studio Display, else Samsung ultrawide | `kitty-scratch` → `kitty --class=kitty-scratch --session=none` |
|
||||
| `home` | `special:home` | focused | `brave-home\.google\.com__.*` → `gtk-launch 'Google Home'` |
|
||||
| `lmstudio` | `special:lmstudio` | focused | `ai\.elementlabs\.lmstudio` → `gtk-launch ai.elementlabs.lmstudio` |
|
||||
| `hermes` | `special:hermes` | focused | `(com\.nousresearch\.)?[Hh]ermes` → `gtk-launch hermes-desktop` |
|
||||
|
||||
If the workspace is visible, the script hides it. If not, it launches any resident with no window there, waits up to 8 s for the first new window, and reveals the workspace on the home monitor (or the focused one if the home monitor is absent). Launching only missing residents avoids duplicate web-app windows. Bound to `SUPER + CTRL + S`, `SUPER + A`, `SUPER + CTRL + H`, `SUPER + CTRL + L`, and `SUPER + CTRL + ALT + H`.
|
||||
If the workspace is visible, the script hides it. If not, it launches any resident with no window there, waits up to 8 s for the first new window, and reveals the workspace on the home monitor (or the focused one if the home monitor is absent). Launching only missing residents avoids duplicate web-app windows. Bound to `ALT + A` (scratchpad), `SUPER + CTRL + H` (Google Home), `SUPER + CTRL + L` (LM Studio), and `SUPER + CTRL + ALT + H` (Hermes).
|
||||
|
||||
## Related
|
||||
|
||||
|
||||
@@ -455,7 +455,7 @@ tmux-sessions --new QUERY
|
||||
tmux-sessions --dir DIR
|
||||
```
|
||||
|
||||
The source of the **Sessions** [tmux command palette](../terminal/tmux.md#command-palette) (`palettes/sessions.json`), which replaced tmux-sessionx. Open it with tmux `prefix o`, Ghostty <kbd>ctrl+shift+o</kbd> or <kbd>super+enter</kbd>, or the "Sessions" item in the main palette.
|
||||
The source of the **Sessions** [tmux command palette](../terminal/tmux.md#command-palette) (`palettes/sessions.json`), which replaced tmux-sessionx. Open it with tmux `prefix o`, Ghostty <kbd>ctrl+shift+o</kbd>, or the "Sessions" item in the main palette.
|
||||
|
||||
With no arguments it prints palette items as JSON, grouped by category:
|
||||
|
||||
|
||||
@@ -72,11 +72,10 @@ Closing a window only detaches its session; the shells keep running in the tmux
|
||||
| `ctrl+shift+g` | `prefix g` | Lazygit in a 90% popup, pane cwd |
|
||||
| `ctrl+shift+w` | `prefix k` | Kill window (close tab) |
|
||||
| `ctrl+shift+r` | `prefix r` | Rename window |
|
||||
| `ctrl+tab` / `ctrl+page_down` / `ctrl+shift+right` / `ctrl+shift+k` | `prefix n` | Next window |
|
||||
| `ctrl+tab` / `ctrl+page_down` / `ctrl+shift+right` / `ctrl+shift+l` / `ctrl+shift+k` | `prefix n` | Next window |
|
||||
| `ctrl+shift+tab` / `ctrl+page_up` / `ctrl+shift+left` / `ctrl+shift+h` | `prefix p` | Previous window |
|
||||
| `ctrl+shift+l` | `prefix v` | Split right |
|
||||
| `ctrl+shift+j` | `prefix h` | Split below |
|
||||
| `ctrl+shift+o` / `super+enter` | `prefix o` | Sessions palette: switch session or window, or create one through zoxide |
|
||||
| `ctrl+shift+o` | `prefix o` | Sessions palette: switch session or window, or create one through zoxide |
|
||||
| `ctrl+shift+x` | `prefix x` | Kill pane |
|
||||
| `ctrl+shift+enter` / `ctrl+shift+z` | `prefix z` | Zoom pane |
|
||||
| `ctrl+shift+page_up` | `prefix [` | Copy mode |
|
||||
@@ -86,6 +85,19 @@ Closing a window only detaches its session; the shells keep running in the tmux
|
||||
| `ctrl+shift+a`, `ctrl+shift+s` | `prefix S` | Toggle the [workmux](../tools/workmux.md) agent sidebar (all sessions); the session/window tree stays on `prefix s`. The [Workmux palette](../shell/scripts.md#workmux-palette) has no chord: `prefix w`, or `ctrl+s` inside the sidebar |
|
||||
| `ctrl+shift+q` | `prefix d` | Detach (closes the Ghostty window; the session lives on) |
|
||||
|
||||
### Super chords
|
||||
|
||||
`super` is the Corne's right thumb (`RGui`, Cmd on macOS). Hyprland's [Command layer](../desktop/hyprland.md#command-layer-commandlua) turns `SUPER + key` (and `SUPER + SHIFT + key`) into `ctrl+shift+key` when Ghostty is focused, so every `ctrl+shift` chord in the table above is also a `super` chord: `super+t` new tmux window, `super+w` close it, `super+c` / `super+v` copy / paste, `super+o` excepted (Hyprland keeps it for the next monitor). It forwards only the `ctrl+shift` chords this config binds; Ghostty would pass an unbound one on as a CSI-u key for the program to interpret. Hyprland reads the list from this file when it loads, so run `hyprctl reload` after adding a `ctrl+shift` bind. Plain `ctrl` stays the terminal's (`Ctrl+C` SIGINT, `ctrl+b` the tmux prefix).
|
||||
|
||||
Bound for the `super` side only:
|
||||
|
||||
| Key (`super` equivalent) | Sends / action | tmux action |
|
||||
| --- | --- | --- |
|
||||
| `ctrl+shift+1` … `ctrl+shift+9` (`super+1` … `super+9`) | `prefix 1` … `prefix 9` | Select window N |
|
||||
| `ctrl+shift+equal` / `ctrl+shift+minus` / `ctrl+shift+0` (`super+=` / `super+-` / `super+0`) | Font size +1 / -1 / reset | — |
|
||||
|
||||
`super+enter` becomes `ctrl+shift+enter` (zoom pane); the Sessions palette stays on `ctrl+shift+o`. `super+shift+enter` (`new_window`) is not translated by Hyprland and opens a new Ghostty window, so a new tmux session.
|
||||
|
||||
## Themes
|
||||
|
||||
| Theme | Notes |
|
||||
|
||||
@@ -186,7 +186,7 @@ Launched by `super+a`. Class `kitty-herdr`, `tab_bar_style hidden` (herdr draws
|
||||
| `ctrl+shift+q` | `prefix x` |
|
||||
| `ctrl+shift+p` | `prefix P` (Switchboard commands) |
|
||||
|
||||
### Goliath (`SUPER + SHIFT + G`)
|
||||
### Goliath (`SUPER + CTRL + ALT + SHIFT + G`)
|
||||
|
||||
[Hyprland](../desktop/hyprland.md) starts `kitty --class=kitty-goliath --title=goliath --session=none --config ~/.config/kitty/goliath.conf mosh goliath`: a login shell on goliath over mosh, no tmux; it survives suspend and network changes, and closing the window ends it. `goliath.conf` is `include kitty.conf` (same tab bar, keys and theme) plus overrides:
|
||||
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# SSH and mosh
|
||||
|
||||
`~/.ssh/config` with the goliath host, and mosh for the interactive session behind `SUPER + SHIFT + G`.
|
||||
`~/.ssh/config` with the goliath host, and mosh for the interactive session behind `SUPER + CTRL + ALT + SHIFT + G`.
|
||||
|
||||
| | |
|
||||
| --- | --- |
|
||||
@@ -22,7 +22,7 @@ Keys, `known_hosts` and the agent socket are not managed; only `config` is. The
|
||||
|
||||
## mosh
|
||||
|
||||
`SUPER + SHIFT + G` ([Hyprland](../desktop/hyprland.md)) opens `kitty --class=kitty-goliath --title=goliath --session=none --config ~/.config/kitty/goliath.conf mosh goliath`; new tabs and splits in that window are mosh sessions too (see [kitty](../terminal/kitty.md#goliath-super--shift--g)). mosh logs in over ssh with this host block (`%h` is the Tailscale IP), starts `mosh-server` on goliath, which binds UDP 60000–61000 on `100.115.218.84`, and the session runs over Tailscale. The session survives suspend, Wi-Fi changes and dropped links, and echoes keystrokes locally while the link is slow.
|
||||
`SUPER + CTRL + ALT + SHIFT + G` ([Hyprland](../desktop/hyprland.md)) opens `kitty --class=kitty-goliath --title=goliath --session=none --config ~/.config/kitty/goliath.conf mosh goliath`; new tabs and splits in that window are mosh sessions too (see [kitty](../terminal/kitty.md#goliath-super--ctrl--alt--shift--g)). mosh logs in over ssh with this host block (`%h` is the Tailscale IP), starts `mosh-server` on goliath, which binds UDP 60000–61000 on `100.115.218.84`, and the session runs over Tailscale. The session survives suspend, Wi-Fi changes and dropped links, and echoes keystrokes locally while the link is slow.
|
||||
|
||||
- mosh's bootstrap ssh runs with `-S none`, so it never uses the shared connection; key auth through the agent must work non-interactively.
|
||||
- goliath runs no firewall, and Tailscale carries the UDP traffic.
|
||||
|
||||
+1
-1
Submodule dot_config/hypr updated: cd22749860...6e6d7c9880.
@@ -129,9 +129,9 @@ elif [[ $APP == "brave" ]]; then
|
||||
DEFAULT_LAUNCHER="omarchy-launch-browser"
|
||||
|
||||
elif [[ $APP == "terminal" ]]; then
|
||||
# Cycle all terminals. Tern (so.stencil.tern) is the SUPER + A scratch
|
||||
# terminal and the pattern below already leaves it out.
|
||||
INSTANCES=($(addresses_matching '(kitty|alacritty|ghostty|foot|wezterm)'))
|
||||
# Cycle all terminals, except the ALT + A scratch kitty (kitty-scratch):
|
||||
# focusing it would pull the hidden scratchpad into view.
|
||||
INSTANCES=($(addresses_matching '(kitty|alacritty|ghostty|foot|wezterm)' '^kitty-scratch$'))
|
||||
DEFAULT_LAUNCHER="omarchy-launch-terminal"
|
||||
|
||||
elif [[ $APP == "ai" ]]; then
|
||||
|
||||
@@ -27,7 +27,10 @@ case ${1:-scratchpad} in
|
||||
scratchpad)
|
||||
NAME="scratchpad"
|
||||
HOME_MONITOR=$EXTERNAL
|
||||
MEMBERS=("so.stencil.tern|tern")
|
||||
# kitty under its own class, so the window rule can pin it and terminal
|
||||
# cycling can skip it; --session=none keeps it from claiming today's kitty
|
||||
# day session (kitty.conf), as the goliath kitty does.
|
||||
MEMBERS=("kitty-scratch|kitty --class=kitty-scratch --session=none")
|
||||
;;
|
||||
home)
|
||||
NAME="home"
|
||||
|
||||
Reference in new issue
Block a user