Compare commits

...

6 commits

9 changed files with 134 additions and 7 deletions

View file

@ -29,8 +29,10 @@ in
# These imports will be scoped under this key so all settings
# in them will be added to `home-manager.users.${username}`..
imports = [
./misc
./packages
./programs
./impermanence
];
config = {

View file

@ -0,0 +1,29 @@
{
lib,
osConfig,
inputs,
...
}: let
inherit (lib) mkIf;
cfg = osConfig.myOptions.system.impermanence.home;
in {
imports = [ inputs.impermanence.nixosModules.home-manager.impermanence ];
config = mkIf cfg.enable {
home.persistence."${cfg.persistentMountPoint}" = {
directories = [
".cache/nix"
".cache/nix-index"
] ++ cfg.extraDirectories;
files = [
] ++ cfg.extraFiles;
# Allow other users (such as root), to access files through the bind
# mounted directories listed in `directories`. Useful for `sudo` operations,
# Docker, etc. Requires NixOS configuration programs.fuse.userAllowOther = true;
allowOther = true;
};
};
}

10
home/misc/dconf.nix Normal file
View file

@ -0,0 +1,10 @@
{
dconf.settings = {
# This is like a system-wide dark mode swithc that some apps respect
# Equivalent of the following dconf command:
# `conf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'"`
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
}

5
home/misc/default.nix Normal file
View file

@ -0,0 +1,5 @@
{
imports = [
./dconf.nix
];
}

View file

@ -37,7 +37,47 @@
sound.enable = true;
bluetooth.enable = true;
# TODO: Impermanence
impermanence = {
root = {
enable = true;
# Some people use /nix/persist/system for this, leaving persistent files in /nix subvolume
# I much prefer using a standalone subvolume for this though.
persistentMountPoint = "/persist";
extraDirectories = [
"/var/log"
];
};
home = {
enable = true;
persistentMountPoint = "/persist/home";
extraDirectories = [
"Downloads"
"Personal"
"Media"
"dots"
".local/share/gnupg"
".local/share/wakatime"
".local/share/nvim"
".local/state/nvim"
".local/share/zsh"
".local/cargo"
".local/go"
];
extraFiles = [
".config/git/git-credentials"
];
};
# Configure automatic root subvolume wiping on boot from initrd
autoWipeBtrfs = {
enable = true;
devices."/dev/disk/by-label/NIXOS-FS".subvolumes = [ "root" ];
};
};
};
device = {

View file

@ -34,12 +34,6 @@
neededForBoot = true;
};
fileSystems."/home" =
{ device = "/dev/disk/by-label/NIXOS-FS";
fsType = "btrfs";
options = [ "subvol=home" "noatime" "compress=zstd:3" ];
};
fileSystems."/data" =
{ device = "/dev/disk/by-label/NIXOS-FS";
fsType = "btrfs";

View file

@ -34,6 +34,47 @@ in
Path to a persistent directory (usually a mount point to a
standalone partition / subvolume), which will hold the persistent
system state files.
This should point to the entire persistent partition, this setup
then expects this directory to contain `passwords` and `system` subdirectories.
'';
};
};
home = {
enable = mkEnableOption ''
the Impermanence module for persisting important state directories.
This requires home-manager.
'';
extraFiles = mkOption {
default = [];
type = types.listOf types.str;
example = literalExpression ''[".zshrc"]'';
description = ''
Additional files in home to link to persistent storage.
'';
};
extraDirectories = mkOption {
default = [];
type = types.listOf types.str;
example = literalExpression ''["Downloads"]'';
description = ''
Additional directories in home to link to persistent storage.
'';
};
persistentMountPoint = mkOption {
default = "/persist/home";
description = ''
Path to a persistent directory (usually a mount point to a
standalone partition / subvolume), which will hold the persistent
system state files.
This does not expect any subdirectories, all of the persistent home files
will be put directly in here. The user should be the owner of this direcotry.
'';
};
};

View file

@ -16,6 +16,9 @@ in {
# gnome's keyring manager
seahorse.enable = true;
# registry for linux (thanks to Gnome)
dconf.enable = true;
};
};
}

View file

@ -32,6 +32,9 @@ in
"/etc/nixos" # NixOS configuration source
"/etc/NetworkManager/system-connections" # saved network connections
"/var/db/sudo" # keeps track of who got the sudo lecture already
# "/var/log" # I sometimes use a subvolume for this, added manually if not
"/var/lib/nixos"
"/var/lib/bluetooth"
"/var/lib/systemd/coredump" # captured coredumps
] ++ cfg.extraDirectories;