Skip to content

Claude/finalize yadm stow setup 5 quk u#147

Merged
Ven0m0 merged 11 commits intomainfrom
claude/finalize-yadm-stow-setup-5QukU
Dec 29, 2025
Merged

Claude/finalize yadm stow setup 5 quk u#147
Ven0m0 merged 11 commits intomainfrom
claude/finalize-yadm-stow-setup-5QukU

Conversation

@Ven0m0
Copy link
Copy Markdown
Owner

@Ven0m0 Ven0m0 commented Dec 29, 2025

No description provided.

claude and others added 3 commits December 29, 2025 00:47
Add missing usr/ directory structure to complete the dotfiles
management system. The repository now has a complete production-ready
setup for managing both user and system configurations.

Changes:
- Created usr/ directory with documentation
- Added usr/README.md explaining system-wide program deployment
- Added usr/.gitkeep to track the directory

Setup now complete:
- YADM manages Home/ → ~/ (user dotfiles)
- Tuckr manages etc/ → /etc (system configs)
- Tuckr manages usr/ → /usr (system programs)

All scripts validated:
- Bootstrap, yadm-sync, and setup scripts have valid syntax
- All scripts are executable and follow bash best practices
- Documentation is comprehensive and production-ready

Result: Complete dotfiles management system ∴ YADM + Tuckr properly configured
Enhance portability by adding automatic fallback to stow when tuckr
is unavailable. This ensures the dotfiles work on systems where tuckr
cannot be installed (e.g., Debian, older distros).

Changes to bootstrap (Home/.config/yadm/bootstrap):
- deploy_system_configs() now tries tuckr first, falls back to stow
- install_base_deps() tries installing tuckr, falls back to stow
- Clear messaging about which tool is being used

Changes to setup.sh:
- install_packages() tries tuckr first, falls back to stow
- link_system_configs() uses tuckr or stow automatically
- final_steps() shows correct command based on available tool

New script (Home/.local/bin/deploy-system-configs.sh):
- Unified wrapper for deploying system configs
- Auto-detects tuckr/stow and uses whichever is available
- Supports --unlink for removing symlinks
- Can deploy individual packages (etc, usr) or all at once

Documentation updates (YADM.md):
- Updated all references to mention tuckr/stow support
- Added examples for both tools in all sections
- Troubleshooting section includes stow installation
- Clarified fallback behavior throughout

Benefits:
- Works on Debian/Ubuntu without tuckr
- Graceful degradation when tuckr unavailable
- Maintains hook support when tuckr is present
- Single deployment script for user convenience

Result: Complete portability ∴ stow fallback ensures universal compatibility
Copilot AI review requested due to automatic review settings December 29, 2025 02:46
@continue
Copy link
Copy Markdown

continue bot commented Dec 29, 2025

All Green - Keep your PRs mergeable

Learn more

All Green is an AI agent that automatically:

✅ Addresses code review comments

✅ Fixes failing CI checks

✅ Resolves merge conflicts


Unsubscribe from All Green comments

@github-actions
Copy link
Copy Markdown

github-actions bot commented Dec 29, 2025

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @Ven0m0, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the dotfiles management system by introducing a flexible and resilient approach to deploying system-level configurations. It establishes stow as a fallback tool when the preferred tuckr is not available, improving the portability and robustness of the setup process. A new helper script streamlines deployment, and all relevant documentation and setup scripts have been updated to reflect these changes, ensuring a smoother experience for users across different environments.

Highlights

  • Flexible System Configuration Deployment: The system now prioritizes tuckr for deploying system configurations (/etc, /usr) but seamlessly falls back to stow if tuckr is unavailable, ensuring broader compatibility and resilience during setup.
  • New deploy-system-configs Helper Script: A dedicated shell script (Home/.local/bin/deploy-system-configs.sh) has been added to provide a unified and intelligent way to deploy system configurations, automatically detecting and utilizing either tuckr or stow.
  • Comprehensive Documentation Updates: The YADM.md file has been thoroughly updated to reflect the new tuckr/stow fallback logic, including revised deployment instructions and explanations of the system's enhanced flexibility.
  • Enhanced Setup Script Logic: The setup.sh and Home/.config/yadm/bootstrap scripts now incorporate the tuckr/stow fallback for both package installation and system config linking, making the initial setup more robust and user-friendly.
  • Dependabot Configuration Refinement: Dependabot settings in .github/dependabot.yml have been streamlined by removing redundant labels and open PR limits, and explicitly allowing all dependency types for uv and npm ecosystems.
  • Structured usr/ Directory: A new usr/ directory, complete with a .gitkeep file and a README.md, has been added to clearly define its purpose for system-wide user programs and how it is managed by tuckr/stow.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces stow as a fallback for tuckr to manage system dotfiles, enhancing the setup's portability. It adds a new helper script, deploy-system-configs.sh, to abstract the deployment logic and updates existing scripts and documentation accordingly. My review focuses on improving the robustness and maintainability of the new and modified shell scripts. I've identified a few critical issues in the new helper script that would cause it to fail at runtime, along with several opportunities to reduce code duplication and fix minor bugs. The documentation has also been reviewed for consistency.

