From 4143db478b4318a25c006b40019c7c2faae9e44e Mon Sep 17 00:00:00 2001 From: sajenim Date: Sun, 14 Jan 2024 06:22:54 +0800 Subject: [PATCH] setup impermanence --- nixos/common/optional/ephemeral-btrfs.nix | 61 +++++++++++++++++++++++ nixos/fuchsia/configuration.nix | 1 + 2 files changed, 62 insertions(+) create mode 100644 nixos/common/optional/ephemeral-btrfs.nix diff --git a/nixos/common/optional/ephemeral-btrfs.nix b/nixos/common/optional/ephemeral-btrfs.nix new file mode 100644 index 0000000..c0196cf --- /dev/null +++ b/nixos/common/optional/ephemeral-btrfs.nix @@ -0,0 +1,61 @@ +{ lib, config, ... }: +let + hostname = config.networking.hostName; +in +{ + imports = [ + ./persist.nix + ]; + + boot.initrd.postDeviceCommands = lib.mkAfter '' + mkdir /btrfs_tmp + mount /dev/nvme0n1p2 /btrfs_tmp + if [[ -e /btrfs_tmp/root ]]; then + mkdir -p /btrfs_tmp/old_roots + timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S") + mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" + fi + + delete_subvolume_recursively() { + IFS=$'\n' + for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do + delete_subvolume_recursively "/btrfs_tmp/$i" + done + btrfs subvolume delete "$1" + } + + for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do + delete_subvolume_recursively "$i" + done + + btrfs subvolume create /btrfs_tmp/root + umount /btrfs_tmp + ''; + + fileSystems = { + "/" = { + device = "/dev/disk/by-label/${hostname}"; + fsType = "btrfs"; + options = [ "subvol=root" "compress=zstd" ]; + }; + + "/nix" = { + device = "/dev/disk/by-label/${hostname}"; + fsType = "btrfs"; + options = [ "subvol=nix" "compress=zstd" ]; + }; + + "/persist" = { + device = "/dev/disk/by-label/${hostname}"; + fsType = "btrfs"; + options = [ "subvol=persist" "compress=zstd" ]; + neededForBoot = true; + }; + + "/swap" = { + device = "/dev/disk/by-label/${hostname}"; + fsType = "btrfs"; + options = [ "subvol=swap" "compress=zstd" ]; + }; + }; +} diff --git a/nixos/fuchsia/configuration.nix b/nixos/fuchsia/configuration.nix index 83baab6..f2ab3f0 100644 --- a/nixos/fuchsia/configuration.nix +++ b/nixos/fuchsia/configuration.nix @@ -6,6 +6,7 @@ imports = [ # If you want to use modules your own flake exports (from modules/nixos): # outputs.nixosModules.example + inputs.impermanence.nixosModules.impermanence # Or modules from other flakes (such as nixos-hardware): # inputs.hardware.nixosModules.common-cpu-amd