diff --git a/init.lua b/init.lua index b98ffc61..a3b5e3ac 100644 --- a/init.lua +++ b/init.lua @@ -248,14 +248,12 @@ rtp:prepend(lazypath) require('lazy').setup({ -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). 'NMAC427/guess-indent.nvim', -- Detect tabstop and shiftwidth automatically - -- NOTE: Plugins can also be added by using a table, -- with the first argument being the link and the following -- keys can be used to configure plugin behavior/loading/etc. -- -- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded. -- - -- Alternatively, use `config = function() ... end` for full control over the configuration. -- If you prefer to call `setup` explicitly, use: -- { @@ -984,7 +982,7 @@ require('lazy').setup({ -- This is the easiest way to modularize your config. -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, -- -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` -- Or use telescope! @@ -1012,5 +1010,7 @@ require('lazy').setup({ }, }) +pcall(require, 'custom.keymaps') +pcall(require, 'custom.lsp') -- The line beneath this is called `modeline`. See `:help modeline` -- vim: ts=2 sts=2 sw=2 et diff --git a/lua/custom/keymaps.lua b/lua/custom/keymaps.lua new file mode 100644 index 00000000..66788a5e --- /dev/null +++ b/lua/custom/keymaps.lua @@ -0,0 +1,45 @@ +vim.keymap.set('n', '', function() + -- Get the current file's directory (handles unsaved files too) + local cwd = vim.fn.expand '%:p:h' + if cwd == '' then + cwd = vim.fn.getcwd() -- fallback to current working dir + end + + -- Open a horizontal split and terminal + vim.cmd 'split' + vim.cmd 'terminal' + vim.cmd 'startinsert' + + -- Safely cd into the folder, even if it has spaces + vim.fn.chansend(vim.b.terminal_job_id, 'cd "' .. cwd .. '"\n') +end, { desc = "Open terminal in current file's directory" }) + +local harpoon = require 'harpoon' + +vim.keymap.set('n', 'a', function() + harpoon:list():add() +end, { desc = 'Add file to Harpoon' }) +vim.keymap.set('n', 'h', function() + harpoon.ui:toggle_quick_menu(harpoon:list()) +end, { desc = 'Toggle Harpoon menu' }) + +vim.keymap.set('n', '1', function() + harpoon:list():select(1) +end) +vim.keymap.set('n', '2', function() + harpoon:list():select(2) +end) +vim.keymap.set('n', '3', function() + harpoon:list():select(3) +end) +vim.keymap.set('n', '4', function() + harpoon:list():select(4) +end) + +-- In your keybindings configuration (e.g., lua/config/keymaps.lua or init.lua) +vim.keymap.set('n', 'w', 'NvimTreeToggle', { desc = 'Toggle NvimTree' }) + +-- Insert Kubernetes Deployment template below the cursor +vim.keymap.set('n', 'kd', function() + vim.cmd 'read ~/.config/nvim/lua/custom/templates/k8s-deployment.yaml' +end, { desc = 'Insert K8s Deployment template' }) diff --git a/lua/custom/lsp.lua b/lua/custom/lsp.lua new file mode 100644 index 00000000..e85e5736 --- /dev/null +++ b/lua/custom/lsp.lua @@ -0,0 +1,6 @@ +local lspconfig = require 'lspconfig' +local servers = { 'pyright', 'lua_ls' } + +for _, server in ipairs(servers) do + lspconfig[server].setup {} +end diff --git a/lua/custom/plugins/plugins.lua b/lua/custom/plugins/plugins.lua new file mode 100644 index 00000000..7cf3280a --- /dev/null +++ b/lua/custom/plugins/plugins.lua @@ -0,0 +1,88 @@ +return { + -- Other plugins in here + { + 'nvim-tree/nvim-web-devicons', + }, + { + 'stevearc/oil.nvim', + opts = {}, + dependencies = { 'nvim-tree/nvim-web-devicons' }, -- optional icons + keys = { + { 'e', 'Oil', desc = 'Open file explorer (Oil)' }, + }, + }, + { + 'ThePrimeagen/harpoon', + branch = 'harpoon2', + dependencies = { 'nvim-lua/plenary.nvim' }, + config = function() + require('harpoon'):setup() + end, + }, + { + 'hrsh7th/nvim-cmp', + dependencies = { + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'hrsh7th/cmp-path', + 'L3MON4D3/LuaSnip', + 'saadparwaiz1/cmp_luasnip', + }, + config = function() + local cmp = require 'cmp' + local luasnip = require 'luasnip' + + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.confirm { select = true }, + [''] = cmp.mapping.complete(), + }, + sources = cmp.config.sources { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'buffer' }, + { name = 'path' }, + }, + } + end, + }, + { + 'nvim-tree/nvim-tree.lua', + version = '*', -- recommended + lazy = false, + dependencies = { + 'nvim-tree/nvim-web-devicons', -- optional, for file icons + }, + opts = { + view = { + side = 'left', + width = 30, + float = { enable = false }, + }, + sync_root_with_cwd = true, + respect_buf_cwd = true, + update_focused_file = { enable = true, update_root = true }, + renderer = { + group_empty = true, + indent_width = 2, + }, + actions = { open_file = { resize_window = true } }, + }, + init = function() + vim.g.loaded_netrw = 1 + vim.g.loaded_netrwPlugin = 1 + end, + -- Other nvim-tree options can go here + -- For example, to automatically close on file selection: + -- auto_close = true, + -- To show hidden files: + -- hide_dotfiles = false, + }, +} diff --git a/lua/custom/settings.lua b/lua/custom/settings.lua new file mode 100644 index 00000000..e69de29b diff --git a/lua/custom/templates/k8s-deployment.yaml b/lua/custom/templates/k8s-deployment.yaml new file mode 100644 index 00000000..4722ce54 --- /dev/null +++ b/lua/custom/templates/k8s-deployment.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: +spec: + replicas: 1 + selector: + matchLabels: + app: + template: + metadata: + labels: + app: + spec: + containers: + - name: + image: nginx:latest + ports: + - containerPort: 80 +