{
stdenv
, 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 stdenv.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="${dataset}"
ln -s $dataset input
Rscript --vanilla ${script} ${dataset} "$out"
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
'';
}