Comment on lines +74 to +109
if has tuckr; then
info "Using tuckr for deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
for pkg in "${PACKAGES[@]}"; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }

if [[ $UNLINK == true ]]; then
info "Unlinking ${pkg}/"
tuckr unlink -d "$REPO_DIR" -t / "$pkg" || warn "Failed to unlink $pkg"
else
info "Linking ${pkg}/ → / (tuckr)"
local cmd=(tuckr link -d "$REPO_DIR" -t / "$pkg")
[[ -f $hooks_file ]] && cmd+=(-H "$hooks_file")
"${cmd[@]}" || warn "Failed to link $pkg"
fi
done
elif has stow; then
info "Using stow for deployment (tuckr not available)"
for pkg in "${PACKAGES[@]}"; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }

if [[ $UNLINK == true ]]; then
info "Unstowing ${pkg}/"
(cd "$REPO_DIR" && stow -t / -d . -D "$pkg") || warn "Failed to unstow $pkg"
else
info "Stowing ${pkg}/ → / (stow)"
(cd "$REPO_DIR" && stow -t / -d . "$pkg") || warn "Failed to stow $pkg"
fi
done
else
die "Neither tuckr nor stow is installed. Install one of them:
Arch: paru -S tuckr OR paru -S stow
Debian: apt install stow"
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The script will fail at runtime because local is used to declare variables (e.g., hooks_file, src, cmd) at the top-level scope. The local keyword is only valid inside a function. To fix this critical issue and follow shell scripting best practices, the entire operational logic of the script (from argument parsing onwards) should be encapsulated within a main function.

