Skip to content

feat(config): support config.local.toml machine-local overlay - #24

Merged
mad01 merged 1 commit into
mainfrom
alexander/mad-80-feat-support-configlocaltoml-for-git-ignored-machine
Jun 23, 2026
Merged

feat(config): support config.local.toml machine-local overlay#24
mad01 merged 1 commit into
mainfrom
alexander/mad-80-feat-support-configlocaltoml-for-git-ignored-machine

Conversation

@mad01

@mad01 mad01 commented Jun 23, 2026

Copy link
Copy Markdown
Owner

Loads an optional config.local.toml next to the main config and merges it on top before validation and recipe processing. The overlay path derives from the resolved config path (config.tomlconfig.local.toml, honoring RALPH_CONFIG) and is always optional.

Merge is local-wins (not conflict-detected like recipe merging): scalars override when set, map keys merge per-key, slices replace when non-empty. Bool scalars can only be flipped on from the overlay (a false reads as unset).

  • internal/config/local.go — path derivation + mergeLocalConfig
  • internal/config/load.go — overlay hook in LoadConfigWithHost
  • ralph init — gitignore config.local.toml in the dotfiles repo
  • ralph doctor — report overlay loaded / not found under a Configuration phase
  • docs/configuration.md — document the overlay and merge semantics

Closes MAD-80

Load an optional config.local.toml next to the main config and merge it
on top before validation and recipe processing. The overlay path derives
from the resolved config path (config.toml -> config.local.toml, honoring
RALPH_CONFIG), and is always optional.

Merge is local-wins (not conflict-detected like recipe merging): scalars
override when set, map keys merge per-key, slices replace when non-empty.

- internal/config/local.go: path derivation + mergeLocalConfig
- internal/config/load.go: overlay hook in LoadConfigWithHost
- ralph init: gitignore config.local.toml in the dotfiles repo
- ralph doctor: report overlay loaded / not found under a Configuration phase
- docs/configuration.md: document the overlay and merge semantics

Closes MAD-80
@mad01
mad01 merged commit 170e6a8 into main Jun 23, 2026
1 check passed
mad01 added a commit that referenced this pull request Jul 3, 2026
…e host filter

- GitPull now always captures stderr to a buffer (teeing to os.Stderr when
  verbose), so the 'no tracking information' origin/<branch> fallback fires in
  verbose mode too (#22).
- Recipe override sections for names that aren't valid bare TOML keys (e.g.
  'web.tools') are now written as quoted keys, so the override is readable
  instead of parsed as nested tables (#23).
- applyRecipeHostFilter now propagates recipe hosts to tool config files; env
  remains a flat map and is documented as not host-taggable (#24).
mad01 added a commit that referenced this pull request Jul 3, 2026
Load an optional config.local.toml next to the main config and merge it
on top before validation and recipe processing. The overlay path derives
from the resolved config path (config.toml -> config.local.toml, honoring
RALPH_CONFIG), and is always optional.

Merge is local-wins (not conflict-detected like recipe merging): scalars
override when set, map keys merge per-key, slices replace when non-empty.

- internal/config/local.go: path derivation + mergeLocalConfig
- internal/config/load.go: overlay hook in LoadConfigWithHost
- ralph init: gitignore config.local.toml in the dotfiles repo
- ralph doctor: report overlay loaded / not found under a Configuration phase
- docs/configuration.md: document the overlay and merge semantics

Closes MAD-80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant