{config, ...}: {
  home-manager.users.jade = {
    pkgs,
    pkgs-stable,
    ...
  }: {
    home = {
      sessionVariables.EDITOR = "hx";
      packages = [
        pkgs.wl-clipboard-rs
        pkgs.nil
        pkgs.vscode-langservers-extracted
        pkgs.nodePackages.typescript-language-server
        pkgs.emmet-language-server
        pkgs.jdt-language-server
        pkgs.tinymist
        pkgs.typstyle
      ];
    };
    programs.helix = {
      enable = true;
      defaultEditor = true;
      settings = {
        theme = "gruvbox_dark_hard";
        editor = {
          line-number = "relative";
          bufferline = "multiple";
          color-modes = true;
          cursorline = true;
          auto-save = {
            after-delay.enable = true;
            after-delay.timeout = 10000;
          };
          auto-format = true;
          end-of-line-diagnostics = "hint";
          # slightly optimized based on my layout
          jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx";
          clipboard-provider = "wayland";
          inline-diagnostics = {
            cursor-line = "hint";
          };
          lsp = {
            display-messages = true;
            display-inlay-hints = true;
          };
          popup-border = "popup";
          shell = ["nu" "-c"];
          statusline.left = [
            "mode"
            "spinner"
            "spacer"
            "version-control"
            "file-name"
            "diagnostics"
            "read-only-indicator"
            "file-modification-indicator"
            "spacer"
          ];

          statusline.right = [
            "workspace-diagnostics"
            "register"
            "position"
            "selections"
            "file-encoding"
            "file-type"
          ];
          idle-timeout = 50;
          completion-timeout = 100;
          indent-guides = {
            render = true;
            character = "│";
            skip-levels = 3;
          };
          soft-wrap = {
            enable = true;
          };
          whitespace = {
            render = {
              space = "none";
              tab = "all";
              newline = "none";
            };
            characters = {
              nbsp = "·";
              tab = "→";
            };
          };
        };
        keys = {
          normal = {
            space."=" = ":fmt";
            space.space = "@[<space>]<space>";

            # smart tab++
            tab = "move_parent_node_end";
            S-tab = "move_parent_node_start";
            A-S = "@S[\\s]+<ret>";
            "'" = {
              D = "@<C-w>sgd";
              F = "@<C-w>sgy";
              d = "@<C-w>vgd";
              f = "@<C-w>vgy";
              h = ":toggle-option lsp.display-inlay-hints";
              t = "@|flip-bool<ret>";
            };
          };
          insert = {
            up = "no_op";
            down = "no_op";
            left = "no_op";
            right = "no_op";
            pageup = "no_op";
            pagedown = "no_op";
            home = "no_op";
            end = "no_op";

            # smart tab ++
            S-tab = "move_parent_node_start";
          };
          select = {
            # smart tab++
            tab = "extend_parent_node_end";
            S-tab = "extend_parent_node_start";
          };
        };
      };
      languages = {
        language-server = {
          "nu-builtin-lsp" = {
            command = "${config.users.defaultUserShell}/bin/nu";
            args = ["--lsp"];
          };
          "rust-analyzer" = {
            config = {
              check.command = "check";
              completion.snippets.custom = {
                "pub fn" = {
                  prefix = ["pfn" "pubfn"];
                  postfix = ["pfn"];
                  body = [
                    "pub fn $\{receiver\}() {"
                    "\\t$1"
                    "}"
                  ];
                  scope = "type";
                };
              };
              completion.termSearch.enable = true;
              diagnostics.enable = true;
              inlayHints = {
                bindingModeHints.enable = true;
                closureCaptureHints.enable = true;
                closureReturnTypeHints.enable = true;
                discriminantHints.enable = true;
                expressionAdjustmentHints = {
                  hideOutsideUnsafe = true;
                };
                lifetimeElisionHints.enable = "skip_trivial";
              };
              interpret.tests = true;
              lens = {
                references = {
                  adt.enable = true;
                  trait.enable = true;
                };
              };
              typing.autoClosingAngleBrackets.enable = true;
            };
          };
          "emmet-language-server" = {
            command = "emmet-language-server";
            args = ["--stdio"];
          };
          "psalm" = {
            command = "psalm";
            args = ["--language-server"];
          };
          "tinymist" = {
            config = {
              exportPdf = "onType";
              formatterMode = "typstyle";
            };
          };
        };
        language = [
          {
            name = "nu";
            language-servers = ["nu-builtin-lsp"];
          }
          {
            name = "php";
            language-servers = ["psalm"];
          }
          {
            name = "nix";
            formatter = {
              command = "${pkgs.alejandra}/bin/alejandra";
              args = ["--quiet"];
            };
            auto-format = true;
          }
          {
            name = "html";
            roots = [".git"];
            language-servers = ["vscode-html-language-server" "emmet-language-server"];
            auto-format = false;
          }
        ];
      };
    };
  };
}