init: new dotfile configuration

Remove all org files using a new script to more config over, The old org
file configuaration were great but required org. This new version only
requires the scripts that is included in the repo.

The configuration are all done but have not ported the theming system
yet.

Signed-off-by: Steve Beaulac <steve@sagacity.ca>
Change-Id: I14cd7fe058a71c8ba9d6d35397dc8d7e6a6a6964
This commit is contained in:
2026-03-02 13:26:21 -05:00
committed by gitadmin
commit 02a5e0df28
410 changed files with 18546 additions and 0 deletions
Executable
+156
View File
@@ -0,0 +1,156 @@
#!/usr/bin/env bash
set -euo pipefail
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
src_dir="$script_dir/script"
dest_dir="${HOME}/.local/bin"
dry_run=false
target_path=""
usage() {
cat <<'EOF'
Usage: sync-script.sh [--dry-run] [path]
path can be:
script (all scripts)
script/foo (specific file or folder)
.local/bin (all scripts)
.local/bin/foo (specific file or folder)
foo (file or folder under script)
EOF
}
for arg in "$@"; do
case "$arg" in
--dry-run)
dry_run=true
;;
-h|--help)
usage
exit 0
;;
*)
if [[ -z "$target_path" ]]; then
target_path="$arg"
else
echo "Error: too many arguments." >&2
usage >&2
exit 1
fi
;;
esac
done
hash_cmd="sha256sum"
if ! command -v "$hash_cmd" >/dev/null 2>&1; then
echo "Error: sha256sum not found. Install coreutils or adjust hash_cmd." >&2
exit 1
fi
file_hash() {
"$hash_cmd" "$1" | awk '{print $1}'
}
copy_file() {
local src="$1"
local dst="$2"
if $dry_run; then
echo "copy: $src -> $dst"
else
mkdir -p "$(dirname "$dst")"
cp -a "$src" "$dst"
fi
}
if [[ ! -d "$src_dir" ]]; then
echo "Error: source script directory not found: $src_dir" >&2
exit 1
fi
mkdir -p "$dest_dir"
target_rel="$target_path"
if [[ -n "$target_rel" ]]; then
if [[ "$target_rel" == "script" || "$target_rel" == ".local/bin" ]]; then
target_rel=""
elif [[ "$target_rel" == script/* ]]; then
target_rel=${target_rel#script/}
elif [[ "$target_rel" == .local/bin/* ]]; then
target_rel=${target_rel#.local/bin/}
fi
target_rel=${target_rel#./}
if [[ "$target_rel" == "." ]]; then
target_rel=""
fi
if [[ "$target_rel" == /* ]]; then
echo "Error: absolute paths are not supported: $target_path" >&2
exit 1
fi
fi
base_path="$src_dir"
if [[ -n "$target_rel" ]]; then
base_path="$src_dir/$target_rel"
fi
if [[ ! -e "$base_path" ]]; then
echo "Error: path not found in source: $base_path" >&2
exit 1
fi
sync_file() {
local src_path="$1"
local rel_path=${src_path#"$src_dir"/}
local dst_path="$dest_dir/$rel_path"
if [[ ! -f "$dst_path" ]]; then
copy_file "$src_path" "$dst_path"
return
fi
local src_hash
local dst_hash
src_hash=$(file_hash "$src_path")
dst_hash=$(file_hash "$dst_path")
if [[ "$src_hash" != "$dst_hash" ]]; then
copy_file "$src_path" "$dst_path"
fi
}
shopt -s globstar nullglob dotglob
if [[ -f "$base_path" ]]; then
sync_file "$base_path"
elif [[ -d "$base_path" ]]; then
for src_path in "$base_path"/**; do
rel_path=${src_path#"$src_dir"/}
if [[ "$rel_path" == ".git" || "$rel_path" == .git/* ]]; then
continue
fi
dst_path="$dest_dir/$rel_path"
if [[ -d "$src_path" ]]; then
if ! $dry_run; then
mkdir -p "$dst_path"
else
echo "mkdir: $dst_path"
fi
continue
fi
if [[ ! -f "$src_path" ]]; then
continue
fi
sync_file "$src_path"
done
fi
if $dry_run; then
echo "Dry run complete. Re-run without --dry-run to apply changes."
else
echo "Sync complete. Updated files where content differed."
fi