2.9 KiB
Skill: Supporting the updates.d Update Architecture in a Sibling Project
Overview
CoreDesktop's coreupdate script sources every *.sh file found in
~/.local/share/coredesktop/updates.d/ in filename order. A sibling project
hooks into this system by installing a numbered shell script into that directory
during its own install step.
How It Works
When a user runs coreupdate:
- The coredesktop repo at
~/.local/share/coredesktopis pulled. - All
*.shfiles inupdates.d/are sourced (not executed as subprocesses) in lexicographic order. - Each script runs in the same shell context, with access to
$COREDESKTOPand anything sourced before it (e.g.utils.sh).
Because the scripts are sourced from within the cloned repo directory, any file
placed there by a sibling project's installer will survive git pull — git
does not delete untracked files on pull.
Naming Convention
Existing coredesktop hooks use a numeric prefix to control execution order:
| File | Purpose |
|---|---|
10-pacman.sh |
Arch system update |
20-aur.sh |
AUR packages |
30-flatpak.sh |
Flatpak apps |
40-ruby.sh |
Ruby/gems |
50-bitwarden.sh |
Bitwarden CLI |
60-pipx.sh |
pipx packages |
Sibling projects should use 70 or higher to run after all coredesktop updates complete.
What to Add to a Sibling Project
1. Create the hook script
Add a file like updates.d/70-myproject.sh to the sibling repo:
#!/bin/bash
echo "Updating MyProject..."
git -C "$HOME/.local/share/myproject" pull
# Optional: use coredesktop helpers if needed
# source "$COREDESKTOP/utils.sh"
# install_packages "${MY_PACKAGES[@]}"
2. Install the hook during the sibling's install step
In the sibling's install.sh, copy the hook into coredesktop's updates.d/:
echo "Registering MyProject update hook..."
cp updates.d/70-myproject.sh ~/.local/share/coredesktop/updates.d/
This is a one-time step that wires the sibling into every future coreupdate
run on the machine.
Available Helpers
Since hooks are sourced in the same shell, they can use any function or variable
already defined by earlier scripts. The most useful are in utils.sh:
source "$COREDESKTOP/utils.sh"
# Install pacman packages (skips already-installed ones)
install_packages "${MY_PACMAN_PACKAGES[@]}"
# Remove packages
remove_packages "${MY_REMOVE_PACKAGES[@]}"
Checklist for Sibling Project Authors
- Create
updates.d/7X-<project>.shin the sibling repo - Hook script echoes its name so progress is visible during
coreupdate - Install step copies the hook to
~/.local/share/coredesktop/updates.d/ - Numeric prefix is 70+ (does not conflict with coredesktop's own hooks)
- Script is idempotent — safe to run multiple times without side effects