Files
nix-config/modules/boot/zfs.org
T
phundrak ba018ef841 refactor: change to litterate config
Configuration is now held by the `.org` files. All `.nix` files are
tangled from the org-mode files.
2026-10-06 12:40:58 +02:00

63 lines
1.6 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#+title: ZFS Support
#+setupfile: ../headers
* ZFS Support
Enabling ZFS is quite straightforward on my machines. In my module
=nixos.zfs=, I expose two options: which ZFS pools to import, and
whether to force-import the root pool. But first, here’s the skeleton
of my module.
#+begin_src nix :tangle yes
{
flake.modules.nixos.zfs = {
lib,
config,
...
}:
with lib; let
cfg = config.mySystem.boot;
in {
<<options>>
<<enable>>
<<pools>>
<<force-import-root>>
};
}
#+end_src
The main option is the list of pools, which I pass directly to the
standard NixOS configuration.
#+name: options
#+begin_src nix
options.mySystem.boot.zfs = {
pools = mkOption {
type = types.listOf types.str;
default = [];
};
forceImportRoot = mkEnableOption "Force-import the ZFS root pool at boot, even if it looks already imported elsewhere";
};
#+end_src
Now, I can enable ZFS on the system importing the current module.
#+name: enable
#+begin_src nix
config.boot.supportedFilesystems = ["zfs"];
#+end_src
And lastly, passing the list of pools to the standard NixOS option is
quite simple.
#+name: pools
#+begin_src nix
config.boot.zfs.extraPools = cfg.zfs.pools;
#+end_src
Force-importing the root pool can paper over a stale or mismatched
host ID, but it also risks mounting a pool that’s already imported
elsewhere and corrupting it, so NixOS is moving to disable it by
default. I’d rather keep that safety and only turn it back on for the
rare host (or the rare boot) that actually needs it.
#+name: force-import-root
#+begin_src nix
config.boot.zfs.forceImportRoot = cfg.zfs.forceImportRoot;
#+end_src