Skip to content

Commit

Permalink
refactor(pops/packages): add python support
Browse files Browse the repository at this point in the history
  • Loading branch information
GTrunSec committed Nov 22, 2023
1 parent 216e428 commit 6ec2c0e
Show file tree
Hide file tree
Showing 14 changed files with 280 additions and 75 deletions.
109 changes: 76 additions & 33 deletions docs/org/pops-packages.org
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
:EXP-DIR: ../../examples
:CODE-DIR: ../../src/pops
:END:
#+TITLE: pops-packages
#+TITLE: pops.packages
#+AUTHOR: GuangTao Zhang
#+EMAIL: gtrunsec@hardenedlinux.org
#+DATE: 2023-11-19 Sun 16:25
Expand All @@ -16,51 +16,94 @@ function: ~omnibus.pops.pacakges~ is responsible for loading packages in a tree
- code

#+begin_src nix :tangle (concat (org-entry-get nil "CODE-DIR" t) "/packages.nix")
{ super, root }:
{
super,
root,
POP,
flops,
lib,
}:
load:
let
inherit
(root.errors.requiredInputs load.inputs "omnibus.pops.packages" [ "nixpkgs" ])
nixpkgs
;
inherit (nixpkgs) newScope;
inherit (nixpkgs.lib) makeScope;
inherit (flops) recursiveMerge';
in
makeScope newScope (
selfScope:
((super.load load).addLoadExtender {
load = {
(super.load (
recursiveMerge' [
{
loader =
__inputs__: path:
(selfScope.overrideScope (_: _: { inherit __inputs__; })).callPackage path { };
# without the scope loader
(__inputs__.inputs.nixpkgs.extend (_: _: { inherit __inputs__; })).callPackage path { };
transformer = [ (_cursor: dir: if dir ? default then dir.default else dir) ];
};
}).addExporters
[
(POP.extendPop flops.haumea.pops.exporter (
self: _super: {
exports = {
overlay =
final: prev:
}
load
]
)).addExporters
[
(POP.extendPop flops.haumea.pops.exporter (
self: _super: {
exports =
let
inherit
(root.errors.requiredInputs self.layouts.self.load.inputs "omnibus.pops.packages" [ "nixpkgs" ])
nixpkgs
;
inherit (nixpkgs) newScope;
inherit (nixpkgs.lib) makeScope;
in
{
derivations = lib.attrsets.filterDerivations self.exports.packages;

scopePackagesPop =
selfScope:
(self.layouts.self.addLoadExtender {
load = {
inputs.inputs.nixpkgs = final;
loader =
__inputs__: path:
(__inputs__.inputs.nixpkgs.extend (_: _: { inherit __inputs__; })).callPackage
path
{ };
__inputs__: path: (selfScope.overrideScope (_: _: { inherit __inputs__; })).callPackage path { };
inputs = {
callPackagesWithOmnibus =
selfScope: src:
(super.load {
loader =
_: path:
(selfScope.overrideScope (_: _: { __inputs__ = self.layouts.self.load.inputs; })).callPackage path
{ };
src = src;
}).exports.default;
};
};
}).exports.default;
});

packages = makeScope newScope (
selfScope: (self.exports.scopePackagesPop selfScope).exports.default
);

overlays = {
default =
final: prev:
((self.exports.packages.overrideScope (
_: scopeSuper: {
python3Packages = prev.python3Packages.override (
old: {
overrides = prev.lib.composeExtensions (old.packageOverrides or (_: _: { })) (
pythonSelf: _: if scopeSuper ? py then scopeSuper.py.packages pythonSelf else { }
);
}
);
}
)).packages
(final // { overrideScope = self.exports.packages.overrideScope; })
);
};
};
}
))
]
)
}
))
]
#+end_src

- *pops.packages* have an arg named by anti-namespace of *__inputs__* in the scopePackages, that *__inptus__* can pass all args same as haumea.inputs, such as {super,self, ...} => {__inputs__.self, __inputs__.super, inputs.{...} }

- callPythonPackages: creating a named ~py~ directory for loading the python packages.

** Example

Expand Down Expand Up @@ -103,6 +146,6 @@ nix-repl> :p Flake.examples.packages.exports.overlay
{ super, omnibus }:
let
nixos-23_05 = omnibus.flake.inputs.nixos-23_05;
in
nixos-23_05.legacyPackages.x86_64-linux.extend super.packages.exports.overlay
In
nixos-23_05.legacyPackages.x86_64-linux.extend super.packages.exports.overlays.default
#+end_src
3 changes: 3 additions & 0 deletions docs/org/pops.org
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,8 @@ Please note that in Pops, the outputs/results should not be directly printed, bu
#+end_quote

