124 lines
3.7 KiB
Nix
124 lines
3.7 KiB
Nix
{
|
|
pkgs ? import <nixpkgs> { },
|
|
lib ? pkgs.lib,
|
|
mode ? "mount",
|
|
flake ? null,
|
|
flakeAttr ? null,
|
|
diskoFile ? null,
|
|
rootMountPoint ? "/mnt",
|
|
noDeps ? false,
|
|
...
|
|
}@args:
|
|
let
|
|
disko = import ./. {
|
|
inherit rootMountPoint;
|
|
inherit lib;
|
|
};
|
|
|
|
hasDiskoFile = diskoFile != null;
|
|
|
|
diskoAttr =
|
|
(
|
|
if noDeps then
|
|
(
|
|
if hasDiskoFile then
|
|
{
|
|
destroy = "_cliDestroyNoDeps";
|
|
format = "_cliFormatNoDeps";
|
|
mount = "_cliMountNoDeps";
|
|
unmount = "_cliUnmountNoDeps";
|
|
|
|
"format,mount" = "_cliFormatMountNoDeps";
|
|
"destroy,format,mount" = "_cliDestroyFormatMountNoDeps";
|
|
}
|
|
else
|
|
{
|
|
destroy = "destroyNoDeps";
|
|
format = "formatNoDeps";
|
|
mount = "mountNoDeps";
|
|
unmount = "unmountNoDeps";
|
|
|
|
"format,mount" = "formatMountNoDeps";
|
|
"destroy,format,mount" = "destroyFormatMountNoDeps";
|
|
}
|
|
)
|
|
// {
|
|
# legacy aliases
|
|
disko = "diskoScriptNoDeps";
|
|
create = "createScriptNoDeps";
|
|
zap_create_mount = "diskoScriptNoDeps";
|
|
}
|
|
else
|
|
(
|
|
if hasDiskoFile then
|
|
{
|
|
destroy = "_cliDestroy";
|
|
format = "_cliFormat";
|
|
mount = "_cliMount";
|
|
unmount = "_cliUnmount";
|
|
|
|
"format,mount" = "_cliFormatMount";
|
|
"destroy,format,mount" = "_cliDestroyFormatMount";
|
|
}
|
|
else
|
|
{
|
|
destroy = "destroy";
|
|
format = "format";
|
|
mount = "mount";
|
|
unmount = "unmount";
|
|
|
|
"format,mount" = "formatMount";
|
|
"destroy,format,mount" = "destroyFormatMount";
|
|
}
|
|
)
|
|
// {
|
|
# legacy aliases
|
|
disko = "diskoScript";
|
|
create = "createScript";
|
|
zap_create_mount = "diskoScript";
|
|
}
|
|
).${mode};
|
|
|
|
hasDiskoConfigFlake =
|
|
hasDiskoFile || lib.hasAttrByPath [ "diskoConfigurations" flakeAttr ] (builtins.getFlake flake);
|
|
|
|
hasDiskoModuleFlake = lib.hasAttrByPath [
|
|
"nixosConfigurations"
|
|
flakeAttr
|
|
"config"
|
|
"disko"
|
|
"devices"
|
|
] (builtins.getFlake flake);
|
|
|
|
diskFormat =
|
|
let
|
|
diskoConfig =
|
|
if hasDiskoFile then
|
|
import diskoFile
|
|
else
|
|
(builtins.getFlake flake).diskoConfigurations.${flakeAttr};
|
|
in
|
|
if builtins.isFunction diskoConfig then diskoConfig ({ inherit lib; } // args) else diskoConfig;
|
|
|
|
diskoEval = disko.${diskoAttr} diskFormat pkgs;
|
|
|
|
diskoScript =
|
|
if hasDiskoConfigFlake then
|
|
diskoEval
|
|
else if hasDiskoModuleFlake then
|
|
(builtins.getFlake flake).nixosConfigurations.${flakeAttr}.config.system.build.${diskoAttr}
|
|
or (pkgs.writeShellScriptBin "disko-compat-error" ''
|
|
echo 'Error: Attribute `nixosConfigurations.${flakeAttr}.config.system.build.${diskoAttr}`' >&2
|
|
echo ' not found in flake `${flake}`!' >&2
|
|
echo ' This is probably caused by the locked version of disko in the flake' >&2
|
|
echo ' being different from the version of disko you executed.' >&2
|
|
echo 'EITHER set the `disko` input of your flake to `github:nix-community/disko/latest`,' >&2
|
|
echo ' run `nix flake update disko` in the flake directory and then try again,' >&2
|
|
echo 'OR run `nix run github:nix-community/disko/v1.9.0 -- --help` and use one of its modes.' >&2
|
|
exit 1;'')
|
|
else
|
|
(builtins.abort "couldn't find `diskoConfigurations.${flakeAttr}` or `nixosConfigurations.${flakeAttr}.config.disko.devices`");
|
|
|
|
in
|
|
diskoScript
|