diff --git a/nvim/m-housh/init.lua b/nvim/m-housh/init.lua index 6f50e0c..d2e0f10 100755 --- a/nvim/m-housh/init.lua +++ b/nvim/m-housh/init.lua @@ -3,18 +3,22 @@ vim.g.mapleader = " " vim.g.maplocalleader = " " -- Auto commands -require('user.autocmd') +require("user.autocmd") -- Plugins -require('user.plugins') +require("user.plugins") -- Key maps -require('user.keymaps') +require("user.keymaps") -- Theme (must stay after plugins are loaded) -require('user.theme') +require("user.theme") -- Common settings -require('user.settings') +require("user.settings") + +-- Snippets are setup in the luasnip settings, they get loaded from the snippets directory +-- based on filetype. +--require("user.snippets") vim.o.shiftwidth = 2 diff --git a/nvim/m-housh/lua/user/keymaps.lua b/nvim/m-housh/lua/user/keymaps.lua index 92b68fa..97c2afe 100755 --- a/nvim/m-housh/lua/user/keymaps.lua +++ b/nvim/m-housh/lua/user/keymaps.lua @@ -2,61 +2,61 @@ vim.g.mapleader = " " vim.g.maplocalleader = " " local keymap = vim.keymap.set -local default_options = {noremap = true, silent = true} -local telescope = require('telescope.builtin') +local default_options = { noremap = true, silent = true } +local telescope = require("telescope.builtin") local wk = require("which-key") local wk_add = function(mode, keymaps) - wk.add(keymaps, { mode = mode, silent = true }) + wk.add(keymaps, { mode = mode, silent = true }) end local find_files = function(dir) - return function() - telescope.find_files({ cwd = dir, hidden = true, no_ignore = true }) - end + return function() + telescope.find_files({ cwd = dir, hidden = true, no_ignore = true }) + end end -------------------------------------------------------------------------------- -- Insert Mode -------------------------------------------------------------------------------- -- easier escape key mapping -keymap('i', 'jk', '', default_options) +keymap("i", "jk", "", default_options) wk_add("i", { - { "", ":writea", desc = "[S]ave" } + { "", ":writea", desc = "[S]ave" }, }) -------------------------------------------------------------------------------- -- Normal Mode -------------------------------------------------------------------------------- wk_add("n", { - { "", ":vertical resize +1", desc = "Resize Pane Left" }, - { "", ":vertical resize -1", desc = "Resize Pane Right" }, - { "", "resize -1", desc = "Resize Pane Up" }, - { "", "resize +1", desc = "Resize Pane Down" }, + { "", ":vertical resize +1", desc = "Resize Pane Left" }, + { "", ":vertical resize -1", desc = "Resize Pane Right" }, + { "", "resize -1", desc = "Resize Pane Up" }, + { "", "resize +1", desc = "Resize Pane Down" }, - { "n", ":noh", desc = "[N]o highlighting" }, - { "s", ":set spell!", desc = "[S]pell check toggle" }, - { "", ":Neotree toggle", desc = "Toggle Neotree" }, - { "", ":write", desc = "[S]ave" }, + { "n", ":noh", desc = "[N]o highlighting" }, + { "s", ":set spell!", desc = "[S]pell check toggle" }, + --{ "", ":Neotree toggle", desc = "Toggle Neotree" }, + { "", ":write", desc = "[S]ave" }, - { "J", ":move .+1==", desc = "Move line down" }, - { "K", ":move .-2==", desc = "Move line up" }, + { "J", ":move .+1==", desc = "Move line down" }, + { "K", ":move .-2==", desc = "Move line up" }, - -- Git - { "gg", ":LazyGit", desc = "Open [G]it" }, - { "gf", ":Telescope git_files", desc = "Find [G]it [F]ile" }, - { "t", ":ToggleTerm", desc = "Open [T]erminal" }, + -- Git + { "gg", ":LazyGit", desc = "Open [G]it" }, + { "gf", ":Telescope git_files", desc = "Find [G]it [F]ile" }, + { "t", ":ToggleTerm", desc = "Open [T]erminal" }, - -- Telescope keymaps - { "ff", telescope.find_files, desc = "[F]ind [F]iles" }, - { "fg", telescope.live_grep, desc = "[F]ind [G]rep" }, - { "fb", telescope.buffers, desc = "[F]ind [B]uffers" }, - { "fh", telescope.help_tags, desc = "[F]ind [H]elp" }, - { "fd", find_files('$DOTFILES'), desc = "[F]ind [D]otfiles" }, - { "fn", find_files('$DOTFILES/nvim/m-housh'), desc = "[F]ind [N]vim file" }, - { "fs", find_files('$DOTFILES/scripts/scripts'), desc = "[F]ind [S]cript" }, - { "fz", find_files('$DOTFILES/zsh/config'), desc = "[F]ind [Z]sh config file" }, - { "z", ":ZenMode", desc = "[Z]en Mode" }, + -- Telescope keymaps + { "ff", telescope.find_files, desc = "[F]ind [F]iles" }, + { "fg", telescope.live_grep, desc = "[F]ind [G]rep" }, + { "fb", telescope.buffers, desc = "[F]ind [B]uffers" }, + { "fh", telescope.help_tags, desc = "[F]ind [H]elp" }, + { "fd", find_files("$DOTFILES"), desc = "[F]ind [D]otfiles" }, + { "fn", find_files("$DOTFILES/nvim/m-housh"), desc = "[F]ind [N]vim file" }, + { "fs", find_files("$DOTFILES/scripts/scripts"), desc = "[F]ind [S]cript" }, + { "fz", find_files("$DOTFILES/zsh/config"), desc = "[F]ind [Z]sh config file" }, + { "z", ":ZenMode", desc = "[Z]en Mode" }, }) -------------------------------------------------------------------------------- @@ -70,23 +70,15 @@ wk_add("n", { -- { "K", ":move '<-2", desc = "Move selected block up" }, -- { "J", ":move '>+1", desc = "Move selected block down" }, -- }) -vim.keymap.set( - "v", "K", - ":move '<-2gv=gv", - { desc = "Move selected block up.", silent = true, noremap = true } -) -vim.keymap.set( - "v", "J", - ":move '>+1gv=gv", - { desc = "Move selected block up.", silent = true, noremap = true } -) +vim.keymap.set("v", "K", ":move '<-2gv=gv", { desc = "Move selected block up.", silent = true, noremap = true }) +vim.keymap.set("v", "J", ":move '>+1gv=gv", { desc = "Move selected block up.", silent = true, noremap = true }) -- Toggle term key maps, that get attached when terminal is opened. function _G.set_terminal_keymaps() - local opts = { buffer = 0 } - keymap('t', '', [[]], opts) + local opts = { buffer = 0 } + keymap("t", "", [[]], opts) end -vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') +vim.cmd("autocmd! TermOpen term://* lua set_terminal_keymaps()") -- LuaSnip Keymaps --local ls = require('luasnip') @@ -99,7 +91,6 @@ vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') -- end -- end, { silent = true }) - -- -- This will jump backwards in the snippet. -- vim.keymap.set({ "i", "s" }, "", function() diff --git a/nvim/m-housh/lua/user/plugin/lsp.lua b/nvim/m-housh/lua/user/plugin/lsp.lua index 2ef6815..987ecb6 100755 --- a/nvim/m-housh/lua/user/plugin/lsp.lua +++ b/nvim/m-housh/lua/user/plugin/lsp.lua @@ -1,49 +1,72 @@ +-- The language servers to setup. +local lsp_servers = { + "bashls", + "clangd", + "dockerls", + "gopls", + "jsonls", + "lua_ls", + "marksman", + "sourcekit", + "yamlls", +} + return { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, dependencies = { "hrsh7th/cmp-nvim-lsp", { "antosha417/nvim-lsp-file-operations", config = true }, + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim", }, config = function() + require("mason").setup() + require("mason-lspconfig").setup({ + opts = { + ensure_installed = lsp_servers, + }, + }) local lspconfig = require("lspconfig") local cmp_nvim_lsp = require("cmp_nvim_lsp") local capabilities = cmp_nvim_lsp.default_capabilities() local opts = { noremap = true, silent = true } - local on_attach = - function(_, bufnr) - opts.buffer = bufnr + local on_attach = function(_, bufnr) + opts.buffer = bufnr - opts.desc = "Show line diagnostics" - vim.keymap.set("n", "d", vim.diagnostic.open_float, opts) + opts.desc = "Show line diagnostics" + vim.keymap.set("n", "d", vim.diagnostic.open_float, opts) - opts.desc = "Show diagnostics in Telescope" - vim.keymaps.set("n", "d", "Telescope diagnostics bufnr=0", opts) + opts.desc = "Show diagnostics in Telescope" + vim.keymap.set("n", "d", "Telescope diagnostics bufnr=0", opts) - opts.desc = "Show documentation for what is under cursor" - vim.keymap.set("n", "", vim.lsp.buf.hover, opts) + opts.desc = "Show documentation for what is under cursor" + vim.keymap.set("n", "", vim.lsp.buf.hover, opts) - opts.desc = "[G]oto [D]efinition" - vim.keymap.set("n", "gd", "Telescope lsp_definitions trim_text=true", opts) + opts.desc = "[G]oto [D]efinition" + vim.keymap.set("n", "gd", "Telescope lsp_definitions trim_text=true", opts) - opts.desc = "[G]oto [D]eclaration" - vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) + opts.desc = "[G]oto [D]eclaration" + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) - opts.desc = "LSP [C]ode [A]ction" - vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) + opts.desc = "LSP [C]ode [A]ction" + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) - --opts.desc = "[R]e-[N]ame" - --vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) + --opts.desc = "[R]e-[N]ame" + --vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) - opts.desc = "[R]eload or start LSP" - vim.keymap.set("n", "rl", ":LspRestart | :LspStart", opts) + opts.desc = "[R]eload or start LSP" + vim.keymap.set("n", "rl", ":LspRestart | :LspStart", opts) - opts.desc = "Goto previous diagnostic" - vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) + opts.desc = "Goto previous diagnostic" + vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) - opts.desc = "Goto next diagnostic" - vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) - end, lspconfig["sourcekit"].setup({ + opts.desc = "Goto next diagnostic" + vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) + end + + for _, lsp in ipairs(lsp_servers) do + lspconfig[lsp].setup({ capabilities = capabilities, on_attach = on_attach, on_init = function(client) @@ -52,6 +75,7 @@ return { client.offset_encoding = "utf-8" end, }) + end -- nice icons local signs = { Error = " ", Warn = " ", Hint = "󰠠 ", Info = " " } @@ -63,28 +87,3 @@ return { vim.keymap.set("n", "rn", vim.lsp.buf.rename, { desc = "[R]e-[N]ame" }) end, } - --- --- -- Normal mode keymaps --- wk.add({ --- { "", vim.lsp.buf.hover, desc = "LSP hover info" }, --- { "ca", vim.lsp.buf.code_action, desc = "LSP [C]ode [A]ction" }, --- { "gi", vim.lsp.buf.implementation, desc = "[G]oto [I]mplementation" }, --- { "gr", vim.lsp.buf.references, desc = "List [R]eferences" }, --- { "gs", vim.lsp.buf.signature_help, desc = "[S]ignature help" }, --- }, { --- mode = "n", --- silent = true, --- noremap = true, --- }) --- --- -- Visual mode keymaps --- wk.add({ --- { "ca", vim.lsp.buf.code_action, desc = "LSP [C]ode [A]ction" }, --- }, { mode = "v", silent = true }) --- end, --- }) --- end, --- }, --- } --- } diff --git a/nvim/m-housh/lua/user/plugin/luasnip.lua b/nvim/m-housh/lua/user/plugin/luasnip.lua new file mode 100644 index 0000000..c90252f --- /dev/null +++ b/nvim/m-housh/lua/user/plugin/luasnip.lua @@ -0,0 +1,45 @@ +return { + "L3MON4D3/LuaSnip", + opts = { + history = true, + enable_autosnippets = false, -- don't automatically expand snippets. + updatevents = "TextChanged,TextChangedI", + }, + config = function() + local ls = require("luasnip") + local types = require("luasnip.util.types") + ls.setup({ + extra_opts = { + [types.choiceNode] = { + active = { + virt_text = { { "choiceNode", "Comment" } }, + }, + }, + }, + }) + require("luasnip.loaders.from_vscode").lazy_load() + require("luasnip.loaders.from_lua").lazy_load({ paths = "~/.config/m-housh/lua/user/snippets/" }) + + -- Keymaps + local opts = { silent = true } + + -- Use k to expand snippets. + -- This will expand the current item or jump to the next item within the snippet. + vim.keymap.set({ "i", "s" }, "", function() + if ls.expand_or_jumpable() then + ls.expand_or_jump() + end + end, opts) + + -- Use j to jump backwards in a snippet. + -- This always moves to the previous item within a snippet. + vim.keymap.set({ "i", "s" }, "", function() + if ls.jumpable(-1) then + ls.jump(-1) + end + end, opts) + + -- Reload snippets. + vim.keymap.set("n", "s", "source ~/.config/m-housh/lua/user/plugin/luasnip.lua") + end, +} diff --git a/nvim/m-housh/lua/user/plugin/neo-tree.lua b/nvim/m-housh/lua/user/plugin/neo-tree.lua deleted file mode 100755 index 728cd75..0000000 --- a/nvim/m-housh/lua/user/plugin/neo-tree.lua +++ /dev/null @@ -1,26 +0,0 @@ --- return { --- "nvim-neo-tree/neo-tree.nvim", --- branch = "v3.x", --- dependencies = { --- "nvim-lua/plenary.nvim", --- "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended --- "MunifTanjim/nui.nvim", --- }, --- opts = { --- close_if_last_window = false, --- enable_git_status = true, --- enable_diagnostics = true, --- filesystem = { --- always_show = { --- "plugins", --- ".zshrc", --- ".zshenv", --- "*.env" --- }, --- filtered_items = { --- hide_dotfiles = false --- }, --- use_libuv_file_watcher = true --- }, --- } --- } diff --git a/nvim/m-housh/lua/user/snippets/init.lua b/nvim/m-housh/lua/user/snippets/init.lua old mode 100755 new mode 100644 index 02242f9..9028086 --- a/nvim/m-housh/lua/user/snippets/init.lua +++ b/nvim/m-housh/lua/user/snippets/init.lua @@ -1,4 +1,5 @@ -local ls = require('luasnip') +-- Setup snippets here. +local ls = require("luasnip") local s = ls.snippet local sn = ls.snippet_node local ms = ls.multi_snippet @@ -7,3 +8,10 @@ local f = ls.function_node local c = ls.choice_node local t = ls.text_node +ls.add_snippets("lua", { + s("hello", { + t('print("hello '), + i(1), + t(' world")'), + }), +}) diff --git a/nvim/m-housh/lua/user/snippets/lua.lua b/nvim/m-housh/lua/user/snippets/lua.lua new file mode 100644 index 0000000..f0db2c0 --- /dev/null +++ b/nvim/m-housh/lua/user/snippets/lua.lua @@ -0,0 +1,34 @@ +-- Setup snippets here. +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local ms = ls.multi_snippet +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local t = ls.text_node + +ls.add_snippets("lua", { + -- Setup a new snippet file. + s("sf", { + t({ + "-- Setup snippets.", + 'local ls = require("luasnip")', + "local s = ls.snippet", + "local sn = ls.snippet_node", + "local ms = ls.multi_snippet", + "local i = ls.insert_node", + "local f = ls.function_node", + "local c = ls.choice_node", + "local t = ls.text_node", + "-- Add snippets", + }), + t('ls.add_snippets("'), + i(1, ""), + t({ + '", {', + "\t-- Define snippets here.", + "})", + }), + }), +}) diff --git a/nvim/m-housh/lua/user/snippets/swift.lua b/nvim/m-housh/lua/user/snippets/swift.lua new file mode 100644 index 0000000..fca3832 --- /dev/null +++ b/nvim/m-housh/lua/user/snippets/swift.lua @@ -0,0 +1,64 @@ +-- Setup snippets. +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local ms = ls.multi_snippet +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local t = ls.text_node +local fmt = require("luasnip.extras.fmt").fmt +local rep = require("luasnip.extras").rep +-- Add snippets +ls.add_snippets("swift", { + -- Add a dependency snippet. + s("@d", fmt("@Dependency(\\.{}) var {}", { i(1), rep(1) })), + + -- Add a dependency client. + s("@dc", fmt([[ + public extension DependencyValues {{ + var {}: {} {{ + get: {{ self[{}.self] }} + set: {{ self[{}.self] = newValue }} + }} + }} + + @DependencyClient + struct {} {{ + // Insert interface here. + }} + + extension {}: TestDependencyKey {{ + static let testValue: {} = Self() + }} + + ]], { + i(1, ""), + i(2, ""), + rep(2), + rep(2), + rep(2), + rep(2), + rep(2), + }) + ), + + -- Add spi modifier snippet. + s("spi", fmt("@_spi({})", { i(1, "name") })), + + -- Add spi import modifier snippet. + s("sii", fmt("@_spi({}) import {}", { i(1, "name"), i(2, "modlue") })), + + -- Document a function. + s("doc", fmt([[ + /// {} + /// + /// - Parameters: + /// - {}: {} + ]], { i(1, "A short description."), i(2, ""), i(3, "") } + )), + + s("param", fmt([[ + /// - {}: {} + ]], { i(1, ""), i(2, "") })), +})