Comment on lines +33 to +36
if ! $pac_cmd -Sq --needed --noconfirm git gitoxide aria2 curl zsh fd sd ripgrep bat jq zoxide starship fzf tuckr rsync konsave 2>/dev/null; then
warn "tuckr install failed, installing stow as fallback"
$pac_cmd -Sq --needed --noconfirm git gitoxide aria2 curl zsh fd sd ripgrep bat jq zoxide starship fzf stow rsync konsave || warn "Some packages may have failed to install"
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The list of packages is repeated in both the if and then blocks, which violates the DRY (Don't Repeat Yourself) principle. This makes it harder to maintain the package list. Consider defining a base package list and appending tuckr or stow as needed.

    local base_pkgs="git gitoxide aria2 curl zsh fd sd ripgrep bat jq zoxide starship fzf rsync konsave"
    if ! $pac_cmd -Sq --needed --noconfirm $base_pkgs tuckr 2>/dev/null; then
      warn "tuckr install failed, installing stow as fallback"
      $pac_cmd -Sq --needed --noconfirm $base_pkgs stow || warn "Some packages may have failed to install"
    fi

if ! has tuckr; then
warn "tuckr not installed; skipping etc/usr."
warn "Install tuckr then run: sudo tuckr link -d $REPO_DIR -t / etc usr"
local pkg use_tuckr=true
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The variable use_tuckr is declared and initialized but is never used. This unused variable should be removed to improve code clarity.

  local pkg

Comment on lines +72 to 98
if has tuckr; then
info "Using tuckr for system config deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
for pkg in etc usr; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Missing dir: $src"; continue; }
info "Linking ${pkg}/ → / (tuckr)"
local cmd=(sudo tuckr link -d "$REPO_DIR" -t / "$pkg")
[[ -f $hooks_file ]] && cmd+=(-H "$hooks_file")
"${cmd[@]}" || warn "Failed to link $pkg"
done
elif has stow; then
info "tuckr not found, using stow as fallback"
for pkg in etc usr; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Missing dir: $src"; continue; }
info "Linking ${pkg}/ → / (stow)"
(cd "$REPO_DIR" && sudo stow -t / -d . "$pkg") || warn "Failed to stow $pkg"
done
else
warn "Neither tuckr nor stow installed; skipping etc/usr deployment."
warn "Install tuckr: paru -S tuckr"
warn " OR stow: paru -S stow"
warn "Then run: sudo tuckr link -d $REPO_DIR -t / etc usr"
warn " OR: cd $REPO_DIR && sudo stow -t / etc usr"
return 0
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The for pkg in etc usr; do ... done loop is duplicated in both the tuckr and stow branches. This violates the DRY principle and makes the code harder to maintain. Consider refactoring to use a single loop and place the conditional logic for tuckr/stow inside it to reduce code duplication.

Comment on lines 89 to 115
link_system_configs(){
if ! has tuckr; then
warn "tuckr not found; skipping etc/usr deploy"
local pkg
if has tuckr; then
info "Using tuckr for system config deployment"
local hooks_file="${WORKTREE}/hooks.toml"
for pkg in etc usr; do
local src="${WORKTREE}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }
info "Linking ${pkg}/ → / (tuckr)"
local cmd=(sudo tuckr link -d "$WORKTREE" -t / "$pkg")
[[ -f $hooks_file ]] && cmd+=(-H "$hooks_file")
"${cmd[@]}" || warn "Failed to link ${pkg}"
done
elif has stow; then
info "tuckr not found, using stow as fallback"
for pkg in etc usr; do
local src="${WORKTREE}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }
info "Linking ${pkg}/ → / (stow)"
(cd "$WORKTREE" && sudo stow -t / -d . "$pkg") || warn "Failed to stow ${pkg}"
done
else
warn "Neither tuckr nor stow found; skipping etc/usr deploy"
warn "Install with: paru -S tuckr OR paru -S stow"
return 0
fi
local hooks_file="${WORKTREE}/hooks.toml" pkg
for pkg in etc usr; do
local src="${WORKTREE}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }
info "Linking ${pkg}/ → /"
local cmd=(sudo tuckr link -d "$WORKTREE" -t / "$pkg")
[[ -f $hooks_file ]] && cmd+=(-H "$hooks_file")
"${cmd[@]}" || warn "Failed to link ${pkg}"
done
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Similar to the bootstrap script, this function has duplicated for pkg in etc usr; do ... done loops for tuckr and stow. This code can be made more maintainable by refactoring it into a single loop that internally decides whether to use tuckr or stow. This would reduce code duplication.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds fallback support from tuckr to stow for system configuration deployment, improving portability when tuckr is unavailable.

  • Implements automatic fallback to stow when tuckr is not available across all deployment scripts
  • Adds new deploy-system-configs.sh helper script with auto-detection of available tools
  • Creates usr/ directory structure with documentation for system-wide programs

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
usr/README.md Documents the new /usr directory structure and deployment using tuckr
usr/.gitkeep Placeholder to track empty usr directory in git
setup.sh Adds tuckr/stow fallback logic to package installation and system config linking
YADM.md Updates documentation to reflect tuckr/stow fallback support throughout
Home/.local/bin/deploy-system-configs.sh New helper script for deploying system configs with automatic tool detection
Home/.config/yadm/bootstrap Updates bootstrap script with tuckr/stow fallback during installation
.github/dependabot.yml Removes unused configuration options and adds dependency-type allowlists

elif has stow; then
info "Using stow for deployment (tuckr not available)"
for pkg in "${PACKAGES[@]}"; do
local src="${REPO_DIR}/${pkg}"
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local keyword cannot be used in the main script body. This line is outside any function and will cause a syntax error. Remove the local keyword or move this logic into a function.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot open a new pull request to apply changes based on this feedback

# Deploy using tuckr or stow
if has tuckr; then
info "Using tuckr for deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local keyword cannot be used outside of a function scope. This variable declaration will cause a syntax error when the script runs because it's in the main execution context, not inside a function.

Copilot uses AI. Check for mistakes.
Comment on lines +78 to +86
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }

if [[ $UNLINK == true ]]; then
info "Unlinking ${pkg}/"
tuckr unlink -d "$REPO_DIR" -t / "$pkg" || warn "Failed to unlink $pkg"
else
info "Linking ${pkg}/ → / (tuckr)"
local cmd=(tuckr link -d "$REPO_DIR" -t / "$pkg")
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local keyword cannot be used in the main script body. This line is outside any function and will cause a syntax error when executed. Remove the local keyword or move this logic into a function.

Copilot uses AI. Check for mistakes.
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Copilot AI review requested due to automatic review settings December 29, 2025 02:50
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Ven0m0 and others added 4 commits December 29, 2025 03:51
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI commented Dec 29, 2025

@Ven0m0 I've opened a new pull request, #148, to work on those changes. Once the pull request is ready, I'll request review from you.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 7 changed files in this pull request and generated 5 comments.

while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help) usage; exit 0 ;;
-d|--dir)
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The argument handling logic has been changed in a way that doesn't match the original intention shown in the diff context. The original version (lines 55-57) checked if the argument after -d/--dir exists and provides a clear error message.

