diff --git a/configs/nixos/hosts/pikachu/default.nix b/configs/nixos/hosts/pikachu/default.nix index 06845e7..a36bb26 100644 --- a/configs/nixos/hosts/pikachu/default.nix +++ b/configs/nixos/hosts/pikachu/default.nix @@ -60,7 +60,6 @@ modules.zfs = { enable = true; - hostId = "2346edbd"; pools.pikachu = { }; }; diff --git a/configs/nixos/modules/zfs.nix b/configs/nixos/modules/zfs.nix index 8c340d8..0c8eb5f 100644 --- a/configs/nixos/modules/zfs.nix +++ b/configs/nixos/modules/zfs.nix @@ -11,18 +11,6 @@ in options.modules.zfs = { enable = lib.mkEnableOption "importing durable ZFS pools that hold service state"; - hostId = lib.mkOption { - type = lib.types.strMatching "[0-9a-f]{8}"; - example = "deadbeef"; - description = '' - This host's 8-hex-digit ZFS host id, written to `networking.hostId`. ZFS - stamps an imported pool with the importing host's id, so a pool still - held by another machine is refused rather than silently dual-mounted. It - must be fixed for the machine and distinct across machines that can reach - the same pool. - ''; - }; - pools = lib.mkOption { type = lib.types.attrsOf (lib.types.attrsOf lib.types.path); default = { }; @@ -49,8 +37,10 @@ in # The ZFS stack in the kernel and boot, needed even where the root filesystem is another kind. boot.supportedFilesystems = [ "zfs" ]; - # ZFS refuses to import a pool without a host id to stamp its ownership onto. - networking.hostId = cfg.hostId; + # Derive a stable 32-bit host ID from the configured hostname. + networking.hostId = builtins.substring 0 8 ( + builtins.hashString "sha256" config.networking.hostName + ); # The declared pools are imported at boot, distinct from any pool backing the root filesystem. boot.zfs.extraPools = lib.attrNames cfg.pools;