Repository navigation
Defaults and inheritance
A top-level defaults block supplies values for every space. A space overrides
what it sets and inherits the rest, so a shared browser, schedule, or workspace
count is written once instead of repeated per space.
{
"defaults": {
"browser": { "command": "brave" },
"workspaces": { "count": 10 },
"notifications": {
"allowUnassigned": false,
"schedule": [
{ "from": "22:00", "to": "08:00", "allowFrom": [], "allowUnassigned": false }
]
}
},
"spaces": [
{ "id": "personal", "browser": { "profile": "Default" } },
{ "id": "work", "browser": { "profile": "Profile 1" } }
]
}Both spaces get Brave, the overnight silence, and ten slots. Each sets only its own profile.
Objects merge one key at a time, recursively. personal above ends up with
browser.command from defaults and browser.profile of its own.
Arrays and scalars are replaced whole. A space that sets apps replaces the
default list rather than adding to it. A half-inherited list is harder to reason
about than an explicit one, and appending has no obvious way to remove an entry.
Identity is never inherited. id, name, icon, and color belong to a
space, and putting them in defaults does nothing.
The Defaults page in the config app uses the same form as a space, minus the identity fields. A space whose values come from defaults says so under its name in the header.
defaults.apps reaches every space that does not define its own apps. If two
spaces both inherit it, both claim the same apps, and the first one in the list
wins. omarchy-spaces validate says so plainly:
warn: app 'shared' is claimed by personal and work; personal wins
That is usually a sign the app belongs in one space's own list rather than in defaults.
Delete the defaults block. Nothing else changes, and every space keeps
whatever it set explicitly.