Lattices for Linux · Hyprland and Omarchy

The same workspace, on Hyprland.

Lattices on Linux is a desktop app, the lats CLI, a local host and a tray menu. One command installs it on Omarchy. Agents get the API they already use on a Mac, and a Mac and a Linux machine can share one desk.

Omarchy on Arch · Hyprland · systemd user session · x86-64 and ARM64

lattices.sock private IPCQuickshell appBun hostsystemctl --user servicesTailscale optional

Install

One command, from a terminal inside Hyprland.

Run it as your own user. The installer uses sudo only to add missing Arch packages, reports clearly when it cannot reach the desktop, and leaves older runtimes in place for recovery.

omarchy · footLIVE
$ curl -fsSL https://raw.githubusercontent.com/lattices-dev/lattices/main/install.sh | bash
  1. 01
    Dependencies

    Installs missing Arch packages and Bun. Nothing runs as root except pacman.

  2. 02
    Runtime

    Copies the Linux runtime into ~/.local/share/lattices. The source checkout can go afterwards.

  3. 03
    Commands

    Adds lats, lattices and lattices-host to ~/.local/bin and a launcher to the Apps menu.

  4. 04
    Services

    Enables lattices-host and lattices-tray as systemd user services. Both start at login.

  5. 05
    Check

    Runs lats doctor and opens the app.

Mac and Linux

Two machines. One desk.

The Linux host speaks the Mac daemon’s protocol: the same envelope, method names and window shapes. So a Mac can list, place, see and drive windows on a Linux machine, and lend it a cursor.

Visit with your cursor

Push the Mac’s pointer past the edge that faces the Linux machine. A coral visitor appears on its screens, labelled with your Mac’s name, and your keys type there. Your own cursor never leaves, so nothing can strand it. ⌃⌥⌘ Home brings it back; Bring Cursor Home in the tray does the same from the host.

Drive it from the CLI

lats machines lists every machine with its build, displays and pairing. lats @archie runs a command there, and lats --host archie call windows.place moves a window on the other desk. Clicks and keys stage first and act only with treatment: "execute".

Give agents the same API

host.describe reports the platform, displays and capabilities, so clients branch on what a host has, never on its OS. Action’s remote engine, the hosts MCP toolset and the iOS companion all reach a Linux machine through the gateway.

  1. 01archie Linuxlats gateway start --tailnet

    The host listens only on private sockets. The gateway binds this machine’s Tailscale address, port 9399.

  2. 02mini macOSlats --host archie pair

    The Mac makes a key and asks for read, screen and act. Add --drive for input, or --read-only for a viewer.

  3. 03archie Linuxlats gateway approve <client>

    Check the fingerprint with lats gateway clients first. Approval only works from the host itself.

  4. 04mini macOSlats visit pair archie archie:9399 right

    Then arrange the two machines in Workspace → Machines, the way you arrange displays.

Visits travel from a Mac to a Linux machine, or between Macs. A Linux machine receives. Remote access needs Tailscale; everything local works without it.

In the app

Built for a tiling desktop, not ported to one.

The Linux app is Quickshell and Qt Quick on top of the host. It keeps the Mac app’s navigation and adds the views a Hyprland desktop asks for.

⌃2

Flight Deck

Every space on a display as one continuous map with live window geometry. Zoom, inspect a space without switching to it, pick a window and place it. A preview draws the planned frame in amber before anything moves.

⌃3

Layers

Save windows into named layers and switch them with In place, Auto, Columns or Master stack. Linux edits the same ~/.lattices/workspace.json the Mac app uses.

⌃6

Mission Control

One inventory of live windows across spaces plus the windows a layer parked. Filter by title, app, window ID or layer. Enter focuses the row.

⌃7

Operator Console

Type lats commands and read the receipts in a transcript. --dry-run previews focus, placement and space changes. The console never runs shell text.

PiP

Virtual space

A headless 1280 × 800 Sway desktop for agents, with a browser and a terminal preset. Watch it in a floating viewer. The physical pointer and focus stay yours.

API

Virtual displays

displays.create adds a headless output; displays.remove takes only the ones the host made. Hand-made outputs stay yours unless you adopt them.

tray

Omarchy tray

A StatusNotifierItem in Omarchy’s own tray: Bring Cursor Home, host and companion pairing status, Start and Stop Host. Nothing is written under /usr/share/omarchy.

fwd

Mouse gestures

Hold the Forward button and draw. Left and right move between existing spaces, down shows the overlay, down then left sends Enter. Super+Ctrl+G opens a tester.

F1

Theme and hints

The app follows Omarchy’s current colors and light or dark mode within a second. F1 opens a hints pack for Omarchy, layers, sessions and shortcuts; lats hints prints the same pack.

Requirements

What the machine needs.

Required

  • Hyprlandwith a systemd user session
  • Omarchy on Arch Linuxfor the automatic dependency setup
  • x86-64 or ARM64
  • Bun and Quickshellinstalled when missing

Checked by the installer

  • tmuxsessions
  • grim and wtypecapture and keys
  • tesseractscreen text
  • ffmpeg and Pythonrecording and gestures

Optional

  • Tailscalepairing, visits and remote agents
  • sway, foot, ChromiumVirtual space
  • Hyprland 0.56 and Omarchy’s Lua configmouse gestures
  • Another distributionbring the tools, then --no-deps

Everything lands under your home directory: launchers in ~/.local/bin, the runtime in ~/.local/share/lattices, services in ~/.config/systemd/user, and backups in ~/.local/state/lattices. Saved layers, pairings and captures stay in ~/.lattices, apart from installed code.

Local first

The host listens on a private socket. Remote access is a separate, opt-in gateway.