diff --git a/flake.nix b/flake.nix index 9cadacb..76f0dce 100644 --- a/flake.nix +++ b/flake.nix @@ -234,15 +234,44 @@ apps = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] (system: let pkgs = import nixpkgs { inherit system; }; + commonDeps = [ pkgs.curl pkgs.jq pkgs.nix pkgs.git pkgs.gnused pkgs.gnugrep pkgs.coreutils pkgs.gawk ]; + update-doomemacs = pkgs.writeShellScriptBin "update-doomemacs" '' - export PATH="${pkgs.lib.makeBinPath [ pkgs.curl pkgs.jq pkgs.nix pkgs.git pkgs.gnused pkgs.gnugrep pkgs.coreutils ]}:$PATH" + export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH" ${builtins.readFile ./scripts/update-doomemacs.sh} ''; + + update-claude-code = pkgs.writeShellScriptBin "update-claude-code" '' + export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH" + ${builtins.readFile ./packages/claude-code/update.sh} + ''; + + rotate-wallpaper = pkgs.writeShellScriptBin "rotate-wallpaper" '' + export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH" + ${builtins.readFile ./scripts/rotate-wallpaper.sh} + ''; + + upgrade = pkgs.writeShellScriptBin "upgrade" '' + export PATH="${pkgs.lib.makeBinPath commonDeps}:$PATH" + ${builtins.readFile ./scripts/upgrade.sh} + ''; in { update-doomemacs = { type = "app"; program = "${update-doomemacs}/bin/update-doomemacs"; }; + update-claude-code = { + type = "app"; + program = "${update-claude-code}/bin/update-claude-code"; + }; + rotate-wallpaper = { + type = "app"; + program = "${rotate-wallpaper}/bin/rotate-wallpaper"; + }; + upgrade = { + type = "app"; + program = "${upgrade}/bin/upgrade"; + }; } ); }; diff --git a/home/roles/i3+sway/default.nix b/home/roles/i3+sway/default.nix index 46f4fc4..62ef76c 100644 --- a/home/roles/i3+sway/default.nix +++ b/home/roles/i3+sway/default.nix @@ -4,6 +4,8 @@ with lib; let cfg = config.home.roles.i3_sway; + wallpaperConfig = import ../../wallpapers; + currentWallpaper = builtins.elemAt wallpaperConfig.wallpapers wallpaperConfig.currentIndex; shared_config = recursiveUpdate rec { modifier = "Mod4"; @@ -281,7 +283,7 @@ in { } # Set wallpaper with feh { - command = "feh --bg-scale ${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg}"; + command = "feh ${currentWallpaper.feh} ${currentWallpaper.file}"; always = false; notification = false; } @@ -314,7 +316,7 @@ in { }; output = { "*" = { - bg = "${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg} fill"; + bg = "${currentWallpaper.file} ${currentWallpaper.sway}"; }; }; startup = [ diff --git a/home/roles/plasma-manager/default.nix b/home/roles/plasma-manager/default.nix index 3942040..906d5d5 100644 --- a/home/roles/plasma-manager/default.nix +++ b/home/roles/plasma-manager/default.nix @@ -4,6 +4,8 @@ with lib; let cfg = config.home.roles.plasma-manager; + wallpaperConfig = import ../../wallpapers; + currentWallpaper = builtins.elemAt wallpaperConfig.wallpapers wallpaperConfig.currentIndex; in { options.home.roles.plasma-manager = { @@ -181,7 +183,7 @@ in plasma-localerc.Formats.LANG = "en_US.UTF-8"; # Set wallpaper for all desktops - plasmarc.Wallpapers.usersWallpapers = "${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg}"; + plasmarc.Wallpapers.usersWallpapers = "${currentWallpaper.file}"; }; }; }; diff --git a/home/wallpapers/default.nix b/home/wallpapers/default.nix new file mode 100644 index 0000000..2d341eb --- /dev/null +++ b/home/wallpapers/default.nix @@ -0,0 +1,45 @@ +# Wallpaper rotation system +# The currentIndex is incremented by `nix run .#rotate-wallpaper` +# and gets committed as part of `nix run .#upgrade` +{ + currentIndex = 1; # Index into wallpapers list + + wallpapers = [ + { + name = "metroid-samus-returns"; + file = ./metroid-samus-returns-kz-3440x1440.jpg; + sway = "fill"; + feh = "--bg-fill"; + } + { + name = "metroid3_map"; + file = ./metroid3_map.gif; + sway = "fit"; + feh = "--bg-max"; + } + { + name = "super-metroid-gunship-cavern"; + file = ./super-metroid-gunship-cavern.jpg; + sway = "fit"; + feh = "--bg-max"; + } + { + name = "super-metroid-samus-statue"; + file = ./super-metroid-samus-statue.png; + sway = "fit"; + feh = "--bg-max"; + } + { + name = "metroid-samus-action-4k"; + file = ./metroid-samus-action-4k.jpg; + sway = "fit"; + feh = "--bg-max"; + } + { + name = "metroid-creature-minimalist"; + file = ./metroid-creature-minimalist.jpg; + sway = "fit"; + feh = "--bg-max"; + } + ]; +} diff --git a/home/wallpapers/metroid-creature-minimalist.jpg b/home/wallpapers/metroid-creature-minimalist.jpg new file mode 100644 index 0000000..b9e4933 Binary files /dev/null and b/home/wallpapers/metroid-creature-minimalist.jpg differ diff --git a/home/wallpapers/metroid-samus-action-4k.jpg b/home/wallpapers/metroid-samus-action-4k.jpg new file mode 100644 index 0000000..055e887 Binary files /dev/null and b/home/wallpapers/metroid-samus-action-4k.jpg differ diff --git a/home/wallpapers/metroid3_map.gif b/home/wallpapers/metroid3_map.gif new file mode 100644 index 0000000..0ab15e2 Binary files /dev/null and b/home/wallpapers/metroid3_map.gif differ diff --git a/home/wallpapers/super-metroid-gunship-cavern.jpg b/home/wallpapers/super-metroid-gunship-cavern.jpg new file mode 100644 index 0000000..fe89947 Binary files /dev/null and b/home/wallpapers/super-metroid-gunship-cavern.jpg differ diff --git a/home/wallpapers/super-metroid-samus-statue.png b/home/wallpapers/super-metroid-samus-statue.png new file mode 100644 index 0000000..91d4108 Binary files /dev/null and b/home/wallpapers/super-metroid-samus-statue.png differ diff --git a/packages/claude-code/update.sh b/packages/claude-code/update.sh index f8eaeb8..cf53df0 100755 --- a/packages/claude-code/update.sh +++ b/packages/claude-code/update.sh @@ -33,7 +33,8 @@ YELLOW='\033[1;33m' NC='\033[0m' # No Color CASK_URL="https://raw.githubusercontent.com/Homebrew/homebrew-cask/HEAD/Casks/c/claude-code.rb" -NIX_FILE="$(dirname "$0")/default.nix" +REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}" +NIX_FILE="$REPO_ROOT/packages/claude-code/default.nix" echo "Fetching latest claude-code version from Homebrew cask..." diff --git a/scripts/rotate-wallpaper.sh b/scripts/rotate-wallpaper.sh new file mode 100644 index 0000000..d89830e --- /dev/null +++ b/scripts/rotate-wallpaper.sh @@ -0,0 +1,41 @@ +#!/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 +REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}" +WALLPAPER_FILE="$REPO_ROOT/home/wallpapers/default.nix" + +echo -e "${GREEN}Rotating wallpaper...${NC}" + +# Check if file exists +if [[ ! -f "$WALLPAPER_FILE" ]]; then + echo -e "${RED}Error: $WALLPAPER_FILE not found${NC}" + exit 1 +fi + +# Get current index +CURRENT_INDEX=$(grep -oP 'currentIndex = \K\d+' "$WALLPAPER_FILE") +echo -e "Current index: ${YELLOW}$CURRENT_INDEX${NC}" + +# Count wallpapers (count occurrences of "name = " in the wallpapers list) +WALLPAPER_COUNT=$(grep -c 'name = "' "$WALLPAPER_FILE") +echo -e "Total wallpapers: ${YELLOW}$WALLPAPER_COUNT${NC}" + +# Calculate next index (wrap around) +NEXT_INDEX=$(( (CURRENT_INDEX + 1) % WALLPAPER_COUNT )) +echo -e "Next index: ${YELLOW}$NEXT_INDEX${NC}" + +# Update the currentIndex +sed -i "s/currentIndex = $CURRENT_INDEX;/currentIndex = $NEXT_INDEX;/" "$WALLPAPER_FILE" + +echo -e "${GREEN}Successfully rotated wallpaper!${NC}" +echo -e " Old index: ${YELLOW}$CURRENT_INDEX${NC}" +echo -e " New index: ${YELLOW}$NEXT_INDEX${NC}" +echo "" +echo "Rebuild your system to apply the new wallpaper." diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh new file mode 100644 index 0000000..8766206 --- /dev/null +++ b/scripts/upgrade.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +REPO_ROOT="${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}" + +echo -e "${BLUE}========================================${NC}" +echo -e "${BLUE} NixOS Configuration Major Upgrade${NC}" +echo -e "${BLUE}========================================${NC}" +echo "" + +# Step 1: Update flake inputs +echo -e "${GREEN}[1/4] Updating flake inputs...${NC}" +cd "$REPO_ROOT" +nix flake update +echo "" + +# Step 2: Update Doom Emacs +echo -e "${GREEN}[2/4] Updating Doom Emacs...${NC}" +"$REPO_ROOT/scripts/update-doomemacs.sh" +echo "" + +# Step 3: Update Claude Code +echo -e "${GREEN}[3/4] Updating Claude Code...${NC}" +"$REPO_ROOT/packages/claude-code/update.sh" +echo "" + +# Step 4: Rotate wallpaper +echo -e "${GREEN}[4/4] Rotating wallpaper...${NC}" +"$REPO_ROOT/scripts/rotate-wallpaper.sh" +echo "" + +echo -e "${BLUE}========================================${NC}" +echo -e "${GREEN}Upgrade complete!${NC}" +echo -e "${BLUE}========================================${NC}" +echo "" +echo "Next steps:" +echo " 1. Review changes: git diff" +echo " 2. Rebuild system: sudo nixos-rebuild switch --flake ." +echo " 3. If satisfied, commit: git add -A && git commit -m 'chore: Major upgrade'"