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

    settings = {
      theme = "catppuccin_macchiato";
      editor = {
        line-number = "relative";
        lsp.display-messages = true;
        lsp.display-inlay-hints = true;
        cursor-shape = {
          insert = "bar";
          normal = "block";
          select = "underline";
        };
        cursorline = true;
        bufferline = "always";
        color-modes = true;
        soft-wrap = {
          enable = true;
          max-wrap = 25;
          wrap-indicator = "";
        };
      };
    };
    languages = {
      language = [
        {
          name = "python";
          language-id = "python";
          auto-format = true;
          file-types = ["py"];
          language-servers = ["ruff" "scls"];
        }
        {
          name = "typst";
          language-id = "typst";
          auto-format = false;
          file-types = ["typ"];
          language-servers = ["typst-lsp" "scls"];
        }
        {
          name = "rust";
          language-id = "rust";
          auto-format = true;
          file-types = ["rs"];
          roots = ["Cargo.lock"];
          language-servers = ["rust-analyzer" "scls"];
        }
        {
          name = "stub";
          scope = "text.stub";
          file-types = [];
          shebangs = [];
          roots = [];
          auto-format = false;
          language-servers = ["scls"];
        }
        {
          name = "nix";
          language-id = "nix";
          auto-format = true;
          file-types = ["nix"];
          roots = ["flake.lock" "flake.nix"];
          language-servers = ["nil" "scls"];
          formatter = {
            command = "alejandra";
            args = ["-q"];
          };
        }
      ];
      language-server = {
        ruff = {
          command = "ruff-lsp";
        };
        typst-lsp = {
          command = "typst-lsp";
        };
        rust-analyzer = {
          command = "rust-analyzer";
        };
        nil = {
          command = "nil";
        };
        scls = {
          command = "simple-completion-language-server";
          config = {
            max_completion_items = 20;
            snippets_first = true;
            feature_words = true;
            feature_snippets = true;
            feature_unicode_input = true;
            feature_paths = true;
          };
        };
      };
    };
  };
  home.file = {
    "helix" = {
      source = ./snippets.toml;
      target = ".config/helix/external-snippets.toml";
    };
  };
}