The new implementation on line 55 uses shift; REPO_DIR="${1:-}" which will silently set REPO_DIR to an empty string if no argument follows, leading to confusing error messages later. The check on line 56 from the original code (if [[ -z ${2:-} ]]; then die "Option '$1' requires an argument."; fi) is missing.

Copilot uses AI. Check for mistakes.
Comment on lines +71 to +74
local pkg use_tuckr=true
if has tuckr; then
info "Using tuckr for system config deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variable pkg is declared before it's needed and appears at an unusual location in the variable declaration list. Move the pkg declaration to where it's first used (line 75) for better code locality and readability, or remove it entirely since it's only used in the for-loop scope.

Suggested change
local pkg use_tuckr=true
if has tuckr; then
info "Using tuckr for system config deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
local use_tuckr=true
if has tuckr; then
info "Using tuckr for system config deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
local pkg

Copilot uses AI. Check for mistakes.
sudo tuckr link -d $(yadm rev-parse --show-toplevel) -t / etc usr

# Option 2: Using stow (fallback)
cd $(yadm rev-parse --show-toplevel) && sudo stow -t / etc usr
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent package list specification. The tuckr link command accepts multiple packages (line 189: etc usr), but the examples show them being linked separately. For consistency and clarity, update line 192 to show both packages in a single command: sudo stow -t / etc usr to match the tuckr example pattern.

Suggested change
cd $(yadm rev-parse --show-toplevel) && sudo stow -t / etc usr
sudo stow -t / etc usr

Copilot uses AI. Check for mistakes.
# Check if running as root
[[ $EUID -eq 0 ]] || die "This script must be run as root (use sudo)"

# Deploy using tuckr or stow
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local keyword cannot be used outside of a function. This variable declaration is at the top level of the script (outside any function), which will cause a syntax error when the script is executed.

Move this declaration inside the conditional block as a regular variable assignment, or refactor into a function.

Copilot uses AI. Check for mistakes.
Comment on lines +78 to +94
info "Using tuckr for deployment"
local hooks_file="${REPO_DIR}/hooks.toml"
for pkg in "${PACKAGES[@]}"; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }

if [[ $UNLINK == true ]]; then
info "Unlinking ${pkg}/"
tuckr unlink -d "$REPO_DIR" -t / "$pkg" || warn "Failed to unlink $pkg"
else
info "Linking ${pkg}/ → / (tuckr)"
local cmd=(tuckr link -d "$REPO_DIR" -t / "$pkg")
[[ -f $hooks_file ]] && cmd+=(-H "$hooks_file")
"${cmd[@]}" || warn "Failed to link $pkg"
fi
done
elif has stow; then
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local keyword cannot be used outside of a function. These variable declarations are at the top level of the script, which will cause syntax errors.

Remove the local keyword from these declarations since they are not inside a function.

Copilot uses AI. Check for mistakes.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings December 29, 2025 03:48
@Ven0m0 Ven0m0 merged commit 1b16ef4 into main Dec 29, 2025
4 of 12 checks passed
@Ven0m0 Ven0m0 deleted the claude/finalize-yadm-stow-setup-5QukU branch December 29, 2025 03:48
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 7 changed files in this pull request and generated 7 comments.

Comment on lines +79 to +91
local hooks_file="${REPO_DIR}/hooks.toml"
for pkg in "${PACKAGES[@]}"; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }

