Let the user override dfVersion in dwarf-fortress-full

This commit is contained in:
Morgan Jones 2018-07-15 05:38:30 +00:00
parent f14d3b4795
commit 7a5521537a
2 changed files with 50 additions and 14 deletions

View File

@ -6,26 +6,48 @@
# #
# If this is your first time here, you should probably install the dwarf-fortress-full package, # If this is your first time here, you should probably install the dwarf-fortress-full package,
# for instance with: # for instance with:
# `environment.systemPackages = [ pkgs.dwarf-fortress-packages.dwarf-fortress-full ];` #
# environment.systemPackages = [ pkgs.dwarf-fortress-packages.dwarf-fortress-full ];
# #
# You can adjust its settings by using override, or compile your own package by # You can adjust its settings by using override, or compile your own package by
# using the other packages here. Take a look at lazy-pack.nix to get an idea of # using the other packages here.
# how. #
# For example, you can enable the FPS indicator, disable the intro, pick a
# theme other than phoebus (the default for dwarf-fortress-full), _and_ use
# an older version with something like:
#
# environment.systemPackages = [
# (pkgs.dwarf-fortress-packages.dwarf-fortress-full.override {
# dfVersion = "0.44.11";
# theme = "cla";
# enableIntro = false;
# enableFPS = true;
# })
# ]
#
# Take a look at lazy-pack.nix to see all the other options.
# #
# You will find the configuration files in ~/.local/share/df_linux/data/init. If # You will find the configuration files in ~/.local/share/df_linux/data/init. If
# you un-symlink them and edit, then the scripts will avoid overwriting your # you un-symlink them and edit, then the scripts will avoid overwriting your
# changes on later launches, but consider extending the wrapper with your # changes on later launches, but consider extending the wrapper with your
# desired options instead. # desired options instead.
#
# Although both dfhack and dwarf therapist are included in the lazy pack, you with lib;
# can only use one at a time. DFHack does have therapist-like features, so this
# may or may not be a problem.
let let
callPackage = pkgs.newScope self; callPackage = pkgs.newScope self;
# The latest Dwarf Fortress version. Maintainers: when a new version comes
# out, ensure that (unfuck|dfhack|twbt) are all up to date before changing
# this.
latestVersion = "0.44.12";
# Converts a version to a package name.
versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}";
# A map of names to each Dwarf Fortress package we know about.
df-games = lib.listToAttrs (map (dfVersion: { df-games = lib.listToAttrs (map (dfVersion: {
name = "dwarf-fortress_${lib.replaceStrings ["."] ["_"] dfVersion}"; name = versionToName dfVersion;
value = value =
let let
# I can't believe this syntax works. Spikes of Nix code indeed... # I can't believe this syntax works. Spikes of Nix code indeed...
@ -59,9 +81,14 @@ let
self = rec { self = rec {
df-hashes = builtins.fromJSON (builtins.readFile ./game.json); df-hashes = builtins.fromJSON (builtins.readFile ./game.json);
dwarf-fortress = df-games.dwarf-fortress_0_44_12;
dwarf-fortress = getAttr (versionToName latestVersion) df-games;
dwarf-fortress-full = callPackage ./lazy-pack.nix { }; dwarf-fortress-full = callPackage ./lazy-pack.nix {
inherit versionToName;
inherit latestVersion;
inherit df-games;
};
soundSense = callPackage ./soundsense.nix { }; soundSense = callPackage ./soundsense.nix { };

View File

@ -1,8 +1,9 @@
{ stdenvNoCC, lib, buildEnv { stdenvNoCC, lib, buildEnv, callPackage
, dwarf-fortress, themes , df-games, themes, latestVersion, versionToName
, dfVersion ? latestVersion
# This package should, at any given time, provide an opinionated "optimal" # This package should, at any given time, provide an opinionated "optimal"
# DF experience. It's the equivalent of the Lazy Newbie Pack, that is, and # DF experience. It's the equivalent of the Lazy Newbie Pack, that is, and
# should contain every utility available. # should contain every utility available unless you disable them.
, enableDFHack ? stdenvNoCC.isLinux , enableDFHack ? stdenvNoCC.isLinux
, enableTWBT ? enableDFHack , enableTWBT ? enableDFHack
, enableSoundSense ? true , enableSoundSense ? true
@ -16,6 +17,14 @@
, enableFPS ? false , enableFPS ? false
}: }:
with lib;
let
dfGame = versionToName dfVersion;
dwarf-fortress = if hasAttr dfGame df-games
then getAttr dfGame df-games
else throw "Unknown Dwarf Fortress version: ${dfVersion}";
in
buildEnv { buildEnv {
name = "dwarf-fortress-full"; name = "dwarf-fortress-full";
paths = [ paths = [
@ -28,7 +37,7 @@ buildEnv {
meta = with stdenvNoCC.lib; { meta = with stdenvNoCC.lib; {
description = "An opinionated wrapper for Dwarf Fortress"; description = "An opinionated wrapper for Dwarf Fortress";
maintainers = with maintainers; [ Baughn ]; maintainers = with maintainers; [ Baughn numinit ];
license = licenses.mit; license = licenses.mit;
platforms = platforms.all; platforms = platforms.all;
homepage = https://github.com/NixOS/nixpkgs/; homepage = https://github.com/NixOS/nixpkgs/;