Omahub
← All plugins
A

Omasets Layout Composer

by Agata

Compose and launch deterministic tiled application layouts for Omarchy Quattro.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
b1b9c1a
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

Low
AI risk level
Low
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
b1b9c1a
Reviewed
1 month ago

The plugin is a legitimate layout composer that launches user-defined applications via hyprctl. It executes shell commands from the user's own config file, which is clearly documented and not hidden. No malicious code, obfuscation, or suspicious behavior was found.

  • The plugin runs user-authored shell commands from layouts.json with the user's permissions; if that file is compromised, arbitrary commands could be executed.
  • The runner script uses hyprctl to close windows and move windows, which could disrupt the user's session if misconfigured, but this is expected functionality.
How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/agata/omasets --enable
Productivity #quickshell #launcher #workspaces

Omasets Layout Composer

Omasets is a visual tiled-layout composer built specifically for Omarchy Quattro. Define applications as leaves, split the canvas horizontally or vertically, tune each split ratio, and launch the result onto a Hyprland workspace.

Omasets workset list and selected layout preview

Omasets editing a five-pane daily dashboard

This project is deliberately separate from HyprSets. It carries forward HyprSets' layout-tree concept and launch experience while using Quattro's native Quickshell plugin UI and Hyprland Lua dispatcher.

What works in 0.1

  • HyprSets-style home screen with tabs, a workset table, selection details, and explicit navigation into the editor.
  • Theme-native Quickshell editor presented as a bar-side layer-shell panel, so Omasets never joins or disturbs the workspace's tiled window tree.
  • Multiple named worksets and user-defined tabs stored in one JSON file.
  • Recursive horizontal and vertical splits with adjustable ratios.
  • Per-slot command, working directory, and post-launch delay.
  • Current, numbered, named, and special workspace targets.
  • Sequential launch with window detection, preselection, and split-ratio application.
  • Cross-workspace recovery for single-instance applications: if Chromium, VS Code, or another existing process creates its new window elsewhere, Omasets moves that specific new window to the target before continuing.
  • Dry-run preview before launching.
  • Optional replacement of existing windows on the target workspace.
  • Create, duplicate, delete, assign-to-tab, split, and collapse operations with automatic atomic persistence.

Omasets never edits ~/.config/hypr/ or Omarchy's packaged files. Its data is stored at ~/.config/omarchy/omasets/layouts.json.

Requirements

  • Omarchy 4 with the Quattro shell plugin system.
  • Hyprland using the dwindle layout.
  • bash, jq, flock, awk, and hyprctl. These are present on a standard Omarchy installation; Omasets does not install packages or request elevated privileges.

Install

omarchy plugin add https://github.com/agata/omasets.git --enable

The plugin adds ▦ Sets to the left side of the bar. It can also be opened without the widget:

omarchy-shell shell summon io.github.agata.omasets '{}'

For a local checkout:

omarchy plugin add "$PWD" --enable

Remove

omarchy plugin remove io.github.agata.omasets

Removing the plugin intentionally keeps the saved worksets at ~/.config/omarchy/omasets/layouts.json, so reinstalling does not lose them. To erase those separately, remove ~/.config/omarchy/omasets/ only after backing up any layouts you want to keep.

User flow and keyboard

The home screen follows HyprSets' information architecture: select All or a custom tab, choose a workset from the table, then run it or open its editor. Double-clicking a workset launches it. The editor is a separate view, so the recursive canvas is no longer squeezed between the list and inspector. The selected-workset pane includes a read-only miniature of the saved split layout, so its direction, nesting, and ratio are visible before opening it. When a command contains a URL, the preview shows its host name beneath the app label; otherwise an explicit working directory is shown when available. Launching closes Omasets immediately while its keep-loaded runner finishes in the background. The editor-only Dry run validates the launch plan without opening applications and reports a concise result in the status bar.

  • Ctrl+Enter launches the selected layout.
  • Up/Down (or j/k) selects a workset; Enter launches it.
  • Left/Right (or h/l) switches tabs on the workset list.
  • Ctrl+E opens the selected workset in the editor.
  • Ctrl+N creates a workset and opens it in the editor.
  • Ctrl+S flushes pending edits.
  • Esc returns from the editor to the workset list; from the list it closes Omasets.

In the editor, Up/Down walks the layout tree and Left/Right adjusts the selected split ratio. A divider in the layout preview can be dragged directly; nested dividers update their own split. The inspector keeps the exact ratio and a one-click Balanced reset without duplicating the preview control.

Configuration format

The UI owns this file, but it remains intentionally readable and friendly to dotfile management:

{
  "version": 1,
  "tabs": [{
    "id": "development",
    "label": "Development"
  }],
  "layouts": [{
    "id": "code-and-web",
    "name": "Code + Web",
    "tabId": "development",
    "workspace": "current",
    "closeExisting": false,
    "tree": {
      "type": "split",
      "direction": "horizontal",
      "ratio": 1.0,
      "first": {
        "type": "leaf",
        "id": "editor",
        "label": "Editor",
        "command": "ghostty --working-directory=$HOME",
        "cwd": "",
        "waitMs": 250
      },
      "second": {
        "type": "leaf",
        "id": "browser",
        "label": "Browser",
        "command": "omarchy-launch-browser --new-window https://example.com",
        "cwd": "",
        "waitMs": 250
      }
    }
  }]
}

Ratios use Hyprland's dwindle range: 1.0 is balanced, values below it favor the first branch less, and values above it favor the first branch more.

Safety and limitations

  • Application launch commands are user-authored shell commands and run with the user's normal permissions. Omasets does not sandbox or validate their effects; only use commands you trust.
  • Before a normal launch, Omasets checks the target workspace. If it contains windows, Omasets asks for confirmation, closes them through Hyprland, waits for them to disappear, and only then starts the workset. Applications can still prompt about unsaved work; cancel the dialog to keep every window open.
  • Layout reconstruction is best-effort and targets the dwindle layout. Hyprland decides how unusual window types, delayed single-instance apps, and apps that ignore launch placement behave.
  • A command must create a new Hyprland window within eight seconds. Reusing an existing process is supported; reusing an already-open window without creating a new one is not a layout slot.
  • Plugins run unsandboxed inside omarchy-shell; review plugin updates before enabling them, as recommended by Omarchy.

Development

omarchy plugin validate .
qmllint -I /usr/share/omarchy/shell BarWidget.qml Composer.qml LayoutNode.qml LayoutPreview.qml
tests/run.sh

Saving files in an installed plugin checkout hot-reloads the plugin. If needed:

omarchy-shell shell rescanPlugins

License

MIT