{ pkgs, ... }:
{
  programs.helix = {
    enable = true;

    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # languages Configuration 
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    languages = {
      language = [

        {
          name = "nix";
          auto-format = true;
          language-servers = [ "nixd" "nil" ];
          formatter = {
            command = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt";
            # command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
            # command = "${pkgs.alejandra}/bin/alejandra";
          };
        }

        {
          name = "bash";
          auto-format = true;
          language-servers = [ "bash-language-server" ];
          formatter = {
            command = "${pkgs.shfmt}/bin/shfmt";
            args = [ "-i" "2" "-ci" ];
          };
        }

        {
          name = "python";
          auto-format = true;
          language-servers = [ "pyright" ];
          formatter = {
            command = "${pkgs.black}/bin/black";
            args = [ "--quiet" "-" ];
          };
        }

        {
          name = "rust";
          auto-format = false;
          file-types = [ "rs" ];
          language-servers = [ "rust-analyzer" ];
          formatter = { command = "${pkgs.rustfmt}/bin/rustfmt"; };
        }

        {
          name = "zig";
          auto-format = true;
          language-servers = [ "zsl" ];
          formatter = { command = "${pkgs.zig}/bin/zig"; };
        }

        {
          name = "html";
          auto-format = true;
          language-servers = [ "vscode-langservers-extracted" ];
        }

        {
          name = "javascript";
          auto-format = true;
          language-servers = [ "typescript-language-server" ];
        }
      ];

      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # Language Server Protocol Configuration 
      # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      language-servers = {

        nil = { command = "${pkgs.nixd}/bin/nixd"; };

        rust-analyzer = {
          config = {
            check = { command = "${pkgs.clippy}/bin/cargo-clippy"; };
            # cargo.features = "all";
            checkOnSave.command = "${pkgs.clippy}/bin/cargo-clippy";
            completion.autoimport.enable = true;
          };
        };

        typescript-language-server = {
          command = "${pkgs.nodePackages_latest.typescript-language-server}/bin/typescript-language-server";
          args = [ "--stdio" ];
        };
      };
    };

    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Needed Packages
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    extraPackages = with pkgs; [
      # DEBUG
      lldb_18

      # lldb-vscode :
      # c
      # cpp

      # = < NIX > =
      # = Language Server Protocol =
      nil
      nixd
      # = DAP =

      # = Formatter =
      # nixfmt
      nixfmt-rfc-style
      # alejandra

      # = < Bash > =
      # = Language Server Protocol =
      nodePackages.bash-language-server
      # = DAP =
      # = Formatter =
      shfmt

      # = < Python > =
      # = Language Server Protocol =
      pyright
      # = DAP =
      # = Formatter =
      black

      # = < Rust > =
      # = Language Server Protocol =
      rust-analyzer
      # = DAP =
      lldb
      # = Formatter =
      # rust-fmt
      clippy # Good place ?

      # = < lua > =
      # = Language Server Protocol =
      lua-language-server
      # = DAP =
      # = Formatter =

      # = < Zig > =
      # = Language Server Protocol =
      zls
      # = DAP =
      # lldb (commented because already called)
      # = Formatter =
      zig

      # = < HTML > =
      # = Language Server Protocol =
      # vscode-html-language-server
      vscode-langservers-extracted
      # = DAP =
      # = Formatter =

      # = < CSS > =
      # = Language Server Protocol =
      nodePackages_latest.typescript-language-server
      # = DAP =
      # = Formatter =

      # = Language Server Protocol =
      docker-compose-language-service
      dockerfile-language-server-nodejs
      yaml-language-server
      ansible-language-server
    ];
  };
}
