Skip to content
Closed

Sync #1861

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ test.sh
nvim

spell/
lazy-lock.json

.DS_Store
14 changes: 7 additions & 7 deletions init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ 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`
Expand All @@ -102,7 +102,7 @@ vim.g.have_nerd_font = false
vim.o.number = true
-- You can also add relative line numbers, to help with jumping.
-- Experiment for yourself to see if you like it!
-- vim.o.relativenumber = true
vim.o.relativenumber = true

-- Enable mouse mode, can be useful for resizing splits for example!
vim.o.mouse = 'a'
Expand Down Expand Up @@ -298,7 +298,7 @@ require('lazy').setup({
-- Then, because we use the `opts` key (recommended), the configuration runs
-- after the plugin has been loaded as `require(MODULE).setup(opts)`.

{ -- Useful plugin to show you pending keybinds.
{ -- Useful plugin to show you pending keybinds.
'folke/which-key.nvim',
event = 'VimEnter', -- Sets the loading event to 'VimEnter'
opts = {
Expand Down Expand Up @@ -379,7 +379,7 @@ require('lazy').setup({
{ 'nvim-telescope/telescope-ui-select.nvim' },

-- Useful for getting pretty icons, but requires a Nerd Font.
{ 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
{ 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
},
config = function()
-- Telescope is a fuzzy finder that comes with a lot of different things that
Expand Down Expand Up @@ -487,7 +487,7 @@ require('lazy').setup({
'WhoIsSethDaniel/mason-tool-installer.nvim',

-- Useful status updates for LSP.
{ 'j-hui/fidget.nvim', opts = {} },
{ 'j-hui/fidget.nvim', opts = {} },

-- Allows extra capabilities provided by blink.cmp
'saghen/blink.cmp',
Expand Down Expand Up @@ -931,7 +931,7 @@ require('lazy').setup({
-- cursor location to LINE:COLUMN
---@diagnostic disable-next-line: duplicate-set-field
statusline.section_location = function()
return '%2l:%-2v'
return '%2l:%-2v %P'
end

-- ... and there is more!
Expand Down Expand Up @@ -984,7 +984,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!
Expand Down
26 changes: 26 additions & 0 deletions lazy-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" },
"blink.cmp": { "branch": "main", "commit": "327fff91fe6af358e990be7be1ec8b78037d2138" },
"conform.nvim": { "branch": "master", "commit": "235dd79731c1dc51ec04abb4045cbc54727a172a" },
"fidget.nvim": { "branch": "main", "commit": "3f5475949679953af6d78654db29b944fa826e6a" },
"gitsigns.nvim": { "branch": "main", "commit": "20ad4419564d6e22b189f6738116b38871082332" },
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
"lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" },
"lazydev.nvim": { "branch": "main", "commit": "e28ce52fc7ff79fcb76f0e79ee6fb6182fca90b9" },
"lazygit.nvim": { "branch": "main", "commit": "2305deed25bc61b866d5d39189e9105a45cf1cfb" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "2304ff65ecc8cb2afc2484de3e2ed9a407edf0b9" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" },
"mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" },
"mini.nvim": { "branch": "main", "commit": "cf32454e91b3d963a12fef0314811fb035b62d49" },
"nvim-lspconfig": { "branch": "master", "commit": "e5c61b02f33b5c6538be25b2696b33b4cc91e667" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-web-devicons": { "branch": "master", "commit": "b8221e42cf7287c4dcde81f232f58d7b947c210d" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"todo-comments.nvim": { "branch": "main", "commit": "19d461ddd543e938eb22505fb03fa878800270b6" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"tokyonight.nvim": { "branch": "main", "commit": "e63c42a42b11cd6225f009dd949b9ee0fccc15ef" },
"which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" }
}
35 changes: 35 additions & 0 deletions lua/custom/plugins/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Custom Plugins Setup

## ToggleTerm

Quick notes on the terminal experience provided by `lua/custom/plugins/toggleterm.lua`.

### Highlights
- Floating terminals sized responsively to the current UI (`<C-\>` or `<leader>tf`).
- Dedicated splits: `<leader>th` (horizontal) and `<leader>tv` (vertical).
- Terminal picker `<leader>tt` to switch between multiple terminals.
- Send code to the primary terminal with `<leader>ts` (line or visual selection).
- Terminal windows inherit familiar navigation (`<Esc>`, `jk`, `<C-hjkl>`) automatically.

### Tips
- Use counts (`2ToggleTerm`, `3ToggleTerm`) when you want to retarget a specific layout.
- `TermExec cmd="npm run test"` reuses the floating terminal without stealing focus.
- Update sizing or borders in `float_opts` if your display or font spacing demands it.

## LazyGit

Enhanced git interface using `lua/custom/plugins/lazygit.lua`.

### Highlights
- Fast, native lazygit integration with no keyboard shortcut conflicts
- Opens in a proper floating window (95% of screen size)
- Fully functional with all lazygit features and keybindings
- Use `<leader>gg` to open lazygit in current repo
- Use `<leader>gf` to open lazygit focused on current file history

### Why Not ToggleTerm?
LazyGit.nvim is used instead of toggleterm for lazygit because:
- Better performance (uses native terminal, not Neovim's terminal emulator)
- No keyboard shortcut conflicts (q, Esc, etc. work as expected)
- Designed specifically for lazygit integration
- Supports editing commit messages in Neovim
7 changes: 6 additions & 1 deletion lua/custom/plugins/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,9 @@
-- I promise not to create any merge conflicts in this directory :)
--
-- See the kickstart.nvim README for more information
return {}
local plugins = {}

vim.list_extend(plugins, require('custom.plugins.toggleterm'))
vim.list_extend(plugins, require('custom.plugins.lazygit'))

return plugins
26 changes: 26 additions & 0 deletions lua/custom/plugins/lazygit.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
-- LazyGit integration using dedicated plugin for better performance and keybind handling
return {
{
'kdheepak/lazygit.nvim',
cmd = {
'LazyGit',
'LazyGitConfig',
'LazyGitCurrentFile',
'LazyGitFilter',
'LazyGitFilterCurrentFile',
},
dependencies = {
'nvim-lua/plenary.nvim',
},
keys = {
{ '<leader>gg', '<cmd>LazyGit<cr>', desc = 'LazyGit' },
{ '<leader>gf', '<cmd>LazyGitCurrentFile<cr>', desc = 'LazyGit Current File' },
},
config = function()
vim.g.lazygit_floating_window_winblend = 0 -- transparency of floating window
vim.g.lazygit_floating_window_scaling_factor = 0.95 -- scaling factor for floating window
vim.g.lazygit_floating_window_border_chars = { '╭', '─', '╮', '│', '╯', '─', '╰', '│' } -- customize border
vim.g.lazygit_use_neovim_remote = 1 -- Use neovim remote for editing commit messages
end,
},
}
104 changes: 104 additions & 0 deletions lua/custom/plugins/toggleterm.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
local function clamp(value, min_value, max_value)
assert(min_value <= max_value, 'min_value must be <= max_value')
return math.max(min_value, math.min(value, max_value))
end

return {
{
'akinsho/toggleterm.nvim',
version = '*',
event = 'VeryLazy',
cmd = {
'ToggleTerm',
'ToggleTermToggleAll',
'TermExec',
'TermSelect',
'ToggleTermSendCurrentLine',
'ToggleTermSendVisualSelection',
},
opts = function()
return {
size = function(term)
if term.direction == 'horizontal' then
return clamp(math.floor(vim.o.lines * 0.28), 10, math.floor(vim.o.lines * 0.45))
elseif term.direction == 'vertical' then
return clamp(math.floor(vim.o.columns * 0.35), 40, math.floor(vim.o.columns * 0.6))
end
return 20
end,
open_mapping = { [[<C-\>]] },
shade_terminals = true,
shading_factor = -12,
start_in_insert = true,
insert_mappings = true,
terminal_mappings = true,
persist_size = true,
persist_mode = true,
direction = 'float',
close_on_exit = true,
auto_scroll = true,
float_opts = {
border = 'curved',
winblend = 0,
width = function()
return clamp(math.floor(vim.o.columns * 0.9), 80, vim.o.columns - 2)
end,
height = function()
return clamp(math.floor(vim.o.lines * 0.85), 20, vim.o.lines - 2)
end,
title_pos = 'center',
},
}
end,
config = function(_, opts)
local toggleterm = require('toggleterm')
toggleterm.setup(opts)

local TERM_FLOAT = 1
local TERM_HORIZONTAL = 2
local TERM_VERTICAL = 3

local function toggle_float()
toggleterm.toggle(TERM_FLOAT, nil, nil, 'float')
end

local function toggle_horizontal()
toggleterm.toggle(TERM_HORIZONTAL, nil, nil, 'horizontal')
end

local function toggle_vertical()
toggleterm.toggle(TERM_VERTICAL, nil, nil, 'vertical')
end

local map = vim.keymap.set

map({ 'n', 'i', 't' }, '<C-`>', toggle_float, { desc = 'Toggle floating terminal' })
map('n', '<leader>tf', toggle_float, { desc = '[T]erminal float' })
map('n', '<leader>th', toggle_horizontal, { desc = '[T]erminal horizontal' })
map('n', '<leader>tv', toggle_vertical, { desc = '[T]erminal vertical' })
map('n', '<leader>tt', '<cmd>TermSelect<CR>', { desc = '[T]erminal picker' })
map('n', '<leader>ts', function()
vim.cmd.ToggleTermSendCurrentLine(TERM_FLOAT)
end, { desc = '[T]erminal [s]end line' })

map('v', '<leader>ts', function()
vim.cmd.ToggleTermSendVisualSelection(TERM_FLOAT)
end, { desc = '[T]erminal [s]end selection' })

local term_augroup = vim.api.nvim_create_augroup('custom-toggleterm', { clear = true })
vim.api.nvim_create_autocmd('TermOpen', {
group = term_augroup,
pattern = 'term://*toggleterm#*',
callback = function()
local term_opts = { buffer = 0, silent = true }
vim.keymap.set('t', '<Esc>', [[<C-\><C-n>]], term_opts)
vim.keymap.set('t', 'jk', [[<C-\><C-n>]], term_opts)
vim.keymap.set('t', '<C-h>', [[<Cmd>wincmd h<CR>]], term_opts)
vim.keymap.set('t', '<C-j>', [[<Cmd>wincmd j<CR>]], term_opts)
vim.keymap.set('t', '<C-k>', [[<Cmd>wincmd k<CR>]], term_opts)
vim.keymap.set('t', '<C-l>', [[<Cmd>wincmd l<CR>]], term_opts)
end,
})
end,
},
}
Loading