fran/flake.nix

119 lines
2.9 KiB
Nix

{
description = "FRAN - The Flakey R Archiving Network";
inputs = {
nixpkgs.url = "github:dwinkler1/rixpkgs/nixpkgs";
};
outputs = {
self,
nixpkgs,
...
} @ inputs: let
systems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
forAllSystems = nixpkgs.lib.genAttrs systems;
mkR = {
pkgs,
packages,
}: let
juliaPackages = builtins.concatMap (p: (p.passthru or {}).juliaPackages or []) packages;
in
pkgs.buildEnv {
name = "rWithDependencies";
paths =
[
(pkgs.rWrapper.override {inherit packages;})
]
++ (pkgs.lib.optionals (builtins.length juliaPackages > 0) [
(pkgs.julia-bin.withPackages juliaPackages)
]);
};
# The overlay that exposes custom R packages
overlay = final: prev: {
extraRPackageDeps = {
julia-fwildclusterboot = prev.julia-bin.withPackages ["WildBootTests" "StableRNGs"];
};
extraRPackages = import ./packages {inherit final prev;};
};
in {
# Helper to install R with system dependencies if required
lib = {inherit mkR;};
# For imports in other flakes
overlays.default = overlay;
# run these with `nix run .#NAME`
packages = forAllSystems (
system: let
pkgs = import nixpkgs {
inherit system;
overlays = [self.overlays.default];
};
in {
default = mkR {
inherit pkgs;
packages = builtins.attrValues pkgs.extraRPackages;
};
franUpdate = pkgs.writeShellScriptBin "fran-update" (import ./versions pkgs);
}
);
# Run this with `nix develop`
devShells = forAllSystems (
system: let
pkgs = import nixpkgs {
inherit system;
overlays = [self.overlays.default];
};
in {
default = pkgs.mkShell {
packages = with self.packages."${system}"; [
default
franUpdate
];
};
newpkg = pkgs.mkShell {
nativeBuildInputs = [
pkgs.nix-prefetch-github
];
};
}
);
checks = forAllSystems (
system: let
pkgs = import nixpkgs {
inherit system;
overlays = [self.overlays.default];
};
rEnv = mkR {
inherit pkgs;
packages = builtins.attrValues pkgs.extraRPackages;
};
in {
test-script = pkgs.runCommand "test-script" {} ''
mkdir -p $out
cp ${./test/test.R} test.R
${rEnv}/bin/Rscript test.R > $out/result.log
'';
}
);
};
nixConfig = {
extra-substituters = [
"https://rstats-on-nix.cachix.org"
"https://rde.cachix.org"
];
extra-trusted-public-keys = [
"rstats-on-nix.cachix.org-1:vdiiVgocg6WeJrODIqdprZRUrhi1JzhBnXv7aWI6+F0="
"rde.cachix.org-1:yRxQYM+69N/dVER6HNWRjsjytZnJVXLS/+t/LI9d1D4="
];
};
}