From 9433f5027c5174a12ce4c1c5ee11b544e5e37c17 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Sat, 14 Mar 2026 23:50:59 +0100 Subject: [PATCH 01/13] added flash.nvim. --- lua/plugins/flash.lua | 13 +++++++++++++ lua/plugins/init.lua | 1 + lua/plugins/treesitter.lua | 6 +++--- module.nix | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 lua/plugins/flash.lua diff --git a/lua/plugins/flash.lua b/lua/plugins/flash.lua new file mode 100644 index 0000000..db49622 --- /dev/null +++ b/lua/plugins/flash.lua @@ -0,0 +1,13 @@ +return { + { + "flash.nvim", + for_cat = 'lazy', + keys = { + { "s", function() require("flash").jump() end, mode = { "n", "x", "o" }, noremap = true, desc = "Flash" }, + { "S", function() require("flash").treesitter() end, mode = { "n", "x", "o" }, noremap = true, desc = "Flash Treesitter" }, + { "r", function() require("flash").remote() end, mode = "o", noremap = true, desc = "Remote Flash" }, + { "R", function() require("flash").treesitter_search() end, mode = { "o", "x" }, noremap = true, desc = "Treesitter Search" }, + { "", function() require("flash").toggle() end, mode = { "c" }, noremap = true, desc = "Toggle Flash Search" }, + }, + } +} diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 75916ad..2c772d7 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -13,6 +13,7 @@ require('lze').load { { import = "plugins.completion", }, { import = "plugins.preview.markdown", }, { import = "plugins.preview.typst", }, + { import = "plugins.flash", }, { "leap.nvim", for_cat = 'always', diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index 9b49fcf..bee0c5b 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -3,7 +3,7 @@ return { { "nvim-treesitter", - for_cat = 'lazy', + for_cat = 'lazy', event = "DeferredUIEnter", load = function(name) vim.cmd.packadd(name) @@ -18,14 +18,14 @@ return { }, { "comment.nvim", - for_cat = 'lazy', + for_cat = 'lazy', after = function(plugin) require('Comment').setup() end, }, { "treesj", - for_cat = 'lazy', + for_cat = 'lazy', keys = { { "j", "TSJToggle", mode = { "n" }, desc = "Treesitter join" }, }, after = function(_) require("treesj").setup({ diff --git a/module.nix b/module.nix index 5937917..58498c5 100644 --- a/module.nix +++ b/module.nix @@ -109,6 +109,7 @@ inputs: { comment-nvim rainbow-delimiters-nvim nvim-treesitter.withAllGrammars + flash-nvim ]; }; config.specs.completion = { From 46208d9102dff1a79965e580328c8b6331579801 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Sun, 15 Mar 2026 14:53:24 +0100 Subject: [PATCH 02/13] fleshed out readme. --- README.md | 11 +++++++++++ lua/keys.lua | 2 -- lua/plugins/preview/typst.lua | 6 +++--- lua/plugins/which-key.lua | 6 +++--- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8a04a0d..eb1c7db 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ # Neovim module A wrapper around nvim that includes the plugins I use day to day. + +to use with home manager or nixos, pass this flake as an input, and then in your config, +```nix +imports = [ +inputs.nvim-config.nixosModules.neovim +] +``` +(replace `nixosModules` with `homeModules` for home manager). + +Then, you can just do `wrappers.neovim.enable=true;` to enable nvim. +To enable an option, such as minimal mode (no LSPs), do `wrappers.neovim.settings.minimal = true;`. diff --git a/lua/keys.lua b/lua/keys.lua index b07a6e6..8f6b8d7 100644 --- a/lua/keys.lua +++ b/lua/keys.lua @@ -33,5 +33,3 @@ vim.keymap.set({ "n", "v", "x" }, 'Y', '"+yy', { noremap = true, silent vim.keymap.set({ 'n', 'v', 'x' }, 'p', '"+p', { noremap = true, silent = true, desc = 'Paste from clipboard' }) vim.keymap.set('i', '', '+', { noremap = true, silent = true, desc = 'Paste from clipboard from within insert mode' }) -vim.keymap.set("x", "P", '"_dP', - { noremap = true, silent = true, desc = 'Paste over selection without erasing unnamed register' }) diff --git a/lua/plugins/preview/typst.lua b/lua/plugins/preview/typst.lua index 5faa5dd..6f5ffa6 100644 --- a/lua/plugins/preview/typst.lua +++ b/lua/plugins/preview/typst.lua @@ -4,9 +4,9 @@ return { ft = "typst", cmd = { "TypstPreview", "TypstPreviewStop", "TypstPreviewToggle", }, keys = { - { "ptp", "TypstPreview ", mode = { "n" }, noremap = true, desc = "typst preview" }, - { "pts", "TypstPreviewStop ", mode = { "n" }, noremap = true, desc = "typst preview stop" }, - { "ptt", "TypstPreviewToggle ", mode = { "n" }, noremap = true, desc = "typst preview toggle" }, + { "Ptp", "TypstPreview ", mode = { "n" }, noremap = true, desc = "typst preview" }, + { "Pts", "TypstPreviewStop ", mode = { "n" }, noremap = true, desc = "typst preview stop" }, + { "Ptt", "TypstPreviewToggle ", mode = { "n" }, noremap = true, desc = "typst preview toggle" }, }, after = function() require('typst-preview').setup {} diff --git a/lua/plugins/which-key.lua b/lua/plugins/which-key.lua index c91aa99..2f78f3e 100644 --- a/lua/plugins/which-key.lua +++ b/lua/plugins/which-key.lua @@ -8,9 +8,9 @@ return { { "g", group = "[g]it" }, { "z", group = "[z]ettelkasten" }, { "gt", group = "[t]oggle" }, - { "p", group = "[p]review" }, - { "pt", group = "[p]review [t]ypst" }, - { "pm", group = "[p]review [m]arkdown" }, + { "P", group = "[p]review" }, + { "Pt", group = "[p]review [t]ypst" }, + { "Pm", group = "[p]review [m]arkdown" }, { "f", group = "[f]ind" }, { "t", group = "[t]ree" }, { "c", group = "[c]heck" }, From 35fb7ffcb12097c637ce7a95b57c233575f8b2d5 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Sun, 15 Mar 2026 18:05:50 +0100 Subject: [PATCH 03/13] added formatter for nix, nixd was not working. Welcome to the config, conform.nvim! --- flake.lock | 24 ++++++++++++------------ lua/lsp/init.lua | 22 ++++++++++++++++++++-- lua/lsp/nix.lua | 27 --------------------------- module.nix | 6 ++---- 4 files changed, 34 insertions(+), 45 deletions(-) delete mode 100644 lua/lsp/nix.lua diff --git a/flake.lock b/flake.lock index 6836d9d..6e5ed33 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1773231277, - "narHash": "sha256-Xy3WEpUAbpsz8ydgvVAQAGGB/WB+8cNA5cshiL0McTI=", + "lastModified": 1773507054, + "narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "75690239f08f885ca9b0267580101f60d10fbe62", + "rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9", "type": "github" }, "original": { @@ -19,11 +19,11 @@ "plugins-lze": { "flake": false, "locked": { - "lastModified": 1772949858, - "narHash": "sha256-skLhmn/MvxOZbrBiceF/xiLRRmmEs6ZQS2sGrBrUyLU=", + "lastModified": 1773555725, + "narHash": "sha256-Ii/mrCHw8kw1IN0GIROm7O0NSz1jtDligb/qDNq1P3U=", "owner": "BirdeeHub", "repo": "lze", - "rev": "a3ba1a2d469d4ab26acb629aba8c7d70a6cbe558", + "rev": "1d05835370e841c1605ec88d0541195c9410c34e", "type": "github" }, "original": { @@ -35,11 +35,11 @@ "plugins-lzextras": { "flake": false, "locked": { - "lastModified": 1772949841, - "narHash": "sha256-MQ1h2R5axM3u6mLNTDzXF/40o8+U0JOWb48UTQO9jfc=", + "lastModified": 1773555737, + "narHash": "sha256-fG8glvgoeFRHU6fgfBTb5GUxY+2YY3QfqzVYERa7ogs=", "owner": "BirdeeHub", "repo": "lzextras", - "rev": "a6ac9a7bee380881af2dfbfd238ccb1697d677d7", + "rev": "88f70fe95e3a6c4dc841ebed3b23c1f92c5cde42", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1773360496, - "narHash": "sha256-AQN5UhIc2WHvELT4TWIsD1W05ksLXWRkS5NjPm3jkc0=", + "lastModified": 1773553469, + "narHash": "sha256-DY3xNV1kgPEHX8X9HG7Uix5OIt0MQri8i7X+BqGM4DI=", "owner": "BirdeeHub", "repo": "nix-wrapper-modules", - "rev": "8f1770c6d58a89a4757849713c0e6d9ace7b4ac3", + "rev": "c53fd67dbf1cccec37b8216128e5b647e70bd149", "type": "github" }, "original": { diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 66d1e61..d7f6291 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -12,7 +12,6 @@ if lspEnabled then vim.keymap.set("n", "lt", vim.lsp.buf.type_definition, { desc = "Type [D]efinition" }) vim.keymap.set({ "n", "v", }, "la", vim.lsp.buf.code_action, { desc = "[C]ode Action" }) vim.keymap.set("n", "ld", vim.lsp.buf.definition, { desc = "Goto [D]efinition" }) - vim.keymap.set("n", "lf", vim.lsp.buf.format, { desc = "Format buffer" }) vim.keymap.set("n", "lh", vim.lsp.buf.hover, { desc = "Hover Documentation" }) vim.keymap.set("n", "lr", vim.lsp.buf.rename, { desc = "[R]ename" }) vim.keymap.set("n", "ls", vim.lsp.buf.signature_help, { desc = "Signature Documentation" }) @@ -81,10 +80,29 @@ require('lze').load { vim.lsp.enable(plugin.name) end, }, + + { + "conform.nvim", + for_cat = "lsp", + on_require = { "conform" }, + cmd = { "ConformInfo" }, + keys = { { "lf", function() require("conform").format({async=true}) end, mode = { "" }, desc = "Format buffer" }, }, + after = function() + require("conform").setup({ + default_format_opts = { + lsp_format = "fallback", + }, + + formatters_by_ft = { + nix = { "alejandra" } + } + }) + end, + }, + { import = "lsp.lua" }, { import = "lsp.python" }, { import = "lsp.C" }, - { import = "lsp.nix" }, { import = "lsp.typst" }, { import = "lsp.bash" }, { import = "lsp.zk" }, diff --git a/lua/lsp/nix.lua b/lua/lsp/nix.lua deleted file mode 100644 index 4463427..0000000 --- a/lua/lsp/nix.lua +++ /dev/null @@ -1,27 +0,0 @@ -return { - { - "nixd", - enabled = nixInfo.isNix, -- mason doesn't have nixd - for_cat = "nix", - lsp = { - filetypes = { "nix" }, - settings = { - nixd = { - nixpkgs = { - expr = [[import {}]], - }, - options = { - }, - formatting = { - command = { "nixfmt" } - }, - diagnostic = { - suppress = { - "sema-escaping-with" - } - } - } - }, - }, - }, -} diff --git a/module.nix b/module.nix index 58498c5..9f9e25a 100644 --- a/module.nix +++ b/module.nix @@ -115,7 +115,6 @@ inputs: { config.specs.completion = { after = ["lze"]; lazy = true; - enable = lib.mkIf config.settings.minimal false; data = with pkgs.vimPlugins; [ luasnip friendly-snippets @@ -129,7 +128,6 @@ inputs: { config.specs.markdown = { after = ["general" "lazy"]; - enable = lib.mkIf config.settings.minimal false; lazy = true; data = with pkgs.vimPlugins; [ markdown-preview-nvim @@ -142,7 +140,6 @@ inputs: { }; config.specs.lsp = { - enable = lib.mkIf config.settings.minimal false; after = ["general" "lazy"]; lazy = true; @@ -150,9 +147,11 @@ inputs: { trouble-nvim lualine-lsp-progress nvim-lspconfig + conform-nvim ]; }; + config.specs.zk = { after = ["general" "lazy"]; data = with pkgs.vimPlugins; [ @@ -180,7 +179,6 @@ inputs: { after = ["general" "lazy"]; data = null; extraPackages = with pkgs; [ - nixd alejandra ]; }; From f75102b78e833af6ee2a3423e7693de8dd1f95d8 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Mon, 16 Mar 2026 00:53:25 +0100 Subject: [PATCH 04/13] added go LSP support, I think. --- lua/lsp/go.lua | 7 +++++++ lua/lsp/init.lua | 1 + module.nix | 10 +++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 lua/lsp/go.lua diff --git a/lua/lsp/go.lua b/lua/lsp/go.lua new file mode 100644 index 0000000..c7adcb0 --- /dev/null +++ b/lua/lsp/go.lua @@ -0,0 +1,7 @@ +return { + { + "gopls", + for_cat = "go", + lsp = {}, + }, +} diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index d7f6291..932c9ea 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -107,4 +107,5 @@ require('lze').load { { import = "lsp.bash" }, { import = "lsp.zk" }, { import = "lsp.rust" }, + { import = "lsp.go" }, } diff --git a/module.nix b/module.nix index 9f9e25a..8671482 100644 --- a/module.nix +++ b/module.nix @@ -151,7 +151,6 @@ inputs: { ]; }; - config.specs.zk = { after = ["general" "lazy"]; data = with pkgs.vimPlugins; [ @@ -174,6 +173,15 @@ inputs: { ]; }; + config.specs.go = { + name = "go"; + after = ["general" "lazy"]; + data = null; + extraPackages = with pkgs; [ + gopls + ]; + }; + config.specs.nix = { name = "nix"; after = ["general" "lazy"]; From cbf028159f42308a35460fd8c3a08b45a8c38b1e Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Mon, 16 Mar 2026 12:37:55 +0100 Subject: [PATCH 05/13] added a buncha new LSPs. --- lua/lsp/C.lua | 3 +++ lua/lsp/config.lua | 12 ++++++++++ lua/lsp/init.lua | 32 +++++++++++++++++--------- lua/lsp/jsonnet.lua | 7 ++++++ lua/lsp/nix.lua | 9 ++++++++ lua/lsp/nushell.lua | 7 ++++++ lua/lsp/zig.lua | 7 ++++++ module.nix | 55 ++++++++++++++++++++++++++++++++++++++++++++- 8 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 lua/lsp/config.lua create mode 100644 lua/lsp/jsonnet.lua create mode 100644 lua/lsp/nix.lua create mode 100644 lua/lsp/nushell.lua create mode 100644 lua/lsp/zig.lua diff --git a/lua/lsp/C.lua b/lua/lsp/C.lua index b382d76..0d58aec 100644 --- a/lua/lsp/C.lua +++ b/lua/lsp/C.lua @@ -3,5 +3,8 @@ return { "clangd", for_cat = "C", lsp = {}, + after=function() + require("clangd_extensions").setup({}) + end, }, } diff --git a/lua/lsp/config.lua b/lua/lsp/config.lua new file mode 100644 index 0000000..2972f2c --- /dev/null +++ b/lua/lsp/config.lua @@ -0,0 +1,12 @@ +return { + { + "taplo", + for_cat = "config", + lsp = {}, + }, + { + "yamlls", + for_cat = "config", + lsp = {}, + }, +} diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index 932c9ea..eb51be0 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -85,27 +85,37 @@ require('lze').load { "conform.nvim", for_cat = "lsp", on_require = { "conform" }, - cmd = { "ConformInfo" }, - keys = { { "lf", function() require("conform").format({async=true}) end, mode = { "" }, desc = "Format buffer" }, }, + cmd = { "ConformInfo" }, + keys = { + { "lf", function() require("conform").format({ async = true }) end, mode = { "" }, desc = "Format buffer" }, + }, after = function() require("conform").setup({ default_format_opts = { lsp_format = "fallback", }, - - formatters_by_ft = { - nix = { "alejandra" } - } }) + -- need to figure out how to properly seperate this. + if nixInfo("settings", "cat", "config") then + require("conform").formatters_by_ft.json = { "jq" } + end + if nixInfo("settings", "cat", "nix") then + require("conform").formatters_by_ft.nix = { "alejandra" } + end end, }, - { import = "lsp.lua" }, - { import = "lsp.python" }, { import = "lsp.C" }, - { import = "lsp.typst" }, { import = "lsp.bash" }, - { import = "lsp.zk" }, - { import = "lsp.rust" }, + { import = "lsp.config" }, { import = "lsp.go" }, + { import = "lsp.jsonnet" }, + { import = "lsp.lua" }, + { import = "lsp.nix" }, + { import = "lsp.nushell" }, + { import = "lsp.python" }, + { import = "lsp.rust" }, + { import = "lsp.typst" }, + { import = "lsp.zig" }, + { import = "lsp.zk" }, } diff --git a/lua/lsp/jsonnet.lua b/lua/lsp/jsonnet.lua new file mode 100644 index 0000000..c246dcb --- /dev/null +++ b/lua/lsp/jsonnet.lua @@ -0,0 +1,7 @@ +return { + { + "jsonnet_ls", + for_cat = "jsonnet", + lsp = {}, + }, +} diff --git a/lua/lsp/nix.lua b/lua/lsp/nix.lua new file mode 100644 index 0000000..accbd98 --- /dev/null +++ b/lua/lsp/nix.lua @@ -0,0 +1,9 @@ +return { + { + "nixd", + for_cat = "nix", + lsp = {}, + after = function() + end, + }, +} diff --git a/lua/lsp/nushell.lua b/lua/lsp/nushell.lua new file mode 100644 index 0000000..ba5beb1 --- /dev/null +++ b/lua/lsp/nushell.lua @@ -0,0 +1,7 @@ +return { + { + "nushell", + for_cat = "nushell", + lsp = {}, + }, +} diff --git a/lua/lsp/zig.lua b/lua/lsp/zig.lua new file mode 100644 index 0000000..3983f21 --- /dev/null +++ b/lua/lsp/zig.lua @@ -0,0 +1,7 @@ +return { + { + "zls", + for_cat = "zig", + lsp = {}, + }, +} diff --git a/module.nix b/module.nix index 8671482..ed03fc6 100644 --- a/module.nix +++ b/module.nix @@ -152,7 +152,9 @@ inputs: { }; config.specs.zk = { + name = "zk"; after = ["general" "lazy"]; + lazy = true; data = with pkgs.vimPlugins; [ zk-nvim ]; @@ -164,6 +166,7 @@ inputs: { config.specs.typst = { name = "typst"; after = ["general" "lazy"]; + lazy = true; data = with pkgs.vimPlugins; [ typst-preview-nvim ]; @@ -176,24 +179,69 @@ inputs: { config.specs.go = { name = "go"; after = ["general" "lazy"]; + lazy = true; data = null; extraPackages = with pkgs; [ gopls ]; }; + config.specs.config = { + name = "config"; + after = ["general" "lazy"]; + lazy = true; + data = null; + extraPackages = with pkgs; [ + taplo + jq + yaml-language-server + ]; + }; + + config.specs.jsonnet = { + name = "jsonnet"; + after = ["general" "lazy"]; + lazy = true; + data = null; + extraPackages = with pkgs; [ + jsonnet-language-server + ]; + }; + + config.specs.zig = { + name = "zig"; + after = ["general" "lazy"]; + lazy = true; + data = null; + extraPackages = with pkgs; [ + zls + ]; + }; + config.specs.nushell = { + name = "nushell"; + after = ["general" "lazy"]; + lazy = true; + data = null; + extraPackages = with pkgs; [ + nushell + ]; + }; + config.specs.nix = { name = "nix"; after = ["general" "lazy"]; + lazy = true; data = null; extraPackages = with pkgs; [ alejandra + nixd ]; }; config.specs.lua = { name = "lua"; after = ["general" "lazy"]; + lazy = true; data = with pkgs.vimPlugins; [ lazydev-nvim ]; @@ -206,6 +254,7 @@ inputs: { config.specs.rust = { name = "rust"; after = ["general" "lazy"]; + lazy = true; data = with pkgs.vimPlugins; [ rustaceanvim ]; @@ -218,6 +267,7 @@ inputs: { config.specs.python = { name = "python"; after = ["general" "lazy"]; + lazy = true; data = null; extraPackages = with pkgs; [ ty @@ -228,7 +278,10 @@ inputs: { config.specs.C = { name = "C"; after = ["general" "lazy"]; - data = null; + lazy = true; + data = with pkgs.vimPlugins; [ + clangd_extensions-nvim + ]; extraPackages = with pkgs; [ libclang ]; From de325f814143fa1f5804b5dc97221fed46e6467b Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Wed, 18 Mar 2026 19:49:33 +0100 Subject: [PATCH 06/13] moved from jq to jaq for json formatting. --- lua/lsp/init.lua | 2 +- module.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index eb51be0..8197f7d 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -97,7 +97,7 @@ require('lze').load { }) -- need to figure out how to properly seperate this. if nixInfo("settings", "cat", "config") then - require("conform").formatters_by_ft.json = { "jq" } + require("conform").formatters_by_ft.json = { "jaq" } end if nixInfo("settings", "cat", "nix") then require("conform").formatters_by_ft.nix = { "alejandra" } diff --git a/module.nix b/module.nix index ed03fc6..898f3b1 100644 --- a/module.nix +++ b/module.nix @@ -193,7 +193,7 @@ inputs: { data = null; extraPackages = with pkgs; [ taplo - jq + jaq yaml-language-server ]; }; From 97fb2ff41595837ba8a24635baec25a614f3ea9b Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Fri, 20 Mar 2026 14:09:07 +0100 Subject: [PATCH 07/13] actually allow opening lazygit. --- lua/plugins/snacks.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins/snacks.lua b/lua/plugins/snacks.lua index 3ed8815..9b2b068 100644 --- a/lua/plugins/snacks.lua +++ b/lua/plugins/snacks.lua @@ -62,7 +62,7 @@ vim.keymap.set("n", "gB", Snacks.git.blame_line, { desc = "[G]it [B]lame vim.keymap.set("n", "gb", Snacks.picker.git_branches, { desc = "[G]it [B]ranch" }) vim.keymap.set("n", "gl", Snacks.picker.git_log, { desc = "[G]it [L]og" }) vim.keymap.set("n", "gd", Snacks.picker.git_diff, { desc = "[G]it [D]iff" }) -vim.keymap.set("n", "gt", Snacks.lazygit.open, { desc = "lazy[G]it [T]UI" }) +vim.keymap.set("n", "gL", Snacks.lazygit.open, { desc = "lazy[G]it [T]UI" }) -- setup toggles Snacks.toggle.option("spell", { name = "spelling" }):map("cs") From 47ef7da18e3af5aab8ca3fc2b2e5e258aaeaa9c7 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Sat, 21 Mar 2026 15:46:40 +0100 Subject: [PATCH 08/13] added deps of typst-preview.nvim. --- lua/plugins/preview/typst.lua | 7 ++++++- module.nix | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/plugins/preview/typst.lua b/lua/plugins/preview/typst.lua index 6f5ffa6..6ea00b9 100644 --- a/lua/plugins/preview/typst.lua +++ b/lua/plugins/preview/typst.lua @@ -9,6 +9,11 @@ return { { "Ptt", "TypstPreviewToggle ", mode = { "n" }, noremap = true, desc = "typst preview toggle" }, }, after = function() - require('typst-preview').setup {} + require('typst-preview').setup({ + dependencies_bin = { + ['tinymist'] = 'tinymist', + ['websocat'] = 'websocat', + }, + }) end } diff --git a/module.nix b/module.nix index 898f3b1..ef21d06 100644 --- a/module.nix +++ b/module.nix @@ -173,6 +173,7 @@ inputs: { extraPackages = with pkgs; [ typst tinymist + websocat ]; }; From 1eac400d82f108049276bc9b2d12c897fc9a748d Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Tue, 24 Mar 2026 17:33:54 +0100 Subject: [PATCH 09/13] shuffling around a couple of keybinds. --- lua/plugins/snacks.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/plugins/snacks.lua b/lua/plugins/snacks.lua index 9b2b068..acb4233 100644 --- a/lua/plugins/snacks.lua +++ b/lua/plugins/snacks.lua @@ -58,11 +58,11 @@ vim.keymap.set("n", "fu", Snacks.picker.undo, { desc = "[U]ndo" }) vim.keymap.set("n", "fz", Snacks.picker.zoxide, { desc = "[Z]oxide" }) -- picker git keybinds -vim.keymap.set("n", "gB", Snacks.git.blame_line, { desc = "[G]it [B]lame" }) -vim.keymap.set("n", "gb", Snacks.picker.git_branches, { desc = "[G]it [B]ranch" }) -vim.keymap.set("n", "gl", Snacks.picker.git_log, { desc = "[G]it [L]og" }) +vim.keymap.set("n", "gb", Snacks.git.blame_line, { desc = "[G]it [B]lame" }) +vim.keymap.set("n", "gB", Snacks.picker.git_branches, { desc = "[G]it [B]ranch" }) +vim.keymap.set("n", "gL", Snacks.picker.git_log, { desc = "[G]it [L]og" }) vim.keymap.set("n", "gd", Snacks.picker.git_diff, { desc = "[G]it [D]iff" }) -vim.keymap.set("n", "gL", Snacks.lazygit.open, { desc = "lazy[G]it [T]UI" }) +vim.keymap.set("n", "gl", Snacks.lazygit.open, { desc = "lazy[G]it [T]UI" }) -- setup toggles Snacks.toggle.option("spell", { name = "spelling" }):map("cs") From 22ec0c921edea640a43bc4f0777613804d13871f Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Thu, 26 Mar 2026 11:05:43 +0100 Subject: [PATCH 10/13] flake update. --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 6e5ed33..60122ac 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1773507054, - "narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=", + "lastModified": 1774273680, + "narHash": "sha256-a++tZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9", + "rev": "fdc7b8f7b30fdbedec91b71ed82f36e1637483ed", "type": "github" }, "original": { @@ -19,11 +19,11 @@ "plugins-lze": { "flake": false, "locked": { - "lastModified": 1773555725, - "narHash": "sha256-Ii/mrCHw8kw1IN0GIROm7O0NSz1jtDligb/qDNq1P3U=", + "lastModified": 1774333105, + "narHash": "sha256-UvMGRa1tuQAzgyQu5+X/cEPTZrGxO8V1Q+N+t9ofhdA=", "owner": "BirdeeHub", "repo": "lze", - "rev": "1d05835370e841c1605ec88d0541195c9410c34e", + "rev": "079a1dc8da437aa881448ad1f16962d10ea84848", "type": "github" }, "original": { @@ -35,11 +35,11 @@ "plugins-lzextras": { "flake": false, "locked": { - "lastModified": 1773555737, - "narHash": "sha256-fG8glvgoeFRHU6fgfBTb5GUxY+2YY3QfqzVYERa7ogs=", + "lastModified": 1774333150, + "narHash": "sha256-5SorM5x/BIPpyBxJN7CHi6huGKzFDJOvzWIAFcdeOdo=", "owner": "BirdeeHub", "repo": "lzextras", - "rev": "88f70fe95e3a6c4dc841ebed3b23c1f92c5cde42", + "rev": "69c996ae28804abeb60050d98e3a64246394e121", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1773553469, - "narHash": "sha256-DY3xNV1kgPEHX8X9HG7Uix5OIt0MQri8i7X+BqGM4DI=", + "lastModified": 1774400689, + "narHash": "sha256-hHABVYL0rxhVIzc7hZEpvE0eiCKPnevte73Tn6FRolo=", "owner": "BirdeeHub", "repo": "nix-wrapper-modules", - "rev": "c53fd67dbf1cccec37b8216128e5b647e70bd149", + "rev": "54645978682ff99594a1d1666dde6fac6a8134f2", "type": "github" }, "original": { From 88f4860839358b83625a378873e9a6d05f9e6344 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Thu, 26 Mar 2026 13:28:13 +0100 Subject: [PATCH 11/13] lazygit integration. --- lua/plugins/snacks.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins/snacks.lua b/lua/plugins/snacks.lua index acb4233..013f18f 100644 --- a/lua/plugins/snacks.lua +++ b/lua/plugins/snacks.lua @@ -36,7 +36,7 @@ require("snacks").setup({ chunk = { enabled = true }, }, image = { enabled = false, inline = false, float = false }, - lazygit = { enabled = true, configure = false }, + lazygit = { enabled = true, configure = true}, }) -- setup keybinds. vim.keymap.set("n", "bd", Snacks.bufdelete.delete, { desc = "delete buffer" }) From 40f3a3cf5512472ece1b61d94a42aa816cd86640 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Sat, 28 Mar 2026 14:23:08 +0100 Subject: [PATCH 12/13] Added Licence. --- LICENSE | 287 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4153cd3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,287 @@ + EUROPEAN UNION PUBLIC LICENCE v. 1.2 + EUPL © the European Union 2007, 2016 + +This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined +below) which is provided under the terms of this Licence. Any use of the Work, +other than as authorised under this Licence is prohibited (to the extent such +use is covered by a right of the copyright holder of the Work). + +The Work is provided under the terms of this Licence when the Licensor (as +defined below) has placed the following notice immediately following the +copyright notice for the Work: + + Licensed under the EUPL + +or has expressed by any other means his willingness to license under the EUPL. + +1. Definitions + +In this Licence, the following terms have the following meaning: + +- ‘The Licence’: this Licence. + +- ‘The Original Work’: the work or software distributed or communicated by the + Licensor under this Licence, available as Source Code and also as Executable + Code as the case may be. + +- ‘Derivative Works’: the works or software that could be created by the + Licensee, based upon the Original Work or modifications thereof. This Licence + does not define the extent of modification or dependence on the Original Work + required in order to classify a work as a Derivative Work; this extent is + determined by copyright law applicable in the country mentioned in Article 15. + +- ‘The Work’: the Original Work or its Derivative Works. + +- ‘The Source Code’: the human-readable form of the Work which is the most + convenient for people to study and modify. + +- ‘The Executable Code’: any code which has generally been compiled and which is + meant to be interpreted by a computer as a program. + +- ‘The Licensor’: the natural or legal person that distributes or communicates + the Work under the Licence. + +- ‘Contributor(s)’: any natural or legal person who modifies the Work under the + Licence, or otherwise contributes to the creation of a Derivative Work. + +- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of + the Work under the terms of the Licence. + +- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, + renting, distributing, communicating, transmitting, or otherwise making + available, online or offline, copies of the Work or providing access to its + essential functionalities at the disposal of any other natural or legal + person. + +2. Scope of the rights granted by the Licence + +The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +sublicensable licence to do the following, for the duration of copyright vested +in the Original Work: + +- use the Work in any circumstance and for all usage, +- reproduce the Work, +- modify the Work, and make Derivative Works based upon the Work, +- communicate to the public, including the right to make available or display + the Work or copies thereof to the public and perform publicly, as the case may + be, the Work, +- distribute the Work or copies thereof, +- lend and rent the Work or copies thereof, +- sublicense rights in the Work or copies thereof. + +Those rights can be exercised on any media, supports and formats, whether now +known or later invented, as far as the applicable law permits so. + +In the countries where moral rights apply, the Licensor waives his right to +exercise his moral right to the extent allowed by law in order to make effective +the licence of the economic rights here above listed. + +The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to +any patents held by the Licensor, to the extent necessary to make use of the +rights granted on the Work under this Licence. + +3. Communication of the Source Code + +The Licensor may provide the Work either in its Source Code form, or as +Executable Code. If the Work is provided as Executable Code, the Licensor +provides in addition a machine-readable copy of the Source Code of the Work +along with each copy of the Work that the Licensor distributes or indicates, in +a notice following the copyright notice attached to the Work, a repository where +the Source Code is easily and freely accessible for as long as the Licensor +continues to distribute or communicate the Work. + +4. Limitations on copyright + +Nothing in this Licence is intended to deprive the Licensee of the benefits from +any exception or limitation to the exclusive rights of the rights owners in the +Work, of the exhaustion of those rights or of other applicable limitations +thereto. + +5. Obligations of the Licensee + +The grant of the rights mentioned above is subject to some restrictions and +obligations imposed on the Licensee. Those obligations are the following: + +Attribution right: The Licensee shall keep intact all copyright, patent or +trademarks notices and all notices that refer to the Licence and to the +disclaimer of warranties. The Licensee must include a copy of such notices and a +copy of the Licence with every copy of the Work he/she distributes or +communicates. The Licensee must cause any Derivative Work to carry prominent +notices stating that the Work has been modified and the date of modification. + +Copyleft clause: If the Licensee distributes or communicates copies of the +Original Works or Derivative Works, this Distribution or Communication will be +done under the terms of this Licence or of a later version of this Licence +unless the Original Work is expressly distributed only under this version of the +Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee +(becoming Licensor) cannot offer or impose any additional terms or conditions on +the Work or Derivative Work that alter or restrict the terms of the Licence. + +Compatibility clause: If the Licensee Distributes or Communicates Derivative +Works or copies thereof based upon both the Work and another work licensed under +a Compatible Licence, this Distribution or Communication can be done under the +terms of this Compatible Licence. For the sake of this clause, ‘Compatible +Licence’ refers to the licences listed in the appendix attached to this Licence. +Should the Licensee's obligations under the Compatible Licence conflict with +his/her obligations under this Licence, the obligations of the Compatible +Licence shall prevail. + +Provision of Source Code: When distributing or communicating copies of the Work, +the Licensee will provide a machine-readable copy of the Source Code or indicate +a repository where this Source will be easily and freely available for as long +as the Licensee continues to distribute or communicate the Work. + +Legal Protection: This Licence does not grant permission to use the trade names, +trademarks, service marks, or names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the copyright notice. + +6. Chain of Authorship + +The original Licensor warrants that the copyright in the Original Work granted +hereunder is owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each Contributor warrants that the copyright in the modifications he/she brings +to the Work are owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each time You accept the Licence, the original Licensor and subsequent +Contributors grant You a licence to their contributions to the Work, under the +terms of this Licence. + +7. Disclaimer of Warranty + +The Work is a work in progress, which is continuously improved by numerous +Contributors. It is not a finished work and may therefore contain defects or +‘bugs’ inherent to this type of development. + +For the above reason, the Work is provided under the Licence on an ‘as is’ basis +and without warranties of any kind concerning the Work, including without +limitation merchantability, fitness for a particular purpose, absence of defects +or errors, accuracy, non-infringement of intellectual property rights other than +copyright as stated in Article 6 of this Licence. + +This disclaimer of warranty is an essential part of the Licence and a condition +for the grant of any rights to the Work. + +8. Disclaimer of Liability + +Except in the cases of wilful misconduct or damages directly caused to natural +persons, the Licensor will in no event be liable for any direct or indirect, +material or moral, damages of any kind, arising out of the Licence or of the use +of the Work, including without limitation, damages for loss of goodwill, work +stoppage, computer failure or malfunction, loss of data or any commercial +damage, even if the Licensor has been advised of the possibility of such damage. +However, the Licensor will be liable under statutory product liability laws as +far such laws apply to the Work. + +9. Additional agreements + +While distributing the Work, You may choose to conclude an additional agreement, +defining obligations or services consistent with this Licence. However, if +accepting obligations, You may act only on your own behalf and on your sole +responsibility, not on behalf of the original Licensor or any other Contributor, +and only if You agree to indemnify, defend, and hold each Contributor harmless +for any liability incurred by, or claims asserted against such Contributor by +the fact You have accepted any warranty or additional liability. + +10. Acceptance of the Licence + +The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ +placed under the bottom of a window displaying the text of this Licence or by +affirming consent in any other similar way, in accordance with the rules of +applicable law. Clicking on that icon indicates your clear and irrevocable +acceptance of this Licence and all of its terms and conditions. + +Similarly, you irrevocably accept this Licence and all of its terms and +conditions by exercising any rights granted to You by Article 2 of this Licence, +such as the use of the Work, the creation by You of a Derivative Work or the +Distribution or Communication by You of the Work or copies thereof. + +11. Information to the public + +In case of any Distribution or Communication of the Work by means of electronic +communication by You (for example, by offering to download the Work from a +remote location) the distribution channel or media (for example, a website) must +at least provide to the public the information requested by the applicable law +regarding the Licensor, the Licence and the way it may be accessible, concluded, +stored and reproduced by the Licensee. + +12. Termination of the Licence + +The Licence and the rights granted hereunder will terminate automatically upon +any breach by the Licensee of the terms of the Licence. + +Such a termination will not terminate the licences of any person who has +received the Work from the Licensee under the Licence, provided such persons +remain in full compliance with the Licence. + +13. Miscellaneous + +Without prejudice of Article 9 above, the Licence represents the complete +agreement between the Parties as to the Work. + +If any provision of the Licence is invalid or unenforceable under applicable +law, this will not affect the validity or enforceability of the Licence as a +whole. Such provision will be construed or reformed so as necessary to make it +valid and enforceable. + +The European Commission may publish other linguistic versions or new versions of +this Licence or updated versions of the Appendix, so far this is required and +reasonable, without reducing the scope of the rights granted by the Licence. New +versions of the Licence will be published with a unique version number. + +All linguistic versions of this Licence, approved by the European Commission, +have identical value. Parties can take advantage of the linguistic version of +their choice. + +14. Jurisdiction + +Without prejudice to specific agreement between parties, + +- any litigation resulting from the interpretation of this License, arising + between the European Union institutions, bodies, offices or agencies, as a + Licensor, and any Licensee, will be subject to the jurisdiction of the Court + of Justice of the European Union, as laid down in article 272 of the Treaty on + the Functioning of the European Union, + +- any litigation arising between other parties and resulting from the + interpretation of this License, will be subject to the exclusive jurisdiction + of the competent court where the Licensor resides or conducts its primary + business. + +15. Applicable Law + +Without prejudice to specific agreement between parties, + +- this Licence shall be governed by the law of the European Union Member State + where the Licensor has his seat, resides or has his registered office, + +- this licence shall be governed by Belgian law if the Licensor has no seat, + residence or registered office inside a European Union Member State. + +Appendix + +‘Compatible Licences’ according to Article 5 EUPL are: + +- GNU General Public License (GPL) v. 2, v. 3 +- GNU Affero General Public License (AGPL) v. 3 +- Open Software License (OSL) v. 2.1, v. 3.0 +- Eclipse Public License (EPL) v. 1.0 +- CeCILL v. 2.0, v. 2.1 +- Mozilla Public Licence (MPL) v. 2 +- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 +- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for + works other than software +- European Union Public Licence (EUPL) v. 1.1, v. 1.2 +- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong + Reciprocity (LiLiQ-R+). + +The European Commission may update this Appendix to later versions of the above +licences without producing a new version of the EUPL, as long as they provide +the rights granted in Article 2 of this Licence and protect the covered Source +Code from exclusive appropriation. + +All other changes or additions to this Appendix require the production of a new +EUPL version. From 4a9a2eb41e0d4337b96cf5f8cfb26bd32073dd85 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Mon, 30 Mar 2026 20:59:57 +0200 Subject: [PATCH 13/13] flake update. --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 60122ac..b828b76 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1774273680, - "narHash": "sha256-a++tZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA=", + "lastModified": 1774701658, + "narHash": "sha256-CIS/4AMUSwUyC8X5g+5JsMRvIUL3YUfewe8K4VrbsSQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fdc7b8f7b30fdbedec91b71ed82f36e1637483ed", + "rev": "b63fe7f000adcfa269967eeff72c64cafecbbebe", "type": "github" }, "original": { @@ -19,11 +19,11 @@ "plugins-lze": { "flake": false, "locked": { - "lastModified": 1774333105, - "narHash": "sha256-UvMGRa1tuQAzgyQu5+X/cEPTZrGxO8V1Q+N+t9ofhdA=", + "lastModified": 1774875775, + "narHash": "sha256-oYetArRkSVg4fa7RTV36sT2/w8Fz9ijRYXiB7/9dtk4=", "owner": "BirdeeHub", "repo": "lze", - "rev": "079a1dc8da437aa881448ad1f16962d10ea84848", + "rev": "a09a8291d7b4c48e2af6a8cd3ef55bb8f3c181cd", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1774400689, - "narHash": "sha256-hHABVYL0rxhVIzc7hZEpvE0eiCKPnevte73Tn6FRolo=", + "lastModified": 1774879171, + "narHash": "sha256-a6JZDuBIwQmuEwYM4dziH+WyrpE8HCP8F7JFIn3CNvw=", "owner": "BirdeeHub", "repo": "nix-wrapper-modules", - "rev": "54645978682ff99594a1d1666dde6fac6a8134f2", + "rev": "bab35ffae25cf6f4e4fdb3c2f7f0ac80966ce737", "type": "github" }, "original": {