anchor.diff: -{ fetchFromGitHub, lib, stdenv, makeDesktopItem, openal, pkg-config, libogg,
  -  libvorbis, SDL, SDL_image, makeWrapper, zlib, file,
  -  client ? true, server ? true }:
  -
  -with lib;
  +{ lib
  +, stdenv
  +, fetchFromGitHub
  +, makeDesktopItem
  +, copyDesktopItems
  +, openal
  +, pkg-config
  +, libogg
  +, libvorbis
  +, SDL2
  +, SDL2_image
  +, makeWrapper
  +, zlib
  +, file
  +, client ? true, server ? true
  +}:
   
   stdenv.mkDerivation rec {
  -
  -  # master branch has legacy (1.2.0.2) protocol 1201 and gcc 6 fix.
     pname = "assaultcube";
  -  version = "unstable-2018-05-20";
  +  version = "1.3.0.2";
   
     src = fetchFromGitHub {
       owner = "assaultcube";
       repo  = "AC";
  -    rev = "f58ea22b46b5013a520520670434b3c235212371";
  -    sha256 = "1vfn3d55vmmipdykrcfvgk6dddi9y95vlclsliirm7jdp20f15hd";
  +    rev = "v${version}";
  +    sha256 = "0qv339zw9q5q1y7bghca03gw7z4v89sl4lbr6h3b7siy08mcwiz9";
     };
   
  -  nativeBuildInputs = [ makeWrapper pkg-config ];
  +  nativeBuildInputs = [
  +    makeWrapper
  +    pkg-config
  +    copyDesktopItems
  +  ];
   
  -  buildInputs = [ file zlib ] ++ optionals client [ openal SDL SDL_image libogg libvorbis ];
  +  buildInputs = [
  +    file
  +    zlib
  +  ] ++ lib.optionals client [
  +    openal
  +    SDL2
  +    SDL2_image
  +    libogg
  +    libvorbis
  +  ];
   
  -  targets = (optionalString server "server") + (optionalString client " client");
  +  targets = (lib.optionalString server "server") + (lib.optionalString client " client");
     makeFlags = [ "-C source/src" "CXX=${stdenv.cc.targetPrefix}c++" targets ];
   
  -  desktop = makeDesktopItem {
  -    name = "AssaultCube";
  -    desktopName = "AssaultCube";
  -    comment = "A multiplayer, first-person shooter game, based on the CUBE engine. Fast, arcade gameplay.";
  -    genericName = "First-person shooter";
  -    categories = [ "Game" "ActionGame" "Shooter" ];
  -    icon = "assaultcube.png";
  -    exec = pname;
  -  };
  +  desktopItems = [
  +    (makeDesktopItem {
  +      name = pname;
  +      desktopName = "AssaultCube";
  +      comment = "A multiplayer, first-person shooter game, based on the CUBE engine. Fast, arcade gameplay.";
  +      genericName = "First-person shooter";
  +      categories = [ "Game" "ActionGame" "Shooter" ];
  +      icon = "assaultcube";
  +      exec = pname;
  +    })
  +  ];
   
     gamedatadir = "/share/games/${pname}";
   
     installPhase = ''
  +    runHook preInstall
   
       bindir=$out/bin
   
  
positive.code:     if (test -e source/src/ac_client) then
        cp source/src/ac_client $bindir
        mkdir -p $out/share/applications
        cp ${desktop}/share/applications/* $out/share/applications
        install -Dpm644 packages/misc/icon.png $out/share/icons/assaultcube.png
        install -Dpm644 packages/misc/icon.png $out/share/pixmaps/assaultcube.png
  
  
negative.code:       makeWrapper $out/bin/ac_server $out/bin/${pname}-server \
          --chdir "$out/$gamedatadir" --add-flags "-Cconfig/servercmdline.txt"
      fi
  
      runHook postInstall
    '';
  
    meta = with lib; {
      description = "Fast and fun first-person-shooter based on the Cube fps";
      homepage = "https://assault.cubers.net";
      platforms = platforms.linux; # should work on darwin with a little effort.
      license = licenses.unfree;
      maintainers = with maintainers; [ darkonion0 ];
    };
  }
  