diff options
author | lassulus <lassulus@lassul.us> | 2022-11-23 13:28:52 +0100 |
---|---|---|
committer | lassulus <lassulus@lassul.us> | 2022-11-25 17:36:40 +0100 |
commit | 9cf4f170aefaf85d01cb1710c192f9f5b56ab694 (patch) | |
tree | dbbd68657463767ef2b7f273849d87c37ccbf9a0 | |
parent | 417ad31ca5c149ff85bd5a4f61c81253e4906b65 (diff) |
add zapCreateMount script for idempodents install from iso/kexec
-rw-r--r-- | cli.nix | 2 | ||||
-rw-r--r-- | default.nix | 4 | ||||
-rwxr-xr-x | disko | 4 | ||||
-rw-r--r-- | types.nix | 20 |
4 files changed, 28 insertions, 2 deletions
@@ -16,6 +16,8 @@ let disko.createScript diskFormat pkgs else if (mode == "mount") then disko.mountScript diskFormat pkgs + else if (mode = "zap_create_mount") then + disko.zapCreateMount diskFormat pkgs else builtins.abort "invalid mode" ; diff --git a/default.nix b/default.nix index 8d91e7c..03a6833 100644 --- a/default.nix +++ b/default.nix @@ -24,6 +24,10 @@ in { export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)} ${types.diskoLib.mount (eval cfg).config.devices} ''; + zapCreateMount = cfg: pkgs: pkgs.writeScript "disko-zap-create-mount" '' + export PATH=${lib.makeBinPath (types.diskoLib.packages (eval cfg).config.devices pkgs)} + ${types.diskoLib.zapCreateMount (eval cfg).config.devices} + ''; config = cfg: { imports = types.diskoLib.config (eval cfg).config.devices; }; packages = cfg: types.diskoLib.packages (eval cfg).config.devices; } @@ -87,8 +87,8 @@ while [[ $# -gt 0 ]]; do shift done -if ! ([[ $mode = "create" ]] || [[ $mode = "mount" ]]); then - abort "mode must be either create or mount" +if ! ([[ $mode = "create" ]] || [[ $mode = "mount" ]] || [[ $mode = "zap_create_mount" ]]); then + abort "mode must be either create, mount or zap_create_mount" fi if [[ ! -z "${flake+x}" ]]; then @@ -146,6 +146,26 @@ rec { # ensures that "/" is processed before "/foo" etc. ${concatStrings (attrValues fsMounts)} ''; + /* takes a disko device specification and returns a string which unmounts, destroys all disks and then runs create and mount + + zapCreateMount :: types.devices -> str + */ + zapCreateMount = devices: '' + set -efux + # print existing disks + lsblk + + # TODO get zap the same way we get create + # make partitioning idempotent by dismounting already mounted filesystems + if findmnt /mnt; then + umount -Rlv /mnt + fi + + echo 'creating partitions...' + ${diskoLib.create devices} + echo 'mounting partitions...' + ${diskoLib.mount devices} + ''; /* Takes a disko device specification and returns a nixos configuration config :: types.devices -> nixosConfig |