Add consistent --help/-h argument handling to update-doomemacs.sh, rotate-wallpaper.sh, and upgrade.sh scripts. Each script now displays usage information and a description of what it does. update-claude-code already had --help support.
107 lines
3.3 KiB
Bash
Executable File
107 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Parse arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--help|-h)
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Update Doom Emacs to the latest commit from the doomemacs repository."
|
|
echo ""
|
|
echo "This script fetches the latest commit SHA from the default branch,"
|
|
echo "updates the rev and sha256 in home/roles/emacs/default.nix, and"
|
|
echo "prepares the configuration for a system rebuild."
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --help, -h Show this help message"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Use --help for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
OWNER="doomemacs"
|
|
REPO="doomemacs"
|
|
FILE="home/roles/emacs/default.nix"
|
|
# Use current working directory as repo root (allows running from anywhere in the repo)
|
|
REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
|
TARGET_FILE="$REPO_ROOT/$FILE"
|
|
|
|
echo -e "${GREEN}Updating DoomEmacs to latest commit...${NC}"
|
|
|
|
# Check if file exists
|
|
if [[ ! -f "$TARGET_FILE" ]]; then
|
|
echo -e "${RED}Error: $TARGET_FILE not found${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Get the default branch first
|
|
echo "Fetching repository information..."
|
|
DEFAULT_BRANCH=$(curl -s "https://api.github.com/repos/$OWNER/$REPO" | jq -r '.default_branch')
|
|
|
|
if [[ -z "$DEFAULT_BRANCH" ]] || [[ "$DEFAULT_BRANCH" == "null" ]]; then
|
|
echo -e "${RED}Error: Failed to fetch default branch${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Get the latest commit SHA from GitHub
|
|
echo "Fetching latest commit SHA from $DEFAULT_BRANCH branch..."
|
|
LATEST_SHA=$(curl -s "https://api.github.com/repos/$OWNER/$REPO/commits/$DEFAULT_BRANCH" | jq -r '.sha')
|
|
|
|
if [[ -z "$LATEST_SHA" ]] || [[ "$LATEST_SHA" == "null" ]]; then
|
|
echo -e "${RED}Error: Failed to fetch latest commit SHA${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "Latest commit: ${YELLOW}$LATEST_SHA${NC}"
|
|
|
|
# Get current SHA from file
|
|
CURRENT_SHA=$(grep -oP 'rev = "\K[^"]+' "$TARGET_FILE")
|
|
echo -e "Current commit: ${YELLOW}$CURRENT_SHA${NC}"
|
|
|
|
if [[ "$CURRENT_SHA" == "$LATEST_SHA" ]]; then
|
|
echo -e "${GREEN}Already up to date!${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
# Update the rev field
|
|
echo "Updating rev in $FILE..."
|
|
sed -i "s/rev = \".*\"/rev = \"$LATEST_SHA\"/" "$TARGET_FILE"
|
|
|
|
# Fetch the new sha256 hash using nix-prefetch
|
|
echo "Fetching new sha256 hash..."
|
|
NEW_SHA256=$(nix-prefetch-url --unpack "https://github.com/$OWNER/$REPO/archive/$LATEST_SHA.tar.gz" 2>/dev/null)
|
|
|
|
if [[ -z "$NEW_SHA256" ]]; then
|
|
echo -e "${RED}Error: Failed to fetch sha256 hash${NC}"
|
|
# Revert the rev change
|
|
sed -i "s/rev = \".*\"/rev = \"$CURRENT_SHA\"/" "$TARGET_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Convert to SRI hash format
|
|
SRI_HASH=$(nix hash to-sri --type sha256 "$NEW_SHA256")
|
|
echo -e "New sha256: ${YELLOW}$SRI_HASH${NC}"
|
|
|
|
# Update the sha256 field
|
|
sed -i "s|sha256 = \".*\"|sha256 = \"$SRI_HASH\"|" "$TARGET_FILE"
|
|
|
|
echo -e "${GREEN}Successfully updated DoomEmacs!${NC}"
|
|
echo -e " Old commit: ${YELLOW}$CURRENT_SHA${NC}"
|
|
echo -e " New commit: ${YELLOW}$LATEST_SHA${NC}"
|
|
echo -e " New sha256: ${YELLOW}$SRI_HASH${NC}"
|
|
echo ""
|
|
echo "You can now rebuild your system with the updated DoomEmacs."
|