* Loaders
:PROPERTIES:
:ID: ad6e2605-7cf2-46e4-b828-493f950b58d8
:END:

- [[id:f7adb0ad-2cc1-4723-a796-bf608682456a][pops-packages]] (loading the packages into nixpkgs from a directory)
37 changes: 37 additions & 0 deletions examples/packages/__fixture/py/btest_1.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
pythonOlder,
pkgs,
}:

buildPythonPackage rec {
pname = "btest";
version = "1.1-test";
format = "setuptools";

disabled = pythonOlder "3.7";

src = fetchFromGitHub {
owner = "zeek";
repo = "btest";
rev = "refs/tags/v${version}";
hash = "sha256-D01hAKcE52eKJRUh1/x5DGxRQpWgA2J0nutshpKrtRU=";
};

# No tests available and no module to import
doCheck = false;

passthru = {
__inputs__ = pkgs.__inputs__;
};

meta = with lib; {
description = "A Generic Driver for Powerful System Tests";
homepage = "https://github.com/zeek/btest";
changelog = "https://github.com/zeek/btest/blob/${version}/CHANGES";
license = licenses.bsd3;
maintainers = with maintainers; [ fab ];
};
}
37 changes: 37 additions & 0 deletions examples/packages/__fixture/py/btest_2.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
pythonOlder,
btest_1,
}:

buildPythonPackage rec {
pname = "btest";
version = "1.2-test";
format = "setuptools";

disabled = pythonOlder "3.7";

src = fetchFromGitHub {
owner = "zeek";
repo = "btest";
rev = "refs/tags/v${version}";
hash = "sha256-D01hAKcE52eKJRUh1/x5DGxRQpWgA2J0nutshpKrtRU=";
};

# No tests available and no module to import
doCheck = false;

passthru = {
btest = btest_1;
};

meta = with lib; {
description = "A Generic Driver for Powerful System Tests";
homepage = "https://github.com/zeek/btest";
changelog = "https://github.com/zeek/btest/blob/${version}/CHANGES";
license = licenses.bsd3;
maintainers = with maintainers; [ fab ];
};
}
12 changes: 12 additions & 0 deletions examples/packages/__fixture/py/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
python3Packages,
python3,
lib,
__inputs__,
}:
let
inherit (lib) makeScope;
inherit (python3Packages) newScope;
inherit (__inputs__) callPackagesWithOmnibus;
in
makeScope newScope (selfScope: callPackagesWithOmnibus selfScope ./.)
9 changes: 6 additions & 3 deletions examples/packages/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@

# [[file:../../docs/org/pops-packages.org::*Example][Example:1]]
{ omnibus, inputs }:
omnibus.pops.packages {
let
nixpkgs = inputs.nixpkgs.legacyPackages.x86_64-linux;
in
(omnibus.pops.packages {
src = ./__fixture;
inputs = {
nixpkgs = inputs.nixpkgs.legacyPackages.x86_64-linux;
inherit nixpkgs;
};
}
})
# => out.exports { default = {...}, packages = {...}; }
# Example:1 ends here
2 changes: 1 addition & 1 deletion examples/packagesOverlay.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
let
nixos-23_05 = omnibus.flake.inputs.nixos-23_05;
in
nixos-23_05.legacyPackages.x86_64-linux.extend super.packages.exports.overlay
nixos-23_05.legacyPackages.x86_64-linux.extend super.packages.exports.overlays.default
# Example:3 ends here
4 changes: 4 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
inherit src;
inherit (src) lib ops errors;

nixci.default = {
dir1.dir = "./local";
};

templates = {
nixos = {
path = ./templates/nixos;
Expand Down
1 change: 1 addition & 0 deletions local/cells/repo/shells.nix
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ in
nixpkgs.tree

nixpkgs.reuse
nixpkgs.nixci
];

commands = [ ];
Expand Down
1 change: 0 additions & 1 deletion local/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
inputs.nixpkgs.follows = "nixpkgs";
inputs.nixago-exts.follows = "";
};

devshell = {
url = "github:numtide/devshell";
inputs.nixpkgs.follows = "nixpkgs";
Expand Down
Loading

0 comments on commit 6ec2c0e

Please sign in to comment.