From 7f154d659d9976f68fe517aed54b1bfbacd290ce Mon Sep 17 00:00:00 2001 From: imnyang Date: Sat, 25 Apr 2026 12:54:19 +0900 Subject: [PATCH] refactor: reorganize pjsk-cursor into a hierarchical attribute structure with symlinkJoin groups --- flake.nix | 9 +-- pkgs/pjsk-cursor/default.nix | 134 ++++++++++++++++++----------------- 2 files changed, 74 insertions(+), 69 deletions(-) diff --git a/flake.nix b/flake.nix index 2a931ec..29162ec 100644 --- a/flake.nix +++ b/flake.nix @@ -12,16 +12,17 @@ # waterfox = final.callPackage ./pkgs/waterfox/default.nix { }; # another = final.callPackage ./pkgs/another/default.nix { }; waterfox-bin = final.callPackage ./pkgs/waterfox-bin/default.nix { }; - xcursor-mizuki = final.callPackage ./pkgs/xcursor-mizuki/default.nix { stdenv = final.stdenv; }; - pjsk-cursor = final.callPackage ./pkgs/pjsk-cursor/default.nix { stdenv = final.stdenv; }; + xcursor-mizuki = final.callPackage ./pkgs/xcursor-mizuki/default.nix { }; + pjsk-cursor = final.callPackage ./pkgs/pjsk-cursor/default.nix { }; }; pkgs = nixpkgs.legacyPackages.${system}.extend overlay; in { overlays.default = overlay; packages.${system} = { - inherit (pkgs) waterfox-bin xcursor-mizuki pjsk-cursor; - # default = pkgs.waterfox-bin; + inherit (pkgs) waterfox-bin xcursor-mizuki; }; + + legacyPackages.${system} = (builtins.removeAttrs pkgs.pjsk-cursor [ "override" "overrideDerivation" ]); }; } diff --git a/pkgs/pjsk-cursor/default.nix b/pkgs/pjsk-cursor/default.nix index 8e665c7..396bc54 100644 --- a/pkgs/pjsk-cursor/default.nix +++ b/pkgs/pjsk-cursor/default.nix @@ -1,4 +1,4 @@ -{ stdenv }: +{ stdenv, lib, symlinkJoin }: let homepage = "https://colorfulstage.com/media/download/"; @@ -19,77 +19,81 @@ let ''; meta = { - description = "Project Sekai cursor theme"; + description = "Project Sekai cursor theme - ${name}"; inherit homepage; }; }; - makeVariant = group: character: - { - ani = mkCursor { - name = "pjsk-cursor-${group}-${character}-ani"; - src = ../../assets/${group}-${character}-ani.tar.gz; - }; + groups = { + leoneed = [ "honami" "ichika" "miku" "saki" "shiho" ]; + mmj = [ "airi" "haruka" "miku" "minori" "shizuku" ]; + n25 = [ "ena" "kanade" "mafuyu" "miku" "mizuki" ]; + vbs = [ "akito" "an" "kohane" "miku" "toya" ]; + virtualsinger = [ "kaito" "len" "luka" "meiko" "miku" "rin" ]; + wxs = [ "emu" "miku" "nene" "rui" "tsukasa" ]; + }; - cur = mkCursor { - name = "pjsk-cursor-${group}-${character}-cur"; - src = ../../assets/${group}-${character}-cur.tar.gz; + # Individual cursors organized hierarchically + # Structure: pjsk-cursor... + pjsk-cursor-tree = lib.recurseIntoAttrs (lib.genAttrs [ "ani" "cur" ] (variant: + lib.recurseIntoAttrs (lib.mapAttrs (group: characters: + lib.recurseIntoAttrs (lib.genAttrs characters (character: + mkCursor { + name = "pjsk-cursor-${variant}-${group}-${character}"; + src = ../../assets/${group}-${character}-${variant}.tar.gz; + } + )) + ) groups) + )); + + # Helper to collect all derivations under a tree for symlinkJoin + collectDerivations = v: + if lib.isDerivation v then [ v ] + else lib.concatLists (map collectDerivations (lib.attrValues (builtins.removeAttrs v [ "recurseForDerivations" ]))); + + # Joined cursors organized hierarchically + # Structure: pjsk-cursors (all) + # pjsk-cursors. (all in variant) + # pjsk-cursors.. (all in variant/group) + pjsk-cursors-tree = + let + allJoined = symlinkJoin { + name = "pjsk-cursors"; + paths = collectDerivations pjsk-cursor-tree; + meta = { + description = "Project Sekai cursor theme - All cursors"; + inherit homepage; + }; }; - }; + variants = lib.genAttrs [ "ani" "cur" ] (variant: + let + vPaths = collectDerivations pjsk-cursor-tree.${variant}; + vJoined = symlinkJoin { + name = "pjsk-cursors-${variant}"; + paths = vPaths; + meta = { + description = "Project Sekai cursor theme - All ${variant} cursors"; + inherit homepage; + }; + }; + vGroups = lib.mapAttrs (group: _: + symlinkJoin { + name = "pjsk-cursors-${variant}-${group}"; + paths = collectDerivations pjsk-cursor-tree.${variant}.${group}; + meta = { + description = "Project Sekai cursor theme - ${group} group ${variant} cursors"; + inherit homepage; + }; + } + ) groups; + in + vJoined // lib.recurseIntoAttrs vGroups + ); + in + allJoined // lib.recurseIntoAttrs variants; - makeGroup = group: characters: - builtins.listToAttrs (map (character: { - name = character; - value = makeVariant group character; - }) characters); in { - leoneed = makeGroup "leoneed" [ - "honami" - "ichika" - "miku" - "saki" - "shiho" - ]; - - mmj = makeGroup "mmj" [ - "airi" - "haruka" - "miku" - "minori" - "shizuku" - ]; - - n25 = makeGroup "n25" [ - "ena" - "kanade" - "mafuyu" - "miku" - "mizuki" - ]; - - vbs = makeGroup "vbs" [ - "akito" - "an" - "kohane" - "miku" - "toya" - ]; - - virtualsinger = makeGroup "virtualsinger" [ - "kaito" - "len" - "luka" - "meiko" - "miku" - "rin" - ]; - - wxs = makeGroup "wxs" [ - "emu" - "miku" - "nene" - "rui" - "tsukasa" - ]; + pjsk-cursor = pjsk-cursor-tree; + pjsk-cursors = pjsk-cursors-tree; } \ No newline at end of file