An Omarchy plugin

Every workspace,
its own team.

Attach a Hyprland workspace to a team folder. Everything you launch there starts in that folder, with that team's mise env (Claude config, herdr session, cloud profile, tool versions) and opens that team's browser profile.

$omarchy plugin add https://github.com/mehiel/mehiel.omaprojectspace
How it works

Folders, mise, and one small shim.

There's no registry and no daemon. A projectspace is a folder, its configuration is its mise config, and the only state is which workspace points at which folder.

01

A folder with a mise config

Any folder under ~/Projects with a mise config is a projectspace. Use mise.local.toml to keep it personal. Projects inside it inherit it.

# ~/Projects/acme/mise.local.toml
[env]
CLAUDE_CONFIG_DIR = "~/.claude.acme"
HERDR_SESSION     = "acme"
AWS_PROFILE       = "acme-dev"
BROWSER           = "~/.local/bin/chrome-acme"

[tools]
java = "21"

Optional: PROJECTSPACE_COLOR and PROJECTSPACE_ICON override the automatic dot.

02

Attach a workspace

From the bar's panel (Super Alt P, then ← →) or the CLI. The bar marks it with the team's color. Only the workspaces you attach change; the rest stay stock.

$ omaprojectspace attach 1 acme
workspace 1 → acme (~/Projects/acme)
$ omaprojectspace list
Acme     ~/Projects/acme     ws 1
Globex   ~/Projects/globex   ws 2
Initech  ~/Projects/initech  -
03

Launch anything

Omarchy launches everything through uwsm-app. A shim in front of it adds the active workspace's env and folder.

$ omaprojectspace status
workspace 1: Acme  ~/Projects/acme
  AWS_PROFILE=acme-dev
  BROWSER=~/.local/bin/chrome-acme
  CLAUDE_CONFIG_DIR=~/.claude.acme
  HERDR_SESSION=acme
A launch goes from the app launcher or a keybind, through uwsm-app and the shim, which adds mise env and the folder, to the app. Launcher · keybind terminal · browser · app uwsm-app the shim, on PATH Active workspace attached? yes → mise env + cd into the folder no or broken → launch untouched /usr/bin/uwsm-app the app, in its own scope
Features

Small, and it gets out of the way.

●

The bar knows the team

Attached workspaces carry the team's dot and name. A custom name wins, and the dot stays.

⌨

A keyboard panel

Pick a row, cycle its projectspace with ← →, rename with e, open a team terminal with t.

◐

A browser per team

Set BROWSER in mise and anything that opens a URL uses that team's Chrome profile: the browser key, aws sso login, gh --web. Teams can share a profile.

❯

Terminals open in the folder

A new terminal starts in the team folder. One opened from another terminal keeps that terminal's folder.

↺

Windows come back

After a reboot, o in the panel, or a switch at login, reopens each workspace's terminals, herdr or tmux sessions, browser and web apps, with their team's env.

✓

Fails open

Untrusted config, missing folder, any error: the app still launches, plainly, with a notification. omaprojectspace doctor checks it all.

In practice

Two teams, side by side.

Install

Up and running in a minute.

1 · Add the plugin, then link the shim

$ omarchy plugin add https://github.com/mehiel/mehiel.omaprojectspace
$ ~/.config/omarchy/plugins/mehiel.omaprojectspace/bin/omaprojectspace install
$ omarchy bar put mehiel.omaprojectspace
$ omaprojectspace doctor

install links the CLI and the shim into ~/.local/bin and adds the keybinds to Hyprland. uninstall removes all of it.

Keys in the panel

↑ ↓ · 1–0pick a workspace
← →cycle its projectspace
Entergo there
erename
xclear the projectspace, then the name
t · cteam terminal · edit its mise config
o · Orestore last session's windows · on every workspace
ssave the windows now (auto-save runs every minute)
Good to know

What it doesn't do (yet).

—

Running single-instance apps keep their env. A Slack desktop that's already open won't switch teams. Chrome is fine: a new window opens in the right profile.

—

Links clicked inside other apps go to your default browser, not the team's.

—

Windows keep the env they started with, even if you move them to another workspace.