59 lines
1.2 KiB
Nix
59 lines
1.2 KiB
Nix
# yanked from @fufexan
|
|
{
|
|
flakePath ? null,
|
|
hostnamePath ? "/etc/hostname",
|
|
registryPath ? /etc/nix/registry.json,
|
|
}:
|
|
let
|
|
inherit (builtins)
|
|
getFlake
|
|
head
|
|
match
|
|
currentSystem
|
|
readFile
|
|
pathExists
|
|
filter
|
|
fromJSON
|
|
;
|
|
|
|
selfFlake =
|
|
if pathExists registryPath then
|
|
filter (it: it.from.id == "self") (fromJSON (readFile registryPath)).flakes
|
|
else
|
|
[ ];
|
|
|
|
flakePath' = toString (
|
|
if flakePath != null then
|
|
flakePath
|
|
else if selfFlake != [ ] then
|
|
(head selfFlake).to.path
|
|
else
|
|
"/etc/nixos"
|
|
);
|
|
|
|
flake = if pathExists flakePath' then getFlake flakePath' else { };
|
|
hostname =
|
|
if pathExists hostnamePath then head (match "([a-zA-Z0-9\\-]+)\n" (readFile hostnamePath)) else "";
|
|
|
|
nixpkgsFromInputsPath = flake.inputs.nixpkgs.outPath or "";
|
|
nixpkgs =
|
|
flake.pkgs.${currentSystem}.nixpkgs
|
|
or (if nixpkgsFromInputsPath != "" then import nixpkgsFromInputsPath { } else { });
|
|
|
|
nixpkgsOutput = removeAttrs (nixpkgs // nixpkgs.lib or { }) [
|
|
"options"
|
|
"config"
|
|
];
|
|
in
|
|
{
|
|
inherit flake;
|
|
}
|
|
// flake
|
|
// builtins
|
|
// (flake.nixosConfigurations or { })
|
|
// flake.nixosConfigurations.${hostname} or { }
|
|
// nixpkgsOutput
|
|
// {
|
|
getFlake = path: getFlake (toString path);
|
|
}
|