From de68365a99af9bdd675919f6f0dc73a8658cda07 Mon Sep 17 00:00:00 2001 From: "Janghoon (David) Lee" <44862514+savagemanage@users.noreply.github.com> Date: Thu, 16 Nov 2023 19:17:41 +0900 Subject: [PATCH 1/5] Add pv on vim.keymap --- init.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/init.lua b/init.lua index 560c183337e..6c6902bbadf 100644 --- a/init.lua +++ b/init.lua @@ -185,6 +185,9 @@ do -- See `:help hlsearch` vim.keymap.set('n', '', 'nohlsearch') + -- Add pv to exit to directory + vim.keymap.set('n', 'pv', vim.cmd.Ex) + -- Diagnostic Config & Keymaps -- See `:help vim.diagnostic.Opts` vim.diagnostic.config { From 52d09c296fa49d190978b69333e706c396d2b5f0 Mon Sep 17 00:00:00 2001 From: Janghoon Lee <44862514+savagemanage@users.noreply.github.com> Date: Thu, 23 Nov 2023 03:41:24 +0900 Subject: [PATCH 2/5] Chore: Remove unused files --- .github/ISSUE_TEMPLATE/bug_report.md | 37 ---------------------------- doc/kickstart.txt | 24 ------------------ doc/tags | 3 --- 3 files changed, 64 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 doc/kickstart.txt delete mode 100644 doc/tags diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index b061e41038d..00000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - - - -## Before Reporting an Issue - -- I have read the kickstart.nvim README.md. -- I have read the appropriate plugin's documentation. -- I have searched that this issue has not been reported before. -- I have ran `:checkhealth` and so no obvious issue. - -- [ ] **By checking this, I confirm that the above steps are completed. I understand leaving this unchecked will result in this report being closed immediately.** - -## Describe the bug - - -## To Reproduce - -1. ... - -## Desktop - -- OS: -- Terminal: - -## Neovim Version - - -``` -``` diff --git a/doc/kickstart.txt b/doc/kickstart.txt deleted file mode 100644 index cb87ac3f1de..00000000000 --- a/doc/kickstart.txt +++ /dev/null @@ -1,24 +0,0 @@ -================================================================================ -INTRODUCTION *kickstart.nvim* - -Kickstart.nvim is a project to help you get started on your neovim journey. - - *kickstart-is-not* -It is not: -- Complete framework for every plugin under the sun -- Place to add every plugin that could ever be useful - - *kickstart-is* -It is: -- Somewhere that has a good start for the most common "IDE" type features: - - autocompletion - - goto-definition - - find references - - fuzzy finding - - and hinting at what more can be done :) -- A place to _kickstart_ your journey. - - You should fork this project and use/modify it so that it matches your - style and preferences. If you don't want to do that, there are probably - other projects that would fit much better for you (and that's great!)! - - vim:tw=78:ts=8:ft=help:norl: diff --git a/doc/tags b/doc/tags deleted file mode 100644 index 687ae7721d9..00000000000 --- a/doc/tags +++ /dev/null @@ -1,3 +0,0 @@ -kickstart-is kickstart.txt /*kickstart-is* -kickstart-is-not kickstart.txt /*kickstart-is-not* -kickstart.nvim kickstart.txt /*kickstart.nvim* From 39ba11858b8fd1838fd40b7428f9fda152fa7b5a Mon Sep 17 00:00:00 2001 From: Janghoon Lee <44862514+savagemanage@users.noreply.github.com> Date: Thu, 23 Nov 2023 03:46:26 +0900 Subject: [PATCH 3/5] Docs: Update clone link to current repo --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cc9615d69d8..529e9e3048a 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ it's recommended to track it in version control (see `:help vim.pack-lockfile`).
Linux and Mac ```sh -git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim +git clone https://github.com/its-janghoon/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim ```
@@ -101,13 +101,13 @@ git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HO If you're using `cmd.exe`: ``` -git clone https://github.com/nvim-lua/kickstart.nvim.git "%localappdata%\nvim" +git clone https://github.com/its-janghoon/kickstart.nvim.git "%localappdata%\nvim" ``` If you're using `powershell.exe` ``` -git clone https://github.com/nvim-lua/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim" +git clone https://github.com/its-janghoon/kickstart.nvim.git "${env:LOCALAPPDATA}\nvim" ``` From 42a0aced9ee422ac087ca03a038e4f4af815efde Mon Sep 17 00:00:00 2001 From: Janghoon Lee <44862514+savagemanage@users.noreply.github.com> Date: Tue, 13 Oct 2026 08:29:22 +0000 Subject: [PATCH 4/5] feat: enable kickstart extras and add editing/git/markdown/AI/tmux plugins - Enable kickstart.plugins: debug, indent_line, lint, autopairs, neo-tree - Enable custom.plugins loader and add: - editing.lua: oil.nvim (`-`, `pv`), flash.nvim (`s`/`S`), harpoon v2 (`m*`, `1-4`) - git.lua: lazygit.nvim (`gg`, `gf`) - markdown.lua: render-markdown.nvim (`tm`) - ai.lua: sidekick.nvim CLI terminal with tmux session persistence (`a*`, NES off), codecompanion.nvim chat/inline (`c*`) - tmux.lua: vim-tmux-navigator (`` across nvim splits and tmux panes) - which-key groups for a / c / g / m Verified headless on NVIM v0.13.0-dev: all plugins install via vim.pack, all modules require() cleanly, no startup errors. --- init.lua | 16 +++++++----- lua/custom/plugins/ai.lua | 46 +++++++++++++++++++++++++++++++++ lua/custom/plugins/editing.lua | 35 +++++++++++++++++++++++++ lua/custom/plugins/git.lua | 10 +++++++ lua/custom/plugins/markdown.lua | 9 +++++++ lua/custom/plugins/tmux.lua | 16 ++++++++++++ 6 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 lua/custom/plugins/ai.lua create mode 100644 lua/custom/plugins/editing.lua create mode 100644 lua/custom/plugins/git.lua create mode 100644 lua/custom/plugins/markdown.lua create mode 100644 lua/custom/plugins/tmux.lua diff --git a/init.lua b/init.lua index 6c6902bbadf..921a9359372 100644 --- a/init.lua +++ b/init.lua @@ -416,6 +416,10 @@ do { 's', group = '[S]earch', mode = { 'n', 'v' } }, { 't', group = '[T]oggle' }, { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } }, -- Enable gitsigns recommended keymaps first + { 'a', group = '[A]I CLI (sidekick)', mode = { 'n', 'x' } }, + { 'c', group = '[C]odeCompanion', mode = { 'n', 'v' } }, + { 'g', group = '[G]it' }, + { 'm', group = 'Harpoon [M]arks' }, { 'gr', group = 'LSP Actions', mode = { 'n' } }, }, } @@ -1017,16 +1021,16 @@ do -- Here are some example plugins that I've included in the Kickstart repository. -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- - -- 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.debug' + require 'kickstart.plugins.indent_line' + require 'kickstart.plugins.lint' + require 'kickstart.plugins.autopairs' + require 'kickstart.plugins.neo-tree' -- NOTE: You can add your own plugins, configuration, etc. in `lua/custom/plugins/*.lua`. -- -- For independent modules, uncomment the convenience loader: - -- require 'custom.plugins' + require 'custom.plugins' -- -- `custom.plugins` automatically loads files from that directory, but their -- order is unspecified. If plugins depend on each other, keep them in the same diff --git a/lua/custom/plugins/ai.lua b/lua/custom/plugins/ai.lua new file mode 100644 index 00000000000..8c60bbd0b5e --- /dev/null +++ b/lua/custom/plugins/ai.lua @@ -0,0 +1,46 @@ +-- AI coding agents +-- * sidekick.nvim: run any AI CLI (claude, codex, gemini, copilot, opencode, ...) +-- in a side terminal, send file/selection/diagnostics as context. +-- CLI sessions live in tmux so they survive closing Neovim. +-- NES (Copilot "next edit suggestions") is off: it needs a Copilot login. +-- * codecompanion.nvim: chat + inline edits with diff review. +-- Default adapter is copilot; set `strategies.*.adapter` for anthropic/openai/ollama. +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { + gh 'nvim-lua/plenary.nvim', + gh 'folke/sidekick.nvim', + gh 'olimorris/codecompanion.nvim', +} + +-- [[ sidekick.nvim ]] +require('sidekick').setup { + nes = { enabled = false }, + cli = { + picker = 'telescope', + mux = { + backend = 'tmux', + enabled = vim.fn.executable 'tmux' == 1, + create = 'terminal', + }, + -- Add your own CLI here, e.g. + -- tools = { my_tool = { cmd = { 'my-ai-cli' } } }, + }, +} +local sk = function() return require 'sidekick.cli' end +vim.keymap.set({ 'n', 't', 'i', 'x' }, '', function() sk().focus() end, { desc = 'Sidekick focus' }) +vim.keymap.set('n', 'aa', function() sk().toggle() end, { desc = 'Sidekick toggle CLI' }) +vim.keymap.set('n', 'as', function() sk().select() end, { desc = 'Sidekick [S]elect CLI' }) +vim.keymap.set('n', 'ad', function() sk().close() end, { desc = 'Sidekick [D]etach session' }) +vim.keymap.set({ 'n', 'x' }, 'at', function() sk().send { msg = '{this}' } end, { desc = 'Sidekick send [T]his' }) +vim.keymap.set('n', 'af', function() sk().send { msg = '{file}' } end, { desc = 'Sidekick send [F]ile' }) +vim.keymap.set('x', 'av', function() sk().send { msg = '{selection}' } end, { desc = 'Sidekick send [V]isual' }) +vim.keymap.set({ 'n', 'x' }, 'ap', function() sk().prompt() end, { desc = 'Sidekick [P]rompt' }) +vim.keymap.set('n', 'ac', function() sk().toggle { name = 'claude', focus = true } end, { desc = 'Sidekick [C]laude' }) + +-- [[ codecompanion.nvim ]] +require('codecompanion').setup {} +vim.keymap.set({ 'n', 'v' }, 'cc', 'CodeCompanionChat Toggle', { desc = 'CodeCompanion [C]hat' }) +vim.keymap.set({ 'n', 'v' }, 'ca', 'CodeCompanionActions', { desc = 'CodeCompanion [A]ctions' }) +vim.keymap.set('v', 'ce', ":'<,'>CodeCompanion ", { desc = 'CodeCompanion inline [E]dit' }) +vim.keymap.set('v', 'ga', 'CodeCompanionChat Add', { desc = 'Add selection to CodeCompanion chat' }) diff --git a/lua/custom/plugins/editing.lua b/lua/custom/plugins/editing.lua new file mode 100644 index 00000000000..52153fe1ed5 --- /dev/null +++ b/lua/custom/plugins/editing.lua @@ -0,0 +1,35 @@ +-- Editing / navigation: oil (file manager as buffer), flash (jump), harpoon (pin files) +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { + gh 'nvim-lua/plenary.nvim', + gh 'stevearc/oil.nvim', + gh 'folke/flash.nvim', + { src = gh 'ThePrimeagen/harpoon', version = 'harpoon2' }, +} + +-- [[ oil.nvim ]] edit the filesystem like a buffer, `:w` applies +require('oil').setup { + default_file_explorer = true, + view_options = { show_hidden = true }, +} +vim.keymap.set('n', '-', 'Oil', { desc = 'Open parent directory (oil)' }) +-- keep pv as "project view" but open oil instead of netrw +vim.keymap.set('n', 'pv', 'Oil', { desc = '[P]roject [V]iew (oil)' }) + +-- [[ flash.nvim ]] jump anywhere on screen with labels +require('flash').setup {} +vim.keymap.set({ 'n', 'x', 'o' }, 's', function() require('flash').jump() end, { desc = 'Flash jump' }) +vim.keymap.set({ 'n', 'x', 'o' }, 'S', function() require('flash').treesitter() end, { desc = 'Flash treesitter' }) +vim.keymap.set('o', 'r', function() require('flash').remote() end, { desc = 'Remote flash' }) + +-- [[ harpoon ]] pin a handful of files and jump between them +local harpoon = require 'harpoon' +harpoon:setup() +vim.keymap.set('n', 'ma', function() harpoon:list():add() end, { desc = 'Harpoon [A]dd file' }) +vim.keymap.set('n', 'mm', function() harpoon.ui:toggle_quick_menu(harpoon:list()) end, { desc = 'Harpoon [M]enu' }) +for i = 1, 4 do + vim.keymap.set('n', '' .. i, function() harpoon:list():select(i) end, { desc = 'Harpoon file ' .. i }) +end +vim.keymap.set('n', 'mp', function() harpoon:list():prev() end, { desc = 'Harpoon [P]rev' }) +vim.keymap.set('n', 'mn', function() harpoon:list():next() end, { desc = 'Harpoon [N]ext' }) diff --git a/lua/custom/plugins/git.lua b/lua/custom/plugins/git.lua new file mode 100644 index 00000000000..d80f29e1014 --- /dev/null +++ b/lua/custom/plugins/git.lua @@ -0,0 +1,10 @@ +-- Git: lazygit in a floating window (needs the `lazygit` binary on PATH) +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { + gh 'nvim-lua/plenary.nvim', + gh 'kdheepak/lazygit.nvim', +} + +vim.keymap.set('n', 'gg', 'LazyGit', { desc = 'Lazy[G]it' }) +vim.keymap.set('n', 'gf', 'LazyGitCurrentFile', { desc = 'LazyGit current [F]ile' }) diff --git a/lua/custom/plugins/markdown.lua b/lua/custom/plugins/markdown.lua new file mode 100644 index 00000000000..bfcc5efa8e5 --- /dev/null +++ b/lua/custom/plugins/markdown.lua @@ -0,0 +1,9 @@ +-- Markdown rendered in-buffer (headings, tables, callouts, code blocks) +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { gh 'MeanderingProgrammer/render-markdown.nvim' } + +require('render-markdown').setup { + file_types = { 'markdown', 'codecompanion' }, +} +vim.keymap.set('n', 'tm', 'RenderMarkdown toggle', { desc = '[T]oggle [M]arkdown render' }) diff --git a/lua/custom/plugins/tmux.lua b/lua/custom/plugins/tmux.lua new file mode 100644 index 00000000000..b8eb42fa5de --- /dev/null +++ b/lua/custom/plugins/tmux.lua @@ -0,0 +1,16 @@ +-- tmux: moves between Neovim splits AND tmux panes as one grid. +-- Pair with this in ~/.tmux.conf (see https://github.com/christoomey/vim-tmux-navigator): +-- is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'" +-- bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' +-- bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' +-- bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' +-- bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R' +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { gh 'christoomey/vim-tmux-navigator' } + +-- The plugin defines its own maps; override kickstart's plain window maps. +vim.keymap.set('n', '', 'TmuxNavigateLeft', { desc = 'Move focus left (tmux-aware)' }) +vim.keymap.set('n', '', 'TmuxNavigateDown', { desc = 'Move focus down (tmux-aware)' }) +vim.keymap.set('n', '', 'TmuxNavigateUp', { desc = 'Move focus up (tmux-aware)' }) +vim.keymap.set('n', '', 'TmuxNavigateRight', { desc = 'Move focus right (tmux-aware)' }) From 2c84f1c44bc3886f621d475807bb763bdcc57b3e Mon Sep 17 00:00:00 2001 From: Janghoon Lee <44862514+savagemanage@users.noreply.github.com> Date: Tue, 13 Oct 2026 08:39:24 +0000 Subject: [PATCH 5/5] feat: make Redrob Code the default sidekick agent, add quick install - ai.lua: register `redrob` CLI as a sidekick tool; aa and ar open it directly - README: quick-install block for this fork and the optional tools it uses --- README.md | 15 +++++++++++++++ lua/custom/plugins/ai.lua | 7 ++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 529e9e3048a..f83f42e16eb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,20 @@ # kickstart.nvim +> Janghoon's fork of [kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim) +> with oil, flash, harpoon, lazygit, render-markdown, sidekick (Redrob Code as the +> default AI agent), codecompanion and tmux navigation. Needs Neovim 0.12+. + +## Quick install + +```sh +# back up any existing config first +mv "${XDG_CONFIG_HOME:-$HOME/.config}/nvim" "${XDG_CONFIG_HOME:-$HOME/.config}/nvim.bak" 2>/dev/null +git clone https://github.com/its-janghoon/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}/nvim" +nvim # plugins install on first start +``` + +Optional tools: `tmux`, `lazygit`, `rg`, `fd`, and the `redrob` CLI for `aa`. + ## Introduction A starting point for Neovim that is: diff --git a/lua/custom/plugins/ai.lua b/lua/custom/plugins/ai.lua index 8c60bbd0b5e..9e5c8b3d275 100644 --- a/lua/custom/plugins/ai.lua +++ b/lua/custom/plugins/ai.lua @@ -23,13 +23,14 @@ require('sidekick').setup { enabled = vim.fn.executable 'tmux' == 1, create = 'terminal', }, - -- Add your own CLI here, e.g. - -- tools = { my_tool = { cmd = { 'my-ai-cli' } } }, + -- Redrob Code is the default agent (`aa`). Needs `redrob` on PATH. + tools = { redrob = { cmd = { 'redrob' } } }, }, } local sk = function() return require 'sidekick.cli' end vim.keymap.set({ 'n', 't', 'i', 'x' }, '', function() sk().focus() end, { desc = 'Sidekick focus' }) -vim.keymap.set('n', 'aa', function() sk().toggle() end, { desc = 'Sidekick toggle CLI' }) +vim.keymap.set('n', 'aa', function() sk().toggle { name = 'redrob', focus = true } end, { desc = 'Sidekick toggle Redrob Code' }) +vim.keymap.set('n', 'ar', function() sk().toggle { name = 'redrob', focus = true } end, { desc = 'Sidekick [R]edrob Code' }) vim.keymap.set('n', 'as', function() sk().select() end, { desc = 'Sidekick [S]elect CLI' }) vim.keymap.set('n', 'ad', function() sk().close() end, { desc = 'Sidekick [D]etach session' }) vim.keymap.set({ 'n', 'x' }, 'at', function() sk().send { msg = '{this}' } end, { desc = 'Sidekick send [T]his' })