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

{
  imports = [ ];

  options.me = {
    launch_keyboard.enable = lib.mkOption {
      type = lib.types.bool;
      default = false;
      example = true;
      description = "Whether we want to install launch_keyboard.";
    };
  };

  config = lib.mkIf (config.me.launch_keyboard.enable && config.me.graphical) {
    environment.systemPackages = with pkgs; [
      system76-keyboard-configurator
      dfu-programmer # For flashing keyboard https://support.system76.com/articles/launch_2-firmware-update/
      avrdude # For flashing keyboard https://support.system76.com/articles/launch_2-firmware-update/
      lxqt.lxqt-policykit # Need a polkit agent to launch the keyboard configurator
    ];

    systemd = {
      user.services.lxqt-policykit-agent = {
        description = "lxqt-policykit-agent";
        wantedBy = [ "graphical-session.target" ];
        wants = [ "graphical-session.target" ];
        after = [ "graphical-session.target" ];
        serviceConfig = {
          Type = "simple";
          ExecStart = "${pkgs.lxqt.lxqt-policykit}/bin/lxqt-policykit-agent";
          Restart = "on-failure";
          RestartSec = 1;
          TimeoutStopSec = 10;
        };
      };
    };
  };
}
