67 lines
2.1 KiB
Nix
67 lines
2.1 KiB
Nix
let
|
|
inherit (builtins) fetchTarball fromJSON readFile removeAttrs;
|
|
|
|
lock = fromJSON (readFile ../flake.lock);
|
|
lib = import "${fetchTarball {
|
|
url = "https://github.com/NixOS/nixpkgs/archive/${lock.nodes.nixpkgs.locked.rev}.tar.gz";
|
|
sha256 = lock.nodes.nixpkgs.locked.narHash;
|
|
}}/lib";
|
|
|
|
inherit (lib) attrNames attrValues findFirst foldl' hasAttr matchAttrs optionalAttrs optionals recursiveUpdate;
|
|
in rec {
|
|
recursiveUpdateList = list: foldl' recursiveUpdate {} list;
|
|
|
|
findInput = info:
|
|
findFirst
|
|
(x: matchAttrs (removeAttrs info ["inputs"]) (x.original or {})) {}
|
|
(attrValues lock.nodes);
|
|
|
|
mkFollowsFrom = info: target: follows:
|
|
optionalAttrs
|
|
(hasAttr target ((findInput info).inputs or {}))
|
|
{inputs.${target} = {inherit follows;};};
|
|
|
|
/*
|
|
* From an attrset, returns a flake input that has its type defaulted
|
|
* to `github` and has some of its inputs following this flake's input
|
|
* of the same name.
|
|
*
|
|
* It gets information from the `flake.lock` file and can be used thanks
|
|
* to flakegen
|
|
*/
|
|
mkInput = {
|
|
type ? "github",
|
|
overrideNixpkgs ? true,
|
|
...
|
|
} @ info: let
|
|
mkOverride = i: mkFollowsFrom info i i;
|
|
in
|
|
recursiveUpdateList ([
|
|
(removeAttrs info ["overrideNixpkgs"])
|
|
{inherit type;}
|
|
|
|
# Generic inputs
|
|
(mkOverride "systems")
|
|
(mkOverride "flake-compat")
|
|
(mkOverride "flake-utils")
|
|
(mkOverride "flake-parts")
|
|
(mkOverride "lib-aggregate")
|
|
(mkOverride "nix-eval-jobs")
|
|
(mkOverride "nix-github-actions")
|
|
(mkOverride "pre-commit-hooks")
|
|
(mkOverride "treefmt-nix")
|
|
]
|
|
# Specify if we can't make an input use this flake's nixpkgs
|
|
++ optionals overrideNixpkgs [(mkOverride "nixpkgs")]);
|
|
|
|
mkHyprDep = info: let
|
|
inherit (lock.nodes) hyprland;
|
|
|
|
mkOverride = i: mkFollowsFrom info i i;
|
|
mkHyprOverride = i: mkFollowsFrom info i "hyprland/${i}";
|
|
in
|
|
mkInput (recursiveUpdateList ([info (mkOverride "hyprland")]
|
|
++ (map mkHyprOverride (attrNames hyprland.inputs))));
|
|
|
|
mkSrc = info: mkInput (info // {flake = false;});
|
|
}
|