aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatasha Moongrave <natasha@256phi.eu>2026-04-28 09:51:24 +0200
committerNatasha Moongrave <natasha@256phi.eu>2026-04-28 09:51:24 +0200
commit0aa9c299facc6e784354077c5d8890e923c97472 (patch)
tree34904d4e7ddbb59bde08340eb21468f70357c1c9
parentbe64e545d9f78ad23712eae2230711fab2eb9766 (diff)
Add typst config to nvim
-rw-r--r--home/mun/programs/nvim.nix459
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"
'';
};
}