{lib, ...}: let
  inherit (lib) mkEnableOption mkOption types;
in {
  options.modules.system.programs = {
    editors = {
      emacs.enable = mkEnableOption "Emacs operatig system";
      neovim.enable = mkEnableOption "Neovim text editor";
      helix.enable = mkEnableOption "Helix text editor";
      kakoune.enable = mkEnableOption "Kakoune text editor";
    };

    discord.enable = mkEnableOption "Discord messenger";
    spotify.enable = mkEnableOption "Spotify music client";
    zathura.enable = mkEnableOption "Zathura pdf viewer";
    nextcloud.enable = mkEnableOption "Nextcloud sync client";
    firefox.enable = mkEnableOption "Firefox web browser";
    zellij.enable = mkEnableOption "Zellij terminal multiplexer";

    terminals = {
      foot.enable = mkEnableOption "Foot terminal emulator";
      kitty.enable = mkEnableOption "Kitty terminal emulator";
    };

    git = {
      signingKey = mkOption {
        type = types.str;
        default = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILPiRe9OH/VtWFWyy5QbAVcN7CLxr4zUtRCwmxD6aeN6";
        description = "The default gpg key used for signing commits";
      };
    };
    default = {
      terminal = mkOption {
        type = types.enum ["foot" "kitty"];
        default = "foot";
      };
      fileManager = mkOption {
        type = types.enum ["thunar" "dolphin" "nemo"];
        default = "thunar";
      };
      browser = mkOption {
        type = types.enum ["firefox" "librewolf" "chromium"];
        default = "firefox";
      };
      editor = mkOption {
        type = types.enum ["neovim" "helix" "emacs"];
        default = "emacs";
      };
      launcher = mkOption {
        type = types.enum ["anyrun" "rofi" "wofi"];
        default = "anyrun";
      };
    };
  };
}
