{
  pkgs,
  lib,
  config,
  inputs,
  ...
}: {
  options.mods.helix.enable =
    lib.mkEnableOption "enables helix";

  config = lib.mkIf config.mods.terminal.development.enable {
    home.packages = with pkgs; [
      # Nix
      nil

      # Rust
      rust-analyzer
      lldb_18

      # Shaders
      glsl_analyzer
      wgsl-analyzer

      # Python
      black
    ];

    programs.helix = {
      enable = true;
      package = pkgs.evil-helix;

      settings = {
        keys.normal = {
          "esc" = ["collapse_selection" "keep_primary_selection"];
          "Z" = {
            "Q" = ":quit!";
            "Z" = ":write-quit!";
          };
          "V" = ["select_mode" "extend_to_line_bounds"];
        };
        editor = {
          line-number = "relative";
          completion-replace = true;
          bufferline = "always";
          rulers = [80];
          soft-wrap.enable = true;
          indent-guides.render = true;
          cursor-shape = {
            normal = "block";
            insert = "bar";
            select = "underline";
          };
        };
      };

      languages.language-server = {
        glsl.command = "${pkgs.glsl_analyzer}/bin/glsl_analyzer";
        wgsl.command = "${pkgs.wgsl-analyzer}/bin/wgsl-analyzer";
      };

      languages.language = [
        {
          name = "nix";
          auto-format = true;
          formatter.command = "${pkgs.nixfmt-classic}/bin/nixfmt";
        }
        {
          name = "rust";
          auto-format = true;
          formatter.command = "rustfmt";
        }
        {
          name = "glsl";
          language-servers = ["glsl"];
        }
        {
          name = "wgsl";
          language-servers = ["wgsl"];
        }
        {
          name = "python";
          auto-format = true;
          formatter = {
            command = "${pkgs.black}/bin/black";
            args = ["-" "--quiet" "--line-length=79"];
          };
        }
      ];
    };
  };
}
