From 9d233c7b047c4870eb3064e5a3f909d27809adb8 Mon Sep 17 00:00:00 2001 From: imnyang Date: Sat, 25 Apr 2026 13:22:31 +0900 Subject: [PATCH] wow > Co-authored-by: paring --- pkgs/pjsk-cursor/default.nix | 214 +++++++++++++++++++++++------------ 1 file changed, 139 insertions(+), 75 deletions(-) diff --git a/pkgs/pjsk-cursor/default.nix b/pkgs/pjsk-cursor/default.nix index 8e665c7..cb109bb 100644 --- a/pkgs/pjsk-cursor/default.nix +++ b/pkgs/pjsk-cursor/default.nix @@ -1,95 +1,159 @@ -{ stdenv }: +{ + lib, + stdenv, + symlinkJoin, +}: let homepage = "https://colorfulstage.com/media/download/"; + pnameBase = "pjsk-cursor"; + version = "1.0.0"; - mkCursor = { name, src }: - stdenv.mkDerivation rec { - inherit name src; - version = "1.0.0"; + meta = { + description = "Project Sekai cursor theme"; + inherit homepage; + }; + + mkCursor = + { pname, src }: + stdenv.mkDerivation { + inherit + pname + src + version + meta + ; installPhase = '' runHook preInstall - install -dm 0755 $out/share/icons/${name} + install -dm 0755 $out/share/icons/${pname} - cp -rf . $out/share/icons/${name} + cp -rf . $out/share/icons/${pname} runHook postInstall ''; - meta = { - description = "Project Sekai cursor theme"; - inherit homepage; - }; }; - makeVariant = group: character: - { - ani = mkCursor { - name = "pjsk-cursor-${group}-${character}-ani"; - src = ../../assets/${group}-${character}-ani.tar.gz; - }; + makeVariant = + group: character: + let + pnameVariant = "${pnameBase}-${group}-${character}"; + variants = { + ani = mkCursor { + pname = "${pnameVariant}-ani"; + src = ../../assets/${group}-${character}-ani.tar.gz; + }; - cur = mkCursor { - name = "pjsk-cursor-${group}-${character}-cur"; - src = ../../assets/${group}-${character}-cur.tar.gz; + cur = mkCursor { + pname = "${pnameVariant}-cur"; + src = ../../assets/${group}-${character}-cur.tar.gz; + }; }; + in + symlinkJoin { + pname = pnameVariant; + inherit version meta; + + paths = lib.attrsets.attrValues variants; + passthru = variants; }; - makeGroup = group: characters: - builtins.listToAttrs (map (character: { - name = character; - value = makeVariant group character; - }) characters); + makeGroup = + group: characters: + let + pname = "${pnameBase}-${group}"; + cursors = builtins.listToAttrs ( + map (character: { + name = character; + value = makeVariant group character; + }) characters + ); + + mkCursorVariantJoin = + pname: selector: + symlinkJoin { + inherit pname version meta; + + paths = lib.mapAttrsToList (name: selector) cursors; + }; + + in + symlinkJoin { + inherit pname version meta; + + paths = lib.attrsets.attrValues cursors; + passthru = cursors // { + cur = mkCursorVariantJoin "${pname}-cur" (cursor: cursor.cur); + ani = mkCursorVariantJoin "${pname}-ani" (cursor: cursor.ani); + }; + }; + groups = { + 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" + ]; + }; + + mkGroupVariantJoin = + pname: selector: + symlinkJoin { + inherit pname version meta; + + paths = lib.mapAttrsToList (name: selector) groups; + }; 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" - ]; -} \ No newline at end of file +symlinkJoin { + pname = pnameBase; + inherit version meta; + paths = lib.attrsets.attrValues groups; + passthru = groups // { + cur = mkGroupVariantJoin "${pnameBase}-cur" (group: group.cur); + ani = mkGroupVariantJoin "${pnameBase}-ani" (group: group.ani); + }; +}