-
-
Notifications
You must be signed in to change notification settings - Fork 19.1k
nixos/howdy: init #216245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
nixos/howdy: init #216245
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,71 @@ | ||
| { | ||
| config, | ||
| lib, | ||
| pkgs, | ||
| ... | ||
| }: | ||
| let | ||
| cfg = config.services.linux-enable-ir-emitter; | ||
| in | ||
| { | ||
| options = { | ||
| services.linux-enable-ir-emitter = { | ||
| enable = lib.mkEnableOption "" // { | ||
| description = '' | ||
| Whether to enable IR emitter hardware. Designed to be used with the | ||
| Howdy facial authentication. After enabling the service, configure | ||
| the emitter with `sudo linux-enable-ir-emitter configure`. | ||
| ''; | ||
| }; | ||
|
|
||
| package = lib.mkPackageOption pkgs "linux-enable-ir-emitter" { } // { | ||
| description = '' | ||
| Package to use for the Linux Enable IR Emitter service. | ||
| ''; | ||
| }; | ||
|
|
||
| device = lib.mkOption { | ||
| type = lib.types.str; | ||
| default = "video2"; | ||
| description = '' | ||
| IR camera device to depend on. For example, for `/dev/video2` | ||
| the value would be `video2`. Find this with the command | ||
| {command}`realpath /dev/v4l/by-path/<generated-driver-name>`. | ||
| ''; | ||
| }; | ||
| }; | ||
| }; | ||
|
|
||
| config = lib.mkIf cfg.enable { | ||
| environment.systemPackages = [ cfg.package ]; | ||
|
|
||
| # https://github.com/EmixamPP/linux-enable-ir-emitter/blob/7e3a6527ef2efccabaeefc5a93c792628325a8db/sources/systemd/linux-enable-ir-emitter.service | ||
| systemd.services.linux-enable-ir-emitter = | ||
| let | ||
| targets = [ | ||
| "suspend.target" | ||
| "sleep.target" | ||
| "hybrid-sleep.target" | ||
| "hibernate.target" | ||
| "suspend-then-hibernate.target" | ||
| ]; | ||
| in | ||
| { | ||
| description = "Enable the infrared emitter"; | ||
| # Added to match | ||
| # https://github.com/EmixamPP/linux-enable-ir-emitter/blob/6.1.2/boot_service/systemd/linux-enable-ir-emitter.service | ||
| # Prevents the program fail to detect the IR camera until a service | ||
| # restart. | ||
| preStart = '' | ||
| ${pkgs.kmod}/bin/modprobe uvcvideo | ||
| sleep 1 | ||
|
fufexan marked this conversation as resolved.
|
||
| ''; | ||
|
fufexan marked this conversation as resolved.
|
||
| script = "${lib.getExe cfg.package} --verbose run"; | ||
| serviceConfig.StateDirectory = "linux-enable-ir-emitter"; | ||
| serviceConfig.LogsDirectory = "linux-enable-ir-emitter"; | ||
|
|
||
| wantedBy = targets ++ [ "multi-user.target" ]; | ||
| after = targets ++ [ "dev-${cfg.device}.device" ]; | ||
| }; | ||
| }; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| { | ||
| config, | ||
| lib, | ||
| pkgs, | ||
| ... | ||
| }: | ||
| let | ||
| cfg = config.services.howdy; | ||
| settingsType = pkgs.formats.ini { }; | ||
|
|
||
| default_config = { | ||
| core = { | ||
| detection_notice = false; | ||
| timeout_notice = true; | ||
| no_confirmation = false; | ||
| suppress_unknown = false; | ||
| abort_if_ssh = true; | ||
| abort_if_lid_closed = true; | ||
| disabled = false; | ||
| use_cnn = false; | ||
| workaround = "off"; | ||
| }; | ||
|
|
||
| video = { | ||
| certainty = 3.5; | ||
| timeout = 4; | ||
| device_path = "/dev/video2"; | ||
| warn_no_device = true; | ||
| max_height = 320; | ||
| frame_width = -1; | ||
| frame_height = -1; | ||
| dark_threshold = 60; | ||
| recording_plugin = "opencv"; | ||
| device_format = "v4l2"; | ||
| force_mjpeg = false; | ||
| exposure = -1; | ||
| device_fps = -1; | ||
| rotate = 0; | ||
| }; | ||
|
|
||
| snapshots = { | ||
| save_failed = false; | ||
| save_successful = false; | ||
| }; | ||
|
|
||
| rubberstamps = { | ||
| enabled = false; | ||
| stamp_rules = "nod 5s failsafe min_distance=12"; | ||
| }; | ||
|
|
||
| debug = { | ||
| end_report = false; | ||
| verbose_stamps = false; | ||
| gtk_stdout = false; | ||
| }; | ||
| }; | ||
| in | ||
| { | ||
| options = { | ||
| services.howdy = { | ||
| enable = lib.mkEnableOption "" // { | ||
| description = '' | ||
| Whether to enable Howdy and its PAM module for face recognition. See | ||
| `services.linux-enable-ir-emitter` for enabling the IR emitter support. | ||
|
|
||
| ::: {.caution} | ||
| Howdy is not a safe alternative to unlocking with your password. It | ||
| can be fooled using a well-printed photo. | ||
|
|
||
| Do **not** use it as the sole authentication method for your system. | ||
| ::: | ||
|
Comment on lines
+66
to
+71
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How do we reconcile this warning with the PAM rule that hardcodes
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. BTW @fufexan this comment seems still unresolved. TBH I've never dealt with pam in NixOS so I'm not sure how to help.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I said I'd come back to this and forgot. I'll take a look.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about adding a config option in the howdy module? It would allow choosing which
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. cc @Majiir
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, you could add a
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does the latest commit address this properly?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, that addresses the |
||
|
|
||
| ::: {.note} | ||
| By default, the {option}`config.services.howdy.control` option is set | ||
| to `"required"`, meaning it will act as a second-factor authentication | ||
| in most services. To change this, set the option to `"sufficient"`. | ||
| ::: | ||
| ''; | ||
| }; | ||
|
|
||
| package = lib.mkPackageOption pkgs "howdy" { }; | ||
|
|
||
| control = lib.mkOption { | ||
| type = lib.types.str; | ||
| default = "required"; | ||
| description = '' | ||
| PAM control flag to use for Howdy. | ||
|
|
||
| Sets the {option}`security.pam.howdy.control` option. | ||
|
|
||
| Refer to {manpage}`pam.conf(5)` for options. | ||
| ''; | ||
| }; | ||
|
|
||
| settings = lib.mkOption { | ||
| inherit (settingsType) type; | ||
| default = default_config; | ||
| description = '' | ||
| Howdy configuration file. Refer to | ||
| <https://github.com/boltgolt/howdy/blob/d3ab99382f88f043d15f15c1450ab69433892a1c/howdy/src/config.ini> | ||
| for options. | ||
| ''; | ||
| }; | ||
| }; | ||
| }; | ||
|
|
||
| config = lib.mkMerge [ | ||
| (lib.mkIf cfg.enable { | ||
| environment.systemPackages = [ cfg.package ]; | ||
| environment.etc."howdy/config.ini".source = settingsType.generate "howdy-config.ini" cfg.settings; | ||
| assertions = [ | ||
| { | ||
| assertion = !(builtins.elem "v4l2loopback" config.boot.kernelModules); | ||
| message = "Adding 'v4l2loopback' to `boot.kernelModules` causes Howdy to no longer work. Consider adding 'v4l2loopback' to `boot.extraModulePackages` instead."; | ||
| } | ||
| ]; | ||
| }) | ||
| { | ||
| services.howdy.settings = lib.mapAttrsRecursive (name: lib.mkDefault) default_config; | ||
| } | ||
| ]; | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.