Restore Omarchy Workspaces and Open Tiles After Reboot

Goal

Configure Omarchy so that after rebooting, Hyprland recreates the applications and tiled layouts that were open across your workspaces.

This setup uses Omarchy Reanimate.

Reanimate saves information such as:

  • open applications
  • workspace assignments
  • monitor assignments
  • tiled window arrangement
  • split ratios
  • floating-window geometry
  • terminal working directories
  • previously focused workspace

It does not hibernate applications or preserve unsaved data. Applications are closed and relaunched during the next session.


Example Setup

In this example, the system has two monitors:

HDMI-A-1
  Workspace 1
  Workspace 2
  Workspace 3

HDMI-A-2
  Workspace 11
  Workspace 12
  Workspace 13

A typical session might look like:

Workspace 1  → Microsoft Edge

Workspace 2  → Teams | Terminal
                         50/50 split

Workspace 3  → Thunderbird

Workspace 11 → Obsidian

Workspace 12 → ChatGPT web app

Workspace 13 → Microsoft Edge

The goal is to recreate this arrangement automatically after reboot.


1. Install Reanimate

Run:

omarchy plugin add https://github.com/scottharvey/omarchy-reanimate.git --enable

Then run its installer:

~/.config/omarchy/plugins/io.github.scottharvey.reanimate/install.sh

A successful installation should report something similar to:

Installed post-boot hook:
~/.config/omarchy/hooks/post-boot.d/11-reanimate

Installed. Periodic saves every 2 minutes are now running.

The installation also creates and enables:

omarchy-reanimate-save.timer

2. Verify the Reanimate Timer

Run:

echo "===== REANIMATE TIMER ====="
systemctl --user is-active omarchy-reanimate-save.timer

Expected result:

active

This means Reanimate is periodically saving the current desktop session.


3. Save the Current Workspace Layout Manually

Run:

omarchy-reanimate-save

Example result:

Saved 7 window(s) across 6 workspace(s)

Then inspect the saved state:

omarchy-reanimate-show

Example:

dwindle layout · 7 windows · 6 workspaces

workspace 1 on HDMI-A-1
  microsoft-edge

workspace 2 on HDMI-A-1
  teams-for-linux
  foot

  layout
    └─ side by side 50/50

workspace 3 on HDMI-A-1
  org.mozilla.Thunderbird

workspace 11 on HDMI-A-2
  md.obsidian.Obsidian

workspace 12 on HDMI-A-2
  msedge-chatgpt.com__-Default

workspace 13 on HDMI-A-2
  microsoft-edge

This confirms that Reanimate can see the applications, monitors, workspaces, and tile geometry.


4. Test Restoration Without Changing Anything

Before rebooting, run a dry-run:

omarchy-reanimate-restore --dry-run
echo "Exit status: $?"

A successful result is:

Exit status: 0

This indicates that Reanimate considers the stored session restorable.


5. Add Reanimate to the Omarchy System Menu

Reanimate can modify the normal Omarchy Reboot and Shutdown actions so that a fresh session snapshot is taken immediately before powering off.

This is preferable to relying only on the automatic two-minute timer.

First inspect the supplied menu configuration:

cat ~/.config/omarchy/plugins/io.github.scottharvey.reanimate/extensions/omarchy-menu-snippet.jsonc

Also inspect the current Omarchy extension file:

cat ~/.config/omarchy/extensions/omarchy-menu.jsonc

6. Back Up the Existing Menu Configuration

Before modifying it:

MENU="$HOME/.config/omarchy/extensions/omarchy-menu.jsonc"
STAMP="$(date +%Y%m%d-%H%M%S)"

cp -a "$MENU" "$MENU.backup-$STAMP"

echo "Backup: $MENU.backup-$STAMP"

Example:

Backup:
/home/ben/.config/omarchy/extensions/omarchy-menu.jsonc.backup-20261001-100132

7. Add the Reanimate Menu Entries

Run:

MENU="$HOME/.config/omarchy/extensions/omarchy-menu.jsonc"

python3 <<'PY'
from pathlib import Path

p = Path.home() / ".config/omarchy/extensions/omarchy-menu.jsonc"
text = p.read_text()

if '"system.session-save"' in text:
    print("Reanimate entries already present. No changes made.")
    raise SystemExit

entries = '''  "system.session-save": {
    "icon": "󰆓",
    "label": "Save Session",
    "description": "Save windows, workspaces and tiling for the next boot",
    "action": "~/.config/omarchy/plugins/io.github.scottharvey.reanimate/bin/omarchy-reanimate-save --quiet && notify-send 'Session saved' 'Windows and layout will be restored on next boot'"
  },
  "system.reboot": {
    "icon": "󰜉",
    "label": "Reboot",
    "action": "~/.config/omarchy/plugins/io.github.scottharvey.reanimate/bin/omarchy-reanimate-save --quiet --quit-browsers; omarchy-system-reboot"
  },
  "system.shutdown": {
    "icon": "󰐥",
    "label": "Shutdown",
    "action": "~/.config/omarchy/plugins/io.github.scottharvey.reanimate/bin/omarchy-reanimate-save --quiet --quit-browsers; omarchy-system-shutdown"
  }
'''

pos = text.rfind("}")

if pos == -1:
    raise SystemExit("ERROR: Could not find closing } in omarchy-menu.jsonc")

text = text[:pos].rstrip() + "\n\n" + entries + "}\n"
p.write_text(text)

print(f"Updated: {p}")
PY

Refresh the Omarchy menu:

omarchy menu refresh

Expected result:

ok

8. Verify the Menu Entries

Run:

