{
  config,
  lib,
  pkgs,
  ...
}:
let
  cfg = config.services.betterlockscreen;
in
{
  meta.maintainers = with lib.maintainers; [ sebtm ];

  options = {
    services.betterlockscreen = {
      enable = lib.mkEnableOption "betterlockscreen, a screen-locker module";

      package = lib.mkPackageOption pkgs "betterlockscreen" { };

      arguments = lib.mkOption {
        type = lib.types.listOf lib.types.str;
        default = [ ];
        description = "List of arguments appended to `./betterlockscreen --lock [args]`";
      };

      inactiveInterval = lib.mkOption {
        type = lib.types.int;
        default = 10;
        description = ''
          Value used for {option}`services.screen-locker.inactiveInterval`.
        '';
      };
    };
  };

  config = lib.mkIf cfg.enable {
    assertions = [
      (lib.hm.assertions.assertPlatform "services.betterlockscreen" pkgs lib.platforms.linux)
    ];

    home.packages = [ cfg.package ];

    services.screen-locker = {
      enable = true;
      inactiveInterval = cfg.inactiveInterval;
      lockCmd = "${cfg.package}/bin/betterlockscreen --lock ${lib.concatStringsSep " " cfg.arguments}";
    };
  };
}
