# Basic system-wide text editor configuration.
{
  config,
  lib,
  namespace,
  ...
}:

let
  cfg = config.${namespace}.editor;
in
{
  options = {
    ${namespace}.editor = lib.mkOption {
      description = "Selects the default text editor.";
      default = "nano";
      type = lib.types.enum [
        "vim"
        "nano"
        "emacs"
      ];
    };
  };

  config = lib.mkMerge [
    (lib.mkIf (cfg == "emacs") {
      services.emacs = {
        enable = true;
        defaultEditor = true;
      };
    })
    (lib.mkIf (cfg == "nano") {
      programs.nano = {
        enable = true;
        syntaxHighlight = true;
      };
      environment.variables."EDITOR" = "nano";
    })
    (lib.mkIf (cfg == "vim") { programs.vim.defaultEditor = true; })
  ];
}