#!/usr/bin/env bash set -euo pipefail # 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."