cataclysmDDA: add very basic framework for packaging mods

Add new namespace 'cataclysmDDA', in which package builders, games, and
mods are listed.

+229 -50
+49
pkgs/games/cataclysm-dda/builder.nix
··· 1 + { stdenvNoCC, lib, type }: 2 + 3 + assert lib.elem type [ 4 + "mod" 5 + "soundpack" 6 + "tileset" 7 + ]; 8 + 9 + { modName, version, src, ... } @ args: 10 + 11 + stdenvNoCC.mkDerivation (args // rec { 12 + pname = args.pname or "cataclysm-dda-${type}-${modName}"; 13 + 14 + modRoot = args.modRoot or "."; 15 + 16 + configurePhase = args.configurePhase or '' 17 + runHook preConfigure 18 + runHook postConfigure 19 + ''; 20 + 21 + buildPhase = args.buildPhase or '' 22 + runHook preBuild 23 + runHook postBuild 24 + ''; 25 + 26 + checkPhase = args.checkPhase or '' 27 + runHook preCheck 28 + runHook postCheck 29 + ''; 30 + 31 + installPhase = let 32 + baseDir = { 33 + mod = "mods"; 34 + soundpack = "sound"; 35 + tileset = "gfx"; 36 + }.${type}; 37 + in args.installPhase or '' 38 + runHook preInstall 39 + destdir="$out/share/cataclysm-dda/${baseDir}" 40 + mkdir -p "$destdir" 41 + cp -R "${modRoot}" "$destdir/${modName}" 42 + runHook postInstall 43 + ''; 44 + 45 + passthru = { 46 + forTiles = true; 47 + forCurses = type == "mod"; 48 + }; 49 + })
+8 -10
pkgs/games/cataclysm-dda/common.nix
··· 1 - { stdenv, fetchFromGitHub, pkgconfig, gettext, ncurses, CoreFoundation 1 + { stdenv, pkgconfig, gettext, ncurses, CoreFoundation 2 2 , tiles, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, freetype, Cocoa 3 3 , debug, runtimeShell 4 4 }: ··· 12 12 tilesDeps = [ SDL2 SDL2_image SDL2_mixer SDL2_ttf freetype ] 13 13 ++ optionals stdenv.isDarwin [ Cocoa ]; 14 14 15 - common = { 15 + common = stdenv.mkDerivation { 16 16 pname = "cataclysm-dda"; 17 17 18 18 nativeBuildInputs = [ pkgconfig ]; ··· 50 50 # src/weather_data.cpp:203:1: fatal error: opening dependency file obj/tiles/weather_data.d: No such file or directory 51 51 # make: *** [Makefile:687: obj/tiles/weather_data.o] Error 1 52 52 enableParallelBuilding = false; 53 + 54 + passthru = { 55 + isTiles = tiles; 56 + isCurses = !tiles; 57 + }; 53 58 54 59 meta = with stdenv.lib; { 55 60 description = "A free, post apocalyptic, zombie infested rogue-like"; ··· 84 89 }; 85 90 86 91 utils = { 87 - fetchFromCleverRaven = { rev, sha256 }: 88 - fetchFromGitHub { 89 - owner = "CleverRaven"; 90 - repo = "Cataclysm-DDA"; 91 - inherit rev sha256; 92 - }; 93 - 94 92 installXDGAppLauncher = '' 95 93 launcher="$out/share/applications/cataclysm-dda.desktop" 96 94 install -D -m 444 data/xdg/*cataclysm-dda.desktop -T "$launcher" ··· 113 111 }; 114 112 in 115 113 116 - { inherit common utils; } 114 + common
+35 -15
pkgs/games/cataclysm-dda/default.nix
··· 1 - { stdenv, callPackage, CoreFoundation 2 - , tiles ? true, Cocoa 3 - , debug ? false 4 - }: 1 + { newScope, darwin }: 5 2 6 3 let 7 - inherit (callPackage ./common.nix { inherit tiles CoreFoundation Cocoa debug; }) common utils; 8 - inherit (utils) fetchFromCleverRaven; 9 - in 4 + callPackage = newScope self; 10 5 11 - stdenv.mkDerivation (common // rec { 12 - version = "0.E-2"; 6 + stable = rec { 7 + tiles = callPackage ./stable.nix { 8 + inherit (darwin.apple_sdk.frameworks) CoreFoundation Cocoa; 9 + }; 13 10 14 - src = fetchFromCleverRaven { 15 - rev = version; 16 - sha256 = "15l6w6lxays7qmsv0ci2ry53asb9an9dh7l7fc13256k085qcg68"; 11 + curses = tiles.override { tiles = false; }; 17 12 }; 18 13 19 - meta = with stdenv.lib.maintainers; common.meta // { 20 - maintainers = common.meta.maintainers ++ [ skeidel ]; 14 + git = rec { 15 + tiles = callPackage ./git.nix { 16 + inherit (darwin.apple_sdk.frameworks) CoreFoundation Cocoa; 17 + }; 18 + 19 + curses = tiles.override { tiles = false; }; 21 20 }; 22 - }) 21 + 22 + lib = callPackage ./lib.nix {}; 23 + 24 + pkgs = callPackage ./pkgs {}; 25 + 26 + self = { 27 + inherit 28 + callPackage 29 + stable 30 + git; 31 + 32 + inherit (lib) 33 + buildMod 34 + buildSoundPack 35 + buildTileSet 36 + wrapCDDA; 37 + 38 + inherit pkgs; 39 + }; 40 + in 41 + 42 + self
+28 -19
pkgs/games/cataclysm-dda/git.nix
··· 1 - { stdenv, callPackage, CoreFoundation 1 + { lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA 2 2 , tiles ? true, Cocoa 3 3 , debug ? false 4 4 }: 5 5 6 6 let 7 - inherit (stdenv.lib) substring; 8 - inherit (callPackage ./common.nix { inherit tiles CoreFoundation Cocoa debug; }) common utils; 9 - inherit (utils) fetchFromCleverRaven; 10 - in 7 + common = callPackage ./common.nix { 8 + inherit tiles CoreFoundation Cocoa debug; 9 + }; 11 10 12 - stdenv.mkDerivation (common // rec { 13 - pname = common.pname + "-git"; 14 - version = "2019-11-22"; 11 + self = common.overrideAttrs (common: rec { 12 + pname = common.pname + "-git"; 13 + version = "2019-11-22"; 14 + 15 + src = fetchFromGitHub { 16 + owner = "CleverRaven"; 17 + repo = "Cataclysm-DDA"; 18 + rev = "a6c8ece992bffeae3788425dd4b3b5871e66a9cd"; 19 + sha256 = "0ww2q5gykxm802z1kffmnrfahjlx123j1gfszklpsv0b1fccm1ab"; 20 + }; 21 + 22 + makeFlags = common.makeFlags ++ [ 23 + "VERSION=git-${version}-${lib.substring 0 8 src.rev}" 24 + ]; 15 25 16 - src = fetchFromCleverRaven { 17 - rev = "a6c8ece992bffeae3788425dd4b3b5871e66a9cd"; 18 - sha256 = "0ww2q5gykxm802z1kffmnrfahjlx123j1gfszklpsv0b1fccm1ab"; 19 - }; 26 + passthru = common.passthru // { 27 + pkgs = pkgs.override { build = self; }; 28 + withMods = wrapCDDA self; 29 + }; 20 30 21 - makeFlags = common.makeFlags ++ [ 22 - "VERSION=git-${version}-${substring 0 8 src.rev}" 23 - ]; 31 + meta = with lib.maintainers; common.meta // { 32 + maintainers = common.meta.maintainers ++ [ rardiol ]; 33 + }; 34 + }); 35 + in 24 36 25 - meta = with stdenv.lib.maintainers; common.meta // { 26 - maintainers = common.meta.maintainers ++ [ rardiol ]; 27 - }; 28 - }) 37 + self
+17
pkgs/games/cataclysm-dda/lib.nix
··· 1 + { callPackage }: 2 + 3 + { 4 + buildMod = callPackage ./builder.nix { 5 + type = "mod"; 6 + }; 7 + 8 + buildSoundPack = callPackage ./builder.nix { 9 + type = "soundpack"; 10 + }; 11 + 12 + buildTileSet = callPackage ./builder.nix { 13 + type = "tileset"; 14 + }; 15 + 16 + wrapCDDA = callPackage ./wrapper.nix {}; 17 + }
+24
pkgs/games/cataclysm-dda/pkgs/default.nix
··· 1 + { lib, callPackage, build ? null }: 2 + 3 + let 4 + pkgs = { 5 + mod = { 6 + }; 7 + 8 + soundpack = { 9 + }; 10 + 11 + tileset = { 12 + }; 13 + }; 14 + 15 + availableForBuild = _: mod: 16 + if isNull build then 17 + true 18 + else if build.isTiles then 19 + mod.forTiles 20 + else 21 + mod.forCurses; 22 + in 23 + 24 + lib.mapAttrs (_: mod: lib.filterAttrs availableForBuild mod) pkgs
+32
pkgs/games/cataclysm-dda/stable.nix
··· 1 + { lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA 2 + , tiles ? true, Cocoa 3 + , debug ? false 4 + }: 5 + 6 + let 7 + common = callPackage ./common.nix { 8 + inherit tiles CoreFoundation Cocoa debug; 9 + }; 10 + 11 + self = common.overrideAttrs (common: rec { 12 + version = "0.E-2"; 13 + 14 + src = fetchFromGitHub { 15 + owner = "CleverRaven"; 16 + repo = "Cataclysm-DDA"; 17 + rev = version; 18 + sha256 = "15l6w6lxays7qmsv0ci2ry53asb9an9dh7l7fc13256k085qcg68"; 19 + }; 20 + 21 + passthru = common.passthru // { 22 + pkgs = pkgs.override { build = self; }; 23 + withMods = wrapCDDA self; 24 + }; 25 + 26 + meta = with lib.maintainers; common.meta // { 27 + maintainers = common.meta.maintainers ++ [ skeidel ]; 28 + }; 29 + }); 30 + in 31 + 32 + self
+32
pkgs/games/cataclysm-dda/wrapper.nix
··· 1 + { lib, symlinkJoin, makeWrapper }: 2 + 3 + unwrapped: 4 + 5 + pkgsSpec: 6 + 7 + let 8 + mods = if lib.isFunction pkgsSpec 9 + then pkgsSpec unwrapped.pkgs 10 + else pkgsSpec; 11 + in 12 + 13 + if builtins.length mods == 0 14 + then unwrapped 15 + else symlinkJoin { 16 + name = unwrapped.name + "-with-mods"; 17 + 18 + paths = [ unwrapped ] ++ mods; 19 + 20 + nativeBuildInputs = [ makeWrapper ]; 21 + 22 + postBuild = '' 23 + if [ -x $out/bin/cataclysm ]; then 24 + wrapProgram $out/bin/cataclysm \ 25 + --add-flags "--datadir $out/share/cataclysm-dda/" 26 + fi 27 + if [ -x $out/bin/cataclysm-tiles ]; then 28 + wrapProgram $out/bin/cataclysm-tiles \ 29 + --add-flags "--datadir $out/share/cataclysm-dda/" 30 + fi 31 + ''; 32 + }
+4 -6
pkgs/top-level/all-packages.nix
··· 23864 23864 inherit (darwin.apple_sdk.frameworks) Carbon CoreServices; 23865 23865 }; 23866 23866 23867 - cataclysm-dda = callPackage ../games/cataclysm-dda { 23868 - inherit (darwin.apple_sdk.frameworks) CoreFoundation Cocoa; 23869 - }; 23867 + cataclysmDDA = callPackage ../games/cataclysm-dda { }; 23870 23868 23871 - cataclysm-dda-git = callPackage ../games/cataclysm-dda/git.nix { 23872 - inherit (darwin.apple_sdk.frameworks) CoreFoundation Cocoa; 23873 - }; 23869 + cataclysm-dda = cataclysmDDA.stable.tiles; 23870 + 23871 + cataclysm-dda-git = cataclysmDDA.git.tiles; 23874 23872 23875 23873 chessdb = callPackage ../games/chessdb { }; 23876 23874