Move generated theme state out of the repository #8

Closed
opened 2026-08-16 22:10:09 +01:00 by joshquinlan · 1 comment
Owner

.gitignore hides five generated files that sit inside the stow
package: lsd/colors.yaml, quickshell/settings.json,
quickshell/themes/current.json, fastfetch/config.jsonc and
fish_variables. That is machine state living in a git working tree.

The line to draw is Omarchy's: ~/.config/donbox for what may
deliberately be versioned, ~/.local/state/donbox/current for
everything generated, symlinked where an application demands a fixed
path, as qt6ct already is.

.gitignore hides five generated files that sit inside the stow package: lsd/colors.yaml, quickshell/settings.json, quickshell/themes/current.json, fastfetch/config.jsonc and fish_variables. That is machine state living in a git working tree. The line to draw is Omarchy's: ~/.config/donbox for what may deliberately be versioned, ~/.local/state/donbox/current for everything generated, symlinked where an application demands a fixed path, as qt6ct already is.
Author
Owner

The .gitignore is down to session artefacts. Everything generated now lives in ~/.local/state/donbox/current, which is the old ~/.local/state/theme renamed into the namespace, and the five files that sat inside the stow package moved in with it.

lsd, fastfetch and fish are symlinked back from there, since each reads only from a path of its own choosing; the shell reads its settings and its resolved theme from the state directory directly. bootstrap.sh makes those three directories before it stows, because a directory left empty gets folded into a link to the repository and the next file written there lands in the working tree.

Landed in da6e4fa. Migration 1787345134 does the move, resolving through the fold to find where the file really is, and its tests cover a folded machine, one already moved, and a contested file that must not be written over.

The .gitignore is down to session artefacts. Everything generated now lives in ~/.local/state/donbox/current, which is the old ~/.local/state/theme renamed into the namespace, and the five files that sat inside the stow package moved in with it. lsd, fastfetch and fish are symlinked back from there, since each reads only from a path of its own choosing; the shell reads its settings and its resolved theme from the state directory directly. bootstrap.sh makes those three directories before it stows, because a directory left empty gets folded into a link to the repository and the next file written there lands in the working tree. Landed in da6e4fa. Migration 1787345134 does the move, resolving through the fold to find where the file really is, and its tests cover a folded machine, one already moved, and a contested file that must not be written over.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
joshquinlan/dotfiles#8
No description provided.