From 11d37b62d7d16542f2e6310b52a65eeec5c26e2d Mon Sep 17 00:00:00 2001 From: Jackson Sadowski Date: Fri, 12 Dec 2025 23:12:35 -0500 Subject: [PATCH] good state --- init.lua | 215 +++++++++++++++++++++-------- lua/kickstart/plugins/neo-tree.lua | 7 + 2 files changed, 164 insertions(+), 58 deletions(-) diff --git a/init.lua b/init.lua index b98ffc61..a1a95974 100644 --- a/init.lua +++ b/init.lua @@ -87,11 +87,11 @@ P.S. You can delete this when you're done too. It's your config now! :) -- Set as the leader key -- See `:help mapleader` -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' +vim.g.mapleader = '`' +vim.g.maplocalleader = '`' -- Set to true if you have a Nerd Font installed and selected in the terminal -vim.g.have_nerd_font = false +vim.g.have_nerd_font = true -- [[ Setting options ]] -- See `:help vim.o` @@ -150,7 +150,7 @@ vim.o.splitbelow = true -- See `:help lua-options` -- and `:help lua-options-guide` vim.o.list = true -vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } +vim.opt.listchars = { tab = ' ', nbsp = '␣' } -- Preview substitutions live, as you type! vim.o.inccommand = 'split' @@ -166,9 +166,46 @@ vim.o.scrolloff = 10 -- See `:help 'confirm'` vim.o.confirm = true +-- Tab settings +vim.o.tabstop = 2 -- Number of spaces a tab counts for +vim.o.shiftwidth = 2 -- Number of spaces for auto-indent +vim.o.expandtab = true -- Convert tabs to spaces +vim.o.softtabstop = 2 -- Number of spaces for key + -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` +-- Command+C/V/X for copy/paste/cut (Mac style) +vim.keymap.set('v', '', '"+y', { desc = 'Copy to clipboard' }) +vim.keymap.set('n', '', '"+p', { desc = 'Paste from clipboard' }) +vim.keymap.set('i', '', '+', { desc = 'Paste from clipboard' }) +vim.keymap.set('v', '', '"+d', { desc = 'Cut to clipboard' }) + +-- Toggle GitHub Copilot with F16 +local copilot_enabled = true +vim.keymap.set('n', '', function() + if copilot_enabled then + vim.cmd 'Copilot disable' + copilot_enabled = false + print 'Copilot disabled' + else + vim.cmd 'Copilot enable' + copilot_enabled = true + print 'Copilot enabled' + end +end, { desc = 'Toggle GitHub Copilot' }) +vim.keymap.set('i', '', function() + if copilot_enabled then + vim.cmd 'Copilot disable' + copilot_enabled = false + print 'Copilot disabled' + else + vim.cmd 'Copilot enable' + copilot_enabled = true + print 'Copilot enabled' + end +end, { desc = 'Toggle GitHub Copilot' }) + -- Clear highlights on search when pressing in normal mode -- See `:help hlsearch` vim.keymap.set('n', '', 'nohlsearch') @@ -247,7 +284,15 @@ rtp:prepend(lazypath) -- NOTE: Here is where you install your plugins. 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 + { + 'NMAC427/guess-indent.nvim', + opts = {}, + }, -- Detect tabstop and shiftwidth automatically + + -- GitHub Copilot + { + 'github/copilot.vim', + }, -- NOTE: Plugins can also be added by using a table, -- with the first argument being the link and the following @@ -281,6 +326,12 @@ require('lazy').setup({ topdelete = { text = '‾' }, changedelete = { text = '~' }, }, + current_line_blame = true, + current_line_blame_opts = { + virt_text = false, + delay = 500, + }, + current_line_blame_formatter = ', ', }, }, @@ -426,39 +477,75 @@ require('lazy').setup({ -- See `:help telescope.builtin` local builtin = require 'telescope.builtin' - vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) - vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) - vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) - vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) - vim.keymap.set('n', 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) - vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) - vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) - vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' }) - vim.keymap.set('n', 's.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) - vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' }) + -- Helper to launch Telescope from a non-Neo-tree window + local function smart_telescope_launch(func) + return function(...) + if vim.bo.filetype == 'neo-tree' then + local neotree_win = vim.api.nvim_get_current_win() + local wins = vim.api.nvim_list_wins() + local target_win = nil + for _, win in ipairs(wins) do + local config = vim.api.nvim_win_get_config(win) + if config.relative == '' then + local buf = vim.api.nvim_win_get_buf(win) + local ft = vim.api.nvim_get_option_value('filetype', { buf = buf }) + if ft ~= 'neo-tree' then + target_win = win + break + end + end + end + + if target_win then + vim.api.nvim_win_set_width(neotree_win, 30) + vim.api.nvim_set_current_win(target_win) + else + vim.cmd 'vsplit' + vim.api.nvim_win_set_width(neotree_win, 30) + end + end + if type(func) == 'function' then + func(...) + end + end + end + + vim.keymap.set('n', 'sh', smart_telescope_launch(builtin.help_tags), { desc = '[S]earch [H]elp' }) + vim.keymap.set('n', 'sk', smart_telescope_launch(builtin.keymaps), { desc = '[S]earch [K]eymaps' }) + vim.keymap.set('n', 'sf', smart_telescope_launch(builtin.find_files), { desc = '[S]earch [F]iles' }) + vim.keymap.set('n', '', smart_telescope_launch(builtin.find_files), { desc = 'Search Files' }) + vim.keymap.set('n', 'ss', smart_telescope_launch(builtin.builtin), { desc = '[S]earch [S]elect Telescope' }) + vim.keymap.set('n', 'sw', smart_telescope_launch(builtin.grep_string), { desc = '[S]earch current [W]ord' }) + vim.keymap.set('n', 'sg', smart_telescope_launch(builtin.live_grep), { desc = '[S]earch by [G]rep' }) + vim.keymap.set('n', 'sd', smart_telescope_launch(builtin.diagnostics), { desc = '[S]earch [D]iagnostics' }) + vim.keymap.set('n', 'sr', smart_telescope_launch(builtin.resume), { desc = '[S]earch [R]esume' }) + vim.keymap.set('n', 's.', smart_telescope_launch(builtin.oldfiles), { desc = '[S]earch Recent Files ("." for repeat)' }) + vim.keymap.set('n', '', smart_telescope_launch(builtin.buffers), { desc = '[ ] Find existing buffers' }) + -- search files using command shift f + vim.keymap.set('n', '', smart_telescope_launch(builtin.live_grep), { desc = 'Search by [G]rep' }) -- Slightly advanced example of overriding default behavior and theme - vim.keymap.set('n', '/', function() + vim.keymap.set('n', '/', smart_telescope_launch(function() -- You can pass additional configuration to Telescope to change the theme, layout, etc. builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { winblend = 10, previewer = false, }) - end, { desc = '[/] Fuzzily search in current buffer' }) + end), { desc = '[/] Fuzzily search in current buffer' }) -- It's also possible to pass additional configuration options. -- See `:help telescope.builtin.live_grep()` for information about particular keys - vim.keymap.set('n', 's/', function() + vim.keymap.set('n', 's/', smart_telescope_launch(function() builtin.live_grep { grep_open_files = true, prompt_title = 'Live Grep in Open Files', } - end, { desc = '[S]earch [/] in Open Files' }) + end), { desc = '[S]earch [/] in Open Files' }) -- Shortcut for searching your Neovim configuration files - vim.keymap.set('n', 'sn', function() + vim.keymap.set('n', 'sn', smart_telescope_launch(function() builtin.find_files { cwd = vim.fn.stdpath 'config' } - end, { desc = '[S]earch [N]eovim files' }) + end), { desc = '[S]earch [N]eovim files' }) end, }, @@ -672,7 +759,7 @@ require('lazy').setup({ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ local servers = { -- clangd = {}, - -- gopls = {}, + gopls = {}, -- pyright = {}, -- rust_analyzer = {}, -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs @@ -716,6 +803,8 @@ require('lazy').setup({ local ensure_installed = vim.tbl_keys(servers or {}) vim.list_extend(ensure_installed, { 'stylua', -- Used to format Lua code + 'prettier', -- Used to format JSON, JavaScript, etc. + 'goimports', -- Used to format Go code }) require('mason-tool-installer').setup { ensure_installed = ensure_installed } @@ -768,6 +857,9 @@ require('lazy').setup({ end, formatters_by_ft = { lua = { 'stylua' }, + json = { 'prettier' }, + jsonc = { 'prettier' }, + go = { 'goimports' }, -- Conform can also run multiple formatters sequentially -- python = { "isort", "black" }, -- @@ -835,7 +927,8 @@ require('lazy').setup({ -- : Toggle signature help -- -- See :h blink-cmp-config-keymap for defining your own keymap - preset = 'default', + preset = 'enter', + [''] = { 'select_and_accept', 'fallback' }, -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps @@ -876,25 +969,15 @@ require('lazy').setup({ }, }, - { -- You can easily change to a different colorscheme. - -- Change the name of the colorscheme plugin below, and then - -- change the command in the config to whatever the name of that colorscheme is. - -- - -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. - 'folke/tokyonight.nvim', - priority = 1000, -- Make sure to load this before all the other start plugins. + -- Using Lazy + { + 'navarasu/onedark.nvim', + priority = 1000, -- make sure to load this before all the other start plugins config = function() - ---@diagnostic disable-next-line: missing-fields - require('tokyonight').setup { - styles = { - comments = { italic = false }, -- Disable italics in comments - }, + require('onedark').setup { + style = 'darker', } - - -- Load the colorscheme here. - -- Like many other themes, this one has different styles, and you could load - -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. - vim.cmd.colorscheme 'tokyonight-night' + require('onedark').load() end, }, @@ -919,32 +1002,48 @@ require('lazy').setup({ -- - sr)' - [S]urround [R]eplace [)] ['] require('mini.surround').setup() - -- Simple and easy statusline. - -- You could remove this setup call if you don't like it, - -- and try some other statusline plugin - local statusline = require 'mini.statusline' - -- set use_icons to true if you have a Nerd Font - statusline.setup { use_icons = vim.g.have_nerd_font } - - -- You can configure sections in the statusline by overriding their - -- default behavior. For example, here we set the section for - -- cursor location to LINE:COLUMN - ---@diagnostic disable-next-line: duplicate-set-field - statusline.section_location = function() - return '%2l:%-2v' - end - -- ... and there is more! -- Check out: https://github.com/echasnovski/mini.nvim end, }, + + -- Statusline with git blame + { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-tree/nvim-web-devicons' }, + opts = { + options = { + icons_enabled = vim.g.have_nerd_font, + theme = 'auto', + component_separators = '|', + section_separators = '', + }, + sections = { + lualine_c = { + 'filename', + { + function() + local blame = vim.b.gitsigns_blame_line + if blame then + return blame + end + return '' + end, + cond = function() + return vim.b.gitsigns_blame_line ~= nil + end, + }, + }, + }, + }, + }, { -- Highlight, edit, and navigate code 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', main = 'nvim-treesitter.configs', -- Sets main module to use for opts -- [[ Configure Treesitter ]] See `:help nvim-treesitter` opts = { - ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' }, + ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc', 'json', 'jsonc', 'jinja' }, -- Autoinstall languages that are not installed auto_install = true, highlight = { @@ -976,8 +1075,8 @@ require('lazy').setup({ -- require 'kickstart.plugins.debug', -- require 'kickstart.plugins.indent_line', -- require 'kickstart.plugins.lint', - -- require 'kickstart.plugins.autopairs', - -- require 'kickstart.plugins.neo-tree', + require 'kickstart.plugins.autopairs', + require 'kickstart.plugins.neo-tree', -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` diff --git a/lua/kickstart/plugins/neo-tree.lua b/lua/kickstart/plugins/neo-tree.lua index c7067891..75b0f3fe 100644 --- a/lua/kickstart/plugins/neo-tree.lua +++ b/lua/kickstart/plugins/neo-tree.lua @@ -15,11 +15,18 @@ return { }, opts = { filesystem = { + follow_current_file = { + enabled = true, + }, window = { mappings = { ['\\'] = 'close_window', }, }, }, + window = { + position = 'left', + width = 30, + }, }, }