{ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; }; outputs = { self, nixpkgs }: let inherit (nixpkgs) lib; systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" "armv7l-linux" ]; forAllSystems = f: lib.genAttrs systems (system: f system nixpkgs.legacyPackages.${system}); in { apps = forAllSystems (system: pkgs: let wrapUpdateScript = name: path: { type = "app"; meta.description = "A script to update the ${name} data"; program = let drv = pkgs.writeShellApplication { name = "update-${name}"; text = lib.readFile path; runtimeInputs = lib.pipe path [ lib.readFile (lib.splitString "\n") (x: lib.elemAt x 1) (lib.splitString " ") (lib.drop 4) # "#!nix-shell -i bash -p" (map (dep: pkgs.${dep})) ]; }; in lib.getExe drv; }; in { update-jmdict = wrapUpdateScript "jmdict" ./scripts/update-jmdict.sh; update-kanjidic2 = wrapUpdateScript "kanjidic2" ./scripts/update-kanjidic2.sh; update-radkfile = wrapUpdateScript "radkfile" ./scripts/update-radkfile.sh; }); packages = let edrdgMetadata = { license = [{ shortName = "EDRDG"; fullName = "Electronic Dictionary Research and Development Group General Dictionary Licence"; url = "http://www.csse.monash.edu.au/~jwb/edrdg/licence.html"; }]; maintainers = [ lib.maintainers.h7x4 ]; platforms = lib.platforms.all; }; in forAllSystems (system: pkgs: { jmdict = pkgs.stdenvNoCC.mkDerivation (finalAttrs: { pname = "jmdict"; version = lib.fileContents ./jmdict/version.txt; src = ./jmdict/jmdict.xml; dontUnpack = true; dontBuild = true; installPhase = '' runHook preInstall install -Dm644 "$src" "$out/JMdict.xml" runHook postInstall ''; passthru = { hash = lib.hashFile "sha256" finalAttrs.src; date = lib.fileContents ./jmdict/version.txt; }; meta = edrdgMetadata // { description = "A Japanese-Multilingual Dictionary providing lexical data for japanese words"; homepage = "https://www.edrdg.org/jmdict/j_jmdict.html"; }; }); kanjidic2 = pkgs.stdenvNoCC.mkDerivation (finalAttrs: { pname = "kanjidic2"; version = lib.fileContents ./kanjidic2/version.txt; src = ./kanjidic2/kanjidic2.xml; dontUnpack = true; dontBuild = true; installPhase = '' runHook preInstall install -Dm644 "$src" "$out/kanjidic2.xml" runHook postInstall ''; passthru = { hash = lib.hashFile "sha256" finalAttrs.src; date = lib.pipe ./kanjidic2/version.txt [ lib.fileContents (lib.splitString ".") lib.head ]; }; meta = edrdgMetadata // { description = "A consolidated XML-format kanji database"; homepage = "https://www.edrdg.org/kanjidic/kanjd2index_legacy.html"; }; }); radkfile = pkgs.stdenvNoCC.mkDerivation (finalAttrs: { pname = "radkfile"; version = lib.fileContents ./radkfile/version.txt; src = ./radkfile/radkfile; dontUnpack = true; dontBuild = true; installPhase = '' runHook preInstall install -Dm644 "$src" "$out/RADKFILE" runHook postInstall ''; passthru = { hash = lib.hashFile "sha256" finalAttrs.src; date = lib.fileContents ./radkfile/version.txt; }; meta = edrdgMetadata // { description = "A file providing searchable decompositions of kanji characters"; homepage = "https://www.edrdg.org/krad/kradinf.html"; }; }); tanos-jlpt = pkgs.stdenvNoCC.mkDerivation (finalAttrs: { pname = "tanos-jlpt"; version = "2011"; src = ./tanos-jlpt; dontUnpack = true; dontBuild = true; installPhase = '' runHook preInstall for f in "$src"/*.csv; do install -Dm644 -t "$out" "$f" done runHook postInstall ''; passthru = { hash = lib.pipe finalAttrs.src [ lib.readDir lib.attrNames (lib.filter (lib.hasSuffix ".csv")) (map (filename: lib.hashFile "sha256" /${finalAttrs.src}/${filename})) (lib.concatStringsSep "") (lib.hashString "sha256") ]; date = "2011"; }; meta = { description = "A CSV file containing JLPT-rated Japanese vocabulary"; homepage = "https://www.tanos.co.uk/jlpt/"; license = lib.licenses.cc-by-40; maintainers = [ lib.maintainers.h7x4 ]; platforms = lib.platforms.all; }; }); }); }; }