{
  config,
  pkgs,
  lib,
  ...
}:

let
  inherit (config.nmasur.settings) username;
  cfg = config.services.betterlockscreen;
  # Disable Dunst so that it's not attempting to reach a non-existent dunst service
  betterlockscreen = pkgs.betterlockscreen.override { withDunst = cfg.dunst.enable; };
in

{

  options.services.betterlockscreen = {
    enable = lib.mkEnableOption "Betterlockscreen X server display lock";
    dunst.enable = lib.mkEnableOption "Dunst integration";
  };

  config = lib.mkIf cfg.enable {

    # Ref: https://github.com/betterlockscreen/betterlockscreen/blob/next/system/betterlockscreen%40.service
    systemd.services.lock = {
      enable = true;
      description = "Lock the screen on resume from suspend";
      before = [
        "sleep.target"
        "suspend.target"
      ];
      serviceConfig = {
        User = username;
        Type = "simple";
        Environment = "DISPLAY=:0";
        TimeoutSec = "infinity";
        ExecStart = "${lib.getExe betterlockscreen} --lock --display 1 --blur 0.5 --span";
        ExecStartPost = "${lib.getExe' pkgs.coreutils-full "sleep"} 1";
      };
      wantedBy = [
        "sleep.target"
        "suspend.target"
      ];
    };
  };
}