Skip to content

Commit

Permalink
Add impermanence
Browse files Browse the repository at this point in the history
  • Loading branch information
pniedzwiedzinski committed Oct 5, 2024
1 parent b260c2e commit 146b495
Show file tree
Hide file tree
Showing 6 changed files with 152 additions and 26 deletions.
16 changes: 16 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
disko.url = "github:nix-community/disko";
disko.inputs.nixpkgs.follows = "nixpkgs";
impermanence.url = "github:nix-community/impermanence";
};

outputs = { self, nixpkgs, ... }@inputs:
Expand Down Expand Up @@ -55,6 +56,7 @@
x220 = nixosSystem "x86_64-linux" "x220" [
inputs.nixos-hardware.nixosModules.lenovo-thinkpad-x220
inputs.disko.nixosModules.disko
inputs.impermanence.nixosModules.impermanence
inputs.home-manager.nixosModules.default
{
home-manager.useGlobalPkgs = true;
Expand Down
34 changes: 33 additions & 1 deletion machines/x220/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,39 @@
# wget
];

fileSystems."/persist".neededForBoot = true;
environment.persistence."/persistent" = {
enable = true; # NB: Defaults to true, not needed
hideMounts = true;
directories = [
"/var/log"
"/var/lib/bluetooth"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
"/etc/NetworkManager/system-connections"
{ directory = "/var/lib/colord"; user = "colord"; group = "colord"; mode = "u=rwx,g=rx,o="; }
];
files = [
"/etc/machine-id"
"/etc/shadow"
{ file = "/var/keys/secret_file"; parentDirectory = { mode = "u=rwx,g=,o="; }; }
];
users.pn = {
directories = [
"Downloads"
"Music"
"Pictures"
"Documents"
"Videos"
"VirtualBox VMs"
{ directory = ".gnupg"; mode = "0700"; }
{ directory = ".ssh"; mode = "0700"; }
{ directory = ".local/share/keyrings"; mode = "0700"; }
".local/share/direnv"
];
};
};

# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
Expand All @@ -69,6 +102,5 @@
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?

}
48 changes: 24 additions & 24 deletions machines/x220/disko-config.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,30 @@
{ lib, config, ... }:
{

boot.initrd.postDeviceCommands = ''
mkdir /btrfs_tmp
mount -t btrfs -o subvol=root,defaults ${config.disko.devices.disk.main.device} /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
'';
#boot.initrd.postDeviceCommands = ''
#mkdir /btrfs_tmp
#mount -t btrfs -o subvol=root,defaults ${config.disko.devices.disk.main.device} /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
#'';

disko.devices = {
disk = {
Expand Down
76 changes: 76 additions & 0 deletions machines/x220/disko.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
device ? throw "Set this to your disk device, e.g. /dev/sda",
...
}: {
disko.devices = {
disk.main = {
inherit device;
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
esp = {
name = "ESP";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
swap = {
size = "13G";
content = {
type = "swap";
resumeDevice = true;
};
};
root = {
name = "root";
size = "100%";
content = {
type = "lvm_pv";
vg = "root_vg";
};
};
};
};
};
lvm_vg = {
root_vg = {
type = "lvm_vg";
lvs = {
root = {
size = "100%FREE";
content = {
type = "btrfs";
extraArgs = ["-f"];

subvolumes = {
"/root" = {
mountpoint = "/";
};

"/persist" = {
mountOptions = ["subvol=persist" "noatime"];
mountpoint = "/persist";
};

"/nix" = {
mountOptions = ["subvol=nix" "noatime"];
mountpoint = "/nix";
};
};
};
};
};
};
};
};
}
2 changes: 1 addition & 1 deletion machines/x220/hardware-configuration.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
./disko-config.nix
(import ./disko.nix { device = "/dev/sda"; })
];

boot.loader.systemd-boot.enable = true;
Expand Down

0 comments on commit 146b495

Please sign in to comment.