From 109adedd62e705cb1187712cdba3b086bb5b17ad Mon Sep 17 00:00:00 2001 From: Mitsuhiro Nakamura Date: Thu, 12 Nov 2020 10:11:55 +0900 Subject: [PATCH 1/4] cataclysmDDA: filter out things that do not have for{Tiles,Curses} attrs --- pkgs/games/cataclysm-dda/pkgs/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/games/cataclysm-dda/pkgs/default.nix b/pkgs/games/cataclysm-dda/pkgs/default.nix index 6f3df09a786..2c8fe3f14d0 100644 --- a/pkgs/games/cataclysm-dda/pkgs/default.nix +++ b/pkgs/games/cataclysm-dda/pkgs/default.nix @@ -19,9 +19,11 @@ let if isNull build then true else if build.isTiles then - mod.forTiles + mod.forTiles or false + else if build.isCurses then + mod.forCurses or false else - mod.forCurses; + false; in lib.makeExtensible (_: pkgs') From 19deef39c7ad25219a9a08d772fcb8713e437b08 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Nakamura Date: Thu, 12 Nov 2020 10:13:19 +0900 Subject: [PATCH 2/4] cataclysmDDA: refactoring --- pkgs/games/cataclysm-dda/pkgs/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/games/cataclysm-dda/pkgs/default.nix b/pkgs/games/cataclysm-dda/pkgs/default.nix index 2c8fe3f14d0..39abad809c5 100644 --- a/pkgs/games/cataclysm-dda/pkgs/default.nix +++ b/pkgs/games/cataclysm-dda/pkgs/default.nix @@ -13,9 +13,9 @@ let }; }; - pkgs' = lib.mapAttrs (_: mod: lib.filterAttrs availableForBuild mod) pkgs; + pkgs' = lib.mapAttrs (_: mods: lib.filterAttrs isAvailable mods) pkgs; - availableForBuild = _: mod: + isAvailable = _: mod: if isNull build then true else if build.isTiles then From 0c02a5599ca57497847dbda9f23058b34a6cdd9e Mon Sep 17 00:00:00 2001 From: Mitsuhiro Nakamura Date: Thu, 12 Nov 2020 10:48:19 +0900 Subject: [PATCH 3/4] cataclysmDDA: add utility function `attachPkgs` --- pkgs/games/cataclysm-dda/default.nix | 3 ++- pkgs/games/cataclysm-dda/git.nix | 9 ++------ pkgs/games/cataclysm-dda/lib.nix | 31 +++++++++++++++++++++++++++- pkgs/games/cataclysm-dda/stable.nix | 9 ++------ 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/pkgs/games/cataclysm-dda/default.nix b/pkgs/games/cataclysm-dda/default.nix index ada212ea7e9..1649cd031a4 100644 --- a/pkgs/games/cataclysm-dda/default.nix +++ b/pkgs/games/cataclysm-dda/default.nix @@ -33,7 +33,8 @@ let buildMod buildSoundPack buildTileSet - wrapCDDA; + wrapCDDA + attachPkgs; inherit pkgs; }; diff --git a/pkgs/games/cataclysm-dda/git.nix b/pkgs/games/cataclysm-dda/git.nix index 36f37f7aeba..9af90481acd 100644 --- a/pkgs/games/cataclysm-dda/git.nix +++ b/pkgs/games/cataclysm-dda/git.nix @@ -1,4 +1,4 @@ -{ lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA +{ lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA, attachPkgs , tiles ? true, Cocoa , debug ? false , useXdgDir ? false @@ -26,11 +26,6 @@ let "VERSION=git-${version}-${lib.substring 0 8 src.rev}" ]; - passthru = common.passthru // { - pkgs = pkgs.override { build = self; }; - withMods = wrapCDDA self; - }; - meta = common.meta // { maintainers = with lib.maintainers; common.meta.maintainers ++ [ rardiol ]; @@ -38,4 +33,4 @@ let }); in -self +attachPkgs pkgs self diff --git a/pkgs/games/cataclysm-dda/lib.nix b/pkgs/games/cataclysm-dda/lib.nix index 02678ed0228..f2b38a16aa5 100644 --- a/pkgs/games/cataclysm-dda/lib.nix +++ b/pkgs/games/cataclysm-dda/lib.nix @@ -1,6 +1,6 @@ { callPackage }: -{ +rec { buildMod = callPackage ./builder.nix { type = "mod"; }; @@ -14,4 +14,33 @@ }; wrapCDDA = callPackage ./wrapper.nix {}; + + # Required to fix `pkgs` and `withMods` attrs after applying `overrideAttrs`. + # + # Example: + # let + # myBuild = cataclysmDDA.jenkins.latest.tiles.overrideAttrs (_: { + # x = "hello"; + # }); + # + # # This refers to the derivation before overriding! So, `badExample.x` is not accessible. + # badExample = myBuild.withMods (_: []); + # + # # `myBuild` is correctly referred by `withMods` and `goodExample.x` is accessible. + # goodExample = let + # inherit (cataclysmDDA) attachPkgs pkgs; + # in + # (attachPkgs pkgs myBuild).withMods (_: []); + # in + # goodExample.x # returns "hello" + attachPkgs = pkgs: super: + let + self = super.overrideAttrs (old: { + passthru = old.passthru // { + pkgs = pkgs.override { build = self; }; + withMods = wrapCDDA self; + }; + }); + in + self; } diff --git a/pkgs/games/cataclysm-dda/stable.nix b/pkgs/games/cataclysm-dda/stable.nix index 076a33a9e89..b83184865fb 100644 --- a/pkgs/games/cataclysm-dda/stable.nix +++ b/pkgs/games/cataclysm-dda/stable.nix @@ -1,4 +1,4 @@ -{ lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA +{ lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA, attachPkgs , tiles ? true, Cocoa , debug ? false , useXdgDir ? false @@ -19,11 +19,6 @@ let sha256 = "15l6w6lxays7qmsv0ci2ry53asb9an9dh7l7fc13256k085qcg68"; }; - passthru = common.passthru // { - pkgs = pkgs.override { build = self; }; - withMods = wrapCDDA self; - }; - meta = common.meta // { maintainers = with lib.maintainers; common.meta.maintainers ++ [ skeidel ]; @@ -31,4 +26,4 @@ let }); in -self +attachPkgs pkgs self From cdfbdb0b2c0eab92079d1e477a93781d7b9e2cc2 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Nakamura Date: Thu, 12 Nov 2020 12:37:49 +0900 Subject: [PATCH 4/4] doc: add usage for `cataclysmDDA.attachPkgs` --- .../packages/cataclysm-dda.section.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/doc/builders/packages/cataclysm-dda.section.md b/doc/builders/packages/cataclysm-dda.section.md index ae2ee56a010..ae7a05005e7 100644 --- a/doc/builders/packages/cataclysm-dda.section.md +++ b/doc/builders/packages/cataclysm-dda.section.md @@ -34,6 +34,41 @@ cataclysm-dda.override { } ``` +## Important note for overriding packages + +After applying `overrideAttrs`, you need to fix `passthru.pkgs` and +`passthru.withMods` attributes either manually or by using `attachPkgs`: + +```nix +let + # You enabled parallel building. + myCDDA = cataclysm-dda-git.overrideAttrs (_: { + enableParallelBuilding = true; + }); + + # Unfortunately, this refers to the package before overriding and + # parallel building is still disabled. + badExample = myCDDA.withMods (_: []); + + inherit (cataclysmDDA) attachPkgs pkgs wrapCDDA; + + # You can fix it by hand + goodExample1 = myCDDA.overrideAttrs (old: { + passthru = old.passthru // { + pkgs = pkgs.override { build = goodExample1; }; + withMods = wrapCDDA goodExample1; + }; + }); + + # or by using a helper function `attachPkgs`. + goodExample2 = attachPkgs pkgs myCDDA; +in + +# badExample # parallel building disabled +# goodExample1.withMods (_: []) # parallel building enabled +goodExample2.withMods (_: []) # parallel building enabled +``` + ## Customizing with mods To install Cataclysm DDA with mods of your choice, you can use `withMods`