From f4786156de121d65e1c7ff7d86d083abe0141a85 Mon Sep 17 00:00:00 2001 From: Noah Masur <7386960+nmasur@users.noreply.github.com> Date: Sun, 5 Jun 2022 09:24:46 -0400 Subject: [PATCH] create automatic partition installer --- flake.nix | 13 ++++++++++-- modules/system/installer.nix | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 modules/system/installer.nix diff --git a/flake.nix b/flake.nix index eda39b4..57cf519 100644 --- a/flake.nix +++ b/flake.nix @@ -48,8 +48,7 @@ in { - # Define my systems - # You can load it from an empty system with: + # You can load it from any NixOS system with: # nix-shell -p nixFlakes # sudo nixos-rebuild switch --flake github:nmasur/dotfiles#desktop nixosConfigurations = { @@ -57,6 +56,16 @@ import ./hosts/desktop { inherit nixpkgs home-manager nur globals; }; }; + # You can partition, format, and install with: + # nix-shell -p nixFlakes + # nix run github:nmasur/dotfiles#installer -- nvme0n1 desktop + # Will erase drives; use at your own risk! + apps = forAllSystems (system: + let pkgs = import nixpkgs { inherit system; }; + in { + installer = import ./modules/system/installer.nix { inherit pkgs; }; + }); + # Used to run commands and edit files in this repo devShells = forAllSystems (system: let pkgs = import nixpkgs { inherit system; }; diff --git a/modules/system/installer.nix b/modules/system/installer.nix new file mode 100644 index 0000000..18d59b5 --- /dev/null +++ b/modules/system/installer.nix @@ -0,0 +1,38 @@ +{ pkgs, ... }: { + + # Inspired by https://github.com/cleverca22/nix-tests/blob/master/kexec/justdoit.nix + # This will partition and format drives; use at your own risk. + + type = "app"; + + program = pkgs.writeShellScriptBin "installer" '' + #!${pkgs.stdenv.shell} + + set -e + + DISK=$1 + FLAKE=$2 + + if [ -z "$DISK" ] || [ -z "$FLAKE" ]; then + echo "Missing required parameter." + echo "Usage: installer -- " + echo "Example: installer -- nvme0n1 desktop" + echo "Flake example: nix run github:nmasur/dotfiles#installer -- nvme0n1 desktop" + exit 1 + fi + + parted /dev/''${DISK} -- mklabel gpt + parted /dev/''${DISK} -- mkpart primary 512MiB 100% + parted /dev/''${DISK} -- mkpart ESP fat32 1MiB 512MiB + parted /dev/''${DISK} -- set 3 esp on + mkfs.ext4 -L nixos /dev/''${DISK}p1 + mkfs.fat -F 32 -n boot /dev/''${DISK}p2 + + mount /dev/disk/by-label/nixos /mnt + mkdir --parents /mnt/boot + mount /dev/disk/by-label/boot /mnt/boot + + nixos-install --flake github:nmasur/dotfiles#''${FLAKE} + ''; + +}