From 571c0346919bbac3272778e3d078b31a92bfa394 Mon Sep 17 00:00:00 2001 From: jasmine Date: Tue, 23 Dec 2025 11:14:49 +0800 Subject: [PATCH 1/3] feat(editors): add Claude slash command and refactor config structure Reorganize Claude configuration into dedicated subdirectory and add reusable slash command for updating Docker services. - Create editors/claude/ directory structure - Move CLAUDE.md and settings.json into claude/ - Add slash commands directory with update-docker-services command - Update default.nix to link individual files (allows Claude state files) --- .../features/editors/{ => claude}/CLAUDE.md | 0 .../claude/commands/update-docker-services.md | 16 ++++++++++++++++ .../settings.json} | 0 .../sajenim/features/editors/default.nix | 7 ++++--- 4 files changed, 20 insertions(+), 3 deletions(-) rename home-manager/sajenim/features/editors/{ => claude}/CLAUDE.md (100%) create mode 100644 home-manager/sajenim/features/editors/claude/commands/update-docker-services.md rename home-manager/sajenim/features/editors/{claude-settings.json => claude/settings.json} (100%) diff --git a/home-manager/sajenim/features/editors/CLAUDE.md b/home-manager/sajenim/features/editors/claude/CLAUDE.md similarity index 100% rename from home-manager/sajenim/features/editors/CLAUDE.md rename to home-manager/sajenim/features/editors/claude/CLAUDE.md diff --git a/home-manager/sajenim/features/editors/claude/commands/update-docker-services.md b/home-manager/sajenim/features/editors/claude/commands/update-docker-services.md new file mode 100644 index 0000000..e4d8216 --- /dev/null +++ b/home-manager/sajenim/features/editors/claude/commands/update-docker-services.md @@ -0,0 +1,16 @@ +Update all Docker service images on viridian to their latest pinned release versions. + +For each service, look up the latest release version from the official sources and update the +image tag to the specific version number (not "latest"). + +Services to update: +- Jellyfin (jellyfin/jellyfin) +- Lidarr (ghcr.io/hotio/lidarr) +- Prowlarr (ghcr.io/hotio/prowlarr) +- qBittorrent (ghcr.io/hotio/qbittorrent) +- Radarr (ghcr.io/hotio/radarr) +- Sonarr (ghcr.io/hotio/sonarr) +- OpenGist (ghcr.io/thomiceli/opengist) + +Use web search to find the latest release versions, then update the image tags in the +configuration files located in nixos/viridian/multimedia/ and nixos/viridian/services/. diff --git a/home-manager/sajenim/features/editors/claude-settings.json b/home-manager/sajenim/features/editors/claude/settings.json similarity index 100% rename from home-manager/sajenim/features/editors/claude-settings.json rename to home-manager/sajenim/features/editors/claude/settings.json diff --git a/home-manager/sajenim/features/editors/default.nix b/home-manager/sajenim/features/editors/default.nix index 4bf2d7f..a813899 100644 --- a/home-manager/sajenim/features/editors/default.nix +++ b/home-manager/sajenim/features/editors/default.nix @@ -41,8 +41,9 @@ home.file = { ".ideavimrc".source = ./ideavimrc; - # Global claude configuration - ".claude/settings.json".source = ./claude-settings.json; - ".claude/CLAUDE.md".source = ./CLAUDE.md; + # Claude configuration (link individual items to allow Claude Code to write state files) + ".claude/CLAUDE.md".source = ./claude/CLAUDE.md; + ".claude/settings.json".source = ./claude/settings.json; + ".claude/commands".source = ./claude/commands; }; } From d9079d778f222ba8c8dcd345fd27fed1807a66ef Mon Sep 17 00:00:00 2001 From: jasmine Date: Tue, 23 Dec 2025 11:16:45 +0800 Subject: [PATCH 2/3] feat: add ~/.local/bin support for user scripts Configure PATH and backup strategy for non-declarative user scripts. - Add ~/.local/bin to sessionPath in global home-manager config - Include ~/.local/bin in onsite borgbackup (hourly to viridian) - Include ~/.local/bin in offsite borgbackup (daily to borgbase) --- home-manager/sajenim/global/default.nix | 3 +++ nixos/fuchsia/services/borgbackup/offsite.nix | 1 + nixos/fuchsia/services/borgbackup/onsite.nix | 1 + 3 files changed, 5 insertions(+) diff --git a/home-manager/sajenim/global/default.nix b/home-manager/sajenim/global/default.nix index 6ae7abe..2295f72 100644 --- a/home-manager/sajenim/global/default.nix +++ b/home-manager/sajenim/global/default.nix @@ -39,6 +39,9 @@ sessionVariables = { EDITOR = "nvim"; # Default text editor for CLI operations }; + sessionPath = [ + "$HOME/.local/bin" # User scripts and executables + ]; }; # Automatically restart systemd user services on configuration changes diff --git a/nixos/fuchsia/services/borgbackup/offsite.nix b/nixos/fuchsia/services/borgbackup/offsite.nix index 52ff0d0..4cbcf4f 100644 --- a/nixos/fuchsia/services/borgbackup/offsite.nix +++ b/nixos/fuchsia/services/borgbackup/offsite.nix @@ -52,6 +52,7 @@ # Dotfiles (critical user configuration) "/btrfs-subvolumes/hm-sajenim/.ssh" "/btrfs-subvolumes/hm-sajenim/.gnupg" + "/btrfs-subvolumes/hm-sajenim/.local/bin" # Persistent files (actual storage location) "/persist/etc/machine-id" diff --git a/nixos/fuchsia/services/borgbackup/onsite.nix b/nixos/fuchsia/services/borgbackup/onsite.nix index 4a1e8d5..70643e7 100644 --- a/nixos/fuchsia/services/borgbackup/onsite.nix +++ b/nixos/fuchsia/services/borgbackup/onsite.nix @@ -48,6 +48,7 @@ in { # Dotfiles (critical user configuration) "/btrfs-subvolumes/hm-sajenim/.ssh" "/btrfs-subvolumes/hm-sajenim/.gnupg" + "/btrfs-subvolumes/hm-sajenim/.local/bin" # Persistent files (actual storage location) "/persist/etc/machine-id" From f4067e3697593090856cb7780b4bdd99149aeb3b Mon Sep 17 00:00:00 2001 From: jasmine Date: Tue, 23 Dec 2025 13:03:41 +0800 Subject: [PATCH 3/3] chore(viridian): update all Docker services to latest pinned releases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update all container images to their latest stable releases with pinned version tags (not "latest" tag for reproducibility). Multimedia services: - Jellyfin: 10.10.5 → 10.11.5 - Lidarr: 2.9.6.4552 → 3.1.0.4875 - Prowlarr: 1.30.2.4939 → 2.3.0.5236 - qBittorrent: 5.0.3 → 5.1.4 - Radarr: 5.18.4.9674 → 6.0.4.10291 - Sonarr: 4.0.13.2932 → 4.0.16.2944 Services: - OpenGist: 1.10 → 1.11.1 --- nixos/viridian/multimedia/jellyfin/default.nix | 2 +- nixos/viridian/multimedia/lidarr/default.nix | 2 +- nixos/viridian/multimedia/prowlarr/default.nix | 2 +- nixos/viridian/multimedia/qbittorrent/default.nix | 2 +- nixos/viridian/multimedia/radarr/default.nix | 2 +- nixos/viridian/multimedia/sonarr/default.nix | 2 +- nixos/viridian/services/opengist/default.nix | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/nixos/viridian/multimedia/jellyfin/default.nix b/nixos/viridian/multimedia/jellyfin/default.nix index 8c3d5ec..0bc12c0 100644 --- a/nixos/viridian/multimedia/jellyfin/default.nix +++ b/nixos/viridian/multimedia/jellyfin/default.nix @@ -5,7 +5,7 @@ in { # Volunteer-built media solution that puts you in control of your media jellyfin = { autoStart = true; - image = "jellyfin/jellyfin:10.10.5"; + image = "jellyfin/jellyfin:10.11.5"; ports = [ "${port}:8096/tcp" # HTTP traffic "8920:8920/tcp" # HTTPS traffic diff --git a/nixos/viridian/multimedia/lidarr/default.nix b/nixos/viridian/multimedia/lidarr/default.nix index 540164a..bb140b6 100644 --- a/nixos/viridian/multimedia/lidarr/default.nix +++ b/nixos/viridian/multimedia/lidarr/default.nix @@ -5,7 +5,7 @@ in { # # Music collection manager for Usenet and BitTorrent users lidarr = { autoStart = true; - image = "ghcr.io/hotio/lidarr:release-2.9.6.4552"; + image = "ghcr.io/hotio/lidarr:release-3.1.0.4875"; ports = [ "${port}:8686/tcp" # WebUI ]; diff --git a/nixos/viridian/multimedia/prowlarr/default.nix b/nixos/viridian/multimedia/prowlarr/default.nix index 0689b7f..de2c94d 100644 --- a/nixos/viridian/multimedia/prowlarr/default.nix +++ b/nixos/viridian/multimedia/prowlarr/default.nix @@ -5,7 +5,7 @@ in { # Indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. prowlarr = { autoStart = true; - image = "ghcr.io/hotio/prowlarr:release-1.30.2.4939"; + image = "ghcr.io/hotio/prowlarr:release-2.3.0.5236"; ports = [ "${port}:9696/tcp" # WebUI ]; diff --git a/nixos/viridian/multimedia/qbittorrent/default.nix b/nixos/viridian/multimedia/qbittorrent/default.nix index a0a06d5..8ae7ee0 100644 --- a/nixos/viridian/multimedia/qbittorrent/default.nix +++ b/nixos/viridian/multimedia/qbittorrent/default.nix @@ -5,7 +5,7 @@ in { # # Open-source software alternative to µTorrent qbittorrent = { autoStart = true; - image = "ghcr.io/hotio/qbittorrent:release-5.0.3"; + image = "ghcr.io/hotio/qbittorrent:release-5.1.4"; ports = [ "${port}:8080/tcp" # WebUI "32372:32372/tcp" # Transport protocol diff --git a/nixos/viridian/multimedia/radarr/default.nix b/nixos/viridian/multimedia/radarr/default.nix index 25ccfe5..a5378b1 100644 --- a/nixos/viridian/multimedia/radarr/default.nix +++ b/nixos/viridian/multimedia/radarr/default.nix @@ -5,7 +5,7 @@ in { # Movie collection manager for Usenet and BitTorrent users radarr = { autoStart = true; - image = "ghcr.io/hotio/radarr:release-5.18.4.9674"; + image = "ghcr.io/hotio/radarr:release-6.0.4.10291"; ports = [ "${port}:7878/tcp" # WebUI ]; diff --git a/nixos/viridian/multimedia/sonarr/default.nix b/nixos/viridian/multimedia/sonarr/default.nix index 10201c8..a227a89 100644 --- a/nixos/viridian/multimedia/sonarr/default.nix +++ b/nixos/viridian/multimedia/sonarr/default.nix @@ -5,7 +5,7 @@ in { # PVR for Usenet and BitTorrent users sonarr = { autoStart = true; - image = "ghcr.io/hotio/sonarr:release-4.0.13.2932"; + image = "ghcr.io/hotio/sonarr:release-4.0.16.2944"; ports = [ "${port}:8989/tcp" # WebUI ]; diff --git a/nixos/viridian/services/opengist/default.nix b/nixos/viridian/services/opengist/default.nix index 163eded..7716cbf 100644 --- a/nixos/viridian/services/opengist/default.nix +++ b/nixos/viridian/services/opengist/default.nix @@ -5,7 +5,7 @@ in { # OpenGist service configuration virtualisation.oci-containers.containers = { opengist = { - image = "ghcr.io/thomiceli/opengist:1.10"; + image = "ghcr.io/thomiceli/opengist:1.11.1"; ports = [ "${port}:${port}" ];