grep -A5 -B1 -n \
'system.session-save\|system.reboot\|system.shutdown' \
"$HOME/.config/omarchy/extensions/omarchy-menu.jsonc"

You should see:

system.session-save
system.reboot
system.shutdown

The Omarchy System menu should now contain:

Save Session
Reboot
Shutdown

9. How the New Reboot Process Works

When selecting:

Omarchy Menu
→ System
→ Reboot

Reanimate first runs:

omarchy-reanimate-save --quiet --quit-browsers

Then Omarchy performs the reboot.

Conceptually:

Current desktop
      ↓
Save session
      ↓
Cleanly close browsers
      ↓
Reboot
      ↓
Hyprland starts
      ↓
Reanimate post-boot hook runs
      ↓
Applications relaunched
      ↓
Windows moved to saved workspaces
      ↓
Tile layout reconstructed

Use the Omarchy menu’s Reboot or Shutdown commands rather than issuing a plain reboot command when you want the freshest possible snapshot.


10. Test the Restore

Before rebooting, save any unsaved documents.

Then use:

Omarchy Menu
→ System
→ Reboot

After logging back in, inspect the windows:

hyprctl clients

For a more concise view:

hyprctl clients -j | jq -r \
'.[] | "workspace \(.workspace.id): \(.class) — \(.title)"' \
| sort -n

A successful restore may look like:

workspace 1: microsoft-edge
workspace 2: foot
workspace 2: teams-for-linux
workspace 3: org.mozilla.Thunderbird
workspace 11: md.obsidian.Obsidian
workspace 12: msedge-chatgpt.com__-Default
workspace 13: microsoft-edge

11. Verify the Saved Session

Run:

omarchy-reanimate-show

Example:

dwindle layout · 7 windows · 6 workspaces

workspace 1 on HDMI-A-1
  microsoft-edge

workspace 2 on HDMI-A-1
  teams-for-linux
  foot

  layout
    └─ side by side 50/50

workspace 3 on HDMI-A-1
  org.mozilla.Thunderbird

workspace 11 on HDMI-A-2
  md.obsidian.Obsidian

workspace 12 on HDMI-A-2
  msedge-chatgpt.com__-Default

workspace 13 on HDMI-A-2
  microsoft-edge

A particularly useful test is a workspace containing multiple tiles.

For example, workspace 2:

┌────────────────────┬────────────────────┐
│                    │                    │
│       Teams        │      Terminal      │
│                    │                    │
│                    │                    │
└────────────────────┴────────────────────┘
              50 / 50

If both applications return to workspace 2 with the same split, the layout reconstruction is working.


12. Check for Restore Differences

Reanimate includes a comparison command:

omarchy-reanimate-diff
echo "Exit status: $?"

This can identify differences between the saved session and the restored desktop.

This is useful when an application launches an additional window during startup.


13. Browser Caveat

Chromium-based browsers such as Microsoft Edge can occasionally open an additional window when restoring their own internal browser session.

For example, after one reboot the restored desktop contained:

workspace 3:
  Thunderbird
  Microsoft Edge — New tab

even though only Thunderbird had originally been saved there.

This occurs because two restoration systems are interacting:

Reanimate
    +
Edge's own session restoration

If an unwanted Edge window appears, close it normally or use:

hyprctl dispatch closewindow 'class:microsoft-edge,title:New tab'

Then save a fresh session:

omarchy-reanimate-save

Confirm:

omarchy-reanimate-show

14. Manual Session Save

At any time, use:

omarchy-reanimate-save

or select:

Omarchy Menu
→ System
→ Save Session

The menu command also displays a notification confirming that the session was saved.


15. Useful Diagnostic Commands

Check timer

systemctl --user is-active omarchy-reanimate-save.timer

Expected:

active

Save session

omarchy-reanimate-save

Show saved session

omarchy-reanimate-show

Dry-run restoration

omarchy-reanimate-restore --dry-run
echo $?

Expected:

0

Compare restored and saved sessions

omarchy-reanimate-diff

List windows by workspace

hyprctl clients -j | jq -r \
'.[] | "workspace \(.workspace.id): \(.class) — \(.title)"' \
| sort -n

Refresh Omarchy menu

omarchy menu refresh

16. Important Limitations

Reanimate restores the desktop layout, not the actual suspended operating-system session.

It can recreate:

✓ applications
✓ workspace assignments
✓ monitor assignments
✓ tiled layouts
✓ split ratios
✓ floating windows
✓ terminal working directories

It does not guarantee restoration of:

✗ unsaved document changes
✗ unsent messages
✗ partially completed forms
✗ exact application memory state
✗ terminal process state

Applications such as Edge, Thunderbird, Teams, and Obsidian are restarted normally.

Always save important work before rebooting.


Final Result

With this configuration, Omarchy can reboot and reconstruct a multi-monitor Hyprland session such as:

HDMI-A-1                         HDMI-A-2

Workspace 1                     Workspace 11
┌──────────────────┐            ┌──────────────────┐
│       Edge       │            │     Obsidian     │
└──────────────────┘            └──────────────────┘

Workspace 2                     Workspace 12
┌─────────┬────────┐            ┌──────────────────┐
│  Teams  │  foot  │            │     ChatGPT      │
│         │        │            │     Web App      │
└─────────┴────────┘            └──────────────────┘

Workspace 3                     Workspace 13
┌──────────────────┐            ┌──────────────────┐
│   Thunderbird    │            │       Edge       │
└──────────────────┘            └──────────────────┘

The most important confirmation is that a multi-window workspace such as Teams + terminal in a 50/50 split returns correctly after reboot.

At that point, Reanimate is successfully preserving the practical workspace experience across Omarchy restarts.