{ config, lib, ... }:

let
  cfg = config.features.cli.${service};
  service = "kanata";

  inherit (lib)
    mkEnableOption
    mkIf
    mkOption
    types
    ;
in
{
  options.features.cli.${service} = {
    enable = mkEnableOption "Enable ${service}";

    devices = mkOption {
      default = [ ];
      type = types.listOf types.str;
    };
  };

  config = mkIf cfg.enable {
    services.kanata = {
      enable = true;

      keyboards = {
        default = {
          devices = cfg.devices;

          extraDefCfg = "process-unmapped-keys yes";

          config = ''
            (defsrc
              caps a s d f j k l ;
            )

            (defvar
              tap-time 150
              hold-time 200
              hold-time-slow 300
            )

            (defalias
              escctrl (tap-hold 100 100 esc lctl)
              a (tap-hold $tap-time $hold-time-slow a lmet)
              s (tap-hold $tap-time $hold-time-slow s lalt)
              d (tap-hold $tap-time $hold-time d lsft)
              f (tap-hold $tap-time $hold-time f lctl)
              j (tap-hold $tap-time $hold-time j rctl)
              k (tap-hold $tap-time $hold-time k rsft)
              l (tap-hold $tap-time $hold-time-slow l ralt)
              ; (tap-hold $tap-time $hold-time-slow ; rmet)
            )

            (deflayer base
              @escctrl @a @s @d @f @j @k @l @;
            )
          '';
        };
      };
    };
  };
}