mirror of
https://github.com/nix-community/disko.git
synced 2024-11-04 05:44:29 +03:00
add disko cli
This commit is contained in:
parent
324a8d5347
commit
f1531fb4f3
15
cli.nix
Normal file
15
cli.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> {}
|
||||||
|
, mode ? "mount"
|
||||||
|
, diskoFile
|
||||||
|
, ... }@args:
|
||||||
|
let
|
||||||
|
disko = import ./. {};
|
||||||
|
diskFormat = import diskoFile args;
|
||||||
|
diskoEval = if (mode == "create") then
|
||||||
|
disko.createScript diskFormat pkgs
|
||||||
|
else if (mode == "mount") then
|
||||||
|
disko.mountScript diskFormat pkgs
|
||||||
|
else
|
||||||
|
builtins.abort "invalid mode"
|
||||||
|
;
|
||||||
|
in diskoEval
|
@ -15,12 +15,12 @@ let
|
|||||||
in {
|
in {
|
||||||
types = types;
|
types = types;
|
||||||
create = cfg: types.diskoLib.create (eval cfg).config.devices;
|
create = cfg: types.diskoLib.create (eval cfg).config.devices;
|
||||||
createScript = pkgs: cfg: pkgs.writeScript "disko-create" ''
|
createScript = cfg: pkgs: pkgs.writeScript "disko-create" ''
|
||||||
export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)}
|
export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)}
|
||||||
${types.diskoLib.create (eval cfg).config.devices}
|
${types.diskoLib.create (eval cfg).config.devices}
|
||||||
'';
|
'';
|
||||||
mount = cfg: types.diskoLib.mount (eval cfg).config.devices;
|
mount = cfg: types.diskoLib.mount (eval cfg).config.devices;
|
||||||
mountScript = pkgs: cfg: pkgs.writeScript "disko-mount" ''
|
mountScript = cfg: pkgs: pkgs.writeScript "disko-mount" ''
|
||||||
export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)}
|
export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)}
|
||||||
${types.diskoLib.mount (eval cfg).config.devices}
|
${types.diskoLib.mount (eval cfg).config.devices}
|
||||||
'';
|
'';
|
||||||
|
68
disko
Executable file
68
disko
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
readonly libexec_dir="${0%/*}"
|
||||||
|
|
||||||
|
# mount was chosen as the default mode because it's less destructive
|
||||||
|
mode=mount
|
||||||
|
nix_args=()
|
||||||
|
|
||||||
|
showUsage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Usage: $0 [options] disk-config.nix
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
* -m, --mode mode
|
||||||
|
set the mode, either create or mount
|
||||||
|
* --arg name value
|
||||||
|
pass value to nix-build. can be used to set disk-names for example
|
||||||
|
* --argstr name value
|
||||||
|
pass value to nix-build as string
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
abort() {
|
||||||
|
echo "aborted: $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
## Main ##
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-m | --mode)
|
||||||
|
mode=$2
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--argstr | --arg)
|
||||||
|
nix_args+=("$1" "$2" "$3")
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help)
|
||||||
|
showUsage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ -z ${disko_config+x} ] && [ -e $1 ]; then
|
||||||
|
disko_config=$1
|
||||||
|
else
|
||||||
|
showUsage
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if ! ([[ $mode = "create" ]] || [[ $mode = "mount" ]]); then
|
||||||
|
abort "mode must be either create or mount"
|
||||||
|
fi
|
||||||
|
|
||||||
|
script=$(nix-build "${libexec_dir}"/cli.nix \
|
||||||
|
--arg diskoFile "$disko_config" \
|
||||||
|
--argstr mode "$mode" \
|
||||||
|
"${nix_args[@]}"
|
||||||
|
)
|
||||||
|
exec "$script"
|
Loading…
Reference in New Issue
Block a user