chore(overlays): trivial builder wrappers

This commit is contained in:
arcnmx 2024-06-13 14:59:35 -07:00
parent 7744e4389d
commit 7017c8c5f9
4 changed files with 134 additions and 13 deletions

View file

@ -1,7 +1,32 @@
{gensokyo-zone, ...}: let
{
config,
system,
gensokyo-zone,
lib,
...
}: let
inherit (gensokyo-zone.lib) mkAlmostForce;
inherit (lib.options) mkOption;
inherit (lib.modules) mkIf mkDefault;
inherit (lib.attrsets) optionalAttrs;
inherit (gensokyo-zone.self) overlays;
cfg = config.nixpkgs;
hostPlatform = lib.systems.elaborate {
inherit (system) system;
};
in {
nixpkgs = {
options.nixpkgs = with lib.types; {
usePkgs = mkOption {
type = enum ["legacyPackages.pkgs" "import" "nixos"];
description = "gensokyo-zone#legacyPackages.pkgs";
default =
if cfg.buildPlatform == cfg.hostPlatform && cfg.hostPlatform == hostPlatform && gensokyo-zone.self ? legacyPackages.${cfg.hostPlatform.system}.pkgs
then "legacyPackages.pkgs"
else "import";
};
};
config.nixpkgs = {
hostPlatform = mkDefault hostPlatform;
overlays = [
gensokyo-zone.inputs.arcexprs.overlays.default
overlays.default
@ -13,4 +38,18 @@ in {
];
};
};
config._module.args.pkgs = let
pkgsArgs = {
inherit (cfg) config overlays;
localSystem = cfg.buildPlatform;
};
pkgsCrossArgs = optionalAttrs (cfg.buildPlatform != cfg.hostPlatform) {
crossSystem = cfg.hostPlatform;
};
pkgs = {
"legacyPackages.pkgs" = gensokyo-zone.self.legacyPackages.${cfg.hostPlatform.system}.pkgs;
import = import gensokyo-zone.inputs.nixpkgs (pkgsArgs // pkgsCrossArgs);
};
in
mkIf (cfg.usePkgs != "nixos") (mkAlmostForce pkgs.${cfg.usePkgs}.__withSubBuilders);
}

View file

@ -14,18 +14,22 @@
devShells = import ./devShells.nix {inherit system inputs;};
packages = import ./packages {inherit system inputs;};
legacyPackages = {
pkgs = import inputs.nixpkgs {
inherit system;
overlays = [
inputs.self.overlays.default
inputs.self.overlays.deploy-rs
inputs.self.overlays.systemd2mqtt
inputs.self.overlays.arc
];
config = {
allowUnfree = true;
pkgs = let
pkgs = import inputs.nixpkgs {
inherit system;
overlays = [
inputs.self.overlays.default
inputs.self.overlays.deploy-rs
inputs.self.overlays.systemd2mqtt
inputs.self.overlays.arc
];
config = {
allowUnfree = true;
};
};
};
# see overlays/builders.nix
in
pkgs.__withSubBuilders;
patchedNixpkgs = pkgs.applyPatches {
name = "nixpkgs";
src = inputs.nixpkgs;

76
overlays/builders.nix Normal file
View file

@ -0,0 +1,76 @@
final: prev: let
inherit (final.lib.attrsets) mapAttrs' nameValuePair;
subBuilders = {
applyPatches = args:
prev.applyPatches ({
allowSubstitutes = true;
}
// args);
writeTextFile = args:
prev.writeTextFile ({
allowSubstitutes = true;
}
// args);
writeText = name: text: final.writeTextFile' {inherit name text;};
writeShellScript = name: text:
final.writeTextFile' {
inherit name;
executable = true;
text = ''
#!${final.runtimeShell}
${text}
'';
checkPhase = ''
${final.stdenv.shellDryRun} "$target"
'';
};
writeShellScriptBin = name: text:
final.writeTextFile' {
inherit name;
destination = "/bin/${name}";
executable = true;
text = ''
#!${final.runtimeShell}
${text}
'';
checkPhase = ''
${final.stdenv.shellDryRun} "$target"
'';
};
symlinkJoin = args:
prev.symlinkJoin ({
allowSubstitutes = true;
}
// args);
linkFarm = name: entries:
(prev.linkFarm name entries).overrideAttrs (_: {
allowSubstitutes = true;
});
runCommandLocal = name: env:
final.runCommandWith {
stdenv = final.stdenvNoCC;
runLocal = true;
inherit name;
derivationArgs =
{
allowSubstitutes = true;
}
// env;
};
# TODO: writeScript, writeScriptBin, runCommandWith...
};
subBuilders' = mapAttrs' (name: nameValuePair "${name}'") subBuilders;
in {
inherit
(subBuilders')
applyPatches'
writeTextFile'
writeText'
writeShellScript'
writeShellScriptBin'
symlinkJoin'
linkFarm'
runCommandLocal'
;
__withSubBuilders = final // subBuilders;
}

View file

@ -3,6 +3,7 @@
in rec {
default = nixlib.composeManyExtensions [
barcodebuddy
builders
krb5
minecraft
nfs
@ -17,6 +18,7 @@ in rec {
nginx = import ./nginx.nix;
samba = import ./samba.nix;
openwebrx = import ./openwebrxplus.nix;
builders = import ./builders.nix;
deploy-rs = inputs.deploy-rs.overlays.default or inputs.deploy-rs.overlay;
systemd2mqtt = inputs.systemd2mqtt.overlays.default;
arc = inputs.arcexprs.overlays.default;