From 55c3b4e4dd0184a12563e0690c80d12edda45377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Sun, 6 Jul 2025 02:06:58 -0600 Subject: [PATCH] fix(mkTf2Config): Pass additional arguments to mkDerivation --- tf2/mkTf2Config.nix | 23 +++++++++++++++++------ tf2/packages/huds/hud-db/default.nix | 14 ++++++++++++-- tf2/packages/huds/hud-db/fetch_hud_db.clj | 2 ++ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/tf2/mkTf2Config.nix b/tf2/mkTf2Config.nix index e7271a9..54efdde 100644 --- a/tf2/mkTf2Config.nix +++ b/tf2/mkTf2Config.nix @@ -5,25 +5,29 @@ , custom ? [] , cfg ? [] , maps ? [] -# Extra arguments to pass to stdenv.mkDerivation. +# Extra arguments to pass to stdenv.mkDerivation. Exists for +# backward-compatibility. , env ? {} +, ... }@args: let version-suffix = lib.optionalString (version != null) "-${version}"; name = pname + version-suffix; + # Creates and populates an output under $out/${output}. The parameter + # `output` is a TF2 config output, i.e. "cfg", "custom", or "maps". make-output = output: var: lib.optionalString (var != []) '' mkdir -p "$out/${output}" ${lib.toShellVar "outputList_${output}" var} for i in "''${outputList_${output}[@]}"; do - name="$(stripHash "$i")" - wrapperDir="#''${name}#" + piece="$(stripHash "$i")" + wrapperDir="#''${piece}#" if [ -d "$wrapperDir" ]; then mv "$wrapperDir"/* "$out/${output}/" else - mv "$name" "$out/${output}/$name" + mv "$piece" "$out/${output}/$piece" fi done ''; @@ -34,12 +38,19 @@ let if builtins.length allSrcs == 1 then { src = builtins.head allSrcs; } else { srcs = allSrcs; sourceRoot = "."; }; + + # Arguments unused by mkTf2Config fall through to mkDerivation. + fallthroughArgs = lib.removeAttrs args [ + "custom" + "cfg" + "maps" + "env" + ]; in stdenv.mkDerivation ({ inherit name; inherit pname version; # Adapted from stdenv's _defaultUnpack(). unpackCmd = '' - echo "hello i am unpackcmdjkj" set -e case "$curSrc" in *.vpk) @@ -82,4 +93,4 @@ in stdenv.mkDerivation ({ ${make-output "custom" custom} ${make-output "maps" maps} ''; -} // srcArg // env) +} // srcArg // fallthroughArgs // env) diff --git a/tf2/packages/huds/hud-db/default.nix b/tf2/packages/huds/hud-db/default.nix index 27f98c1..e650514 100644 --- a/tf2/packages/huds/hud-db/default.nix +++ b/tf2/packages/huds/hud-db/default.nix @@ -1,13 +1,23 @@ -{ mkTf2Config, fetchFromGitHub }: +{ mkTf2Config, fetchFromGitHub, lib }: builtins.mapAttrs (name: e: mkTf2Config { pname = name; - env.description = e.description; custom = [ (fetchFromGitHub (builtins.removeAttrs e.src ["__type"] // { name = "${name}-src"; })) ]; + meta = { + inherit (e) description; + # Hud-db currently requires all HUDs to be on GitHub. We can thus + # somewhat-safely assume the homepage. A number of packages have + # explicitly-set homepages, and we do not yet support them. Doing so + # requires patching the fetch-hud-db script, which I intend to do soonish. + homepage = "https://github.com/${e.src.owner}/${e.src.repo}"; + platforms = lib.platforms.all; + # The biggest outstanding issue is recording the license here. Hud-db + # does not track license info, whiuch is a big issue IMO. + }; }) (builtins.fromJSON (builtins.readFile ./hud-db.json)) diff --git a/tf2/packages/huds/hud-db/fetch_hud_db.clj b/tf2/packages/huds/hud-db/fetch_hud_db.clj index 56fbffc..14f7fe5 100644 --- a/tf2/packages/huds/hud-db/fetch_hud_db.clj +++ b/tf2/packages/huds/hud-db/fetch_hud_db.clj @@ -5,6 +5,8 @@ [clojure.tools.logging :as l] [clojure.string :as str])) +;; https://github.com/mastercomfig/hud-db is expected to be cloned to +;; `hud-db-root`. (def hud-db-root (or (System/getenv "HUD_DB_ROOT") (fs/expand-home "~/git/hud-db")))