{ pkgs, treefmt }: let dictionary = [ "Asahi" "LLMs" "LTeX" "NixOS" ]; tomlFormatter = pkgs.formats.toml { }; valeDictionary = { directory = "./.vale/styles/config/vocabularies/General"; filename = "accept.txt"; content = builtins.concatStringsSep "\n" dictionary; file = builtins.toFile valeDictionary.filename valeDictionary.content; }; typosConfig = { default.extendWords = builtins.listToAttrs ( builtins.map (x: { name = x; value = x; }) dictionary ); }; typosConfigFile = tomlFormatter.generate "typos.toml" typosConfig; in { helix.language-server = { # https://ltex-plus.github.io/ltex-plus/supported-languages.html ltex-ls-plus = { command = "${pkgs.ltex-ls-plus}/bin/ltex-ls-plus"; config.ltex.dictionary.en-US = dictionary; }; # https://vale.sh/docs/formats/code vale-ls.command = "${pkgs.vale-ls}/bin/vale-ls"; # https://writewithharper.com/docs/integrations/language-server#Supported-Languages harper-ls.command = "${pkgs.harper}/bin/harper-ls"; typos = { command = "${pkgs.typos-lsp}/bin/typos-lsp"; config.config = typosConfigFile.outPath; }; }; pre-commit = { typos = { enable = true; settings = { configPath = typosConfigFile.outPath; locale = "en-us"; }; excludes = [ ".vale/*" "home/vencord.nix" ]; }; vale.enable = true; }; treefmt.programs.typos = { enable = true; configFile = typosConfigFile.outPath; locale = "en-us"; }; devshell = { commands = [ { help = "sync vale configuration"; name = "vale-sync"; command = "${pkgs.vale}/bin/vale sync"; } ]; packages = [ pkgs.vale ]; devshellStartup = { vale_config.text = '' mkdir -p ${valeDictionary.directory} ${pkgs.uutils-coreutils-noprefix}/bin/ln -fs ${valeDictionary.file} ${valeDictionary.directory}/${valeDictionary.filename} ''; }; }; }