diff --git a/cli.nix b/cli.nix index f99ad61..ed80160 100644 --- a/cli.nix +++ b/cli.nix @@ -1,10 +1,14 @@ { pkgs ? import {} , mode ? "mount" +, fromFlake ? null , diskoFile , ... }@args: let - disko = import ./. { inherit (pkgs) lib; }; - diskFormat = import diskoFile; + disko = import ./. { }; + diskFormat = + if fromFlake != null + then (builtins.getFlake fromFlake) + "/${diskoFile}" + else import diskoFile; diskoEval = if (mode == "create") then disko.createScript diskFormat pkgs else if (mode == "mount") then diff --git a/disko b/disko index f51339e..deb3cbd 100755 --- a/disko +++ b/disko @@ -6,6 +6,9 @@ readonly libexec_dir="${0%/*}" # a file with the disko config declare disko_config +# a flake uri, if present disko config is relative to the flake root +declare from_flake + # mount was chosen as the default mode because it's less destructive mode=mount nix_args=() @@ -18,6 +21,8 @@ Options: * -m, --mode mode set the mode, either create or mount +* -f, --flake uri + fetch the disko config relative to this flake's root * --arg name value pass value to nix-build. can be used to set disk-names for example * --argstr name value @@ -43,6 +48,11 @@ while [[ $# -gt 0 ]]; do mode=$2 shift ;; + -f | --flake) + from_flake="$2" + nix_args+=("--argstr" "fromFlake" "$2") + shift + ;; --argstr | --arg) nix_args+=("$1" "$2" "$3") shift @@ -53,7 +63,7 @@ while [[ $# -gt 0 ]]; do exit 0 ;; *) - if [ -z ${disko_config+x} ] && [ -e "$1" ]; then + if [ -z ${disko_config+x} ]; then disko_config=$1 else showUsage @@ -68,8 +78,16 @@ if ! ([[ $mode = "create" ]] || [[ $mode = "mount" ]]); then abort "mode must be either create or mount" fi +if [[ -e "${disko_config}" ]]; then + nix_args+=("--arg" "diskoFile" "$disko_config") +elif [[ -n "${from_flake+x}" ]]; then + nix_args+=("--argstr" "diskoFile" "$disko_config") +else + abort "disko config must be an exising file of flake must be set" +fi + script=$(nix-build "${libexec_dir}"/cli.nix \ - --arg diskoFile "$disko_config" \ + --argstr diskoFile "$disko_config" \ --argstr mode "$mode" \ "${nix_args[@]}" )