at master 1.9 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 ... 6}: 7let 8 cfg = config.programs.gtklock; 9 configFormat = pkgs.formats.ini { 10 listToValue = builtins.concatStringsSep ";"; 11 }; 12 13 inherit (lib) 14 types 15 mkOption 16 mkEnableOption 17 mkPackageOption 18 ; 19in 20{ 21 options.programs.gtklock = { 22 enable = mkEnableOption "gtklock, a GTK-based lockscreen for Wayland"; 23 24 package = mkPackageOption pkgs "gtklock" { }; 25 26 config = mkOption { 27 type = configFormat.type; 28 example = lib.literalExpression '' 29 { 30 main = { 31 idle-hide = true; 32 idle-timeout = 10; 33 }; 34 }''; 35 description = '' 36 Configuration for gtklock. 37 See [`gtklock(1)`](https://github.com/jovanlanik/gtklock/blob/master/man/gtklock.1.scd) man page for details. 38 ''; 39 }; 40 41 style = mkOption { 42 type = with types; nullOr str; 43 default = null; 44 description = '' 45 CSS Stylesheet for gtklock. 46 See [gtklock's wiki](https://github.com/jovanlanik/gtklock/wiki#Styling) for details. 47 ''; 48 }; 49 50 modules = mkOption { 51 type = with types; listOf package; 52 default = [ ]; 53 example = lib.literalExpression '' 54 with pkgs; [ 55 gtklock-playerctl-module 56 gtklock-powerbar-module 57 gtklock-userinfo-module 58 ]''; 59 description = "gtklock modules to load."; 60 }; 61 }; 62 63 config = lib.mkIf cfg.enable { 64 programs.gtklock.config.main = { 65 style = lib.mkIf (cfg.style != null) "${pkgs.writeText "style.css" cfg.style}"; 66 67 modules = lib.mkIf (cfg.modules != [ ]) ( 68 map (pkg: "${pkg}/lib/gtklock/${lib.removePrefix "gtklock-" pkg.pname}.so") cfg.modules 69 ); 70 }; 71 72 environment.etc."xdg/gtklock/config.ini".source = configFormat.generate "config.ini" cfg.config; 73 74 environment.systemPackages = [ cfg.package ]; 75 76 security.pam.services.gtklock = { }; 77 }; 78}