# Your text editor war arsenal.
{ config, options, lib, pkgs, ... }:

let cfg = config.modules.editors;
in {
  options.modules.editors = {
    neovim.enable = lib.mkEnableOption "Enable Neovim and its components";
    emacs = {
      enable = lib.mkEnableOption "Enable Emacs and all of its components";
      doom.enable =
        lib.mkEnableOption "Enable Doom Emacs-related dependencies.";
    };
    vscode.enable = lib.mkEnableOption "Enable Visual Studio Code";
  };

  config = lib.mkMerge [
    (lib.mkIf cfg.emacs.enable {
      environment.systemPackages = with pkgs;
        [ emacs ] ++ (if cfg.emacs.doom.enable then [
          # The required depdencies.
          git
          ripgrep
          gnutls
          emacs-all-the-icons-fonts

          # Optional dependencies.
          fd
          imagemagick
          zstd

          # Module dependencies
          # :checkers spell
          aspell
          aspellDicts.en
          aspellDicts.en-computers

          # :tools lookup
          wordnet

          # :lang org +roam2
          sqlite
        ] else
          [ ]);
    })

    (lib.mkIf cfg.neovim.enable {
      programs.neovim = {
        enable = true;
        defaultEditor = true;
        withNodeJs = true;
        withRuby = true;
      };

      environment.systemPackages = with pkgs; [ editorconfig-core-c ];
    })

    (lib.mkIf cfg.vscode.enable {
      environment.systemPackages = with pkgs; [ vscode editorconfig-core-c ];
    })
  ];
}