aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:25:02 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:25:02 +0100
commitfd222e182f43a72e60b7a1e6cd3d57e2c609562f (patch)
treed605ec8664fe9adc9ab9582c86065aea38a4bba6
parent201932ce77d8e7ca6fc66e3feb41cebdf68eb573 (diff)
downloaddotfiles-fd222e182f43a72e60b7a1e6cd3d57e2c609562f.tar.gz
dotfiles-fd222e182f43a72e60b7a1e6cd3d57e2c609562f.tar.bz2
dotfiles-fd222e182f43a72e60b7a1e6cd3d57e2c609562f.zip
refactor(firefox): auto-enumerate files like etc/ deploy script
Drop the per-file include hashes and explicit cp calls; walk firefox/ with find(1) and mirror the tree into the LibreWolf profile. Drop-in new files (e.g. user.js, chrome/userContent.css) now deploy without touching the script. Same pattern already in use for etc/.
-rw-r--r--.github/copilot-instructions.md2
-rwxr-xr-xrun_onchange_after_deploy-firefox.sh.tmpl29
2 files changed, 16 insertions, 15 deletions
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 0f384aa..02ce8d4 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -53,7 +53,7 @@ Additionally, `dot_config/sh/inputrc` provides readline config for non-zsh tools
When modifying configs, use chezmoi naming conventions: `dot_` prefix for dotfiles, `private_` for restricted-permission dirs/files, `executable_` for scripts. To add a new config file, use `chezmoi add <target-path>`.
-The `run_onchange_after_*` scripts are chezmoi templates (`.tmpl`) that embed `sha256sum` hashes of the files they deploy. Chezmoi only re-runs them when file content changes. The `etc` deploy script auto-enumerates every file under `etc/` (single combined hash via chezmoi's `output` function + `find`); just drop new files into `etc/` and they'll be deployed on next `chezmoi apply`. The `firefox` deploy script still lists its files explicitly.
+The `run_onchange_after_*` scripts are chezmoi templates (`.tmpl`) that embed `sha256sum` hashes of the files they deploy. Chezmoi only re-runs them when file content changes. Both the `etc` and `firefox` deploy scripts auto-enumerate every file under their respective directories (single combined hash via chezmoi's `output` function + `find`); just drop new files into `etc/` or `firefox/` and they'll be deployed on next `chezmoi apply`.
When editing shell config, all zsh configuration goes in `dot_config/zsh/` — do not create files in `dot_config/sh/` (only `inputrc` remains there).
diff --git a/run_onchange_after_deploy-firefox.sh.tmpl b/run_onchange_after_deploy-firefox.sh.tmpl
index b8bf309..f5a5083 100755
--- a/run_onchange_after_deploy-firefox.sh.tmpl
+++ b/run_onchange_after_deploy-firefox.sh.tmpl
@@ -1,20 +1,21 @@
#!/bin/sh
-# Deploy Firefox/LibreWolf hardening overrides and custom CSS
-# chezmoi re-runs this script when any hash below changes.
-# {{ include "firefox/user-overrides.js" | sha256sum }}
-# {{ include "firefox/chrome/userChrome.css" | sha256sum }}
+# Deploy Firefox/LibreWolf hardening overrides and custom CSS.
+# chezmoi re-runs this script whenever any file under firefox/ changes.
+# firefox/ content hash: {{ output "sh" "-c" (printf "cd %q && find firefox -type f -exec sha256sum {} + | LC_ALL=C sort" .chezmoi.sourceDir) | sha256sum }}
set -eu
PROFILES_DIR="$HOME/.librewolf"
-if [ -d "$PROFILES_DIR" ]; then
- PROFILE=$(find "$PROFILES_DIR" -maxdepth 1 -mindepth 1 -type d -name '*.default-default' | head -1)
- if [ -z "$PROFILE" ]; then
- PROFILE=$(find "$PROFILES_DIR" -maxdepth 1 -mindepth 1 -type d | head -1)
- fi
+[ -d "$PROFILES_DIR" ] || exit 0
- if [ -n "$PROFILE" ]; then
- cp --remove-destination "$CHEZMOI_SOURCE_DIR/firefox/user-overrides.js" "$PROFILE/user-overrides.js"
- mkdir -p "$PROFILE/chrome"
- cp --remove-destination "$CHEZMOI_SOURCE_DIR/firefox/chrome/userChrome.css" "$PROFILE/chrome/userChrome.css"
- fi
+PROFILE=$(find "$PROFILES_DIR" -maxdepth 1 -mindepth 1 -type d -name '*.default-default' | head -1)
+if [ -z "$PROFILE" ]; then
+ PROFILE=$(find "$PROFILES_DIR" -maxdepth 1 -mindepth 1 -type d | head -1)
fi
+[ -n "$PROFILE" ] || exit 0
+
+cd "$CHEZMOI_SOURCE_DIR"
+find firefox -type f | while IFS= read -r src; do
+ dest="$PROFILE/${src#firefox/}"
+ mkdir -p "$(dirname "$dest")"
+ cp --remove-destination "$src" "$dest"
+done