Add wallpaper rotation system with upgrade workflow
- Add home/wallpapers/default.nix with per-wallpaper scaling options - Add 5 new Metroid-themed wallpapers to the rotation - Update i3+sway and plasma-manager to use wallpaper module - Add scripts/rotate-wallpaper.sh to cycle through wallpapers - Add scripts/upgrade.sh to chain: flake update, doom, claude-code, wallpaper - Add flake apps: rotate-wallpaper, update-claude-code, upgrade - Fix claude-code update.sh to use REPO_ROOT for flake app compatibility Run `nix run .#upgrade` for full system update with wallpaper rotation.
This commit is contained in:
31
flake.nix
31
flake.nix
@@ -234,15 +234,44 @@
|
|||||||
apps = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] (system:
|
apps = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] (system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs { inherit system; };
|
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" ''
|
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}
|
${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 {
|
in {
|
||||||
update-doomemacs = {
|
update-doomemacs = {
|
||||||
type = "app";
|
type = "app";
|
||||||
program = "${update-doomemacs}/bin/update-doomemacs";
|
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";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ with lib;
|
|||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.home.roles.i3_sway;
|
cfg = config.home.roles.i3_sway;
|
||||||
|
wallpaperConfig = import ../../wallpapers;
|
||||||
|
currentWallpaper = builtins.elemAt wallpaperConfig.wallpapers wallpaperConfig.currentIndex;
|
||||||
|
|
||||||
shared_config = recursiveUpdate rec {
|
shared_config = recursiveUpdate rec {
|
||||||
modifier = "Mod4";
|
modifier = "Mod4";
|
||||||
@@ -281,7 +283,7 @@ in {
|
|||||||
}
|
}
|
||||||
# Set wallpaper with feh
|
# Set wallpaper with feh
|
||||||
{
|
{
|
||||||
command = "feh --bg-scale ${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg}";
|
command = "feh ${currentWallpaper.feh} ${currentWallpaper.file}";
|
||||||
always = false;
|
always = false;
|
||||||
notification = false;
|
notification = false;
|
||||||
}
|
}
|
||||||
@@ -314,7 +316,7 @@ in {
|
|||||||
};
|
};
|
||||||
output = {
|
output = {
|
||||||
"*" = {
|
"*" = {
|
||||||
bg = "${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg} fill";
|
bg = "${currentWallpaper.file} ${currentWallpaper.sway}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
startup = [
|
startup = [
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ with lib;
|
|||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.home.roles.plasma-manager;
|
cfg = config.home.roles.plasma-manager;
|
||||||
|
wallpaperConfig = import ../../wallpapers;
|
||||||
|
currentWallpaper = builtins.elemAt wallpaperConfig.wallpapers wallpaperConfig.currentIndex;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.home.roles.plasma-manager = {
|
options.home.roles.plasma-manager = {
|
||||||
@@ -181,7 +183,7 @@ in
|
|||||||
plasma-localerc.Formats.LANG = "en_US.UTF-8";
|
plasma-localerc.Formats.LANG = "en_US.UTF-8";
|
||||||
|
|
||||||
# Set wallpaper for all desktops
|
# Set wallpaper for all desktops
|
||||||
plasmarc.Wallpapers.usersWallpapers = "${../../wallpapers/metroid-samus-returns-kz-3440x1440.jpg}";
|
plasmarc.Wallpapers.usersWallpapers = "${currentWallpaper.file}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
45
home/wallpapers/default.nix
Normal file
45
home/wallpapers/default.nix
Normal file
@@ -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";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
BIN
home/wallpapers/metroid-creature-minimalist.jpg
Normal file
BIN
home/wallpapers/metroid-creature-minimalist.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 70 KiB |
BIN
home/wallpapers/metroid-samus-action-4k.jpg
Normal file
BIN
home/wallpapers/metroid-samus-action-4k.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 MiB |
BIN
home/wallpapers/metroid3_map.gif
Normal file
BIN
home/wallpapers/metroid3_map.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 132 KiB |
BIN
home/wallpapers/super-metroid-gunship-cavern.jpg
Normal file
BIN
home/wallpapers/super-metroid-gunship-cavern.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
BIN
home/wallpapers/super-metroid-samus-statue.png
Normal file
BIN
home/wallpapers/super-metroid-samus-statue.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.8 MiB |
@@ -33,7 +33,8 @@ YELLOW='\033[1;33m'
|
|||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
CASK_URL="https://raw.githubusercontent.com/Homebrew/homebrew-cask/HEAD/Casks/c/claude-code.rb"
|
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..."
|
echo "Fetching latest claude-code version from Homebrew cask..."
|
||||||
|
|
||||||
|
|||||||
41
scripts/rotate-wallpaper.sh
Normal file
41
scripts/rotate-wallpaper.sh
Normal file
@@ -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."
|
||||||
46
scripts/upgrade.sh
Normal file
46
scripts/upgrade.sh
Normal file
@@ -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'"
|
||||||
Reference in New Issue
Block a user