summary refs log blame commit diff
path: root/pkgs/games/dwarf-fortress/default.nix
blob: 0664af117e1ee6450c15b6643cb8c21b2d6e009b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                                               





                                                                                               
                    

                                                                                    

                                                                               















                                                                           




                                                                                

         

   
                                   
 


                                                                            
                            



                                                                                      





                                                                                                      
                                                                
                                               
                                   















                                                                                                      
                                 

                             


                                                                     
                                                     
          




                                        

                        
                                          
        



                                                                  

                                                                              
                                                                    
                                     

                                                            
 
                                                       
                                                   
      
 

                                                  

                                                       


                                                     
 
                   
                                   
                           
    
 
                   
{ pkgs, stdenv, stdenvNoCC, gccStdenv, lib, recurseIntoAttrs }:

# To whomever it may concern:
#
# This directory menaces with spikes of Nix code. It is terrifying.
#
# If this is your first time here, you should probably install the dwarf-fortress-full package,
# for instance with:
#
# environment.systemPackages = [ pkgs.dwarf-fortress-packages.dwarf-fortress-full ];
#
# You can adjust its settings by using override, or compile your own package by
# using the other packages here.
#
# 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 un-symlink them and edit, then the scripts will avoid overwriting your
# changes on later launches, but consider extending the wrapper with your
# desired options instead.

with lib;

let
  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.47.04";

  # Converts a version to a package name.
  versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}";

  dwarf-therapist-original = pkgs.qt5.callPackage ./dwarf-therapist {
    texlive = pkgs.texlive.combine {
      inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
    };
  };

  # A map of names to each Dwarf Fortress package we know about.
  df-games = lib.listToAttrs (map (dfVersion: {
    name = versionToName dfVersion;
    value =
      let
        # I can't believe this syntax works. Spikes of Nix code indeed...
        dwarf-fortress = callPackage ./game.nix {
          inherit dfVersion;
          inherit dwarf-fortress-unfuck;
        };

        # unfuck is linux-only right now, we will only use it there.
        dwarf-fortress-unfuck = if stdenv.isLinux then callPackage ./unfuck.nix { inherit dfVersion; }
                                else null;

        twbt = callPackage ./twbt { inherit dfVersion; };

        dfhack = callPackage ./dfhack {
          inherit (pkgs.perlPackages) XMLLibXML XMLLibXSLT;
          inherit dfVersion twbt;
          stdenv = gccStdenv;
        };

        dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix {
          inherit dwarf-fortress;
          dwarf-therapist = dwarf-therapist-original;
        };
      in
      callPackage ./wrapper {
        inherit (self) themes;

        dwarf-fortress = dwarf-fortress;
        twbt = twbt;
        dfhack = dfhack;
        dwarf-therapist = dwarf-therapist;
      };
  }) (lib.attrNames self.df-hashes));

  self = rec {
    df-hashes = builtins.fromJSON (builtins.readFile ./game.json);

    # Aliases for the latest Dwarf Fortress and the selected Therapist install
    dwarf-fortress = getAttr (versionToName latestVersion) df-games;
    inherit dwarf-therapist-original;
    dwarf-therapist = dwarf-fortress.dwarf-therapist;
    dwarf-fortress-original = dwarf-fortress.dwarf-fortress;

    dwarf-fortress-full = callPackage ./lazy-pack.nix {
      inherit df-games versionToName latestVersion;
    };

    soundSense = callPackage ./soundsense.nix { };

    legends-browser = callPackage ./legends-browser {};

    themes = recurseIntoAttrs (callPackage ./themes {
      stdenv = stdenvNoCC;
    });

    # Theme aliases
    phoebus-theme = themes.phoebus;
    cla-theme = themes.cla;
  };

in self // df-games