{ povSelf, hostConfig, config, lib, pkgs, ... }: let inherit (lib) types; cfg = lib.getAttrFromPath povSelf config; cfgRoot = lib.getAttrFromPath (lib.remove [ "hardware" "fpint" ] povSelf) config; in { options = { enable = { type = types.bool; default = false; }; enableGoodixDriver = { type = types.bool; default = false; }; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { services.fprintd.enable = true; modules.filesystem.impermanence.system.dirs = [ "/var/lib/fprint" ]; } (lib.mkIf cfg.enableGoodixDriver { assertions = [ { assertion = cfg.enableGoodixDriver -> cfgRoot.modules.unfree.enable; message = '' The hardware.fprint.enableGoodixDriver option uses unfree software. To use it you need to set modules.unfree.enable to true. ''; } ]; modules.unfree.list = [ "libfprint-2-tod1-goodix" ]; services.fprintd.tod = { enable = lib.mkDefault true; driver = lib.mkDefault pkgs.libfprint-2-tod1-goodix; }; }) ] ); }