Hyprinator is a tiny launcher for Hyprland that gives you a tmuxinator-inspired YAML workflow for desktop workspaces.
You define which commands should exist on each workspace, run one command, and Hyprinator will:
- close existing windows only on the referenced workspaces,
- re-create the workspace layout from your YAML,
- default plain command strings to your configured terminal in the right working directory.
- You want repeatable workspace bootstrapping, not manual app shuffling.
- You like tmuxinator-style concepts (
root,windows,panes) but for Hyprland windows. - You want a safe reset scope: only the workspaces you define are cleared.
From this project directory:
chmod +x ./bin/hyprinator
ln -sf "$(pwd)/bin/hyprinator" "$HOME/.local/bin/hyprinator"Then run:
hyprinator --helpCreate a file named .tmuxinator.yml in your project:
name: trailbox
root: ~/code/northforge/trailbox
windows:
- "1":
panes:
- npm run dev
- bundle exec rails s
- app: ghostty
- "2":
panes:
- app: chromium --new-window
- "3":
root: ~/code/northforge/trailbox/api
panes:
- bundle exec sidekiq
- app: ghostty -e btopRun:
hyprinatorHyprinator intentionally supports a focused subset of tmuxinator-like concepts.
name(optional)root(optional, default working directory for terminal launches)windows(required)
windows is a YAML list where each entry is a single-key map:
windows:
- "1": <window-value>
- "2": <window-value>The key must be numeric ("1", "2", etc.) and maps directly to the Hyprland workspace id.
Supported forms:
- String (defaults to terminal command):
- "1": npm run dev- Object with optional root and panes:
- "3":
root: ~/code/project/api
panes:
- npm run dev
- app: chromium- Plain string: treated as a shell command in your default terminal via
xdg-terminal-exec. - Object with
app: treated as a raw app command and launched directly.
Examples:
panes:
- npm run dev
- app: ghostty
- app: firefox --new-windowFor plain string commands, Hyprinator runs:
xdg-terminal-exec --dir=<resolved-root> -- bash -lc '<your-command>; exec bash'resolved-root is:
- window
rootif provided, - otherwise top-level
rootif provided, - otherwise directory containing the YAML config file.
hyprinator [options]Options:
-p, --project-config PATHUse a specific config file.--dry-runPrint planned close/launch commands without executing.--delay-ms NDelay between launches (default:120).-h, --helpShow help.
Default config lookup when -p is omitted:
./.tmuxinator.yml./.hyprinator.yml
- Hyprinator only closes windows on workspaces referenced in your config.
- Other workspaces are untouched.
--dry-runlets you inspect every action before running it.
See:
examples/basic.ymlexamples/full.yml
Run:
ruby test/run.rbThe tests use a built-in harness and do not require external gems.
Add to ~/.config/hypr/bindings.conf:
bind = SUPER SHIFT, S, exec, hyprinator -p ~/code/teevans/hyprinator/examples/full.yml