mirror of
https://github.com/Gerg-L/nixos.git
synced 2025-12-10 00:43:56 -05:00
mkPackages: automagically wrapping with hello as a test package
This commit is contained in:
parent
cbbf862d6b
commit
98c4d12843
4 changed files with 94 additions and 18 deletions
|
|
@ -204,39 +204,72 @@ rec {
|
||||||
/<name> -> packages named by directory
|
/<name> -> packages named by directory
|
||||||
/<name>/call.nix -> callPackage override imported via import <file> pkgs
|
/<name>/call.nix -> callPackage override imported via import <file> pkgs
|
||||||
call.nix example
|
call.nix example
|
||||||
pkgs: {
|
{python3Packages}: {
|
||||||
inherit (pkgs.python3Packages) callPackage;
|
inherit (python3Packages) callPackage;
|
||||||
args = {};
|
args = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
/<name>/package.nix -> the package itself
|
/<name>/package.nix -> the package itself
|
||||||
|
/<name>/wrapper.nix:
|
||||||
|
a optional wrapper for the package
|
||||||
|
which is callPackage'd with the original package
|
||||||
|
as an argument named <name>-unwrapped
|
||||||
*/
|
*/
|
||||||
mkPackages =
|
mkPackages =
|
||||||
path: pkgs:
|
path: pkgs:
|
||||||
lib.pipe path [
|
lib.pipe path [
|
||||||
builtins.readDir
|
builtins.readDir
|
||||||
(lib.filterAttrs (_: v: v == "directory"))
|
(lib.filterAttrs (_: v: v == "directory"))
|
||||||
(lib.mapAttrs (
|
builtins.attrNames
|
||||||
n: _:
|
(map (
|
||||||
|
n:
|
||||||
let
|
let
|
||||||
callPackage = lib.callPackageWith (
|
p = "${path}/${n}";
|
||||||
pkgs
|
|
||||||
// {
|
callPackage =
|
||||||
inputs = constructInputs' pkgs.system inputs;
|
file: args:
|
||||||
# maybe add self?
|
let
|
||||||
# inherit self;
|
defaultArgs =
|
||||||
# npins sources if i need them
|
pkgs
|
||||||
# sources = import ./npins;
|
// (
|
||||||
}
|
let
|
||||||
);
|
inputs' = constructInputs' pkgs.stdenv.system inputs;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit inputs' inputs;
|
||||||
|
self' = inputs'.self;
|
||||||
|
inherit (inputs) self;
|
||||||
|
# npins sources if i ever use them
|
||||||
|
# sources = lib.mapAttrs (_: pkgs.npins.mkSource) (lib.importJSON "${self}/packages/sources.json").pins;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
_callPackage = lib.callPackageWith defaultArgs;
|
||||||
|
fullPath = "${p}/${file}.nix";
|
||||||
|
callPath = "${p}/call.nix";
|
||||||
|
in
|
||||||
|
assert lib.assertMsg (builtins.pathExists fullPath)
|
||||||
|
"File attempting to be callPackage'd '${fullPath}' does not exist";
|
||||||
|
|
||||||
|
if builtins.pathExists callPath then
|
||||||
|
let
|
||||||
|
x = _callPackage callPath { };
|
||||||
|
in
|
||||||
|
x.callPackage or _callPackage fullPath (x.args or defaultArgs // args)
|
||||||
|
|
||||||
|
else
|
||||||
|
_callPackage fullPath args;
|
||||||
in
|
in
|
||||||
if builtins.pathExists "${path}/${n}/call.nix" then
|
|
||||||
|
if builtins.pathExists "${p}/wrapper.nix" then
|
||||||
|
# My distaste for rec grows ever stronger
|
||||||
let
|
let
|
||||||
x = import "${path}/${n}/call.nix" pkgs;
|
set."${n}-unwrapped" = callPackage "package" { };
|
||||||
in
|
in
|
||||||
x.callPackage "${path}/${n}/package.nix" x.args
|
{ ${n} = callPackage "wrapper" set; } // set
|
||||||
else
|
else
|
||||||
callPackage "${path}/${n}/package.nix" { }
|
{ ${n} = callPackage "package" { }; }
|
||||||
|
|
||||||
))
|
))
|
||||||
|
lib.mergeAttrsList
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
7
packages/hello/call.nix
Normal file
7
packages/hello/call.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ callPackage }:
|
||||||
|
{
|
||||||
|
callPackage = f: x: callPackage f ({ bar = "foo"; } // x);
|
||||||
|
args = {
|
||||||
|
foo = "bar";
|
||||||
|
};
|
||||||
|
}
|
||||||
19
packages/hello/package.nix
Normal file
19
packages/hello/package.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
foo,
|
||||||
|
bar,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "hello";
|
||||||
|
version = "2.12.1";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "mirror://gnu/hello/hello-${finalAttrs.version}.tar.gz";
|
||||||
|
hash = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
|
||||||
|
};
|
||||||
|
passthru = {
|
||||||
|
inherit foo bar;
|
||||||
|
};
|
||||||
|
})
|
||||||
17
packages/hello/wrapper.nix
Normal file
17
packages/hello/wrapper.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
symlinkJoin,
|
||||||
|
foo,
|
||||||
|
bar,
|
||||||
|
hello-unwrapped,
|
||||||
|
}:
|
||||||
|
symlinkJoin {
|
||||||
|
name = "hello-wrapped";
|
||||||
|
paths = [ hello-unwrapped ];
|
||||||
|
postBuild = ''
|
||||||
|
ln -s $out/bin/hello $out/bin/hello-wrapped
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit foo bar;
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue