diff --git a/dotfiles/neovim/ftplugin/lua.lua b/dotfiles/neovim/ftplugin/lua.lua index 8d7cb66..b8b77cb 100644 --- a/dotfiles/neovim/ftplugin/lua.lua +++ b/dotfiles/neovim/ftplugin/lua.lua @@ -2,7 +2,7 @@ local opts = function(desc) return { desc = desc, buffer = true } end -vim.keymap.set("n", "lf", ":source %", opts("Run current lua file")) +vim.keymap.set("n", "lf", ":source %", opts("Run [l]ua [f]ile ")) vim.keymap.set("n", "ls", function() local path = vim.api.nvim_buf_get_name(0) local status, M = pcall(dofile, path) diff --git a/dotfiles/neovim/ftplugin/purescript.lua b/dotfiles/neovim/ftplugin/purescript.lua index 642497c..04e24c2 100644 --- a/dotfiles/neovim/ftplugin/purescript.lua +++ b/dotfiles/neovim/ftplugin/purescript.lua @@ -28,3 +28,5 @@ local abbreviations = { } A.manyLocalAbbr(abbreviations) + + diff --git a/dotfiles/neovim/ftplugin/tex.lua b/dotfiles/neovim/ftplugin/tex.lua index 5f21b10..cdf74f0 100644 --- a/dotfiles/neovim/ftplugin/tex.lua +++ b/dotfiles/neovim/ftplugin/tex.lua @@ -6,9 +6,6 @@ require("my.helpers.wrapMovement").setup() vim.opt.conceallevel = 0 vim.opt.wrap = true -vim.g.vimtex_imaps_enabled = 0 -vim.g.vimtex_syntax_conceal_disable = 1 - vim.keymap.set("n", "lg", function() if not pcall(function() local a = tonumber(vim.fn.input("A: ")) diff --git a/dotfiles/neovim/init.lua b/dotfiles/neovim/init.lua index 8e3c994..322509d 100644 --- a/dotfiles/neovim/init.lua +++ b/dotfiles/neovim/init.lua @@ -1,9 +1,18 @@ -local lazy_path = os.getenv("LAZY_NVIM_PATH") +-- bootstrap from github +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if lazy_path == nil then - error("Lazy.nvim not installed!") +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "--single-branch", + "git@github.com:folke/lazy.nvim.git", + lazypath, + }) end -vim.opt.runtimepath:prepend(lazy_path) +vim.opt.runtimepath:prepend(lazypath) require("my.init").setup() + diff --git a/dotfiles/neovim/lazy-lock.json b/dotfiles/neovim/lazy-lock.json new file mode 100644 index 0000000..e6ff9a8 --- /dev/null +++ b/dotfiles/neovim/lazy-lock.json @@ -0,0 +1,67 @@ +{ + "LuaSnip": { "branch": "master", "commit": "5570fd797eae0790affb54ea669a150cad76db5d" }, + "abbreinder.nvim": { "branch": "main", "commit": "5b2b5ff08a9ada42238d733aeebc6d3d96314d77" }, + "abbremand.nvim": { "branch": "main", "commit": "d633341f632b0b2666dfc6dfe6b9842ba1610a1d" }, + "catppuccin": { "branch": "main", "commit": "55f43a952856bc0029e6cef066297c6cfab3451d" }, + "clipboard-image.nvim": { "branch": "main", "commit": "d1550dc26729b7954f95269952e90471b838fa25" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-cmdline": { "branch": "main", "commit": "23c51b2a3c00f6abc4e922dbd7c3b9aca6992063" }, + "cmp-emoji": { "branch": "main", "commit": "19075c36d5820253d32e2478b6aaf3734aeaafa0" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "59224771f91b86d1de12570b4070fe4ad7cd1eeb" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" }, + "dashboard-nvim": { "branch": "master", "commit": "115b9f9cec10e31aff39c077bf5a4881bc840916" }, + "dhall-vim": { "branch": "master", "commit": "68500ef46ff3706f46c99db3be7a0c8abcf6a3ae" }, + "dressing.nvim": { "branch": "master", "commit": "4436d6f41e2f6b8ada57588acd1a9f8b3d21453c" }, + "fidget.nvim": { "branch": "main", "commit": "44585a0c0085765195e6961c15529ba6c5a2a13b" }, + "firenvim": { "branch": "master", "commit": "17a189f0f1e2d4197e00cd56dbeaed8c268bac8c" }, + "gitlinker.nvim": { "branch": "master", "commit": "c68d4873a14d2ae614875685ccca2e49472989e8" }, + "glow.nvim": { "branch": "main", "commit": "20d1cd087f8728f21a048a3b6259f6177237b39e" }, + "hydra.nvim": { "branch": "master", "commit": "7e2aa29f88d534371c6b0263d3abbfac7c2376ce" }, + "idris2-nvim": { "branch": "main", "commit": "dd850c1c67bcacd2395121b0898374fe9cdd228f" }, + "inc-rename.nvim": { "branch": "main", "commit": "48c4aa2be19f79e79b465a9bb37ee9fbe6c606f5" }, + "iron.nvim": { "branch": "master", "commit": "bd5ad2a04195fb7a739eb973fa2d9f7ccc35ab4b" }, + "kmonad-vim": { "branch": "master", "commit": "37978445197ab00edeb5b731e9ca90c2b141723f" }, + "knap": { "branch": "main", "commit": "62eae7803d9d87d33513b3b565c6f5791f1de1ea" }, + "kotlin-vim": { "branch": "master", "commit": "1261f851e5fb2192b3a5e1691650597c71dfce2f" }, + "lazy.nvim": { "branch": "main", "commit": "0d0d11acb2547ea65e0eba4fb6855f0954ed0239" }, + "lean.nvim": { "branch": "main", "commit": "0f7326f7e55ddbb69c057051566f5212d902b7f3" }, + "leap": { "branch": "main", "commit": "a5c9504290832e6bdbbb6265fd1ff02fc6485d20" }, + "lspkind.nvim": { "branch": "master", "commit": "c68b3a003483cf382428a43035079f78474cd11e" }, + "lualine.nvim": { "branch": "master", "commit": "fffbcb829288c3ca366f17cdb8d46aefb5c1d6f3" }, + "mind.nvim": { "branch": "master", "commit": "5aa39d57d1091999ca5bdcdd056a27a032156c2d" }, + "neoconf.nvim": { "branch": "main", "commit": "71e86dc9324069807c1135c46c0c9f6eb793966b" }, + "neodev.nvim": { "branch": "main", "commit": "f6ee1a7651280ac476403c0b70bbfb419fa720ab" }, + "neogit": { "branch": "master", "commit": "0d6002c6af432343937283fb70791fc76fa7227c" }, + "nui.nvim": { "branch": "main", "commit": "4939282919885e1c83aff68ecb35b3cadf6015a9" }, + "null-ls.nvim": { "branch": "main", "commit": "eaacba0b93c416252894f8bdc68e6b50b4e4c3b4" }, + "nvim-autopairs": { "branch": "master", "commit": "03580d758231956d33c8dd91e2be195106a79fa4" }, + "nvim-cmp": { "branch": "main", "commit": "e55033fce468c9c578b946948807f2ac48a6ee08" }, + "nvim-comment": { "branch": "main", "commit": "e9ac16ab056695cad6461173693069ec070d2b23" }, + "nvim-lspconfig": { "branch": "master", "commit": "42ca8ce0f2252be795da4789fadfa91f6c3f7464" }, + "nvim-tree.lua": { "branch": "master", "commit": "9e4c39572f631bb60ee15cb9d46e1daa9927a45e" }, + "nvim-treesitter": { "branch": "master", "commit": "fb36ed4c9e962d9fbfa608cd4a5d9313b1e8a8b1" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "83a494a6f93675beff7bbd320c04c87433b1462f" }, + "nvim-web-devicons": { "branch": "master", "commit": "05e1072f63f6c194ac6e867b567e6b437d3d4622" }, + "nvim_context_vt": { "branch": "master", "commit": "31436f34f3f95e4e70853cd653fdf78246cb0e85" }, + "paperplanes.nvim": { "branch": "master", "commit": "d704b2e1e594b32d454cc7e0c5f2cf9b391e3cc1" }, + "plenary.nvim": { "branch": "master", "commit": "4b7e52044bbb84242158d977a50c4cbcd85070c7" }, + "presence.nvim": { "branch": "main", "commit": "c1c54758824cbecd4e18065d37191f7666fdd097" }, + "purescript-vim": { "branch": "main", "commit": "7af25a840d38dc6767c85edd1f35c1f835618071" }, + "scrap.nvim": { "branch": "main", "commit": "16db44ae9403ec9c4b140394f294475d1af80a18" }, + "smart-splits.nvim": { "branch": "master", "commit": "fdd158ce7554dc830fb86e0fe952cd9476cdf726" }, + "telescope-file-browser.nvim": { "branch": "master", "commit": "b8581d00afa02c6bb4c947348e3cee62db65b119" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "fab3e2212e206f4f8b3bbaa656e129443c9b802e" }, + "telescope.nvim": { "branch": "master", "commit": "e960efa60e97df58e089b00270f09d60f27202c8" }, + "venn.nvim": { "branch": "main", "commit": "c114563960b8fb1197695d42798d1f3e7190b798" }, + "vim-abolish": { "branch": "master", "commit": "3f0c8faadf0c5b68bcf40785c1c42e3731bfa522" }, + "vim-arpeggio": { "branch": "master", "commit": "01c8fc1a72ef58e490ee0490c65ee313b1b6e843" }, + "vim-sleuth": { "branch": "master", "commit": "8332f123a63c739c870c96907d987cc3ff719d24" }, + "vim-surround": { "branch": "master", "commit": "3d188ed2113431cf8dac77be61b842acb64433d9" }, + "vim-teal": { "branch": "master", "commit": "d2aa107b257879e774680792a2aebaf9cd5742e0" }, + "vim-tmux-navigator": { "branch": "master", "commit": "41ea9d23b814014c8d8daf8b44fa0cd827a0e5f4" }, + "vim-wakatime": { "branch": "master", "commit": "8c7f33b43a56f89285de0da77ee6ec7e4af1f835" }, + "vimtex": { "branch": "master", "commit": "5e03d9052de30c8e4c2f4907600783112454028a" }, + "vimux": { "branch": "master", "commit": "616fcb4799674a7a809b14ca2dc155bb6ba25788" }, + "which-key.nvim": { "branch": "main", "commit": "8682d3003595017cd8ffb4c860a07576647cc6f8" } +} \ No newline at end of file diff --git a/dotfiles/neovim/lua/my/helpers/env.lua b/dotfiles/neovim/lua/my/helpers/env.lua index e30e6cc..312056c 100644 --- a/dotfiles/neovim/lua/my/helpers/env.lua +++ b/dotfiles/neovim/lua/my/helpers/env.lua @@ -1,12 +1,19 @@ local function makeEnv(cond) return { active = cond, + not_active = function() + return not cond() + end, unless = function(f) - if not cond() then f() end + if not cond() then + f() + end end, when = function(f) - if cond() then f() end - end + if cond() then + f() + end + end, } end @@ -15,9 +22,19 @@ return { return vim.g.vscode ~= nil end), neovide = makeEnv(function() - return vim.g.neovide ~= nil + return vim.g.neovide ~= nil or os.getenv("INSIDE_NEOVIDE") ~= nil end), - firevim = makeEnv(function() + firenvim = makeEnv(function() return vim.g.started_by_firenvim ~= nil - end) + end), + _and = function(a, b) + return makeEnv(function() + return a.active() and b.active() + end) + end, + _or = function(a, b) + return makeEnv(function() + return a.active() or b.active() + end) + end } diff --git a/dotfiles/neovim/lua/my/init.lua b/dotfiles/neovim/lua/my/init.lua index 811cf66..3886f9b 100644 --- a/dotfiles/neovim/lua/my/init.lua +++ b/dotfiles/neovim/lua/my/init.lua @@ -4,6 +4,7 @@ function M.setup() -- Import my other files require("my.options").setup() require('my.keymaps').setup() + require('my.lazy').setup() end return M diff --git a/dotfiles/neovim/lua/my/keymaps.lua b/dotfiles/neovim/lua/my/keymaps.lua index 6484deb..7731d7b 100644 --- a/dotfiles/neovim/lua/my/keymaps.lua +++ b/dotfiles/neovim/lua/my/keymaps.lua @@ -58,7 +58,7 @@ function M.setup() end vim.cmd("q") - end, { desc = "[q]uit current buffer" }) + end, { desc = "[Q]uit current buffer" }) M.nmap("Q", ":wqa", "Save all files and [q]uit") -- }}} @@ -74,41 +74,24 @@ function M.setup() M.nmap("[d", vim.diagnostic.goto_prev, "Goto previous [d]iagnostic") M.nmap("]d", vim.diagnostic.goto_next, "Goto next [d]iagnostic") M.nmap("J", vim.diagnostic.open_float, "Open current diagnostic") - M.nmap("D", vim.diagnostic.setloclist, "[S]iagnostic loclist") + M.nmap("D", vim.diagnostic.setloclist, "[D]iagnostic loclist") -- }}} -- {{{ Chords (exit insert mode, save, clipboard) -- }}} - -- {{{ Set up which-key structure - local status, wk = pcall(require, "which-key") - - if status then - wk.register({ - [""] = { - f = { name = "[F]iles" }, - g = { name = "[G]o to" }, - r = { name = "[R]ename / [R]eplace / [R]eload" }, - l = { name = "[L]ocal" }, - w = { name = "[W]orkspace" }, - v = "which_key_ignore", - }, - }) - end + -- {{{ Allow quiting basic buffers with "q" + vim.api.nvim_create_autocmd("FileType", { + pattern = { "help" }, + callback = function(event) + vim.keymap.set( + "n", + "q", + "close", + { buffer = event.buf, silent = true, desc = "[q]uit current buffer" } + ) + end, + }) -- }}} - - -vim.api.nvim_create_autocmd({ "FileType" }, { - pattern = { - "help", - "man", - "notify", - "lspinfo" - }, - callback = function(event) - vim.keymap.set("n", "q", "close", { buffer = event.buf, silent = true, desc = "[q]uit current buffer" }) - end, -}) - return M end diff --git a/dotfiles/neovim/lua/my/lazy.lua b/dotfiles/neovim/lua/my/lazy.lua new file mode 100644 index 0000000..ff9ea90 --- /dev/null +++ b/dotfiles/neovim/lua/my/lazy.lua @@ -0,0 +1,31 @@ +local M = {} + +function M.setup() + require("lazy").setup("my.plugins", { + defaults = { lazy = true }, + disabled_plugins = { + "gzip", + "matchit", + "matchparen", + "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "catpuccin" }, + }, + change_detection = { + enabled = false, + notify = false, + }, + }) +end + +vim.keymap.set("n", "L", "Lazy", { desc = "[L]azy ui" }) + +return M diff --git a/dotfiles/neovim/lua/my/neovide.lua b/dotfiles/neovim/lua/my/neovide.lua new file mode 100644 index 0000000..bea1b2f --- /dev/null +++ b/dotfiles/neovim/lua/my/neovide.lua @@ -0,0 +1,18 @@ +local M = {} + +function M.setup() + vim.g.neovide_floating_blur_amount_x = 3.0 + vim.g.neovide_floating_blur_amount_y = 3.0 + vim.g.neovide_transparency = 1.0 + vim.g.pumblend = 30 + + vim.api.nvim_create_autocmd("WinEnter", { + group = vim.api.nvim_create_augroup("Setup transparency", {}), + pattern = "*", + callback = function() + vim.wo.winblend = 30 + end + }) +end + +return M diff --git a/dotfiles/neovim/lua/my/paq.lua b/dotfiles/neovim/lua/my/paq.lua deleted file mode 100644 index 5f39141..0000000 --- a/dotfiles/neovim/lua/my/paq.lua +++ /dev/null @@ -1,98 +0,0 @@ -local M = {} - -function M.setup() - local paq = require("paq") - local themePackages = require("my.theme").deps - local base = { - "nvim-lua/plenary.nvim", -- async utility lib it seems? - --------------------------------- Unuported - "folke/neoconf.nvim", -- per project neovim configuration - "neovim/nvim-lspconfig", -- configures lsps for me - "folke/neodev.nvim", -- lua support - "windwp/nvim-autopairs", -- closes pairs for me (should look for a better one) - "nvim-telescope/telescope.nvim", -- fuzzy search for say opening files - "purescript-contrib/purescript-vim", -- purescript support - "terrortylor/nvim-comment", -- allows toggling line comments - "nvim-treesitter/nvim-treesitter-textobjects", -- the lean plugin wants me to install this, lol - -- "startup-nvim/startup.nvim", -- splash screen - "glepnir/dashboard-nvim", -- similar to startup.nvim - "kyazdani42/nvim-web-devicons", -- nice looking icons - "nvim-lualine/lualine.nvim", -- customizable status line - "kyazdani42/nvim-tree.lua", -- file tree - "lervag/vimtex", -- latex support - "jose-elias-alvarez/null-ls.nvim", -- generic language server - "nvim-telescope/telescope-file-browser.nvim", -- file creation/deletion menu - "onsails/lspkind.nvim", -- show icons in lsp completion menus - "preservim/vimux", -- interact with tmux from within vim - "christoomey/vim-tmux-navigator", -- easly switch between tmux and vim panes - "kana/vim-arpeggio", -- chord support, let"s fucking goooo - { "andweeb/presence.nvim", run = ":DownloadUnicode" }, -- discord rich presence - "Julian/lean.nvim", -- lean support - "kmonad/kmonad-vim", -- kmonad config support - -- "LucHermitte/lh-vim-lib", -- dependency for lh-brackets - -- "LucHermitte/lh-brackets", -- kinda useless bruh, should find something better - -- Cmp related stuff - "hrsh7th/cmp-nvim-lsp", -- lsp completion - "hrsh7th/cmp-buffer", -- idr what this is - "hrsh7th/cmp-path", -- path completion ig? - "hrsh7th/cmp-cmdline", -- cmdline completion perhaps? - "hrsh7th/nvim-cmp", -- completion engine - "L3MON4D3/LuaSnip", -- snippeting engine - "saadparwaiz1/cmp_luasnip", -- snippet support for cmp - "wakatime/vim-wakatime", -- track time usage - "vmchale/dhall-vim", -- dhall syntax highlighting - "folke/which-key.nvim", -- shows what other keys I can press to finish a command - { "psliwka/vim-smoothie", opt = true }, -- smooth scrolling - -- "easymotion/vim-easymotion", -- removes the need for spamming w or e - "ggandor/leap.nvim", -- removes the need for spamming w or e - "tpope/vim-surround", -- work with brackets, quotes, tags, etc - "MunifTanjim/nui.nvim", -- ui stuff required by idris2 - "ShinKage/idris2-nvim", -- idris2 support - "udalov/kotlin-vim", -- kotlin support - "haringsrob/nvim_context_vt", -- show context on closing parenthesis - -- "vuki656/package-info.nvim", -- shows latest versions in package.json - "j-hui/fidget.nvim", -- show progress for lsp stuff - "stevearc/dressing.nvim", -- better ui I guess - "rktjmp/paperplanes.nvim", -- export to pastebin like services - "anuvyklack/hydra.nvim", -- keybinds where you only hit the head once - "jbyuki/venn.nvim", -- draw ascii diagrams - "hrsh7th/cmp-omni", -- omnifunc source for cmp - "ekickx/clipboard-image.nvim", -- paste images from clipbaord - "glacambre/firenvim", -- vim inside chrome - "lewis6991/impatient.nvim", -- faster startup times - "tpope/vim-abolish", -- abbreviations on steroids - "mrjones2014/smart-splits.nvim", -- the name says it all - "phaazon/mind.nvim", -- Organize shit as trees - "bfredl/nvim-luadev", -- lua repl thingy - "akinsho/toggleterm.nvim", -- cool terminal thingy - "folke/noice.nvim", -- better ui for cmd line and other stuff - "rcarriga/nvim-notify", -- better notifiaction ui - "hkupty/iron.nvim", -- repl support - "0styx0/abbremand.nvim", -- dependency for the next thing - "0styx0/abbreinder.nvim", -- reminds you of abbreviations - "ellisonleao/glow.nvim", -- md preview (in terminal) - "frabjous/knap", -- md preview - "tpope/vim-sleuth", -- automatically set options based on current file - "mateiadrielrafael/scrap.nvim", -- vim-abolish rewrite - "kevinhwang91/promise-async", -- required by nvim-ufo - "kevinhwang91/nvim-ufo", -- better folds and stuff - "ThePrimeagen/refactoring.nvim", -- refactoring - "gpanders/nvim-moonwalk", -- configure nvim in any language which compiles to lua - "teal-language/vim-teal", -- teal language support - - -- Git stuff - "ruifm/gitlinker.nvim", -- generate permalinks for code - { "TimUntersberger/neogit", opt = true } -- magit clone - } - - table.insert(base, 2, { "nvim-treesitter/nvim-treesitter", run = ":TSUpdate" }) - - for _, v in ipairs(themePackages) do - -- append package in the base list - table.insert(base, v) - end - - paq(base) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/abolish.lua b/dotfiles/neovim/lua/my/plugins/abolish.lua deleted file mode 100644 index bb1ffbb..0000000 --- a/dotfiles/neovim/lua/my/plugins/abolish.lua +++ /dev/null @@ -1,227 +0,0 @@ -local A = require("my.abbreviations") - -local M = {} - --- function M.abolish(from, to) --- vim.cmd(":Abolish -buffer " .. from .. " " .. to) --- end --- --- function M.abolishMany(many) --- for _, entry in pairs(many) do M.abolish(entry[1], entry[2]) end --- end - -local function concatTables(t1, t2) - assert(type(t1) == "table") - assert(type(t2) == "table") - - local t3 = {} - for i = 1, #t1 do t3[#t3 + 1] = t1[i] end - for i = 1, #t2 do t3[#t3 + 1] = t2[i] end - return t3 -end - -local function betterAbolish(unprocessed, context, out) - local from = unprocessed[1] or {} - local to = unprocessed[2] or {} - - assert(type(from) == "table" and type(to) == "table", - "Both arguments should be tables. Found " .. vim.inspect(from) .. " and " .. - vim.inspect(to) .. " instead.") - - -- print(vim.inspect({ context = context, unprocessed = unprocessed })) - - if #from == 0 and #to == 0 then - table.insert(out, context) - return - end - - for i = 1, 2, 1 do - local head = unprocessed[i][1] - if type(head) == "string" then - local context_clone = { context[1], context[2] } - - context_clone[i] = context_clone[i] .. head - - local unprocessed_clone = { unprocessed[1], unprocessed[2] } - unprocessed_clone[i] = { unpack(unprocessed[i], 2) } - - return betterAbolish(unprocessed_clone, context_clone, out) - end - end - - -- print(vim.inspect({ from, to, context })) - - assert(type(from[1]) == "table", vim.inspect(from) .. " starts with neither a table nor a string") - assert(type(to[1]) == "table", vim.inspect(to) .. " does not start with a table") - - for i = 1, #from[1], 1 do - local when = from[1][i] - local replacement = when - - if #to[1] > 0 then replacement = to[1][((i - 1) % #to[1]) + 1] end - - assert(type(when) == "table") - assert(type(replacement) == "table") - - local unprocessed_clone = { - concatTables(when, { unpack(from, 2) }), - concatTables(replacement, { unpack(to, 2) }) - } - - -- print(vim.inspect({ - -- unprocessed_clone = unprocessed_clone, - -- when = when, - -- replacement = replacement, - -- from = from, - -- to = to, - -- i = i - -- })) - - betterAbolish(unprocessed_clone, context, out) - end -end - -function M.betterAbolish(from, to) - local result = {} - betterAbolish({ from, to }, { "", "" }, result) - - return result -end - -local function withCasing(input) - local out = {} - - for i = 1, #input, 1 do - local from = input[i][1] - local to = input[i][2] - - table.insert(out, { from, to }) - table.insert(out, { string.upper(from), string.upper(to) }) - - if #from and #to then - table.insert(out, { - string.upper(string.sub(from, 1, 1)) .. string.sub(from, 2), - string.upper(string.sub(to, 1, 1)) .. string.sub(to, 2) - }) - end - end - - return out -end - ----Parses the input for this plugin ----@param input string ----@param context {delimiters:{left:string,right:string},separator:string} ----@return nil|{positio:number,message:string} ----@return (string|table)[]|nil -local function parse(input, context) - local position = 1 - ---@type { start:number, contents:(string|table)[] }[] - local stack = { { start = position, contents = {} } } - - local function error(message, pos) - return { position = pos or position, message = message } - end - - local escaped = false - local escapedChars = { - ["\\"] = true, - [context.delimiters.left] = true, - [context.delimiters.right] = true - } - - -- When encountering {}, instead of treating it like a single - -- choice containing an empty string, we must treat it as an empty choice - -- - -- The specialEmpty arg tells us whether to consider such cases. - local function saveUp(specialEmpty) - local prev = stack[#stack - 1].contents - local current = stack[#stack] - - assert(type(prev[#prev]) == "table") - ---@cast prev table - - -- If specialEmpty is true (so we are processing a '}'), - -- we only want to keep empty strings (so those where #current.contents == 0) - -- if we've had a , before (so #prev[#prev] > 0) - if not specialEmpty or #current.contents > 0 or #prev[#prev] > 0 then - table.insert(prev[#prev], current.contents) - end - end - - while position <= string.len(input) do - local first = string.sub(input, position, position) - local next = string.sub(input, position + 1, position + 1) - local current = stack[#stack] - - if not escaped and first == "\\" and escapedChars[next] then - escaped = true - - elseif not escaped and first == context.delimiters.left then - table.insert(current.contents, {}) - stack[#stack + 1] = { start = position, contents = {} } - elseif not escaped and first == context.delimiters.right then - if #stack == 1 then - return nil, error("Delimiter " .. context.delimiters.right .. " never opened") - end - - -- we want special treatment for {} - saveUp(true) - - stack[#stack] = nil - elseif not escaped and first == context.separator and #stack > 1 then - -- we want to treat empty strings before , as empty strings - saveUp(false) - - current.contents = {} - else - local last = current.contents[#current.contents] - - if type(last) == "string" then - current.contents[#current.contents] = last .. first - else - table.insert(current.contents, first) - end - - escaped = false - end - - position = position + 1 - end - - if #stack > 1 then - return nil, error("Delimiter " .. context.delimiters.left .. " never closed", stack[2].start) - end - - return stack[1].contents, nil -end - -local context = { delimiters = { left = "{", right = "}" }, separator = "," } - -function M.abolishMany(many) - local total = 0 - - for _, entry in pairs(many) do - local left = parse(entry[1], context) - local right = parse(entry[2], context) - - local abbreviations = withCasing(M.betterAbolish(left, right)) - total = total + #abbreviations - - A.manyLocalAbbr(abbreviations) - end - - print("Added " .. total .. " abbreviations") -end - --- function M.setup() --- local context = { delimiters = { left = "{", right = "}" }, separator = "," } --- print(vim.inspect({ parse("abc\\d{a, d,e}dsdf\\{sdf\\}", context) })) --- local parsed, _ = parse("ab{e,{f0,1e,d2},f,{3,4,5},\\{{000,111}\\}}cd", context) --- -- local parsed, _ = parse("abc", context) --- print(vim.inspect(parsed)) --- local processed = M.betterAbolish(parsed, parsed) --- print(vim.inspect(processed)) --- end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/arpeggio.lua b/dotfiles/neovim/lua/my/plugins/arpeggio.lua index a270828..8a3fbee 100644 --- a/dotfiles/neovim/lua/my/plugins/arpeggio.lua +++ b/dotfiles/neovim/lua/my/plugins/arpeggio.lua @@ -1,7 +1,10 @@ local helpers = require("my.helpers") -local arpeggio = vim.fn["arpeggio#map"] -local M = {} +local M = { + -- chord support, let"s fucking goooo + "kana/vim-arpeggio", + event = "VeryLazy", +} ---Create an arpeggio mapping ---@param mode string @@ -9,6 +12,8 @@ local M = {} ---@param rhs string ---@param opts table|nil local function chord(mode, lhs, rhs, opts) + local arpeggio = vim.fn["arpeggio#map"] + if string.len(mode) > 1 then for i = 1, #mode do local c = mode:sub(i, i) @@ -36,7 +41,7 @@ local function chordSilent(mode, lhs, rhs, opts) chord(mode, lhs, rhs, options) end -function M.setup() +function M.config() chordSilent("n", "ji", ":silent :write") -- Saving chord("i", "jk", "") -- Remap Esc to jk chord("nv", "cp", '"+') -- Press cp to use the global clipboard diff --git a/dotfiles/neovim/lua/my/plugins/autopairs.lua b/dotfiles/neovim/lua/my/plugins/autopairs.lua deleted file mode 100644 index 5736a07..0000000 --- a/dotfiles/neovim/lua/my/plugins/autopairs.lua +++ /dev/null @@ -1,17 +0,0 @@ -local M = {} - -function M.setup() - -- local cmp_autopairs = require('nvim-autopairs.completion.cmp') - -- local cmp = require('cmp') - -- - -- cmp.event:on( - -- 'confirm_done', - -- cmp_autopairs.on_confirm_done() - -- ) - - require('nvim-autopairs').setup({ - enable_abbr = false - }) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/catpuccin.lua b/dotfiles/neovim/lua/my/plugins/catpuccin.lua new file mode 100644 index 0000000..8171318 --- /dev/null +++ b/dotfiles/neovim/lua/my/plugins/catpuccin.lua @@ -0,0 +1,18 @@ +local M = { + "catppuccin/nvim", name = "catppuccin", + lazy = false +} + +function M.config() + local catppuccin = require("catppuccin") + vim.g.catppuccin_flavour = os.getenv("CATPPUCCIN_FLAVOUR") + + catppuccin.setup({ transparent_background = false, integrations = { nvimtree = true } }) + + vim.cmd [[highlight NotifyINFOIcon guifg=#d6b20f]] + vim.cmd [[highlight NotifyINFOTitle guifg=#d6b20f]] + + vim.cmd [[colorscheme catppuccin]] +end + +return M diff --git a/dotfiles/neovim/lua/my/plugins/clipboard-image.lua b/dotfiles/neovim/lua/my/plugins/clipboard-image.lua index 4474729..b09fb82 100644 --- a/dotfiles/neovim/lua/my/plugins/clipboard-image.lua +++ b/dotfiles/neovim/lua/my/plugins/clipboard-image.lua @@ -1,28 +1,39 @@ -local M = {} +local M = { + -- paste images from clipbaord + "ekickx/clipboard-image.nvim", + cmd = "PasteImg", +} local function img_name() vim.fn.inputsave() - local name = vim.fn.input('Name: ') + local name = vim.fn.input("Name: ") vim.fn.inputrestore() - if name == nil or name == '' then - return os.date('%y-%m-%d-%H-%M-%S') + if name == nil or name == "" then + return os.date("%y-%m-%d-%H-%M-%S") end return name end -function M.setup() - require 'clipboard-image'.setup { +function M.init() + vim.keymap.set( + "n", + "p", + ":PasteImg", + { desc = "[P]aste image from clipboard" } + ) +end + +function M.config() + require("clipboard-image").setup({ default = { - img_name = img_name + img_name = img_name, }, tex = { img_dir = { "%:p:h", "img" }, affix = "\\includegraphics[width=\\textwidth]{%s}", }, - } - - vim.keymap.set("n", "p", ":PasteImg", { desc = "Paste image from clipboard" }) + }) end return M diff --git a/dotfiles/neovim/lua/my/plugins/cmp.lua b/dotfiles/neovim/lua/my/plugins/cmp.lua index 082e78f..b99b5a8 100644 --- a/dotfiles/neovim/lua/my/plugins/cmp.lua +++ b/dotfiles/neovim/lua/my/plugins/cmp.lua @@ -1,4 +1,19 @@ -local M = {} +local env = require("my.helpers.env") + +local M = { + "hrsh7th/nvim-cmp", + event = "InsertEnter", + dependencies = { + "onsails/lspkind.nvim", -- show icons in lsp completion menus + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-emoji", + "hrsh7th/cmp-cmdline", + "hrsh7th/cmp-path", + "saadparwaiz1/cmp_luasnip", + }, + cond = env.vscode.not_active() +} local function has_words_before() local line, col = unpack(vim.api.nvim_win_get_cursor(0)) @@ -8,10 +23,11 @@ local function has_words_before() :match('%s') == nil end -function M.setup() +function M.config() + vim.o.completeopt = "menuone,noselect" + local cmp = require("cmp") local lspkind = require('lspkind') - -- local luasnip = require("luasnip") local options = { window = { @@ -19,6 +35,7 @@ function M.setup() winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None", col_offset = -3, side_padding = 0, + completeopt = "menu,menuone,noinsert", }, }, formatting = { @@ -63,15 +80,18 @@ function M.setup() [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. }, sources = cmp.config.sources({ - { name = 'nvim_lsp' }, -- lsp completion - { name = 'luasnip' }, -- snippets - { name = 'omni' } -- omnifunc - }, { { name = 'buffer' } }) + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'buffers' }, + { name = 'emoji' }, + { name = 'path' }, + -- { name = 'omni' }, + }) } cmp.setup(options) - -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). + -- Use buffer source for `/` cmp.setup.cmdline('/', { mapping = cmp.mapping.preset.cmdline(), sources = { @@ -79,12 +99,11 @@ function M.setup() } }) - -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). + -- Use cmdline & path source for ':' cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ - { name = 'path' } - }, { + { name = 'path' }, { name = 'cmdline' } }) }) diff --git a/dotfiles/neovim/lua/my/plugins/dashboard.lua b/dotfiles/neovim/lua/my/plugins/dashboard.lua index c6bc9d4..85b3535 100644 --- a/dotfiles/neovim/lua/my/plugins/dashboard.lua +++ b/dotfiles/neovim/lua/my/plugins/dashboard.lua @@ -1,6 +1,12 @@ -local M = {} +local env = require("my.helpers.env") -function M.setup() +local M = { + "glepnir/dashboard-nvim", + lazy = false, + cond = env.vscode.not_active() and env.firenvim.not_active(), +} + +function M.config() local db = require("dashboard") db.custom_header = {} end diff --git a/dotfiles/neovim/lua/my/plugins/firenvim.lua b/dotfiles/neovim/lua/my/plugins/firenvim.lua new file mode 100644 index 0000000..8192c83 --- /dev/null +++ b/dotfiles/neovim/lua/my/plugins/firenvim.lua @@ -0,0 +1,19 @@ +local env = require("my.helpers.env") + +local M = { + "glacambre/firenvim", -- vim inside chrome + lazy = false, + cond = env.firenvim.active(), +} + +function M.setup() + vim.g.firenvim_config = { + localSettings = { + [".*"] = { + filename = "/tmp/firenvim_{hostname}_{pathname%10}_{timestamp%32}.{extension}", + }, + }, + } +end + +return M diff --git a/dotfiles/neovim/lua/my/plugins/firevim.lua b/dotfiles/neovim/lua/my/plugins/firevim.lua deleted file mode 100644 index 9748f03..0000000 --- a/dotfiles/neovim/lua/my/plugins/firevim.lua +++ /dev/null @@ -1,13 +0,0 @@ -local M = {} - -function M.setup() - vim.g.firenvim_config = { - localSettings = { - ['.*'] = { - filename = '/tmp/firevim_{hostname}_{pathname%10}_{timestamp%32}.{extension}', - } - } - } -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/hydra.lua b/dotfiles/neovim/lua/my/plugins/hydra.lua index 07f8712..151df7d 100644 --- a/dotfiles/neovim/lua/my/plugins/hydra.lua +++ b/dotfiles/neovim/lua/my/plugins/hydra.lua @@ -1,8 +1,12 @@ -local Hydra = require('hydra') -local pcmd = require('hydra.keymap-util').pcmd -local splits = require('smart-splits') - -local M = {} +local M = { + -- keybinds where you only hit the head once + "anuvyklack/hydra.nvim", + dependencies = { + "jbyuki/venn.nvim", -- draw ascii diagrams + "mrjones2014/smart-splits.nvim", -- the name says it all + }, + keys = { "", "v" }, +} local venn_hint = [[ Arrow^^^^^^ Select region with @@ -11,7 +15,6 @@ local venn_hint = [[ ^ ^ _J_ ^ ^ __ ]] - local window_hint = [[ ^^^^^^^^^^^^ Move ^^ Size ^^ ^^ Split ^^^^^^^^^^^^------------- ^^-----------^^ ^^--------------- @@ -21,80 +24,103 @@ local window_hint = [[ focus^^^^^^ window^^^^^^ ^_=_: equalize^ _o_: close remaining ]] -function M.setup() +function M.config() + local Hydra = require("hydra") + local pcmd = require("hydra.keymap-util").pcmd + local splits = require("smart-splits") Hydra({ - name = 'Draw Diagram', + name = "Draw Diagram", hint = venn_hint, config = { - color = 'pink', + color = "pink", invoke_on_body = true, hint = { - border = 'rounded' + border = "rounded", }, on_enter = function() - vim.o.virtualedit = 'all' + vim.o.virtualedit = "all" end, }, - mode = 'n', - body = 'v', + mode = "n", + body = "v", heads = { - { 'H', 'h:VBox' }, - { 'J', 'j:VBox' }, - { 'K', 'k:VBox' }, - { 'L', 'l:VBox' }, - { 'f', ':VBox', { mode = 'v' } }, - { '', nil, { exit = true } }, - } + { "H", "h:VBox" }, + { "J", "j:VBox" }, + { "K", "k:VBox" }, + { "L", "l:VBox" }, + { "f", ":VBox", { mode = "v" } }, + { "", nil, { exit = true } }, + }, }) vim.keymap.set("n", "", "") Hydra({ - name = 'Windows', + name = "Windows", hint = window_hint, config = { invoke_on_body = true, hint = { - border = 'rounded', - offset = -1 - } + border = "rounded", + offset = -1, + }, }, - mode = 'n', - body = '', + mode = "n", + body = "", heads = { - { 'h', 'h' }, - { 'j', 'j' }, - { 'k', "k" }, - { 'l', 'l' }, + { "h", "h" }, + { "j", "j" }, + { "k", "k" }, + { "l", "l" }, - { 'H', 'H' }, - { 'J', 'J' }, - { 'K', 'K' }, - { 'L', 'L' }, + { "H", "H" }, + { "J", "J" }, + { "K", "K" }, + { "L", "L" }, - { '', function() splits.resize_left(2) end }, - { '', function() splits.resize_down(2) end }, - { '', function() splits.resize_up(2) end }, - { '', function() splits.resize_right(2) end }, - { '=', '=', { desc = 'equalize' } }, + { + "", + function() + splits.resize_left(2) + end, + }, + { + "", + function() + splits.resize_down(2) + end, + }, + { + "", + function() + splits.resize_up(2) + end, + }, + { + "", + function() + splits.resize_right(2) + end, + }, + { "=", "=", { desc = "equalize" } }, - { 's', pcmd('split', 'E36') }, - { '', pcmd('split', 'E36'), { desc = false } }, - { 'v', pcmd('vsplit', 'E36') }, - { '', pcmd('vsplit', 'E36'), { desc = false } }, + { "s", pcmd("split", "E36") }, + { "", pcmd("split", "E36"), { desc = false } }, + { "v", pcmd("vsplit", "E36") }, + { "", pcmd("vsplit", "E36"), { desc = false } }, - { 'w', 'w', { exit = true, desc = false } }, - { '', 'w', { exit = true, desc = false } }, + { "w", "w", { exit = true, desc = false } }, + { "", "w", { exit = true, desc = false } }, - { 'o', 'o', { exit = true, desc = 'remain only' } }, - { '', 'o', { exit = true, desc = false } }, + { "o", "o", { exit = true, desc = "remain only" } }, + { "", "o", { exit = true, desc = false } }, - { 'q', pcmd('close', 'E444'), { desc = 'close window' } }, - { '', pcmd('close', 'E444'), { desc = false } }, + { "q", pcmd("close", "E444"), { desc = "close window" } }, + { "", pcmd("close", "E444"), { desc = false } }, - { '', nil, { exit = true, desc = false } } - } + { "", nil, { exit = true, desc = false } }, + }, }) end diff --git a/dotfiles/neovim/lua/my/plugins/idris.lua b/dotfiles/neovim/lua/my/plugins/idris.lua index b060453..ad566e6 100644 --- a/dotfiles/neovim/lua/my/plugins/idris.lua +++ b/dotfiles/neovim/lua/my/plugins/idris.lua @@ -1,8 +1,14 @@ +local env = require("my.helpers.env") local lspconfig = require("my.plugins.lspconfig") -local M = {} +local M = { + "ShinKage/idris2-nvim", + dependencies = {"nui.nvim", "nvim-lspconfig"}, + ft = { "idris2", "lidris2", "ipkg" }, + cond = env.vscode.not_active(), +} -function M.setup() +function M.config() local idris2 = require("idris2") idris2.setup({ diff --git a/dotfiles/neovim/lua/my/plugins/init.lua b/dotfiles/neovim/lua/my/plugins/init.lua index 30bb728..1716c8e 100644 --- a/dotfiles/neovim/lua/my/plugins/init.lua +++ b/dotfiles/neovim/lua/my/plugins/init.lua @@ -1,67 +1,203 @@ local env = require("my.helpers.env") -local M = {} -function M.setup() - require("my.plugins.moonwalk").setup() - require("my.plugins.chunk") - require('nvim_comment').setup() - require('fidget').setup() - require('dressing').setup() - require('abbreinder').setup() - - require("my.plugins.autopairs").setup() - require("my.plugins.telescope").setup() - require("my.plugins.surround").setup() - - env.vscode.unless(function() - env.firevim.unless(function() - require('my.plugins.neoconf').setup() - - require("presence"):setup({}) - require("my.plugins.nvim-tree").setup() - require("my.plugins.lualine").setup() - require("my.plugins.vimux").setup() - -- require("my.plugins.whichkey").setup() - require("toggleterm").setup() - - require("my.plugins.neogit").setup() - -- require("my.plugins.noice").setup() - end) - - require("my.plugins.neodev").setup() - require("my.plugins.dashboard").setup() - require("my.plugins.treesitter").setup() - require("my.plugins.cmp").setup() - require("my.plugins.luasnip").setup() - require("my.plugins.lspconfig").setup() - require("my.plugins.null-ls").setup() - require("my.plugins.vimtex").setup() - -- require("my.plugins.lean").setup() - require("my.plugins.notify").setup() - end) - - if env.neovide.active() then - require("my.plugins.neovide").setup() - else - -- Neovide already provides this functionality! - vim.cmd [[packadd! vim-smoothie]] - end - - if env.firevim.active() then - require("my.plugins.firevim").setup() - else - require("gitlinker").setup() - require("my.plugins.paperplanes").setup() - end - - require("my.plugins.leap").setup() - require("my.plugins.hydra").setup() - require("my.plugins.clipboard-image").setup() - require("my.plugins.mind").setup() - -- require("my.plugins.ufo").setup() - require("my.plugins.arpeggio").setup() - - -- require("my.plugins.slam").setup() +if env.neovide.active() then + require("my.neovide").setup() end -return M +return { + --{{{ Language support + { + "purescript-contrib/purescript-vim", + ft = "purescript", + cond = env.vscode.not_active(), + }, + + { + "teal-language/vim-teal", + ft = "teal", + cond = env.vscode.not_active(), + }, + + { + "udalov/kotlin-vim", + ft = "kotlin", + cond = env.vscode.not_active(), + }, + + { + "kmonad/kmonad-vim", + ft = "kbd", + cond = env.vscode.not_active(), + }, + + { + "vmchale/dhall-vim", + ft = "dhall", + cond = env.vscode.not_active(), + }, + --}}} + + { + -- Better ui for inputs/selects + "stevearc/dressing.nvim", + config = true, + -- https://github.com/folke/dot/blob/master/config/nvim/lua/config/plugins/init.lua + init = function() + ---@diagnostic disable-next-line: duplicate-set-field + vim.ui.select = function(...) + require("lazy").load({ plugins = { "dressing.nvim" } }) + return vim.ui.select(...) + end + ---@diagnostic disable-next-line: duplicate-set-field + vim.ui.input = function(...) + require("lazy").load({ plugins = { "dressing.nvim" } }) + return vim.ui.input(...) + end + end, + cond = env.vscode.not_active(), + }, + + { + "windwp/nvim-autopairs", + event = "InsertEnter", + config = function () + require("nvim-autopairs").setup() + end, + }, + + -- Helper libs + { + "nvim-lua/plenary.nvim", + }, + + "MunifTanjim/nui.nvim", + + { + "terrortylor/nvim-comment", + keys = { "gc", "gcc", { "gc", mode = "v" } }, + config = function() + require("nvim_comment").setup() + end, + }, + + -- nice looking icons + "kyazdani42/nvim-web-devicons", + + { + -- easly switch between tmux and vim panes + "christoomey/vim-tmux-navigator", + keys = { "C-h", "C-j", "C-k", "C-l" }, + cond = env.vscode.not_active() + and env.neovide.not_active() + and env.firenvim.not_active(), + }, + + { + -- track time usage + "wakatime/vim-wakatime", + event = "VeryLazy", + cond = env.vscode.not_active() and env.firenvim.not_active(), + }, + + { + -- smooth scrolling + "psliwka/vim-smoothie", + enabled = env.neovide.not_active(), + event = "VeryLazy", + }, + + { + -- show context on closing parenthesis + -- TODO: move this to treesitter file + "haringsrob/nvim_context_vt", + event = "BufReadPost", + cond = env.vscode.not_active(), + }, + + { + -- show progress for lsp stuff + "j-hui/fidget.nvim", + event = "BufReadPre", + cond = env.vscode.not_active(), + config = true, + }, + + { + -- export to pastebin like services + "rktjmp/paperplanes.nvim", + config = { + provider = "paste.rs", + }, + keys = { "PP" }, + }, + + { + -- case switching + the subvert command + "tpope/vim-abolish", + event = "VeryLazy", + }, + + { + -- reminds you of abbreviations + "0styx0/abbreinder.nvim", + dependencies = "0styx0/abbremand.nvim", + event = "InsertEnter", + }, + + { + -- md preview (in terminal) + "ellisonleao/glow.nvim", + cmd = "Glow", + cond = env.vscode.not_active(), + }, + + { + "frabjous/knap", -- md preview + cond = env.vscode.not_active(), + }, + + { + -- automatically set options based on current file + "tpope/vim-sleuth", + event = "BufRead", + cond = env.vscode.not_active(), + }, + + -- vim-abolish rewrite + "mateiadrielrafael/scrap.nvim", + + { + "ruifm/gitlinker.nvim", -- generate permalinks for code + -- dependencies = { "plenary.nvim" }, + config = true, + cond = env.firenvim.not_active(), + keys = "gy", + }, + + { + -- magit clone + "TimUntersberger/neogit", + -- dependencies = { "plenary.nvim" }, + cmd = "Neogit", + enabled = env.firenvim.not_active() and env.vscode.not_active(), + init = function() + vim.keymap.set( + "n", + "", + "Neogit", + { desc = "Open neo[g]it" } + ) + end, + config = true, + }, + + { + -- discord rich presence + "andweeb/presence.nvim", + cond = env.vscode.not_active() and env.firenvim.not_active(), + config = function() + require("presence"):setup() + end, + lazy = false + }, +} diff --git a/dotfiles/neovim/lua/my/plugins/iron.lua b/dotfiles/neovim/lua/my/plugins/iron.lua index 5780e51..2ea9b72 100644 --- a/dotfiles/neovim/lua/my/plugins/iron.lua +++ b/dotfiles/neovim/lua/my/plugins/iron.lua @@ -1,15 +1,41 @@ -local M = {} +local env = require("my.helpers.env") -function M.setup() +local M = { + "hkupty/iron.nvim", -- repl support + cond = env.vscode.not_active(), + cmd = "IronRepl", +} + +function M.init() + -- iron also has a list of commands, see :h iron-commands for all available commands + vim.keymap.set("n", "iss", "IronRepl") + vim.keymap.set("n", "ir", "IronRestart") + vim.keymap.set("n", "if", "IronFocus") + vim.keymap.set("n", "ih", "IronHide") + + local status, wk = pcall(require, "which-key") + + if status then + wk.register({ + ["i"] = { + name = "[I]ron repl", + s = { name = "[s]end" }, + m = "[m]ark", + }, + }) + end +end + +function M.config() local iron = require("iron.core") - iron.setup { + iron.setup({ config = { -- Your repl definitions come here repl_definition = {}, -- How the repl window will be displayed -- See below for more information - repl_open_cmd = require('iron.view').right(40) + repl_open_cmd = require("iron.view").right(40), }, -- Iron doesn't set keymaps by default anymore. -- You can set them here or manually add keymaps to the functions in iron.core @@ -25,23 +51,13 @@ function M.setup() cr = "is", interrupt = "is", exit = "isq", - clear = "isr" + clear = "isr", }, -- If the highlight is on, you can change how it looks -- For the available options, check nvim_set_hl highlight = { italic = true }, - ignore_blank_lines = true -- ignore blank lines when sending visual select lines - } - - -- iron also has a list of commands, see :h iron-commands for all available commands - vim.keymap.set('n', 'iss', 'IronRepl') - vim.keymap.set('n', 'ir', 'IronRestart') - vim.keymap.set('n', 'if', 'IronFocus') - vim.keymap.set('n', 'ih', 'IronHide') - - local status, wk = pcall(require, "which-key") - - if status then wk.register({ ["i"] = { name = "[I]ron repl commands", s = {name = "[s]end"}, m = "[m]ark" } }) end + ignore_blank_lines = true, -- ignore blank lines when sending visual select lines + }) end return M diff --git a/dotfiles/neovim/lua/my/plugins/lean.lua b/dotfiles/neovim/lua/my/plugins/lean.lua index 4e631e2..cc2a850 100644 --- a/dotfiles/neovim/lua/my/plugins/lean.lua +++ b/dotfiles/neovim/lua/my/plugins/lean.lua @@ -1,13 +1,22 @@ +local env = require("my.helpers.env") local lspconfig = require("my.plugins.lspconfig") -local M = {} -function M.setup() - require('lean').setup { - abbreviations = { builtin = true, cmp = true }, - lsp = { on_attach = lspconfig.on_attach, capabilities = lspconfig.capabilities }, - lsp3 = false, - mappings = true - } -end +local M = { + "Julian/lean.nvim", -- lean support + dependencies = { "neovim/nvim-lspconfig", "nvim-lua/plenary.nvim", "hrsh7th/nvim-cmp" }, + ft = "lean", + config = function() + require("lean").setup({ + abbreviations = { builtin = true, cmp = true }, + lsp = { + on_attach = lspconfig.on_attach, + capabilities = lspconfig.capabilities(), + }, + lsp3 = false, + mappings = true, + }) + end, + cond = env.vscode.not_active(), +} -return M +return {} diff --git a/dotfiles/neovim/lua/my/plugins/leap.lua b/dotfiles/neovim/lua/my/plugins/leap.lua index ef48c55..ca6c8af 100644 --- a/dotfiles/neovim/lua/my/plugins/leap.lua +++ b/dotfiles/neovim/lua/my/plugins/leap.lua @@ -1,6 +1,11 @@ -local M = {} +local M = { + -- removes the need for spamming w or e + "ggandor/leap.nvim", + name = "leap", + event = "VeryLazy" +} -function M.setup() +function M.config() require("leap").add_default_mappings() end diff --git a/dotfiles/neovim/lua/my/plugins/lspconfig.lua b/dotfiles/neovim/lua/my/plugins/lspconfig.lua index f3cb777..4997634 100644 --- a/dotfiles/neovim/lua/my/plugins/lspconfig.lua +++ b/dotfiles/neovim/lua/my/plugins/lspconfig.lua @@ -1,4 +1,34 @@ -local M = {} +local helpers = require("my.helpers") +local env = require("my.helpers.env") + +local lspconfig = { + "neovim/nvim-lspconfig", + event = "BufReadPre", + dependencies = { + "folke/neoconf.nvim", + { + "folke/neodev.nvim", + config = true, + }, + "hrsh7th/cmp-nvim-lsp", + }, + cond = env.vscode.not_active(), +} + +local M = { + lspconfig, + { + "smjonas/inc-rename.nvim", + cmd = "IncRename", + config = { + input_buffer_type = "dressing", + }, + dependencies = { + "dressing.nvim", + }, + cond = env.vscode.not_active(), + }, +} function M.on_attach(client, bufnr) -- {{{ Auto format @@ -16,7 +46,7 @@ function M.on_attach(client, bufnr) -- }}} -- {{{ Keymap helpers local opts = function(desc) - return { noremap = true, silent = true, desc = desc, buffer = true } + return { noremap = true, silent = true, desc = desc, buffer = bufnr } end local nmap = function(from, to, desc) @@ -34,9 +64,13 @@ function M.on_attach(client, bufnr) nmap("L", vim.lsp.buf.signature_help, "Signature help") -- }}} -- {{{ Code actions - nmap("rn", vim.lsp.buf.rename, "[R]e[n]ame") - nmap("f", format, "[F]ormat") nmap("c", vim.lsp.buf.code_action, "[C]ode actions") + nmap("F", format, "[F]ormat") + nmap("li", "LspInfo", "[L]sp [i]nfo") + + vim.keymap.set("n", "rn", function() + return ":IncRename " .. vim.fn.expand("") + end, helpers.mergeTables(opts("[R]e[n]ame"), { expr = true })) vim.keymap.set( "v", @@ -100,15 +134,31 @@ local servers = { }, } -- }}} - -- {{{ Capabilities -M.capabilities = require("cmp_nvim_lsp").default_capabilities() --- Add folding capabilities -M.capabilities.textDocument.foldingRange = - { dynamicRegistration = false, lineFoldingOnly = true } +M.capabilities = function() + -- require("lazy").load({ plugins = "hrsh7th/cmp-nvim-lsp" }) + local c = require("cmp_nvim_lsp").default_capabilities() + -- Add folding capabilities + c.textDocument.foldingRange = + { dynamicRegistration = false, lineFoldingOnly = true } + return c +end -- }}} +-- {{{ Nice diagnostic icons +-- See https://github.com/folke/dot/blob/master/config/nvim/lua/config/plugins/lsp/diagnostics.lua +local function diagnostics_icons() + local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " } -function M.setup() + for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) + end +end + +--}}} +-- {{{ Main config function +function lspconfig.config() + diagnostics_icons() -- {{{ Change on-hover borders vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "single" }) @@ -116,6 +166,7 @@ function M.setup() vim.lsp.with(vim.lsp.handlers.signature_help, { border = "single" }) -- }}} + local capabilities = M.capabilities() -- Setup basic language servers for lsp, details in pairs(servers) do if details.on_attach == nil then @@ -130,9 +181,11 @@ function M.setup() debounce_text_changes = 150, -- This will be the default in neovim 0.7+ }, cmd = details.cmd, - capabilities = M.capabilities, + capabilities = capabilities, }) end end +--}}} + return M diff --git a/dotfiles/neovim/lua/my/plugins/lualine.lua b/dotfiles/neovim/lua/my/plugins/lualine.lua index 0740bd4..a6c225b 100644 --- a/dotfiles/neovim/lua/my/plugins/lualine.lua +++ b/dotfiles/neovim/lua/my/plugins/lualine.lua @@ -1,23 +1,28 @@ -local M = {} +local env = require("my.helpers.env") -function M.setup() - require('lualine').setup({ - theme = vim.g.lualineTheme, +local M = { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + cond = env.vscode.not_active() and env.neovide.not_active(), +} + +function M.config() + require("lualine").setup({ + theme = "auto", options = { - section_separators = { left = '', right = '' }, - component_separators = { left = '', right = '' } + component_separators = "", + section_separators = { left = "", right = "" }, }, sections = { - lualine_a = { 'mode' }, - lualine_b = { 'branch', 'diff', 'diagnostics' }, - lualine_c = { 'filename' }, - lualine_x = {}, - -- lualine_y = {'encoding', 'fileformat', 'filetype'}, - lualine_y = { 'filetype' }, - lualine_z = { 'location' } + lualine_a = { "branch" }, + lualine_b = { "filename" }, + lualine_c = { "filetype" }, + lualine_x = { "diagnostics" }, + lualine_y = {}, + lualine_z = {}, }, -- Integration with other plugins - extensions = { "nvim-tree" } + extensions = { "nvim-tree" }, }) end diff --git a/dotfiles/neovim/lua/my/plugins/luasnip.lua b/dotfiles/neovim/lua/my/plugins/luasnip.lua index 7c1fdb0..56b243f 100644 --- a/dotfiles/neovim/lua/my/plugins/luasnip.lua +++ b/dotfiles/neovim/lua/my/plugins/luasnip.lua @@ -1,11 +1,18 @@ -local M = {} -local luasnip = require("luasnip") +local env = require("my.helpers.env") + +local M = { + "L3MON4D3/LuaSnip", -- snippeting engine + event = "InsertEnter", + cond = env.vscode.not_active() +} local function reload() require("luasnip.loaders.from_vscode").lazy_load() end -function M.setup() +function M.config() + local luasnip = require("luasnip") + vim.keymap.set("i", "", function() if luasnip.jumpable(1) then return "lua require('luasnip').jump(1)" @@ -13,12 +20,13 @@ function M.setup() return "" end end, { expr = true }) + vim.keymap.set("i", "", function() luasnip.jump(-1) end) vim.keymap.set("n", "rs", reload, { - desc = "Reload luasnip snippets" + desc = "[R]eload [s]nippets", }) reload() diff --git a/dotfiles/neovim/lua/my/plugins/mind.lua b/dotfiles/neovim/lua/my/plugins/mind.lua index e202297..0cd84f1 100644 --- a/dotfiles/neovim/lua/my/plugins/mind.lua +++ b/dotfiles/neovim/lua/my/plugins/mind.lua @@ -1,18 +1,12 @@ -local mind = require("mind") -local M = {} - -function M.setup() - mind.setup({ - persistence = { - state_path = "~/Mind/mind.json", - data_dir = "~/Mind/data" - }, - ui = { - width = 50 - } - }) +local M = { + "phaazon/mind.nvim", -- Organize shit as trees + keys = "m", +} +function M.init() vim.keymap.set("n", "m", function() + local mind = require("mind") + local buffers = vim.api.nvim_list_bufs() local should_open = true @@ -26,7 +20,21 @@ function M.setup() if should_open then mind.open_main() end - end, { desc = "Toggle mind panel" }) + end, { desc = "[M]ind panel" }) +end + +function M.config() + local mind = require("mind") + + mind.setup({ + persistence = { + state_path = "~/Mind/mind.json", + data_dir = "~/Mind/data", + }, + ui = { + width = 50, + }, + }) end return M diff --git a/dotfiles/neovim/lua/my/plugins/moonwalk.lua b/dotfiles/neovim/lua/my/plugins/moonwalk.lua index fb7bfae..d98a6ff 100644 --- a/dotfiles/neovim/lua/my/plugins/moonwalk.lua +++ b/dotfiles/neovim/lua/my/plugins/moonwalk.lua @@ -1,20 +1,20 @@ local M = {} -function M.setup() - require("moonwalk").add_loader("tl", function(src, path) - local tl = require("tl") - local errs = {} - local _, program = tl.parse_program(tl.lex(src), errs) - - if #errs > 0 then - error( - path .. ":" .. errs[1].y .. ":" .. errs[1].x .. ": " .. errs[1].msg, - 0 - ) - end - - return tl.pretty_print_ast(program) - end) -end +-- function M.setup() + -- require("moonwalk").add_loader("tl", function(src, path) + -- local tl = require("tl") + -- local errs = {} + -- local _, program = tl.parse_program(tl.lex(src), errs) + -- + -- if #errs > 0 then + -- error( + -- path .. ":" .. errs[1].y .. ":" .. errs[1].x .. ": " .. errs[1].msg, + -- 0 + -- ) + -- end + -- + -- return tl.pretty_print_ast(program) + -- end) +-- end return M diff --git a/dotfiles/neovim/lua/my/plugins/neoconf.lua b/dotfiles/neovim/lua/my/plugins/neoconf.lua index d60e604..49dfbf0 100644 --- a/dotfiles/neovim/lua/my/plugins/neoconf.lua +++ b/dotfiles/neovim/lua/my/plugins/neoconf.lua @@ -1,14 +1,12 @@ -local M = {} - -function M.setup() - require("neoconf").setup({ +return { + "folke/neoconf.nvim", + cmd = "Neoconf", + config = { -- import existing settings from other plugins import = { vscode = true, -- local .vscode/settings.json coc = false, -- global/local coc-settings.json - nlsp = false -- global/local nlsp-settings.nvim json settings + nlsp = false, -- global/local nlsp-settings.nvim json settings }, - }) -end - -return M + }, +} diff --git a/dotfiles/neovim/lua/my/plugins/neodev.lua b/dotfiles/neovim/lua/my/plugins/neodev.lua deleted file mode 100644 index 55cdd2f..0000000 --- a/dotfiles/neovim/lua/my/plugins/neodev.lua +++ /dev/null @@ -1,7 +0,0 @@ -local M = {} - -function M.setup() - require("neodev").setup() -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/neogit.lua b/dotfiles/neovim/lua/my/plugins/neogit.lua deleted file mode 100644 index 42c6e60..0000000 --- a/dotfiles/neovim/lua/my/plugins/neogit.lua +++ /dev/null @@ -1,14 +0,0 @@ -local M = {} - -function M.setup() - -- This is here because we do not want to use neogit inside firenvim or vscode! - vim.cmd [[packadd! neogit]] - - local neogit = require("neogit") - - neogit.setup() - - vim.keymap.set("n", "", neogit.open) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/neovide.lua b/dotfiles/neovim/lua/my/plugins/neovide.lua deleted file mode 100644 index 81b73d9..0000000 --- a/dotfiles/neovim/lua/my/plugins/neovide.lua +++ /dev/null @@ -1,18 +0,0 @@ -local M = {} - -function M.setup() - -- vim.g.neovide_floating_blur_amount_x = 3.0 - -- vim.g.neovide_floating_blur_amount_y = 3.0 - -- vim.g.neovide_transparency = 1.0 - -- vim.g.pumblend = 30 - - -- vim.api.nvim_create_autocmd("WinEnter", { - -- group = vim.api.nvim_create_augroup("Setup transparency", {}), - -- pattern = "*", - -- callback = function() - -- vim.wo.winblend = 30 - -- end - -- }) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/nerdtree.lua b/dotfiles/neovim/lua/my/plugins/nerdtree.lua deleted file mode 100644 index 5181b76..0000000 --- a/dotfiles/neovim/lua/my/plugins/nerdtree.lua +++ /dev/null @@ -1,8 +0,0 @@ -local M = {} - -function M.setup() - -- Toggle nerdtree with Control-t - vim.keymaps.set("n", "", ":NERDTreeToggle", { silent = true }) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/noice.lua b/dotfiles/neovim/lua/my/plugins/noice.lua deleted file mode 100644 index 8adc5b9..0000000 --- a/dotfiles/neovim/lua/my/plugins/noice.lua +++ /dev/null @@ -1,34 +0,0 @@ -local H = require("my.helpers") -local M = {} - -local function skip_containing(string, opts) - local defaultOptions = { event = "msg_show", kind = "", find = string } - local filter = H.mergeTables(defaultOptions, opts or {}) - return { filter = filter, opts = { skip = true } } -end - -function M.setup() - -- s - search hit bottom messages - -- c - no pattern found and whatnot - vim.opt.shortmess:append("scC") - -- vim.opt.shortmess = "sc" - - require("noice").setup({ - cmdline = { - view = "cmdline", - format = { - search_down = { kind = "search", pattern = "^/", icon = "🔎", lang = "regex" }, - search_up = { kind = "search", pattern = "^%?", icon = "🔎", lang = "regex" } - } - }, - routes = { - -- Filter out "Written ..." messages - skip_containing("written"), - skip_containing("search hit", { event = "wmsg" }), - skip_containing("pattern not found", { event = "msg_show" }) - }, - lsp = { progres = { enabled = false } } - }) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/notify.lua b/dotfiles/neovim/lua/my/plugins/notify.lua deleted file mode 100644 index d5c84e0..0000000 --- a/dotfiles/neovim/lua/my/plugins/notify.lua +++ /dev/null @@ -1,7 +0,0 @@ -local M = {} - -function M.setup() - -- vim.notify = require("notify") -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/null-ls.lua b/dotfiles/neovim/lua/my/plugins/null-ls.lua index 19ebd4d..6254a40 100644 --- a/dotfiles/neovim/lua/my/plugins/null-ls.lua +++ b/dotfiles/neovim/lua/my/plugins/null-ls.lua @@ -1,17 +1,20 @@ -local lspconfig = require("my.plugins.lspconfig") +local env = require("my.helpers.env") -local M = {} +local M = { + "jose-elias-alvarez/null-ls.nvim", -- generic language server + event = "BufReadPre", + dependencies = "neovim/nvim-lspconfig", + cond = env.vscode.not_active(), +} -function M.setup() +function M.config() + local lspconfig = require("my.plugins.lspconfig") local null_ls = require("null-ls") - -- require("refactoring").setup({}) local sources = { - -- null_ls.builtins.formatting.prettier.with({ extra_filetypes = {} }), -- format ts files null_ls.builtins.formatting.prettierd.with({ extra_filetypes = {} }), -- format ts files - -- null_ls.builtins.formatting.lua_format.with({}), -- format lua code null_ls.builtins.formatting.stylua.with({}), -- format lua code - -- null_ls.builtins.code_actions.refactoring.with({}), -- refactor stuff + -- null_ls.builtins.formatting.lua_format.with({}), -- format lua code } null_ls.setup({ diff --git a/dotfiles/neovim/lua/my/plugins/nvim-tree.lua b/dotfiles/neovim/lua/my/plugins/nvim-tree.lua index 92e415f..5849055 100644 --- a/dotfiles/neovim/lua/my/plugins/nvim-tree.lua +++ b/dotfiles/neovim/lua/my/plugins/nvim-tree.lua @@ -1,9 +1,20 @@ -local M = {} +local env = require("my.helpers.env") -function M.setup() - require 'nvim-tree'.setup() +local M = { + "kyazdani42/nvim-tree.lua", + cmd = "NvimTreeToggle", + config = true, + cond = env.vscode.not_active() and env.firenvim.not_active(), +} + +function M.init() -- Toggle nerdtree with Control-n - vim.keymap.set("n", "", ":NvimTreeToggle") + vim.keymap.set( + "n", + "", + ":NvimTreeToggle", + { desc = "Toggle [n]vim-tree" } + ) end return M diff --git a/dotfiles/neovim/lua/my/plugins/paperplanes.lua b/dotfiles/neovim/lua/my/plugins/paperplanes.lua deleted file mode 100644 index 6736b5e..0000000 --- a/dotfiles/neovim/lua/my/plugins/paperplanes.lua +++ /dev/null @@ -1,9 +0,0 @@ -local M = {} - -function M.setup() - require("paperplanes").setup({ - provider = "paste.rs" - }) -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/slam.lua b/dotfiles/neovim/lua/my/plugins/slam.lua deleted file mode 100644 index 2d4b202..0000000 --- a/dotfiles/neovim/lua/my/plugins/slam.lua +++ /dev/null @@ -1,11 +0,0 @@ -vim.opt.runtimepath:append("/home/adrielus/Projects/nvim-slam") - -local slam = require("slam.") -local M = {} - -function M.setup() - slam.set("n", "ty", ":echo \"slammin'\"") - slam.set("i", "ty", "") -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/surround.lua b/dotfiles/neovim/lua/my/plugins/surround.lua index 3c6b099..b32b42d 100644 --- a/dotfiles/neovim/lua/my/plugins/surround.lua +++ b/dotfiles/neovim/lua/my/plugins/surround.lua @@ -1,6 +1,10 @@ -local M = {} +local M = { + -- work with brackets, quotes, tags, etc + "tpope/vim-surround", + event = "VeryLazy", +} -function M.setup() +function M.config() vim.g.surround_113 = '"\r"' vim.g.surround_97 = "'\r'" end diff --git a/dotfiles/neovim/lua/my/plugins/telescope.lua b/dotfiles/neovim/lua/my/plugins/telescope.lua index 025bc61..1b55872 100644 --- a/dotfiles/neovim/lua/my/plugins/telescope.lua +++ b/dotfiles/neovim/lua/my/plugins/telescope.lua @@ -1,4 +1,19 @@ -local M = {} +local env = require("my.helpers.env") + +local telescope = { + "nvim-telescope/telescope.nvim", + cmd = "Telescope", + dependencies = { + { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, + "nvim-telescope/telescope-file-browser.nvim", + "nvim-lua/plenary.nvim" + }, + version = "0.1.x", + pin = true, + cond = env.vscode.not_active(), +} + +local M = telescope local function find_files_by_extension(extension) return "find_files find_command=rg,--files,--glob=**/*." .. extension @@ -30,25 +45,31 @@ local function mkAction(action) action = with_theme(action, defaultTheme) end - return ":Telescope " .. action .. "" + return "Telescope " .. action .. "" end -local function setupKeybinds() +function telescope.init() for _, mapping in pairs(keybinds) do vim.keymap.set("n", mapping[1], mkAction(mapping[2]), { desc = mapping[3] }) end end -function M.setup() - setupKeybinds() - +function telescope.config() local settings = { defaults = { mappings = { i = { [""] = "which_key" } } }, pickers = { find_files = { hidden = true } }, - extensions = { file_browser = { path = "%:p:h" } }, + extensions = { + file_browser = { path = "%:p:h" }, + fzf = { + fuzzy = true, + override_generic_sorter = true, + override_file_sorter = true, + }, + }, } require("telescope").setup(settings) + require("telescope").load_extension("fzf") require("telescope").load_extension("file_browser") end diff --git a/dotfiles/neovim/lua/my/plugins/treesitter.lua b/dotfiles/neovim/lua/my/plugins/treesitter.lua index 4561a90..c0dd295 100644 --- a/dotfiles/neovim/lua/my/plugins/treesitter.lua +++ b/dotfiles/neovim/lua/my/plugins/treesitter.lua @@ -1,45 +1,105 @@ -local M = {} - -function M.setup() - require'nvim-treesitter.configs'.setup { - ensure_installed = { - "bash", - "javascript", - "typescript", - "c", - "cpp", - "css", - "dockerfile", - "elixir", - "fish", - "html", - "json", - "jsonc", - "latex", - "python", - "rust", - "scss", - "toml", - "tsx", - "vim", - "yaml", - "nix", - "kotlin" - }, - sync_install = false, - indent = { enable = true }, - highlight = { - enable = true, - - disable = { "kotlin", "tex", "latex" }, - - -- Setting this to true will run `:h syntax` and tree-sitter at the same time. - -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). - -- Using this option may slow down your editor, and you may see some duplicate highlights. - -- Instead of true it can also be a list of languages - additional_vim_regex_highlighting = false - } - } -end +local M = { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + event = "BufReadPost", + dependencies = { + "nvim-treesitter/nvim-treesitter-textobjects", + }, + config = function() + require("nvim-treesitter.configs").setup({ + --{{{Languages + ensure_installed = { + "bash", + "javascript", + "typescript", + "c", + "cpp", + "css", + "dockerfile", + "elixir", + "fish", + "html", + "json", + "jsonc", + "latex", + "python", + "rust", + "scss", + "toml", + "tsx", + "vim", + "yaml", + "nix", + }, + sync_install = false, + --}}} + --{{{ Highlighting + highlight = { + enable = true, + disable = { "kotlin", "tex", "latex" }, + additional_vim_regex_highlighting = false, + }, + --}}} + --{{{ Incremental selection + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + scope_incremental = "", + node_decremental = "", + }, + }, + --}}} + --{{{ Textsubjects + textsubjects = { + enable = true, + keymaps = { + ["."] = "textsubjects-smart", + [";"] = "textsubjects-container-outer", + }, + }, + --}}} + textobjects = { + --{{{ Select + select = { + enable = false, + lookahead = true, + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + }, + }, + --}}} + --{{{ Move + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + ["]f"] = "@function.outer", + ["]c"] = "@class.outer", + }, + goto_next_end = { + ["]F"] = "@function.outer", + ["]C"] = "@class.outer", + }, + goto_previous_start = { + ["[f"] = "@function.outer", + ["[c"] = "@class.outer", + }, + goto_previous_end = { + ["[F"] = "@function.outer", + ["[C"] = "@class.outer", + }, + }, + --}}} + }, + indent = { enable = true }, + }) + end, +} return M diff --git a/dotfiles/neovim/lua/my/plugins/ufo.lua b/dotfiles/neovim/lua/my/plugins/ufo.lua deleted file mode 100644 index 4f41121..0000000 --- a/dotfiles/neovim/lua/my/plugins/ufo.lua +++ /dev/null @@ -1,18 +0,0 @@ -local M = {} - -function M.setup() - vim.o.foldcolumn = '0' - vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value - vim.o.foldlevelstart = 99 - vim.o.foldenable = true - - -- Using ufo provider need remap `zR` and `zM`. - vim.keymap.set('n', 'zR', require('ufo').openAllFolds) - vim.keymap.set('n', 'zM', require('ufo').closeAllFolds) - - -- Tell the server the capability of foldingRange, - -- Neovim hasn't added foldingRange to default capabilities, users must add it manually - require('ufo').setup() -end - -return M diff --git a/dotfiles/neovim/lua/my/plugins/vimtex.lua b/dotfiles/neovim/lua/my/plugins/vimtex.lua index 242f53d..e98f0e1 100644 --- a/dotfiles/neovim/lua/my/plugins/vimtex.lua +++ b/dotfiles/neovim/lua/my/plugins/vimtex.lua @@ -1,14 +1,23 @@ -local M = {} +local M = { + "lervag/vimtex", -- latex support + ft = "tex", +} -function M.setup() - -- Viewer method +function M.config() vim.g.vimtex_view_method = "zathura" vim.g.Tex_DefaultTargetFormat = "pdf" vim.g.vimtex_fold_enabled = 0 + vim.g.vimtex_imaps_enabled = 0 + vim.g.vimtex_syntax_conceal_disable = 1 vim.g.vimtex_compiler_latexmk = { options = { - "-pdf", "-shell-escape", "-verbose", "-file-line-error", "-synctex=1", "-interaction=nonstopmode" - } + "-pdf", + "-shell-escape", + "-verbose", + "-file-line-error", + "-synctex=1", + "-interaction=nonstopmode", + }, } end diff --git a/dotfiles/neovim/lua/my/plugins/vimux.lua b/dotfiles/neovim/lua/my/plugins/vimux.lua index 91ec761..fd6e7d2 100644 --- a/dotfiles/neovim/lua/my/plugins/vimux.lua +++ b/dotfiles/neovim/lua/my/plugins/vimux.lua @@ -1,9 +1,22 @@ local K = require("my.keymaps") -local M = {} +local env = require("my.helpers.env") -function M.setup() +local M = { + "preservim/vimux", -- interact with tmux from within vim + cmd = { "VimuxPromptCommand", "VimuxRunCommand", "VimuxRunLastCommand" }, + -- TODO: only enable when actually inside tmux + cond = env.vscode.not_active() + and env.neovide.not_active() + and env.firenvim.not_active(), +} + +function M.init() --{{{ Register keybinds - K.nmap("vp", ":VimuxPromptCommand", "[V]imux: [p]rompt for command") + K.nmap( + "vp", + ":VimuxPromptCommand", + "[V]imux: [p]rompt for command" + ) K.nmap("vc", ':VimuxRunCommand "clear"', "[V]imux: [c]lear pane") K.nmap( "vl", @@ -17,7 +30,7 @@ function M.setup() if status then wk.register({ ["v"] = { - name = "vimux", + name = "[V]imux", }, }) end diff --git a/dotfiles/neovim/lua/my/plugins/whichkey.lua b/dotfiles/neovim/lua/my/plugins/whichkey.lua index 2b15daf..89d3333 100644 --- a/dotfiles/neovim/lua/my/plugins/whichkey.lua +++ b/dotfiles/neovim/lua/my/plugins/whichkey.lua @@ -1,16 +1,27 @@ -local wk = require("which-key") +local M = { + "folke/which-key.nvim", + event = "VeryLazy", +} -local M = {} +function M.config() + local wk = require("which-key") -function M.setup() wk.setup({ - -- triggers = { "", "d", "y", "q", "z", "g", "c" }, - triggers = {}, - show_help = false, - show_keys = false + triggers = { "", "d", "y", "q", "z", "g", "c" }, + show_help = true, + show_keys = true, }) - wk.register({ ["l"] = { name = "Local commands" } }) + wk.register({ + [""] = { + f = { name = "[F]iles" }, + g = { name = "[G]o to" }, + r = { name = "[R]ename / [R]eplace / [R]eload" }, + l = { name = "[L]ocal" }, + w = { name = "[W]orkspace" }, + v = "which_key_ignore", + }, + }) end return M diff --git a/dotfiles/neovim/lua/my/snippets/tex.lua b/dotfiles/neovim/lua/my/snippets/tex.lua deleted file mode 100644 index b961f3a..0000000 --- a/dotfiles/neovim/lua/my/snippets/tex.lua +++ /dev/null @@ -1,8 +0,0 @@ -local luasnip = require("luasnip") -local M = {} - -function M.setup() -end - -return M - diff --git a/modules/applications/neovim.nix b/modules/applications/neovim.nix index fb7cf32..ede362c 100644 --- a/modules/applications/neovim.nix +++ b/modules/applications/neovim.nix @@ -1,12 +1,5 @@ { pkgs, lib, paths, ... }: let - paq = pkgs.fetchFromGitHub { - owner = "savq"; - repo = "paq-nvim"; - rev = "0ed94d59e315e066ced3f453ff00c0ae94938f1e"; - sha256 = "0dsq6cjm7jm7jh9dfxym4ipkp46fvw1lr9z98zd80im18rg4fg63"; - }; - teal = pkgs.fetchFromGitHub { owner = "teal-language"; repo = "tl"; @@ -14,13 +7,6 @@ let sha256 = "0l31qj492iaiadpp4s0wflfb7vn6zzxwhbiyczisdgpd9ydj20gf"; }; - lazy-nvim = pkgs.fetchFromGitHub { - owner = "folke"; - repo = "lazy.nvim"; - rev = "511524ebff27ed8dea9e8d2eadb26ef19fb322c7"; - sha256 = "0c8hfhrj2rfkpff0kwiv5g5bpvdq36b4xzsi8199jrpfvvp79302"; - }; - theme = pkgs.myThemes.current; extraPackages = with pkgs; [ @@ -70,7 +56,8 @@ let postBuild = '' wrapProgram $out/bin/${name} \ --prefix PATH : ${lib.makeBinPath extraPackages} \ - --set LAZY_NVIM_PATH ${lazy-nvim} + --set LAZY_NVIM_PATH ${lazy-nvim} \ + --set INSIDE_NEOVIDE ${if name == "neovide" then "1" else "0"} ''; }; @@ -87,8 +74,8 @@ in home.file."${nixPlugins}/start/theming/lua/my/theme.lua".source = theme.neovim.theme; home.file."${nixPlugins}/start/teal/lua".source = teal; # teal (typed lua) home.file."${nixPlugins}/start/snippets".source = simlink "${paths.dotfiles}/vscode-snippets"; - # home.file.".config/nvim".source = simlink "${paths.dotfiles}/neovim"; - home.file.".config/nvim".source = ../../dotfiles/neovim; + home.file.".config/nvim".source = simlink "${paths.dotfiles}/neovim"; + # home.file.".config/nvim".source = ../../dotfiles/neovim; programs.neovim.enable = false;