typioca: 2.7.0 -> 2.8.0
[NixPkgs.git] / nixos / modules / programs / i3lock.nix
blob466ae59c9277f60f1632ce8b51e52e7eb621d0a1
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
7   cfg = config.programs.i3lock;
9 in {
11   ###### interface
13   options = {
14     programs.i3lock = {
15       enable = mkEnableOption (mdDoc "i3lock");
16       package = mkOption {
17         type        = types.package;
18         default     = pkgs.i3lock;
19         defaultText = literalExpression "pkgs.i3lock";
20         example     = literalExpression ''
21           pkgs.i3lock-color
22         '';
23         description = mdDoc ''
24           Specify which package to use for the i3lock program,
25           The i3lock package must include a i3lock file or link in its out directory in order for the u2fSupport option to work correctly.
26         '';
27       };
28       u2fSupport = mkOption {
29         type        = types.bool;
30         default     = false;
31         example     = true;
32         description = mdDoc ''
33           Whether to enable U2F support in the i3lock program.
34           U2F enables authentication using a hardware device, such as a security key.
35           When U2F support is enabled, the i3lock program will set the setuid bit on the i3lock binary and enable the pam u2fAuth service,
36         '';
37       };
38     };
39   };
41   ###### implementation
43   config = mkIf cfg.enable {
45     environment.systemPackages = [ cfg.package ];
47     security.wrappers.i3lock = mkIf cfg.u2fSupport {
48       setuid = true;
49       owner = "root";
50       group = "root";
51       source = "${cfg.package.out}/bin/i3lock";
52     };
54     security.pam.services.i3lock.u2fAuth = cfg.u2fSupport;
56   };