From e10a50745e1001e8f8c086ac7190562d8acb1ba2 Mon Sep 17 00:00:00 2001 From: Kalle Struik Date: Fri, 22 Nov 2024 20:55:14 +0100 Subject: [PATCH] Add systemd repart to grow root partition on boot --- systems/base/configuration.nix | 40 +++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/systems/base/configuration.nix b/systems/base/configuration.nix index 5054362..e9b21e1 100644 --- a/systems/base/configuration.nix +++ b/systems/base/configuration.nix @@ -21,7 +21,6 @@ services.qemuGuest.enable = lib.mkDefault true; boot.loader.systemd-boot.enable = true; - boot.growPartition = lib.mkDefault true; # Allow remote updates with flakes and non-root users nix.settings.trusted-users = [ @@ -98,6 +97,45 @@ }; }; + # Resize partition on boot + systemd.repart.partitions = { + "00-esp" = { + Type = "esp"; + SizeMinBytes = "550M"; + SizeMaxBytes = "550M"; + Format = "vfat"; + }; + "10-root" = { + Type = "linux-generic"; + Format = "btrfs"; + }; + }; + boot.initrd = { + # Ensure `sgdisk` is included in the initrd + packages = [ pkgs.gptfdisk ]; + + # Custom systemd units in the initrd + systemd = { + enable = true; + units = { + "resize-gpt.service" = { + description = "Resize GPT to use full disk size"; + wants = [ "systemd-repart.service" ]; + before = [ "systemd-repart.service" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "/run/current-system/sw/bin/sgdisk --move-second-header /dev/sdX"; + }; + }; + "systemd-repart.service".wants = [ "resize-gpt.service" ]; + }; + repart = { + enable = true; + device = "/dev/sda"; + }; + }; + }; + system.stateVersion = lib.mkDefault "24.05"; }; }