diff options
| author | Natasha Moongrave <natasha@256phi.eu> | 2026-04-28 09:51:24 +0200 |
|---|---|---|
| committer | Natasha Moongrave <natasha@256phi.eu> | 2026-04-28 09:51:24 +0200 |
| commit | 0aa9c299facc6e784354077c5d8890e923c97472 (patch) | |
| tree | 34904d4e7ddbb59bde08340eb21468f70357c1c9 | |
| parent | be64e545d9f78ad23712eae2230711fab2eb9766 (diff) | |
Add typst config to nvim
| -rw-r--r-- | home/mun/programs/nvim.nix | 459 |
1 files changed, 239 insertions, 220 deletions
diff --git a/home/mun/programs/nvim.nix b/home/mun/programs/nvim.nix index b1a41ce..5ebe518 100644 --- a/home/mun/programs/nvim.nix +++ b/home/mun/programs/nvim.nix @@ -8,6 +8,7 @@ alejandra black shfmt + typst # Language servers lua-language-server @@ -16,6 +17,7 @@ pyright bash-language-server texlab + tinymist ]; programs.neovim = { @@ -40,6 +42,7 @@ p.bash p.latex p.c + p.typst ])) # LSP @@ -77,230 +80,246 @@ ]; extraLuaConfig = '' - ------------------------------------------------- - -- LEADER - ------------------------------------------------- - vim.g.mapleader = " " - - ------------------------------------------------- - -- BASIC OPTIONS - ------------------------------------------------- - vim.opt.number = true - vim.opt.relativenumber = true - vim.opt.clipboard = "unnamedplus" - vim.opt.showtabline = 2 - vim.o.timeout = true - vim.o.timeoutlen = 300 - - ------------------------------------------------- - -- THEME - ------------------------------------------------- - require("catppuccin").setup({ - flavour = "mocha", - }) - vim.cmd.colorscheme("catppuccin") - - ------------------------------------------------- - -- GITSIGNS - ------------------------------------------------- - require("gitsigns").setup() - - ------------------------------------------------- - -- TREESITTER - ------------------------------------------------- - require("nvim-treesitter.configs").setup({ - highlight = { enable = true }, - indent = { enable = true }, - }) - - vim.opt.foldmethod = "expr" - vim.opt.foldexpr = "nvim_treesitter#foldexpr()" - vim.opt.foldenable = false - - ------------------------------------------------- - -- SNIPPETS - ------------------------------------------------- - require("luasnip.loaders.from_vscode").lazy_load() - - ------------------------------------------------- - -- COMPLETION - ------------------------------------------------- - local cmp = require("cmp") - local luasnip = require("luasnip") - - cmp.setup({ - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - mapping = cmp.mapping.preset.insert({ - ["<C-Space>"] = cmp.mapping.complete(), - ["<CR>"] = cmp.mapping.confirm({ select = true }), - }), - sources = { - { name = "nvim_lsp" }, - { name = "luasnip" }, - }, - }) - - require("nvim-autopairs").setup({}) - - ------------------------------------------------- - -- LSP - ------------------------------------------------- - local capabilities = require("cmp_nvim_lsp").default_capabilities() - - local servers = { - "lua_ls", - "nil_ls", - "rust_analyzer", - "pyright", - "bashls", - "texlab", - } - - for _, server in ipairs(servers) do - vim.lsp.config(server, { - capabilities = capabilities - }) - vim.lsp.enable(server) - end - - ------------------------------------------------- - -- LSP KEYMAPS - ------------------------------------------------- - vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition) - vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration) - vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation) - vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references) - vim.keymap.set("n", "lh", vim.lsp.buf.hover) - vim.keymap.set("n", "ln", vim.lsp.buf.rename) - vim.keymap.set("n", "la", vim.lsp.buf.code_action) - vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end) - - ------------------------------------------------- - -- DIAGNOSTICS - ------------------------------------------------- - vim.keymap.set("n", "lj", vim.diagnostic.goto_next) - vim.keymap.set("n", "lk", vim.diagnostic.goto_prev) - vim.keymap.set("n", "le", vim.diagnostic.open_float) - - ------------------------------------------------- - -- FORMATTER - ------------------------------------------------- - require("conform").setup({ - format_on_save = { - timeout_ms = 500, - lsp_format = "fallback", - }, - formatters_by_ft = { - lua = { "stylua" }, - nix = { "alejandra" }, - rust = { "rustfmt" }, - python = { "black" }, - bash = { "shfmt" }, - }, - }) - - require("Comment").setup() - - ------------------------------------------------- - -- TELESCOPE - ------------------------------------------------- - local builtin = require("telescope.builtin") - - require("telescope").setup({ - defaults = { - layout_strategy = "horizontal", - sorting_strategy = "ascending", - file_ignore_patterns = { "node_modules", ".git/" }, - }, - }) - - vim.keymap.set("n", "<leader><leader>", builtin.find_files) - vim.keymap.set("n", "<leader>fg", builtin.live_grep) - vim.keymap.set("n", "<leader>fb", builtin.buffers) - - ------------------------------------------------- - -- WHICH KEY - ------------------------------------------------- - local wk = require("which-key") - wk.add({ - { "<leader>l", desc = "LSP" } - { "<leader>o", desc = "Org" } - }) - - ------------------------------------------------- - -- NVIM TREE - ------------------------------------------------- - require("nvim-tree").setup({}) - vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>") - - ------------------------------------------------- - -- TERMINAL - ------------------------------------------------- - require("toggleterm").setup({ - direction = "float", - }) - - local Terminal = require("toggleterm.terminal").Terminal - - local lazygit = Terminal:new({ - cmd = "lazygit", - hidden = true, - direction = "float", - }) - - vim.keymap.set("n", "<leader>gg", function() - lazygit:toggle() - end) - + ------------------------------------------------- + -- LEADER + ------------------------------------------------- + vim.g.mapleader = " " + + ------------------------------------------------- + -- BASIC OPTIONS + ------------------------------------------------- + vim.opt.number = true + vim.opt.relativenumber = true + vim.opt.clipboard = "unnamedplus" + vim.opt.showtabline = 2 + vim.o.timeout = true + vim.o.timeoutlen = 300 + + ------------------------------------------------- + -- THEME + ------------------------------------------------- + require("catppuccin").setup({ + flavour = "mocha", + }) + vim.cmd.colorscheme("catppuccin") + + ------------------------------------------------- + -- GITSIGNS + ------------------------------------------------- + require("gitsigns").setup() + + ------------------------------------------------- + -- TREESITTER + ------------------------------------------------- + require("nvim-treesitter.configs").setup({ + highlight = { enable = true }, + indent = { enable = true }, + }) + + vim.opt.foldmethod = "expr" + vim.opt.foldexpr = "nvim_treesitter#foldexpr()" + vim.opt.foldenable = false + + ------------------------------------------------- + -- SNIPPETS + ------------------------------------------------- + require("luasnip.loaders.from_vscode").lazy_load() + + ------------------------------------------------- + -- COMPLETION + ------------------------------------------------- + local cmp = require("cmp") + local luasnip = require("luasnip") + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + ["<C-Space>"] = cmp.mapping.complete(), + ["<CR>"] = cmp.mapping.confirm({ select = true }), + }), + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + }, + }) + + require("nvim-autopairs").setup({}) + + ------------------------------------------------- + -- LSP + ------------------------------------------------- + local capabilities = require("cmp_nvim_lsp").default_capabilities() + + local servers = { + "lua_ls", + "nil_ls", + "rust_analyzer", + "pyright", + "bashls", + "texlab", + "tinymist", + } + + for _, server in ipairs(servers) do + vim.lsp.config(server, { + capabilities = capabilities + }) + vim.lsp.enable(server) + end + + ------------------------------------------------- + -- LSP KEYMAPS + ------------------------------------------------- + vim.keymap.set("n", "<leader>ld", vim.lsp.buf.definition) + vim.keymap.set("n", "<leader>lD", vim.lsp.buf.declaration) + vim.keymap.set("n", "<leader>li", vim.lsp.buf.implementation) + vim.keymap.set("n", "<leader>lr", vim.lsp.buf.references) + vim.keymap.set("n", "lh", vim.lsp.buf.hover) + vim.keymap.set("n", "ln", vim.lsp.buf.rename) + vim.keymap.set("n", "la", vim.lsp.buf.code_action) + vim.keymap.set("n", "lf", function() vim.lsp.buf.format() end) + + ------------------------------------------------- + -- DIAGNOSTICS + ------------------------------------------------- + vim.keymap.set("n", "lj", vim.diagnostic.goto_next) + vim.keymap.set("n", "lk", vim.diagnostic.goto_prev) + vim.keymap.set("n", "le", vim.diagnostic.open_float) + + ------------------------------------------------- + -- FORMATTER + ------------------------------------------------- + require("conform").setup({ + format_on_save = { + timeout_ms = 500, + lsp_format = "fallback", + }, + formatters_by_ft = { + lua = { "stylua" }, + nix = { "alejandra" }, + rust = { "rustfmt" }, + python = { "black" }, + bash = { "shfmt" }, + }, + }) + + require("Comment").setup() + + ------------------------------------------------- + -- TELESCOPE + ------------------------------------------------- + local builtin = require("telescope.builtin") + + require("telescope").setup({ + defaults = { + layout_strategy = "horizontal", + sorting_strategy = "ascending", + file_ignore_patterns = { "node_modules", ".git/" }, + }, + }) + + vim.keymap.set("n", "<leader><leader>", builtin.find_files) + vim.keymap.set("n", "<leader>fg", builtin.live_grep) + vim.keymap.set("n", "<leader>fb", builtin.buffers) + + ------------------------------------------------- + -- WHICH KEY + ------------------------------------------------- + local wk = require("which-key") + wk.add({ + { "<leader>l", desc = "LSP" } + { "<leader>o", desc = "Org" } + }) + + ------------------------------------------------- + -- NVIM TREE + ------------------------------------------------- + require("nvim-tree").setup({}) + vim.keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>") + + ------------------------------------------------- + -- TERMINAL + ------------------------------------------------- + require("toggleterm").setup({ + direction = "float", + }) + + local Terminal = require("toggleterm.terminal").Terminal + + local lazygit = Terminal:new({ + cmd = "lazygit", + hidden = true, + direction = "float", + }) + + vim.keymap.set("n", "<leader>gg", function() + lazygit:toggle() + end) + + + ------------------------------------------------- + -- ORGMODE + ------------------------------------------------- + local projects = { + "~/Documents/2_Writing/0_SOC/**/*.org", + "~/Documents/2_Writing/2_Notes/**/*.org", + "~/Documents/1_Projects/6_CRC-Altura/**/*.org", + "~/ORG/**/*.org" + } + + require("orgmode").setup({ + org_agenda_files = projects, + org_default_notes_file = "~/ORG/inbox.org", -- move inbox inside ~/ORG + + org_capture_templates = { + t = { + description = "Todo", + template = "* TODO %?\n SCHEDULED: %t", + target = "~/ORG/todos.org", + }, + i = { + description = "Idea", + template = "* %? :idea:\n %U", + target = "~/ORG/ideas.org", + }, + n = { + description = "Note", + template = "* %?\n %U", + target = "~/ORG/inbox.org", + }, + j = { + description = "Journal", + template = "* %<%Y-%m-%d>\n %?", + target = "~/ORG/journal.org", + }, + }, + }) + + vim.keymap.set("n", "<leader>oc", function() require("orgmode").action("capture.prompt") end, { desc = "Org Capture" }) + vim.keymap.set("n", "<leader>oa", function() require("orgmode").action("agenda.prompt") end, { desc = "Org Agenda" }) + ------------------------------------------------- + -- VIMTEX + ------------------------------------------------- + vim.g.vimtex_view_method = "zathura" ------------------------------------------------- - -- ORGMODE + -- TYPST ------------------------------------------------- - local projects = { - "~/Documents/2_Writing/0_SOC/**/*.org", - "~/Documents/2_Writing/2_Notes/**/*.org", - "~/Documents/1_Projects/6_CRC-Altura/**/*.org", - "~/ORG/**/*.org" - } - - require("orgmode").setup({ - org_agenda_files = projects, - org_default_notes_file = "~/ORG/inbox.org", -- move inbox inside ~/ORG - - org_capture_templates = { - t = { - description = "Todo", - template = "* TODO %?\n SCHEDULED: %t", - target = "~/ORG/todos.org", - }, - i = { - description = "Idea", - template = "* %? :idea:\n %U", - target = "~/ORG/ideas.org", - }, - n = { - description = "Note", - template = "* %?\n %U", - target = "~/ORG/inbox.org", - }, - j = { - description = "Journal", - template = "* %<%Y-%m-%d>\n %?", - target = "~/ORG/journal.org", - }, - }, + vim.api.nvim_create_autocmd("FileType", { + pattern = "typst", + callback = function() + -- Watch + preview + vim.keymap.set("n", "<leader>lw", function() + local file = vim.fn.expand("%") + vim.fn.jobstart({ "typst", "watch", file }) + vim.fn.jobstart({ "zathura", vim.fn.expand("%:r") .. ".pdf" }) + end, { buffer = true, desc = "Typst watch + Zathura" }) + end, }) - - vim.keymap.set("n", "<leader>oc", function() require("orgmode").action("capture.prompt") end, { desc = "Org Capture" }) - vim.keymap.set("n", "<leader>oa", function() require("orgmode").action("agenda.prompt") end, { desc = "Org Agenda" }) - ------------------------------------------------- - -- VIMTEX - ------------------------------------------------- - vim.g.vimtex_view_method = "zathura" ''; }; } |