if [[ $UNLINK == true ]]; then
info "Unlinking ${pkg}/"
tuckr unlink -d "$REPO_DIR" -t / "$pkg" || warn "Failed to unlink $pkg"
else
info "Linking ${pkg}/ → / (tuckr)"
local cmd=(tuckr link -d "$REPO_DIR" -t / "$pkg")
[[ -f $hooks_file ]] && cmd+=(-H "$hooks_file")
"${cmd[@]}" || warn "Failed to link $pkg"
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The local keyword is being used outside of a function scope. In bash, local is only valid within function definitions. This code is at the script's top level (lines 79-91), so local should be removed and these should be regular variable declarations.

Copilot uses AI. Check for mistakes.
The `.yadm/bootstrap` script handles this deployment automatically using rsync.

### System Configs with Tuckr
### System Configs with Tuckr or Stow
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent capitalization of tool name. The heading uses "Tuckr" with capital T, but throughout the rest of the documentation, the tool name is consistently lowercase "tuckr". The heading should be "System Configs with tuckr or stow" for consistency.

Suggested change
### System Configs with Tuckr or Stow
### System Configs with tuckr or stow

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,114 @@
#!/usr/bin/env bash
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The script file is named deploy-system-configs.sh but in the documentation and usage examples, it's referred to as deploy-system-configs (without the .sh extension). The filename should either be changed to deploy-system-configs (without extension) for consistency with typical Unix command naming conventions, or all references in documentation should include the .sh extension.

Copilot uses AI. Check for mistakes.
local src="${WORKTREE}/${pkg}"
[[ -d $src ]] || { warn "Directory not found: $src"; continue; }
info "Linking ${pkg}/ → / (stow)"
(cd "$WORKTREE" && sudo stow -t / -d . "$pkg") || warn "Failed to stow ${pkg}"
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The stow command uses different syntax in different places. Here it uses stow -t / -d . "$pkg" with individual package names, but in YADM.md line 192 and 400 it shows sudo stow -t / etc usr (multiple packages at once). For consistency and efficiency, the documentation pattern should be followed: sudo stow -t / -d . etc usr to deploy both packages in a single command.

Copilot uses AI. Check for mistakes.
Comment on lines +85 to +90
for pkg in etc usr; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Missing dir: $src"; continue; }
info "Linking ${pkg}/ → / (stow)"
(cd "$REPO_DIR" && sudo stow -t / -d . "$pkg") || warn "Failed to stow $pkg"
done
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The stow command uses different syntax in different places. Here it uses stow -t / -d . "$pkg" with individual package names, but in YADM.md line 192 and 400 it shows sudo stow -t / etc usr (multiple packages at once). For consistency and efficiency, the documentation pattern should be followed: sudo stow -t / -d . etc usr to deploy both packages in a single command.

Suggested change
for pkg in etc usr; do
local src="${REPO_DIR}/${pkg}"
[[ -d $src ]] || { warn "Missing dir: $src"; continue; }
info "Linking ${pkg}/ → / (stow)"
(cd "$REPO_DIR" && sudo stow -t / -d . "$pkg") || warn "Failed to stow $pkg"
done
local pkgs=()
for pkg in etc usr; do
local src="${REPO_DIR}/${pkg}"
if [[ -d $src ]]; then
pkgs+=("$pkg")
else
warn "Missing dir: $src"
fi
done
if ((${#pkgs[@]})); then
info "Linking ${pkgs[*]}/ → / (stow)"
(cd "$REPO_DIR" && sudo stow -t / -d . "${pkgs[@]}") || warn "Failed to stow ${pkgs[*]}"
fi

Copilot uses AI. Check for mistakes.
sudo tuckr link -d "$PWD" -t / etc usr

# OR using stow:
sudo stow -t / etc usr
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The stow command is missing the -d . argument. According to stow documentation and the pattern used elsewhere in the codebase, the command should be sudo stow -t / -d . etc usr. The -d . explicitly specifies the stow directory (current directory).

Suggested change
sudo stow -t / etc usr
sudo stow -t / -d . etc usr

Copilot uses AI. Check for mistakes.
# Creates: /etc/pacman.conf → /path/to/repo/etc/pacman.conf

# Using stow (fallback - widely available)
cd /path/to/repo && sudo stow -t / etc
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The stow command is missing the -d . argument. According to stow documentation and the pattern used elsewhere in the codebase, the command should be cd /path/to/repo && sudo stow -t / -d . etc. The -d . explicitly specifies the stow directory (current directory after cd).

Suggested change
cd /path/to/repo && sudo stow -t / etc
cd /path/to/repo && sudo stow -t / -d . etc

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants