diff options
Diffstat (limited to 'openspec/changes/add-dotfiles-stow-bootstrap/specs/dotfiles-management')
| -rw-r--r-- | openspec/changes/add-dotfiles-stow-bootstrap/specs/dotfiles-management/spec.md | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/openspec/changes/add-dotfiles-stow-bootstrap/specs/dotfiles-management/spec.md b/openspec/changes/add-dotfiles-stow-bootstrap/specs/dotfiles-management/spec.md new file mode 100644 index 0000000..dacbbb1 --- /dev/null +++ b/openspec/changes/add-dotfiles-stow-bootstrap/specs/dotfiles-management/spec.md | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | ## Purpose | ||
| 2 | |||
| 3 | Automatically clones a personal dotfiles repository into the user's home directory and symlinks its contents into place, so a fresh machine ends up with the same personal configuration without a manual clone-and-stow step. | ||
| 4 | |||
| 5 | ## ADDED Requirements | ||
| 6 | |||
| 7 | ### Requirement: Dotfiles cloning is opt-in via a configured repo URL | ||
| 8 | The dotfiles clone-and-stow behavior SHALL only run when a repository URL has been explicitly configured; leaving it unset SHALL leave the home directory untouched by this feature. | ||
| 9 | |||
| 10 | #### Scenario: No repo URL configured | ||
| 11 | - **WHEN** no dotfiles repository URL has been set | ||
| 12 | - **THEN** no clone or symlinking occurs during activation | ||
| 13 | |||
| 14 | #### Scenario: Repo URL configured | ||
| 15 | - **WHEN** a dotfiles repository URL has been set | ||
| 16 | - **THEN** activation clones and symlinks that repository as described by the other requirements in this capability | ||
| 17 | |||
| 18 | ### Requirement: Existing dotfiles checkout is never overwritten | ||
| 19 | If the dotfiles repository has already been cloned locally, the system SHALL NOT re-clone or otherwise modify that existing checkout. | ||
| 20 | |||
| 21 | #### Scenario: Checkout already present | ||
| 22 | - **WHEN** activation runs and a local dotfiles checkout already exists | ||
| 23 | - **THEN** no clone operation is performed against that location, and the existing checkout's contents and git history are left untouched | ||
| 24 | |||
| 25 | #### Scenario: Checkout missing | ||
| 26 | - **WHEN** activation runs and no local dotfiles checkout exists yet | ||
| 27 | - **THEN** the configured repository is cloned, including any git submodules it declares | ||
| 28 | |||
| 29 | ### Requirement: Dotfiles packages are symlinked into the home directory | ||
| 30 | Each top-level package directory in the cloned dotfiles repository SHALL be symlinked into the home directory following the same package-to-target-path convention as GNU Stow (a package directory's contents mirror their target location under the home directory). | ||
| 31 | |||
| 32 | #### Scenario: A package is linked | ||
| 33 | - **WHEN** the dotfiles repository contains a top-level directory whose contents mirror a location under the home directory | ||
| 34 | - **THEN** that content becomes reachable via a symlink at the corresponding path under the home directory | ||
| 35 | |||
| 36 | #### Scenario: Non-package entries are ignored | ||
| 37 | - **WHEN** the dotfiles repository contains top-level entries that are not package directories (ordinary files, or hidden/dot-prefixed directories such as version-control metadata) | ||
| 38 | - **THEN** those entries are not treated as packages and produce no symlinks | ||
| 39 | |||
| 40 | ### Requirement: A conflicting package does not block the others | ||
| 41 | If symlinking one package would conflict with an existing file or symlink not owned by this process, the system SHALL skip that package and continue processing the remaining packages, rather than aborting entirely. | ||
| 42 | |||
| 43 | #### Scenario: One package conflicts | ||
| 44 | - **WHEN** one dotfiles package's target path is already occupied by an unrelated existing file | ||
| 45 | - **THEN** that package is skipped with a visible warning, and every other package is still processed | ||
