local utils = require 'custom.utils' local ltex_fts = { 'bibtex', 'bib', 'tex', 'typst', 'latex', 'gitcommit', 'markdown', 'org', 'restructuredtext', 'rsweave', 'quarto', 'rmd', 'context', 'text', 'html', 'pandoc', 'xhtml', 'plaintex', 'quarto', 'mail', 'mdx', 'rmd', 'rnoweb', 'rst', } local map = function(keys, func, desc) vim.keymap.set('n', keys, func, { buffer = vim.buf, desc = 'LSP[LTEX]: ' .. desc }) end LTEX_SETTINGS = { capabilities = CAPABILITIES, on_attach = function(client, bufnr) DEFAULT_ON_ATTACH(client, bufnr) end, autostart = false, filetypes = ltex_fts, settings = { ltex = { checkFrequency = 'save', -- shut up while i'm just editing, see -- specific language (such as en-GB or de-DE is recommended, but I -- want multilingual) language = 'auto', enabled = ltex_fts, additionalRules = { enablePickyRules = true, -- thats cool, but often adds diagnostics in -- places where a german might confuse words that are similar -- between english and german REGARDLESS of context. I seem to use the -- english words only in the proper contexts, so leaving this on -- just adds annoying hints like 'Hinweis: "list/NN.*" (English) bedeutet "Liste", -- "Verzeichnis" (German). Meinten Sie vielleicht 'cunning', 'trick'?' -- everytime I use the word "list". I liked that this makes the hints be -- in german regardless of the language I'm working in through... motherTongue = 'de', }, }, }, } -- load token and additional languagetool items later if specified local do_not_use_api_key = true local has_api_key, apiKey = utils.try_require 'custom.secret.languagetool' if not do_not_use_api_key and has_api_key and apiKey ~= '' then LTEX_SETTINGS = vim.tbl_deep_extend('keep', LTEX_SETTINGS, { settings = { languageToolOrg = { apiKey = apiKey, username = 'accounts@cscherr.de', }, languageToolHttpServerUrl = 'https://api.languagetoolplus.com/', }, }) else if not do_not_use_api_key then print 'apiKey for ltex/languagetool is not specified' end end return { 'barreiroleo/ltex_extra.nvim', ft = ltex_fts, dependencies = { 'neovim/nvim-lspconfig' }, config = function() require('ltex_extra').setup { load_langs = { 'en-US', 'de-DE' }, init_check = true, server_opts = LTEX_SETTINGS, -- or use lspconfig regularly } map('tS', function() vim.opt.spell = true -- manually enable spell with `set spell` or `ts` vim.opt.spelllang = 'en,de_de' vim.opt.spellsuggest = 'double,50,timeout:5000' vim.cmd 'LspStart ltex' end, 'Enable spell checking with languagetool') end, }