{
  stdenv
, lib
, rWrapper
, rPackages
, fontconfig
, dejavu_fonts
, liberation_ttf
, noto-fonts
, makeFontsConf
, makeFontsCache
, jq
, fetchFromGitHub
, writeText
, runCommand
, glibcLocales
}:
{
# The two results to be compared
  dataset
, script
, extraRPackages ? []
}:
with lib;
let
  scalesPatched = with rPackages; buildRPackage {
    name = "scales";
    src = fetchFromGitHub {
      owner = "mikmart";
      repo = "scales";
      #ref = "label-bytes";
      rev = "fa7d91c765b6b5d2f682c7c22e0478d96c2ea76c";
      sha256 = "10dsyxp9pxzdmg04xpnrxqhc4qfhbkr3jhx8whfr7z27wgfrr1n3";
    };
    propagatedBuildInputs = [ farver labeling lifecycle munsell R6 RColorBrewer viridisLite ];
    nativeBuildInputs = [ farver labeling lifecycle munsell R6 RColorBrewer viridisLite ];
  };
  customR = rWrapper.override {
    packages = with rPackages; [ scalesPatched tidyverse viridis egg
      Cairo extrafont ] ++ extraRPackages;
  };
  myFonts = [
    dejavu_fonts
    #noto-fonts
    #liberation_ttf
  ];
  cacheConf =
  let
    cache = makeFontsCache { fontDirectories = myFonts; };
  in
  writeText "fc-00-nixos-cache.conf" ''
    
    
    
      
      ${concatStringsSep "\n" (map (font: "${font}") myFonts)}
      ${optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
      
      ${cache}
      ''}
    
  '';
  # default fonts configuration file
  # priority 52
  defaultFontsConf =
    let genDefault = fonts: name:
      optionalString (fonts != []) ''
        
          ${name}
          
          ${concatStringsSep ""
          (map (font: ''
            ${font}
          '') fonts)}
          
        
      '';
    in
    writeText "fc-52-nixos-default-fonts.conf" ''
    
    
    
      
      ${genDefault [ "DejaVu Sans" ]      "sans-serif"}
      ${genDefault [ "DejaVu Serif" ]     "serif"}
      ${genDefault [ "DejaVu Sans Mono" ] "monospace"}
      ${genDefault [ "Noto Color Emoji"]  "emoji"}
    
  '';
  fontConfPath =
  let
    fixedConf = runCommand "fonts-fixed.conf" {
      preferLocalBuild = true;
    } ''
      head --lines=-2 ${fontconfig.out}/etc/fonts/fonts.conf >> $out
      cat >> $out << 'EOF'
      
      conf.d
      EOF
      tail -2 ${fontconfig.out}/etc/fonts/fonts.conf >> $out
    '';
  in
  runCommand "fontconfig-conf" {
    preferLocalBuild = true;
  } ''
    dst=$out/etc/fonts/conf.d
    mkdir -p $dst
    # fonts.conf
    ln -s ${fixedConf} $dst/../fonts.conf
    # fontconfig default config files
    ln -s ${fontconfig.out}/etc/fonts/conf.d/*.conf \
          $dst/
    # 00-nixos-cache.conf
    ln -s ${cacheConf}  $dst/00-nixos-cache.conf
    # 52-nixos-default-fonts.conf
    ln -s ${defaultFontsConf} $dst/52-nixos-default-fonts.conf
  '';
in stdenv.mkDerivation {
  name = "plot";
  buildInputs = [ customR jq fontconfig glibcLocales ];
  preferLocalBuild = true;
  dontPatchShebangs = true;
  phases = [ "installPhase" ];
  installPhase = ''
    export FONTCONFIG_PATH=${fontConfPath}/etc/fonts/
    export LANG=en_US.UTF-8
    mkdir -p $out
    cd $out
    dataset=$(readlink -f ${dataset}/dataset)
    ln -s $dataset input
    Rscript --vanilla ${script} "$dataset" "$out"
    # HACK: replace the \minus for a \hyphen to keep the file paths intact, so
    # they can be copied to the terminal directly. The StandardEncoding is not
    # working (AdobeStd.enc).
    find "$out" -name '*.pdf' | xargs -l1 sed -i 's.45/minus.45/hyphen.g'
    if [ "''${dataset##*.}" == gz ]; then
      gunzip --stdout $dataset
    else
      cat $dataset
    fi | jq -c .total_time |\
      awk '{s+=$1} END {printf "%f\n", s/60}' > total_job_time_minutes
  '';
}