Compare commits

..

60 Commits

Author SHA1 Message Date
95de6305b1 Neovim: Unsuccessful attempt to get focus to ignore snacks-explorer 2025-03-27 11:07:23 -07:00
42928d5278 Neovim: Formatting 2025-03-27 11:07:01 -07:00
3a00d05aca Neovim: Add tmux-navigator 2025-03-27 11:06:24 -07:00
04d819cfcf Neovim: Update plugins 2025-03-27 10:46:53 -07:00
fda45f7bfc Neovim: Add copilot chat 2025-02-25 11:26:38 -08:00
1253334a04 Neovim: Enable prettier only in repos with a prettier config 2025-02-25 11:26:29 -08:00
565a52b09d Git: Update config using recommended settings
Taken from https://blog.gitbutler.com/how-git-core-devs-configure-git/
2025-02-25 11:26:02 -08:00
75d3e2ea95 Neovim: Update plugins 2025-02-14 12:42:51 -08:00
db8c557fc4 Neovim: Add LazyVim with selected extras and minimal additional config 2025-02-14 12:42:51 -08:00
c38317bb26 Neovim: Remove Kickstart config 2025-02-14 12:42:51 -08:00
23b6233e72 Neovim: Add github copilot 2025-02-08 12:03:40 -08:00
b74afe39cd Neovim: Use jester for debugging Jest test 2025-02-08 12:03:13 -08:00
f891193f67 Neovim: Use better icons when debugging 2025-01-31 12:51:48 -08:00
765bc09de1 Neovim: Configure for Rust 2025-01-31 12:27:24 -08:00
374dc740e2 Neovim: Fix gitsigns after plugin update 2025-01-31 10:56:47 -08:00
cf23989901 Install: Add pnpm 2025-01-31 09:08:05 -08:00
a138bc0451 Bashrc: Source cargo env 2025-01-31 09:07:48 -08:00
052b2f991f Neovim: Update to latest kickstart.nvim
Updated to 5bdde24dfb353d365d908c5dd700f412ed2ffb17
5bdde24dfb
2025-01-31 09:07:26 -08:00
8d1acc7550 vs-code: Sync settings with vs-code 2024-11-22 11:56:48 -08:00
c49c50b6af Lazygit: Set edit actions to use vscode 2024-11-20 10:59:29 -08:00
9351c8137f Lazygit: Enable nerd fonts 2024-11-20 10:59:14 -08:00
8c4334b66d vs-code: Change typescript default formatter 2024-11-15 09:14:42 -08:00
38e098ac82 vs-code: Add shortcut for viewing problems 2024-11-15 09:13:45 -08:00
0fa11e05a5 vs-code: Add some hotkeys from vim 2024-11-14 22:44:04 -08:00
deacba1fe8 vs-code: Update tmux keybindings 2024-11-14 22:21:44 -08:00
6821c4db3f Tmux: Enable tmux-sensible 2024-11-14 17:01:28 -08:00
118bd28e2b Neovim: Add custom folding module 2024-11-14 17:01:16 -08:00
3fbc03a5ca Neovim: Add language server support for deno 2024-11-14 16:59:42 -08:00
d1eb398c2e Bashc: Add git completions 2024-11-14 16:58:47 -08:00
b7d285a2a9 vs-code: Sorting and grouping settings 2024-11-14 16:58:25 -08:00
0e23f5ba55 vs-code: Reorganize keybindings into groups 2024-11-14 16:52:52 -08:00
de29ee2bb2 vs-code: Merge keybindings from second profile 2024-11-14 16:46:28 -08:00
b3bdc1df02 vs-code: Merge settings from second profile 2024-11-14 16:46:28 -08:00
a674b35f1d vs-code: Settings from long ago 2024-11-14 16:46:28 -08:00
c1b75f4532 Install: Add deno 2024-10-17 12:02:16 -07:00
9b2268d4f8 Neovim: Set whichkey delay
Having a short timeoutlen was annoying with things like mini.surround
where I sometimes think about which key needs to be pressed next.
Instead, use the default timeoutlen, but shorten the amount of time
until which-key opens.
2024-10-04 13:16:18 -07:00
bbb0cb9c5b Neovim: Update to Kickstart at 4120893
Latest commit to Kickstart as of 2024-10-02.
2024-10-03 11:52:15 -07:00
519d42bbe7 Neovim: Add ai coding companion using remote ollama 2024-09-20 10:03:52 -07:00
6022c73977 Ble: Add config file 2024-07-26 08:35:58 -07:00
4c4b35e5d2 Neovim: Disable lsp inline virtual hints 2024-07-24 08:24:30 -07:00
0aa80f9874 Show function parameter hints while typing 2024-07-15 09:21:16 -07:00
7f685ff8da Neovim: Display tabs as two spaces 2024-07-15 09:21:16 -07:00
9a5e0a62aa Neovim: Enable debugging plugins 2024-07-13 18:21:32 -07:00
b04c3a756b Neovim: Setup sql completions 2024-07-13 18:21:18 -07:00
9727202801 Atuin: Add config 2024-07-13 13:13:58 -07:00
e0a07cdf70 Bashrc: Add ble.sh and Atuin 2024-07-13 12:59:38 -07:00
419dd60626 Install: Add linters to be installed 2024-07-13 12:58:23 -07:00
c514d41a94 Neovim: Add goto_preview plugin 2024-06-23 18:29:46 -07:00
cdd64b6cbb Neovim: Add ray-x/go plugin 2024-06-22 08:35:02 -07:00
74cc01e310 Neovim: Add oil plugin 2024-06-22 08:34:52 -07:00
c2b60ad356 Neovim: Fix focus plugin not loading 2024-06-14 15:19:28 -07:00
7b8ea9c3af Neovim: Allow moving cursor with arrow keys 2024-06-14 14:59:34 -07:00
f44336163f Neovim: Setup mini.splitjoin 2024-06-09 15:34:11 -07:00
4919a82354 Neovim: Search todo in current file 2024-06-09 14:20:07 -07:00
ade875c1f1 Update gitmux 2024-06-09 07:55:25 -07:00
5abd8ef2dc Neovim: Disable eslint linting
Eslint is still being run when formatting though.
2024-06-06 13:41:51 -07:00
822412e259 Install: Move devcontainer to be installed with npm
Having brew install node will conflict with the nvm installed version of
node. It can behave in weird ways, including having different versions
of node take priority whether in tmux or not.
2024-06-06 09:18:33 -07:00
ef64562fa9 Bashrc: Remove unused functions 2024-06-06 09:17:09 -07:00
17232fd215 Neovim: Remove trailing whitespace on save 2024-06-06 09:17:09 -07:00
2f346e9396 Install: Move most binary files to homebrew 2024-06-06 09:17:09 -07:00
46 changed files with 1072 additions and 1994 deletions

39
.bashrc
View File

@ -1,3 +1,10 @@
if [[ $- == *i* ]]; then # in interactive session
# ble.sh
# https://github.com/akinomyoga/ble.sh#13-set-up-bashrc
BLE="${HOME}/programs/ble.sh/out/ble.sh"
[[ -f ${BLE} ]] && source ${BLE} --noattach
fi
# Navigation
alias vim="nvim"
alias lg="lazygit"
@ -10,10 +17,6 @@ alias dedsstore="find . -name \".DS_Store\" -delete"
alias c="clear"
alias dps="docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'"
# Difftastic Config
export DFT_TAB_WIDTH=4
export DFT_BACKGROUND=light
# History
HISTSIZE=50000
HISTFILESIZE=50000
@ -25,6 +28,10 @@ if [ "$BASH" != "" ]; then
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
if [ -f /usr/share/bash-completion/completions/git ]; then
source /usr/share/bash-completion/completions/git
fi
fi
if [[ "${OSTYPE}" == "linux-gnu"* ]]; then
@ -64,7 +71,8 @@ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
export GPG_TTY=$(tty)
# Golang
export PATH=$PATH:/usr/local/go/bin:${HOME}/go/bin
# NOTE: Go is installed with Homebrew and automatically placed on the path
export PATH=$PATH:${HOME}/go/bin
export TERM="xterm-256color"
export EDITOR=$(which vim)
@ -77,8 +85,13 @@ if [[ -d ${HOME}/bin ]]; then
export PATH=$PATH:${HOME}/bin
fi
# Enable atuin
# https://docs.atuin.sh
eval "$(atuin init bash)"
# fzf
eval "$(fzf --bash)"
#eval "$(fzf --bash)"
export FZF_DEFAULT_OPTS=" \
--color=bg+:#ccd0da,bg:#eff1f5,spinner:#dc8a78,hl:#d20f39 \
@ -111,15 +124,6 @@ _git_top() {
fi
}
function up() {
num=1
if [ $# -gt 0 ]; then
num=$1
fi
cd $(printf '../%.0s' $(seq 1 $num))
}
# Add color shortcuts
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
c_reset=`tput sgr0`
@ -174,3 +178,8 @@ elif [ "$BASH" != "" ]; then
PS1="\n╔ \w\$(prev_status_prompt)\$(git_prompt) -- \$(date '+%y-%m-%dT%H:%M:%S')\n╚ \h\$ "
fi
# ble.sh
# https://github.com/akinomyoga/ble.sh#13-set-up-bashrc
[[ ${BLE_VERSION-} ]] && ble-attach
. "$HOME/.cargo/env"

8
.blerc Normal file
View File

@ -0,0 +1,8 @@
# blerc
# Cannot use ctrl+enter from inside tmux when using tmux-navigator because
# ctrl+enter and ctrl+j are the same key in the terminal. Bind sending
# multi-line commands to ctrl+m instead.
# https://github.com/microsoft/terminal/issues/6912
ble-bind -m vi_imap -f C-m accept-line

View File

@ -41,14 +41,21 @@
attributesfile = /home/tgrosinger/.gitattributes
excludesfile = /home/tgrosinger/.gitignore_global
[help]
autocorrect = prompt
[interactive]
diffFilter = delta --color-only
[push]
default = simple
autoSetupRemote = true
[diff]
colorMoved = default
algorithm = histogram
mnemonicPrefix = true
renames = true
[delta]
navigate = true
@ -59,6 +66,15 @@
[branch]
autosetuprebase = always
sort = -committerdate
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
[tag]
sort = version:refname
[pull]
rebase = true
@ -73,7 +89,7 @@
insteadOf = https://gitlab.i.extrahop.com/
[merge]
conflictstyle = diff3
conflictstyle = zdiff3
[init]
defaultBranch = main
defaultBranch = main

View File

@ -3,8 +3,11 @@ customCommands:
context: 'global'
command: 'git push --force-with-lease'
description: 'Force push with lease.'
os:
editPreset: "vscode"
gui:
timeFormat: '2006-01-02'
nerdFontsVersion: '3'
mouseEvents: false
theme:
activeBorderColor:

View File

@ -71,7 +71,7 @@ set -g @catppuccin_window_status_enable "no"
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
# set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'catppuccin/tmux'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)

13
atuin.toml Normal file
View File

@ -0,0 +1,13 @@
# https://docs.atuin.sh/configuration/config/
workspaces = true
keymap_mode = "auto"
enter_accept = true
history_filter = [
"^cd$",
"^lg$",
"^ls$",
"^clear$",
"^vim$",
]

View File

@ -1 +1 @@
gitmux_v0.10.4
gitmux_v0.11.2

View File

@ -1,279 +0,0 @@
1717557458.178399 client started (1726322): version 3.2a, socket /tmp/tmux-1000/default, protocol 8
1717557458.178416 on Linux 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024
1717557458.178418 using libevent 2.1.12-stable (poll); ncurses 6.3
1717557458.178424 flags are 0x10010000
1717557458.178426 socket is /tmp/tmux-1000/default
1717557458.178432 trying connect
1717557458.178472 add peer 0x56182b408210: 6 ((nil))
1717557458.178604 sending message 100 to peer 0x56182b408210 (4 bytes)
1717557458.178607 sending message 111 to peer 0x56182b408210 (8 bytes)
1717557458.178608 sending message 101 to peer 0x56182b408210 (15 bytes)
1717557458.178609 sending message 109 to peer 0x56182b408210 (4 bytes)
1717557458.178611 sending message 102 to peer 0x56182b408210 (11 bytes)
1717557458.178612 sending message 108 to peer 0x56182b408210 (37 bytes)
1717557458.178613 sending message 112 to peer 0x56182b408210 (58 bytes)
1717557458.178615 sending message 112 to peer 0x56182b408210 (5 bytes)
1717557458.178616 sending message 112 to peer 0x56182b408210 (5 bytes)
1717557458.178617 sending message 112 to peer 0x56182b408210 (6 bytes)
1717557458.178619 sending message 112 to peer 0x56182b408210 (6 bytes)
1717557458.178620 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178621 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178622 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178624 sending message 112 to peer 0x56182b408210 (14 bytes)
1717557458.178625 sending message 112 to peer 0x56182b408210 (19 bytes)
1717557458.178626 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178627 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178628 sending message 112 to peer 0x56182b408210 (15 bytes)
1717557458.178630 sending message 112 to peer 0x56182b408210 (21 bytes)
1717557458.178631 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178632 sending message 112 to peer 0x56182b408210 (7 bytes)
1717557458.178634 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178635 sending message 112 to peer 0x56182b408210 (7 bytes)
1717557458.178636 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178638 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178639 sending message 112 to peer 0x56182b408210 (21 bytes)
1717557458.178640 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178641 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178643 sending message 112 to peer 0x56182b408210 (16 bytes)
1717557458.178644 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178645 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178647 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178648 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178649 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178650 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178652 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178653 sending message 112 to peer 0x56182b408210 (7 bytes)
1717557458.178654 sending message 112 to peer 0x56182b408210 (7 bytes)
1717557458.178655 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178657 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178658 sending message 112 to peer 0x56182b408210 (15 bytes)
1717557458.178659 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178660 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178662 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178663 sending message 112 to peer 0x56182b408210 (14 bytes)
1717557458.178664 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178666 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178667 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178668 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178670 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178671 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178675 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178677 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178678 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178679 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178680 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178682 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178683 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178684 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178685 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178687 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178688 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178689 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178690 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178692 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178693 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178694 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178695 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178697 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178698 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178699 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178700 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178702 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178703 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178704 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178705 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178707 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178708 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178709 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178710 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178712 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178713 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178714 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178715 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178717 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178718 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178719 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178720 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178722 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178723 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178724 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178725 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178727 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178728 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178729 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178730 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178732 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178733 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178734 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178735 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178737 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178738 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178739 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178740 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178742 sending message 112 to peer 0x56182b408210 (8 bytes)
1717557458.178743 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178744 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178745 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178749 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178750 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178751 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178752 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178754 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178755 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178756 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178757 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178758 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178760 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178761 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178762 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178763 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178765 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178766 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178767 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178768 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178770 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178771 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178772 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178773 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178774 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178776 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178777 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178778 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178779 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178781 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178782 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178783 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178784 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178786 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178787 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178788 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178789 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178790 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178792 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178793 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178794 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178795 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178797 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178798 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178799 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178800 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178802 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178803 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178804 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178805 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178807 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178808 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178809 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178810 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178812 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178813 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178814 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178815 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178817 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178819 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178820 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178822 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178823 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178824 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178825 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178827 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178828 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178829 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178830 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178831 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178832 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178834 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178835 sending message 112 to peer 0x56182b408210 (11 bytes)
1717557458.178836 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178837 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178839 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178840 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178842 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178843 sending message 112 to peer 0x56182b408210 (21 bytes)
1717557458.178844 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178845 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178846 sending message 112 to peer 0x56182b408210 (6 bytes)
1717557458.178848 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178849 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178850 sending message 112 to peer 0x56182b408210 (24 bytes)
1717557458.178851 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178852 sending message 112 to peer 0x56182b408210 (9 bytes)
1717557458.178854 sending message 112 to peer 0x56182b408210 (70 bytes)
1717557458.178855 sending message 112 to peer 0x56182b408210 (69 bytes)
1717557458.178856 sending message 112 to peer 0x56182b408210 (12 bytes)
1717557458.178857 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178859 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178860 sending message 112 to peer 0x56182b408210 (24 bytes)
1717557458.178861 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178863 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178864 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178865 sending message 112 to peer 0x56182b408210 (10 bytes)
1717557458.178866 sending message 112 to peer 0x56182b408210 (13 bytes)
1717557458.178867 sending message 112 to peer 0x56182b408210 (15 bytes)
1717557458.178868 sending message 112 to peer 0x56182b408210 (5 bytes)
1717557458.178870 sending message 104 to peer 0x56182b408210 (0 bytes)
1717557458.178872 sending message 110 to peer 0x56182b408210 (0 bytes)
1717557458.178873 sending message 107 to peer 0x56182b408210 (4 bytes)
1717557458.178874 sending message 105 to peer 0x56182b408210 (16 bytes)
1717557458.178875 sending message 105 to peer 0x56182b408210 (20 bytes)
1717557458.178876 sending message 105 to peer 0x56182b408210 (66 bytes)
1717557458.178878 sending message 105 to peer 0x56182b408210 (24 bytes)
1717557458.178880 sending message 105 to peer 0x56182b408210 (26 bytes)
1717557458.178881 sending message 105 to peer 0x56182b408210 (23 bytes)
1717557458.178882 sending message 105 to peer 0x56182b408210 (38 bytes)
1717557458.178883 sending message 105 to peer 0x56182b408210 (48 bytes)
1717557458.178885 sending message 105 to peer 0x56182b408210 (46 bytes)
1717557458.178886 sending message 105 to peer 0x56182b408210 (19 bytes)
1717557458.178887 sending message 105 to peer 0x56182b408210 (57 bytes)
1717557458.178888 sending message 105 to peer 0x56182b408210 (43 bytes)
1717557458.178889 sending message 105 to peer 0x56182b408210 (18 bytes)
1717557458.178892 sending message 105 to peer 0x56182b408210 (19 bytes)
1717557458.178893 sending message 105 to peer 0x56182b408210 (20 bytes)
1717557458.178894 sending message 105 to peer 0x56182b408210 (115 bytes)
1717557458.178895 sending message 105 to peer 0x56182b408210 (21 bytes)
1717557458.178897 sending message 105 to peer 0x56182b408210 (41 bytes)
1717557458.178898 sending message 105 to peer 0x56182b408210 (19 bytes)
1717557458.178899 sending message 105 to peer 0x56182b408210 (139 bytes)
1717557458.178901 sending message 105 to peer 0x56182b408210 (22 bytes)
1717557458.178902 sending message 105 to peer 0x56182b408210 (13 bytes)
1717557458.178903 sending message 105 to peer 0x56182b408210 (37 bytes)
1717557458.178905 sending message 105 to peer 0x56182b408210 (26 bytes)
1717557458.178906 sending message 105 to peer 0x56182b408210 (86 bytes)
1717557458.178907 sending message 105 to peer 0x56182b408210 (30 bytes)
1717557458.178908 sending message 105 to peer 0x56182b408210 (20 bytes)
1717557458.178910 sending message 105 to peer 0x56182b408210 (33 bytes)
1717557458.178911 sending message 105 to peer 0x56182b408210 (16 bytes)
1717557458.178912 sending message 105 to peer 0x56182b408210 (13 bytes)
1717557458.178913 sending message 105 to peer 0x56182b408210 (50 bytes)
1717557458.178914 sending message 105 to peer 0x56182b408210 (11 bytes)
1717557458.178916 sending message 105 to peer 0x56182b408210 (8 bytes)
1717557458.178917 sending message 105 to peer 0x56182b408210 (14 bytes)
1717557458.178918 sending message 105 to peer 0x56182b408210 (56 bytes)
1717557458.178920 sending message 105 to peer 0x56182b408210 (32 bytes)
1717557458.178921 sending message 105 to peer 0x56182b408210 (33 bytes)
1717557458.178923 sending message 105 to peer 0x56182b408210 (65 bytes)
1717557458.178924 sending message 105 to peer 0x56182b408210 (1511 bytes)
1717557458.178931 sending message 105 to peer 0x56182b408210 (54 bytes)
1717557458.178933 sending message 105 to peer 0x56182b408210 (201 bytes)
1717557458.178934 sending message 105 to peer 0x56182b408210 (57 bytes)
1717557458.178935 sending message 105 to peer 0x56182b408210 (16 bytes)
1717557458.178937 sending message 105 to peer 0x56182b408210 (40 bytes)
1717557458.178938 sending message 105 to peer 0x56182b408210 (53 bytes)
1717557458.178939 sending message 105 to peer 0x56182b408210 (16 bytes)
1717557458.178940 sending message 105 to peer 0x56182b408210 (21 bytes)
1717557458.178942 sending message 105 to peer 0x56182b408210 (18 bytes)
1717557458.178943 sending message 105 to peer 0x56182b408210 (16 bytes)
1717557458.178944 sending message 105 to peer 0x56182b408210 (34 bytes)
1717557458.178945 sending message 106 to peer 0x56182b408210 (0 bytes)
1717557458.178948 sending message 200 to peer 0x56182b408210 (4 bytes)
1717557458.178949 client loop enter
1717557458.179345 peer 0x56182b408210 message 303
1717557458.179350 open write file 2 -
1717557458.179354 sending message 305 to peer 0x56182b408210 (8 bytes)
1717557458.179358 write check file 2
1717557458.179459 peer 0x56182b408210 message 304
1717557458.179463 write 58 to file 2
1717557458.179465 peer 0x56182b408210 message 203
1717557458.179467 file 2 58 bytes left
1717557458.179485 write check file 2
1717557458.179489 client loop exit

View File

@ -62,6 +62,13 @@ function performSetup() {
mkdir -p ~/.config/lazygit
ln -fns ${DOTFILES_DIR}/.lazygit ~/.config/lazygit/config.yml
echo "Linking Atuin..."
mkdir -p ~/.config/atuin
ln -fns ${DOTFILES_DIR}/atuin.toml ~/.config/atuin/config.toml
echo "Linking Ble.sh..."
linkFile ".blerc"
echo "Linking tmux..."
linkFile ".tmux.conf"
@ -86,14 +93,23 @@ function performSetup() {
sudo apt install build-essential visidata
fi
# NOTE: Do not brew install anything with a dependency on node.
# Instead, install with npm -g.
brew install \
gcc \
tmux neovim \
eza bat fzf ripgrep fd jq gron \
hadolint \
git lazygit git-delta \
crane dive \
go sqlite \
stripe-cli restic
stripe-cli restic \
deno pnpm
npm install -g @devcontainers/cli
npm install -g mjml
npm install -g jsonlint
popd > /dev/null
}

15
nvim/.gitignore vendored
View File

@ -1,7 +1,8 @@
tags
test.sh
.luarc.json
nvim
spell/
lazy-lock.json
tt.*
.tests
doc/tags
debug
.repro
foo.*
*.log
data

15
nvim/.neoconf.json Normal file
View File

@ -0,0 +1,15 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
}
}

View File

@ -1,6 +0,0 @@
column_width = 160
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferSingle"
call_parentheses = "None"

View File

@ -1,21 +0,0 @@
https://github.com/nvim-lua/kickstart.nvim
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,229 +0,0 @@
# kickstart.nvim
## Introduction
A starting point for Neovim that is:
* Small
* Single-file
* Completely Documented
**NOT** a Neovim distribution, but instead a starting point for your configuration.
## Installation
### Install Neovim
Kickstart.nvim targets *only* the latest
['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest
['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim.
If you are experiencing issues, please make sure you have the latest versions.
### Install External Dependencies
External Requirements:
- Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`)
- [ripgrep](https://github.com/BurntSushi/ripgrep#installation)
- Clipboard tool (xclip/xsel/win32yank or other depending on platform)
- A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons
- if you have it set `vim.g.have_nerd_font` in `init.lua` to true
- Language Setup:
- If want to write Typescript, you need `npm`
- If want to write Golang, you will need `go`
- etc.
> **NOTE**
> See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes
> and quick install snippets
### Install Kickstart
> **NOTE**
> [Backup](#FAQ) your previous configuration (if any exists)
Neovim's configurations are located under the following paths, depending on your OS:
| OS | PATH |
| :- | :--- |
| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
| Windows (cmd)| `%userprofile%\AppData\Local\nvim\` |
| Windows (powershell)| `$env:USERPROFILE\AppData\Local\nvim\` |
#### Recommended Step
[Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo
so that you have your own copy that you can modify, then install by cloning the
fork to your machine using one of the commands below, depending on your OS.
> **NOTE**
> Your fork's url will be something like this:
> `https://github.com/<your_github_username>/kickstart.nvim.git`
#### Clone kickstart.nvim
> **NOTE**
> If following the recommended step above (i.e., forking the repo), replace
> `nvim-lua` with `<your_github_username>` in the commands below
<details><summary> Linux and Mac </summary>
```sh
git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
```
</details>
<details><summary> Windows </summary>
If you're using `cmd.exe`:
```
git clone https://github.com/nvim-lua/kickstart.nvim.git %userprofile%\AppData\Local\nvim\
```
If you're using `powershell.exe`
```
git clone https://github.com/nvim-lua/kickstart.nvim.git $env:USERPROFILE\AppData\Local\nvim\
```
</details>
### Post Installation
Start Neovim
```sh
nvim
```
That's it! Lazy will install all the plugins you have. Use `:Lazy` to view
current plugin status. Hit `q` to close the window.
Read through the `init.lua` file in your configuration folder for more
information about extending and exploring Neovim. That also includes
examples of adding popularly requested plugins.
### Getting Started
[The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o)
### FAQ
* What should I do if I already have a pre-existing neovim configuration?
* You should back it up and then delete all associated files.
* This includes your existing init.lua and the neovim files in `~/.local`
which can be deleted with `rm -rf ~/.local/share/nvim/`
* Can I keep my existing configuration in parallel to kickstart?
* Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
to maintain multiple configurations. For example, you can install the kickstart
configuration in `~/.config/nvim-kickstart` and create an alias:
```
alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim'
```
When you run Neovim using `nvim-kickstart` alias it will use the alternative
config directory and the matching local directory
`~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim
distribution that you would like to try out.
* What if I want to "uninstall" this configuration:
* See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information
* Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
* The main purpose of kickstart is to serve as a teaching tool and a reference
configuration that someone can easily use to `git clone` as a basis for their own.
As you progress in learning Neovim and Lua, you might consider splitting `init.lua`
into smaller parts. A fork of kickstart that does this while maintaining the
same functionality is available here:
* [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
* Discussions on this topic can be found here:
* [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
* [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
### Install Recipes
Below you can find OS specific install instructions for Neovim and dependencies.
After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step.
#### Windows Installation
<details><summary>Windows with Microsoft C++ Build Tools and CMake</summary>
Installation may require installing build tools and updating the run command for `telescope-fzf-native`
See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation)
This requires:
- Install CMake and the Microsoft C++ Build Tools on Windows
```lua
{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
```
</details>
<details><summary>Windows with gcc/make using chocolatey</summary>
Alternatively, one can install gcc and make which don't require changing the config,
the easiest way is to use choco:
1. install [chocolatey](https://chocolatey.org/install)
either follow the instructions on the page or use winget,
run in cmd as **admin**:
```
winget install --accept-source-agreements chocolatey.chocolatey
```
2. install all requirements using choco, exit previous cmd and
open a new one so that choco path is set, and run in cmd as **admin**:
```
choco install -y neovim git ripgrep wget fd unzip gzip mingw make
```
</details>
<details><summary>WSL (Windows Subsystem for Linux)</summary>
```
wsl --install
wsl
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
```
</details>
#### Linux Install
<details><summary>Ubuntu Install Steps</summary>
```
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
```
</details>
<details><summary>Debian Install Steps</summary>
```
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip curl
# Now we install nvim
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
sudo rm -rf /opt/nvim-linux64
sudo mkdir -p /opt/nvim-linux64
sudo chmod a+rX /opt/nvim-linux64
sudo tar -C /opt -xzf nvim-linux64.tar.gz
# make it available in /usr/local/bin, distro installs to /usr/bin
sudo ln -sf /opt/nvim-linux64/bin/nvim /usr/local/bin/
```
</details>
<details><summary>Fedora Install Steps</summary>
```
sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
```
</details>
<details><summary>Arch Install Steps</summary>
```
sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
```
</details>

View File

@ -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:

View File

@ -1,897 +1,2 @@
--[[
What is Kickstart?
Kickstart.nvim is *not* a distribution.
Kickstart.nvim is a starting point for your own configuration.
The goal is that you can read every line of code, top-to-bottom, understand
what your configuration is doing, and modify it to suit your needs.
Once you've done that, you can start exploring, configuring and tinkering to
make Neovim your own! That might mean leaving Kickstart just the way it is for a while
or immediately breaking it into modular pieces. It's up to you!
If you don't know anything about Lua, I recommend taking some time to read through
a guide. One possible example which will only take 10-15 minutes:
- https://learnxinyminutes.com/docs/lua/
After understanding a bit more about Lua, you can use `:help lua-guide` as a
reference for how Neovim integrates Lua.
- :help lua-guide
- (or HTML version): https://neovim.io/doc/user/lua-guide.html
Kickstart Guide:
First, run AND READ `:help`.
This will open up a help window with some basic information
about reading, navigating and searching the builtin help documentation.
This should be the first place you go to look when you're stuck or confused
with something. It's one of my favorite Neovim features.
MOST IMPORTANTLY, we provide a keymap "<space>sh" to [s]earch the [h]elp documentation,
which is very useful when you're not exactly sure of what you're looking for.
I have left several `:help X` comments throughout the init.lua
These are hints about where to find more information about the relevant settings,
plugins or Neovim features used in Kickstart.
If you experience any errors while trying to install kickstart, run `:checkhealth` for more info.
--]]
-- Set <space> 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 = ' '
-- Set to true if you have a Nerd Font installed and selected in the terminal
vim.g.have_nerd_font = true
-- [[ Setting options ]]
-- See `:help vim.opt`
-- NOTE: You can change these options as you wish!
-- For more options, you can see `:help option-list`
-- Make line numbers default
vim.opt.number = true
-- You can also add relative line numbers, to help with jumping.
-- Experiment for yourself to see if you like it!
vim.opt.relativenumber = true
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt.mouse = 'a'
-- Don't show the mode, since it's already in the status line
vim.opt.showmode = false
-- Sync clipboard between OS and Neovim.
-- Remove this option if you want your OS clipboard to remain independent.
-- See `:help 'clipboard'`
vim.opt.clipboard = 'unnamedplus'
-- Enable break indent
vim.opt.breakindent = true
-- Save undo history
vim.opt.undofile = true
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
vim.opt.ignorecase = true
vim.opt.smartcase = true
-- Keep signcolumn on by default
vim.opt.signcolumn = 'yes'
-- Decrease update time
vim.opt.updatetime = 250
-- Decrease mapped sequence wait time
-- Displays which-key popup sooner
vim.opt.timeoutlen = 300
-- Configure how new splits should be opened
vim.opt.splitright = true
vim.opt.splitbelow = true
-- Sets how neovim will display certain whitespace characters in the editor.
-- See `:help 'list'`
-- and `:help 'listchars'`
vim.opt.list = true
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '' }
-- Preview substitutions live, as you type!
vim.opt.inccommand = 'split'
-- Show which line your cursor is on
vim.opt.cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt.scrolloff = 10
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
-- Set highlight on search, but clear on pressing <Esc> in normal mode
vim.opt.hlsearch = true
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
-- Diagnostic keymaps
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous [D]iagnostic message' })
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next [D]iagnostic message' })
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' })
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
-- is not what someone will guess without a bit more experience.
--
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
-- or just use <C-\><C-n> to exit terminal mode
vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
-- TIP: Disable arrow keys in normal mode
vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
-- Keybinds to make split navigation easier.
-- Use CTRL+<hjkl> to switch between windows
--
-- See `:help wincmd` for a list of all window commands
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
-- [[ Utility functions ]]
-- Retreive selected text from the editor.
function vim.getVisualSelection()
vim.cmd 'noau normal! "vy"'
local text = vim.fn.getreg 'v'
vim.fn.setreg('v', {})
text = string.gsub(text, '\n', '')
if #text > 0 then
return text
else
return ''
end
end
-- [[ Basic Autocommands ]]
-- See `:help lua-guide-autocommands`
-- Highlight when yanking (copying) text
-- Try it with `yap` in normal mode
-- See `:help vim.highlight.on_yank()`
vim.api.nvim_create_autocmd('TextYankPost', {
desc = 'Highlight when yanking (copying) text',
group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
callback = function()
vim.highlight.on_yank()
end,
})
-- Trim trailing whitespace on save.
vim.api.nvim_create_autocmd({ 'BufWritePre' }, {
pattern = { '*' },
command = [[%s/\s\+$//e]],
})
-- [[ Install `lazy.nvim` plugin manager ]]
-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath }
end ---@diagnostic disable-next-line: undefined-field
vim.opt.rtp:prepend(lazypath)
-- [[ Configure and install plugins ]]
--
-- To check the current status of your plugins, run
-- :Lazy
--
-- You can press `?` in this menu for help. Use `:q` to close the window
--
-- To update plugins you can run
-- :Lazy update
--
-- NOTE: Here is where you install your plugins.
require('lazy').setup({
'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically
-- Use `opts = {}` to force a plugin to be loaded.
--
-- This is equivalent to:
-- require('Comment').setup({})
-- "gc" to comment visual regions/lines
{ 'numToStr/Comment.nvim', opts = {} },
-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
--
-- This is often very useful to both group configuration, as well as handle
-- lazy loading plugins that don't need to be loaded immediately at startup.
--
-- For example, in the following configuration, we use:
-- event = 'VimEnter'
--
-- which loads which-key before all the UI elements are loaded. Events can be
-- normal autocommands events (`:help autocmd-events`).
--
-- Then, because we use the `config` key, the configuration only runs
-- after the plugin has been loaded:
-- config = function() ... end
{ -- Useful plugin to show you pending keybinds.
'folke/which-key.nvim',
event = 'VimEnter', -- Sets the loading event to 'VimEnter'
config = function() -- This is the function that runs, AFTER loading
require('which-key').setup()
-- Document existing key chains
require('which-key').register {
['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' },
['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' },
['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' },
['<leader>s'] = { name = '[S]earch', _ = 'which_key_ignore' },
['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' },
['<leader>t'] = { name = '[T]oggle', _ = 'which_key_ignore' },
['<leader>h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' },
['<leader>x'] = { name = 'Trouble [X]', _ = 'which_key_ignore' },
}
-- visual mode
require('which-key').register({
['<leader>h'] = { 'Git [H]unk' },
}, { mode = 'v' })
end,
},
{ -- Fuzzy Finder (files, lsp, etc)
'nvim-telescope/telescope.nvim',
event = 'VimEnter',
branch = '0.1.x',
dependencies = {
'nvim-lua/plenary.nvim',
{ -- If encountering errors, see telescope-fzf-native README for installation instructions
'nvim-telescope/telescope-fzf-native.nvim',
-- `build` is used to run some command when the plugin is installed/updated.
-- This is only run then, not every time Neovim starts up.
build = 'make',
-- `cond` is a condition used to determine whether this plugin should be
-- installed and loaded.
cond = function()
return vim.fn.executable 'make' == 1
end,
},
{ '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 },
},
config = function()
-- Telescope is a fuzzy finder that comes with a lot of different things that
-- it can fuzzy find! It's more than just a "file finder", it can search
-- many different aspects of Neovim, your workspace, LSP, and more!
--
-- The easiest way to use Telescope, is to start by doing something like:
-- :Telescope help_tags
--
-- After running this command, a window will open up and you're able to
-- type in the prompt window. You'll see a list of `help_tags` options and
-- a corresponding preview of the help.
--
-- Two important keymaps to use while in Telescope are:
-- - Insert mode: <c-/>
-- - Normal mode: ?
--
-- This opens a window that shows you all of the keymaps for the current
-- Telescope picker. This is really useful to discover what Telescope can
-- do as well as how to actually do it!
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
require('telescope').setup {
-- You can put your default mappings / updates / etc. in here
-- All the info you're looking for is in `:help telescope.setup()`
--
defaults = {
mappings = {
n = {
-- Add action to delete a buffer from the Telescope list
['<c-d>'] = require('telescope.actions').delete_buffer,
},
i = {
-- ['<c-enter>'] = 'to_fuzzy_refine',
-- Add action to delete a buffer from the Telescope list
['<c-d>'] = require('telescope.actions').delete_buffer,
},
},
},
-- pickers = {}
extensions = {
['ui-select'] = {
require('telescope.themes').get_dropdown(),
},
},
}
-- Enable Telescope extensions if they are installed
pcall(require('telescope').load_extension, 'fzf')
pcall(require('telescope').load_extension, 'ui-select')
-- See `:help telescope.builtin`
local builtin = require 'telescope.builtin'
vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' })
vim.keymap.set('n', '<leader>ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
vim.keymap.set('n', '<leader>sw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
vim.keymap.set('n', '<leader>sg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' })
-- vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
vim.keymap.set('n', '<leader>s.', function()
builtin.oldfiles {
cwd_only = true,
}
end, { desc = '[S]earch Recent Files in CWD' })
vim.keymap.set('v', '<leader>g', function()
builtin.grep_string {
search = vim.getVisualSelection(),
prompt_title = 'Grep all files',
}
end, { desc = '[G]rep everywhere' })
-- Slightly advanced example of overriding default behavior and theme
vim.keymap.set('n', '<leader>/', 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' })
-- It's also possible to pass additional configuration options.
-- See `:help telescope.builtin.live_grep()` for information about particular keys
vim.keymap.set('n', '<leader>s/', function()
builtin.live_grep {
grep_open_files = true,
prompt_title = 'Live Grep in Open Files',
}
end, { desc = '[S]earch [/] in Open Files' })
-- Shortcut for searching your Neovim configuration files
vim.keymap.set('n', '<leader>sn', function()
builtin.find_files { cwd = vim.fn.stdpath 'config' }
end, { desc = '[S]earch [N]eovim files' })
end,
},
{ -- LSP Configuration & Plugins
'neovim/nvim-lspconfig',
dependencies = {
-- Automatically install LSPs and related tools to stdpath for Neovim
{ 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
'williamboman/mason-lspconfig.nvim',
'WhoIsSethDaniel/mason-tool-installer.nvim',
-- Useful status updates for LSP.
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ 'j-hui/fidget.nvim', opts = {} },
-- `neodev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
{ 'folke/neodev.nvim', opts = {} },
},
config = function()
-- LSP provides Neovim with features like:
-- - Go to definition
-- - Find references
-- - Autocompletion
-- - Symbol Search
-- - and more!
--
-- Thus, Language Servers are external tools that must be installed separately from
-- Neovim. This is where `mason` and related plugins come into play.
--
-- If you're wondering about lsp vs treesitter, you can check out the wonderfully
-- and elegantly composed help section, `:help lsp-vs-treesitter`
-- This function gets run when an LSP attaches to a particular buffer.
-- That is to say, every time a new file is opened that is associated with
-- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
-- function will be executed to configure the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
callback = function(event)
-- Create a function that lets us more easily define mappings specific
-- for LSP related items. It sets the mode, buffer and description for us each time.
local map = function(keys, func, desc)
vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
end
-- Jump to the definition of the word under your cursor.
-- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-t>.
map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
-- Find references for the word under your cursor.
map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
-- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation.
map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
-- Jump to the type of the word under your cursor.
-- Useful when you're not sure what type a variable is and you want to see
-- the definition of its *type*, not where it was *defined*.
map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
-- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc.
map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
-- Fuzzy find all the symbols in your current workspace.
-- Similar to document symbols, except searches over your entire project.
map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- Rename the variable under your cursor.
-- Most Language Servers support renaming across files, etc.
map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
-- Execute a code action, usually your cursor needs to be on top of an error
-- or a suggestion from your LSP for this to activate.
map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
-- Opens a popup that displays documentation about the word under your cursor
-- See `:help K` for why this keymap.
map('K', vim.lsp.buf.hover, 'Hover Documentation')
-- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header.
map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
-- The following two autocommands are used to highlight references of the
-- word under your cursor when your cursor rests there for a little while.
-- See `:help CursorHold` for information about when this is executed
--
-- When you move your cursor, the highlights will be cleared (the second autocommand).
local client = vim.lsp.get_client_by_id(event.data.client_id)
if client and client.server_capabilities.documentHighlightProvider then
local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.clear_references,
})
vim.api.nvim_create_autocmd('LspDetach', {
group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
callback = function(event2)
vim.lsp.buf.clear_references()
vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
end,
})
end
-- The following autocommand is used to enable inlay hints in your
-- code, if the language server you are using supports them
--
-- This may be unwanted, since they displace some of your code
if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then
map('<leader>th', function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
end, '[T]oggle Inlay [H]ints')
end
end,
})
-- LSP servers and clients are able to communicate to each other what features they support.
-- By default, Neovim doesn't support everything that is in the LSP specification.
-- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
--
-- Add any additional override configuration in the following tables. Available keys are:
-- - cmd (table): Override the default command used to start the server
-- - filetypes (table): Override the default list of associated filetypes for the server
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
-- - settings (table): Override the default settings passed when initializing the server.
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
--
-- See `:help lspconfig-all` for a list of all the pre-configured LSPs
local servers = {
gopls = {
gofumpt = true,
},
html = {},
templ = {},
-- Some languages (like typescript) have entire language plugins that can be useful:
-- https://github.com/pmizio/typescript-tools.nvim
--
-- But for many setups, the LSP (`tsserver`) will work just fine
tsserver = {},
eslint_d = {},
tailwindcss = {},
lua_ls = {
settings = {
Lua = {
completion = {
callSnippet = 'Replace',
},
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
-- diagnostics = { disable = { 'missing-fields' } },
telemetry = {
enable = false,
},
},
},
},
}
-- Ensure the servers and tools above are installed
-- To check the current status of installed tools and/or manually install
-- other tools, you can run
-- :Mason
--
-- You can press `g?` for help in this menu.
require('mason').setup()
-- You can add other tools here that you want Mason to install
-- for you, so that they are available from within Neovim.
local ensure_installed = vim.tbl_keys(servers or {})
vim.list_extend(ensure_installed, {
'stylua', -- Used to format Lua code
'goimports', -- Used to format Go code
'gofumpt', -- Used to format Go code
})
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
require('mason-lspconfig').setup {
handlers = {
function(server_name)
local server = servers[server_name] or {}
-- This handles overriding only values explicitly passed
-- by the server configuration above. Useful when disabling
-- certain features of an LSP (for example, turning off formatting for tsserver)
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
require('lspconfig')[server_name].setup(server)
end,
},
}
end,
},
{ -- Autoformat
'stevearc/conform.nvim',
lazy = false,
keys = {
{
'<leader>f',
function()
require('conform').format { async = true, lsp_fallback = true }
end,
mode = '',
desc = '[F]ormat buffer',
},
},
opts = {
notify_on_error = false,
format_on_save = function(bufnr)
-- Disable "format_on_save lsp_fallback" for languages that don't
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
return {
timeout_ms = 500,
lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
}
end,
formatters_by_ft = {
go = { 'goimports', 'gofumpt' },
lua = { 'stylua' },
templ = { 'templ' },
typescript = { 'eslint_d' },
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use a sub-list to tell conform to run *until* a formatter
-- is found.
-- javascript = { { "prettierd", "prettier" } },
},
},
},
{ -- Autocompletion
'hrsh7th/nvim-cmp',
event = 'InsertEnter',
dependencies = {
-- Snippet Engine & its associated nvim-cmp source
{
'L3MON4D3/LuaSnip',
build = (function()
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
return
end
return 'make install_jsregexp'
end)(),
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
{
'rafamadriz/friendly-snippets',
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
end,
},
},
},
'saadparwaiz1/cmp_luasnip',
-- Adds other completion capabilities.
-- nvim-cmp does not ship with all sources by default. They are split
-- into multiple repos for maintenance purposes.
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-path',
},
config = function()
-- See `:help cmp`
local cmp = require 'cmp'
local luasnip = require 'luasnip'
luasnip.config.setup {}
cmp.setup {
window = {
-- Optionally add a border to the completions windows.
-- Does not affect the <shift>-k window.
-- completion = cmp.config.window.bordered(),
-- documentation = cmp.config.window.bordered(),
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
completion = { completeopt = 'menu,menuone,noinsert' },
-- For an understanding of why these mappings were
-- chosen, you will need to read `:help ins-completion`
--
-- No, but seriously. Please read `:help ins-completion`, it is really good!
mapping = cmp.mapping.preset.insert {
-- Select the [n]ext item
['<C-n>'] = cmp.mapping.select_next_item(),
-- Select the [p]revious item
['<C-p>'] = cmp.mapping.select_prev_item(),
-- Scroll the documentation window [b]ack / [f]orward
['<C-b>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
-- Accept ([y]es) the completion.
-- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet.
['<C-y>'] = cmp.mapping.confirm { select = true },
-- If you prefer more traditional completion keymaps,
-- you can uncomment the following lines
--['<CR>'] = cmp.mapping.confirm { select = true },
--['<Tab>'] = cmp.mapping.select_next_item(),
--['<S-Tab>'] = cmp.mapping.select_prev_item(),
-- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available.
['<C-Space>'] = cmp.mapping.complete {},
-- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like:
-- function $name($args)
-- $body
-- end
--
-- <c-l> will move you to the right of each of the expansion locations.
-- <c-h> is similar, except moving you backwards.
['<C-l>'] = cmp.mapping(function()
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end
end, { 'i', 's' }),
['<C-h>'] = cmp.mapping(function()
if luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
end
end, { 'i', 's' }),
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'path' },
},
}
end,
},
{
-- Set the colorscheme.
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
'catppuccin/nvim',
name = 'catppuccin',
priority = 1000, -- Make sure to load this before all the other start plugins.
opts = {
flavour = 'latte',
integrations = {
cmp = true,
dap = true,
diffview = true,
gitsigns = true,
mason = true,
native_lsp = {
enabled = true,
virtual_text = {
errors = { 'italic' },
hints = { 'italic' },
warnings = { 'italic' },
information = { 'italic' },
ok = { 'italic' },
},
underlines = {
errors = { 'underline' },
hints = { 'underline' },
warnings = { 'underline' },
information = { 'underline' },
ok = { 'underline' },
},
inlay_hints = {
background = true,
},
},
telescope = true,
which_key = true,
},
custom_highlights = function(C)
return {
WinSeparator = { fg = C.pink },
NormalFloat = { bg = C.crust },
Pmenu = { bg = C.crust },
PmenuSel = { fg = C.text, bg = C.surface0, style = { 'bold' } },
}
end,
},
init = function()
vim.cmd.colorscheme 'catppuccin'
end,
},
{ -- Collection of various small independent plugins/modules
'echasnovski/mini.nvim',
config = function()
-- Better Around/Inside textobjects
--
-- Examples:
-- - va) - [V]isually select [A]round [)]paren
-- - yinq - [Y]ank [I]nside [N]ext [']quote
-- - ci' - [C]hange [I]nside [']quote
require('mini.ai').setup { n_lines = 500 }
-- Add/delete/replace surroundings (brackets, quotes, etc.)
--
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
-- - sd' - [S]urround [D]elete [']quotes
-- - sr)' - [S]urround [R]eplace [)] [']
require('mini.surround').setup()
-- Startup dashboard
require('mini.starter').setup {
footer = '',
}
-- ... and there is more!
-- Check out: https://github.com/echasnovski/mini.nvim
end,
},
{ -- Highlight, edit, and navigate code
'nvim-treesitter/nvim-treesitter',
build = ':TSUpdate',
opts = {
ensure_installed = { 'bash', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc', 'sql', 'go', 'templ', 'typescript', 'javascript' },
-- Autoinstall languages that are not installed
auto_install = true,
highlight = {
enable = true,
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
-- If you are experiencing weird indenting issues, add the language to
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
additional_vim_regex_highlighting = { 'ruby' },
},
indent = { enable = true, disable = { 'ruby' } },
},
config = function(_, opts)
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
-- Prefer git instead of curl in order to improve connectivity in some environments
require('nvim-treesitter.install').prefer_git = true
---@diagnostic disable-next-line: missing-fields
require('nvim-treesitter.configs').setup(opts)
-- There are additional nvim-treesitter modules that you can use to interact
-- with nvim-treesitter. You should go explore a few and see what interests you:
--
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
end,
},
--
-- 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.gitsigns',
--
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
-- For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins`
{ import = 'custom.plugins' },
}, {
ui = {
-- If you are using a Nerd Font: set icons to an empty table which will use the
-- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table
icons = vim.g.have_nerd_font and {} or {
cmd = '',
config = '🛠',
event = '📅',
ft = '📂',
init = '',
keys = '🗝',
plugin = '🔌',
runtime = '💻',
require = '🌙',
source = '📄',
start = '🚀',
task = '📌',
lazy = '💤 ',
},
},
})
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

58
nvim/lazy-lock.json Normal file
View File

@ -0,0 +1,58 @@
{
"CopilotChat.nvim": { "branch": "main", "commit": "df550ff3f9f2d028160946d674db08dad432fdd3" },
"LazyVim": { "branch": "main", "commit": "3f034d0a7f58031123300309f2efd3bb0356ee21" },
"SchemaStore.nvim": { "branch": "main", "commit": "d307d291f38678d064cb987112926df6d9134de3" },
"blink-cmp-copilot": { "branch": "main", "commit": "439cff78780c033aa23cf061d7315314b347e3c1" },
"blink.cmp": { "branch": "main", "commit": "49f211fe5d729df53df4c042d7c3464cf47d199e" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"catppuccin": { "branch": "main", "commit": "5b5e3aef9ad7af84f463d17b5479f06b87d5c429" },
"conform.nvim": { "branch": "master", "commit": "f9ef25a7ef00267b7d13bfc00b0dea22d78702d5" },
"copilot.lua": { "branch": "master", "commit": "535ebb53880ae67e33d9e50b503d25f9ef3ca06c" },
"crates.nvim": { "branch": "main", "commit": "fd2bbca7aa588f24ffc3517831934b4c4a9588e9" },
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
"focus.nvim": { "branch": "master", "commit": "d76338e58e49f844e8f6a7aff16a74a2a55a80ef" },
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
"gitsigns.nvim": { "branch": "main", "commit": "7010000889bfb6c26065e0b0f7f1e6aa9163edd9" },
"grug-far.nvim": { "branch": "main", "commit": "00fa27119620bc2314d560d0d11aac936a183abb" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"lualine.nvim": { "branch": "master", "commit": "1517caa8fff05e4b4999857319d3b0609a7f57fa" },
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "ea387e0819ab189d536bb4067e4d8ece3801a292" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"mini.ai": { "branch": "main", "commit": "978ffc65c6b513fde9ef075326d34d89197f1ea5" },
"mini.icons": { "branch": "main", "commit": "86a633f0dffcfd80110bac86681dbf4b5c37ba5c" },
"mini.pairs": { "branch": "main", "commit": "b90e36aa5ca5e0d825e77ad67aac22214a4d9096" },
"mini.surround": { "branch": "main", "commit": "c92d262deae79545b7674b2069332116461a85f3" },
"neotest": { "branch": "master", "commit": "dddbe8fe358b05b2b7e54fe4faab50563171a76d" },
"neotest-golang": { "branch": "main", "commit": "5650ad9d19d05167ae994a9f63f5c34efdafc246" },
"neotest-jest": { "branch": "main", "commit": "514fd4eae7da15fd409133086bb8e029b65ac43f" },
"noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
"nui.nvim": { "branch": "main", "commit": "8d3bce9764e627b62b07424e0df77f680d47ffdb" },
"nvim-ansible": { "branch": "main", "commit": "bba61168b7aef735e7f950fdfece5ef6c388eacf" },
"nvim-dap": { "branch": "master", "commit": "6a5bba0ddea5d419a783e170c20988046376090d" },
"nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" },
"nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" },
"nvim-lint": { "branch": "master", "commit": "93b8040115c9114dac1047311763bef275e752dc" },
"nvim-lspconfig": { "branch": "master", "commit": "85e0dd26b710e834a105d679200d01e326a3d2b0" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "da5825bf70cc2ea7eacd1e60c32c07baf19adeba" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "9937e5e356e5b227ec56d83d0a9d0a0f6bc9cad4" },
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
"persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"render-markdown.nvim": { "branch": "main", "commit": "c91fa46fc8d79f5577beac70a459f30ec17a60c2" },
"rustaceanvim": { "branch": "master", "commit": "1486b5a2cc0de646d6d0837ec77127c9d6e2c50f" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
"trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
"ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" },
"vim-dadbod": { "branch": "master", "commit": "9f0ca8bcef704659820a95c3bbd2c262583a66a1" },
"vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" },
"vim-dadbod-ui": { "branch": "master", "commit": "685e75b34ee0e12f92ec4507ea8bb7f1aaa936e5" },
"vim-tmux-navigator": { "branch": "master", "commit": "791dacfcfc8ccb7f6eb1c853050883b03e5a22fe" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

26
nvim/lazyvim.json Normal file
View File

@ -0,0 +1,26 @@
{
"extras": [
"lazyvim.plugins.extras.ai.copilot",
"lazyvim.plugins.extras.ai.copilot-chat",
"lazyvim.plugins.extras.coding.mini-surround",
"lazyvim.plugins.extras.dap.core",
"lazyvim.plugins.extras.formatting.prettier",
"lazyvim.plugins.extras.lang.ansible",
"lazyvim.plugins.extras.lang.go",
"lazyvim.plugins.extras.lang.json",
"lazyvim.plugins.extras.lang.markdown",
"lazyvim.plugins.extras.lang.rust",
"lazyvim.plugins.extras.lang.sql",
"lazyvim.plugins.extras.lang.svelte",
"lazyvim.plugins.extras.lang.tailwind",
"lazyvim.plugins.extras.lang.typescript",
"lazyvim.plugins.extras.lang.yaml",
"lazyvim.plugins.extras.linting.eslint",
"lazyvim.plugins.extras.test.core"
],
"install_version": 8,
"news": {
"NEWS.md": "10960"
},
"version": 8
}

View File

@ -0,0 +1,8 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
--
-- Add any additional autocmds here
-- with `vim.api.nvim_create_autocmd`
--
-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")

View File

@ -0,0 +1,3 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here

53
nvim/lua/config/lazy.lua Normal file
View File

@ -0,0 +1,53 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "catppuccin-latte" } },
checker = {
enabled = true, -- check for plugin updates periodically
notify = false, -- notify on update
}, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View File

@ -0,0 +1,9 @@
-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt.scrolloff = 10
-- Only run prettier in directories where there is a config file.
vim.g.lazyvim_prettier_needs_config = true

View File

@ -1,11 +0,0 @@
-- UI for working with databases from within vim.
-- https://github.com/tpope/vim-dadbod
-- https://github.com/kristijanhusak/vim-dadbod-ui
return {
'tpope/vim-dadbod',
dependencies = {
'kristijanhusak/vim-dadbod-ui',
'kristijanhusak/vim-dadbod-completion',
},
config = function() end,
}

View File

@ -1,32 +0,0 @@
-- Resize window to prioritize the focused on.
-- https://github.com/nvim-focus/focus.nvim
return {
'nvim-focus/focus.nvim',
opts = {
enable = true,
ui = {
-- Display line numbers in the focused window only.
hybridnumber = true,
-- Display signcolumn in the focussed window only
signcolumn = true,
},
},
config = function()
local ignore_buftypes = { 'dbui' }
local augroup = vim.api.nvim_create_augroup('FocusDisable', { clear = true })
vim.api.nvim_create_autocmd('WinEnter', {
group = augroup,
callback = function(_)
if vim.tbl_contains(ignore_buftypes, vim.bo.buftype) then
vim.w.focus_disable = true
else
vim.w.focus_disable = false
end
end,
desc = 'Disable focus autoresize for BufType',
})
end,
}

View File

@ -1,58 +0,0 @@
-- Highly configurable status line
-- https://github.com/nvim-lualine/lualine.nvim
return {
'nvim-lualine/lualine.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' },
opts = {
options = {
theme = 'catppuccin',
icons_enabled = true,
component_separators = { left = '', right = '' },
section_separators = { left = '', right = '' },
},
sections = {
lualine_a = { 'mode' },
lualine_b = { 'diagnostics' },
lualine_c = {
{
'filename',
file_status = true, -- Displays file status (readonly status, modified status)
newfile_status = true, -- Display new file status (new file means no write after created)
path = 1, -- Relative path
shorting_target = 40, -- Shortens path to leave 40 spaces in the window
symbols = {
modified = '󰽂', -- Text to show when the file is modified.
readonly = '', -- Text to show when the file is non-modifiable or readonly.
unnamed = '[No Name]', -- Text to show for unnamed buffers.
newfile = '', -- Text to show for newly created file before first write
},
},
},
lualine_x = { 'fileformat', 'filetype' },
lualine_y = { 'progress' },
lualine_z = { 'location' },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {
{
'filename',
file_status = true, -- Displays file status (readonly status, modified status)
newfile_status = true, -- Display new file status (new file means no write after created)
path = 1, -- Relative path
shorting_target = 40, -- Shortens path to leave 40 spaces in the window
symbols = {
modified = '󰽂', -- Text to show when the file is modified.
readonly = '', -- Text to show when the file is non-modifiable or readonly.
unnamed = '[No Name]', -- Text to show for unnamed buffers.
newfile = '', -- Text to show for newly created file before first write
},
},
},
lualine_x = { 'location' },
lualine_y = {},
lualine_z = {},
},
},
}

View File

@ -1,11 +0,0 @@
-- Display context that has scrolled off the top of the screen.
-- For example, signature of the current function, or if-case.
-- https://github.com/nvim-treesitter/nvim-treesitter-context
return {
{
'nvim-treesitter/nvim-treesitter-context',
opts = {
max_lines = 5,
},
},
}

View File

@ -1,17 +0,0 @@
-- Highlight todo, notes, etc in comments
-- https://github.com/folke/todo-comments.nvim
return {
'folke/todo-comments.nvim',
event = 'VimEnter',
dependencies = { 'nvim-lua/plenary.nvim' },
opts = {
signs = false,
},
keys = {
{
'<leader>st',
'<cmd>TodoTelescope<cr>',
desc = '[T]odo all files',
},
},
}

View File

@ -1,38 +0,0 @@
-- Friendly display of problems in the codebase
-- https://github.com/folke/trouble.nvim
return {
'folke/trouble.nvim',
keys = {
{
'<leader>xx',
'<cmd>Trouble diagnostics toggle<cr>',
desc = 'Diagnostics (Trouble)',
},
{
'<leader>xX',
'<cmd>Trouble diagnostics toggle filter.buf=0<cr>',
desc = 'Buffer Diagnostics (Trouble)',
},
{
'<leader>cs',
'<cmd>Trouble symbols toggle focus=false<cr>',
desc = 'Symbols (Trouble)',
},
{
'<leader>cl',
'<cmd>Trouble lsp toggle focus=false win.position=right<cr>',
desc = 'LSP Definitions / references / ... (Trouble)',
},
{
'<leader>xL',
'<cmd>Trouble loclist toggle<cr>',
desc = 'Location List (Trouble)',
},
{
'<leader>xQ',
'<cmd>Trouble qflist toggle<cr>',
desc = 'Quickfix List (Trouble)',
},
},
opts = {},
}

View File

@ -1,22 +0,0 @@
-- Seamless navigation between tmux and vim windows.
-- https://github.com/christoomey/vim-tmux-navigator
return {
'christoomey/vim-tmux-navigator',
cmd = {
'TmuxNavigateLeft',
'TmuxNavigateDown',
'TmuxNavigateUp',
'TmuxNavigateRight',
'TmuxNavigatePrevious',
},
keys = {
{ '<c-h>', '<cmd><C-U>TmuxNavigateLeft<cr>' },
{ '<c-j>', '<cmd><C-U>TmuxNavigateDown<cr>' },
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>' },
{ '<c-l>', '<cmd><C-U>TmuxNavigateRight<cr>' },
{ '<c-\\>', '<cmd><C-U>TmuxNavigatePrevious<cr>' },
},
init = function()
vim.g.tmux_navigator_disable_when_zoomed = 1
end,
}

View File

@ -1,52 +0,0 @@
--[[
--
-- This file is not required for your own configuration,
-- but helps people determine if their system is setup correctly.
--
--]]
local check_version = function()
local verstr = string.format('%s.%s.%s', vim.version().major, vim.version().minor, vim.version().patch)
if not vim.version.cmp then
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))
return
end
if vim.version.cmp(vim.version(), { 0, 9, 4 }) >= 0 then
vim.health.ok(string.format("Neovim version is: '%s'", verstr))
else
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))
end
end
local check_external_reqs = function()
-- Basic utils: `git`, `make`, `unzip`
for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do
local is_executable = vim.fn.executable(exe) == 1
if is_executable then
vim.health.ok(string.format("Found executable: '%s'", exe))
else
vim.health.warn(string.format("Could not find executable: '%s'", exe))
end
end
return true
end
return {
check = function()
vim.health.start 'kickstart.nvim'
vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth`
Fix only warnings for plugins and languages you intend to use.
Mason will give warnings for languages that are not installed.
You do not need to install, unless you want to use those languages!]]
local uv = vim.uv or vim.loop
vim.health.info('System Information: ' .. vim.inspect(uv.os_uname()))
check_version()
check_external_reqs()
end,
}

View File

@ -1,16 +0,0 @@
-- autopairs
-- https://github.com/windwp/nvim-autopairs
return {
'windwp/nvim-autopairs',
event = 'InsertEnter',
-- Optional dependency
dependencies = { 'hrsh7th/nvim-cmp' },
config = function()
require('nvim-autopairs').setup {}
-- If you want to automatically add `(` after selecting a function or method
local cmp_autopairs = require 'nvim-autopairs.completion.cmp'
local cmp = require 'cmp'
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
end,
}

View File

@ -1,94 +0,0 @@
-- debug.lua
--
-- Shows how to use the DAP plugin to debug your code.
--
-- Primarily focused on configuring the debugger for Go, but can
-- be extended to other languages as well. That's why it's called
-- kickstart.nvim and not kitchen-sink.nvim ;)
return {
'mfussenegger/nvim-dap',
dependencies = {
-- Creates a beautiful debugger UI
'rcarriga/nvim-dap-ui',
-- Required dependency for nvim-dap-ui
'nvim-neotest/nvim-nio',
-- Installs the debug adapters for you
'williamboman/mason.nvim',
'jay-babu/mason-nvim-dap.nvim',
-- Add your own debuggers here
'leoluz/nvim-dap-go',
},
config = function()
local dap = require 'dap'
local dapui = require 'dapui'
require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations
automatic_installation = true,
-- You can provide additional configuration to the handlers,
-- see mason-nvim-dap README for more information
handlers = {},
-- You'll need to check that you have the required things installed
-- online, please don't ask me how to install them :)
ensure_installed = {
-- Update this to ensure that you have the debuggers for the langs you want
'delve',
},
}
-- Basic debugging keymaps, feel free to change to your liking!
vim.keymap.set('n', '<F5>', dap.continue, { desc = 'Debug: Start/Continue' })
vim.keymap.set('n', '<F1>', dap.step_into, { desc = 'Debug: Step Into' })
vim.keymap.set('n', '<F2>', dap.step_over, { desc = 'Debug: Step Over' })
vim.keymap.set('n', '<F3>', dap.step_out, { desc = 'Debug: Step Out' })
vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint, { desc = 'Debug: Toggle Breakpoint' })
vim.keymap.set('n', '<leader>B', function()
dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ')
end, { desc = 'Debug: Set Breakpoint' })
-- Dap UI setup
-- For more information, see |:help nvim-dap-ui|
dapui.setup {
-- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices.
icons = { expanded = '', collapsed = '', current_frame = '*' },
controls = {
icons = {
pause = '',
play = '',
step_into = '',
step_over = '',
step_out = '',
step_back = 'b',
run_last = '▶▶',
terminate = '',
disconnect = '',
},
},
}
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
vim.keymap.set('n', '<F7>', dapui.toggle, { desc = 'Debug: See last session result.' })
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config
require('dap-go').setup {
delve = {
-- On Windows delve must be run attached or it crashes.
-- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
detached = vim.fn.has 'win32' == 0,
},
}
end,
}

View File

@ -1,73 +0,0 @@
-- GitSigns is a Neovim plugin which adds git related signs to the gutter,
-- as well as other utilities for managing changes.
-- https://github.com/lewis6991/gitsigns.nvim
--
-- Here is a more advanced example where we pass configuration
-- options to `gitsigns.nvim`. This is equivalent to the following Lua:
-- require('gitsigns').setup({ ... })
--
-- See `:help gitsigns` to understand what the configuration keys do
return {
{
'lewis6991/gitsigns.nvim',
opts = {
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
},
on_attach = function(bufnr)
local gitsigns = require 'gitsigns'
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
-- Navigation
map('n', ']c', function()
if vim.wo.diff then
vim.cmd.normal { ']c', bang = true }
else
gitsigns.nav_hunk 'next'
end
end, { desc = 'Jump to next git [c]hange' })
map('n', '[c', function()
if vim.wo.diff then
vim.cmd.normal { '[c', bang = true }
else
gitsigns.nav_hunk 'prev'
end
end, { desc = 'Jump to previous git [c]hange' })
-- Actions
-- visual mode
map('v', '<leader>hs', function()
gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' }
end, { desc = 'stage git hunk' })
map('v', '<leader>hr', function()
gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' }
end, { desc = 'reset git hunk' })
-- normal mode
map('n', '<leader>hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' })
map('n', '<leader>hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' })
map('n', '<leader>hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' })
map('n', '<leader>hu', gitsigns.undo_stage_hunk, { desc = 'git [u]ndo stage hunk' })
map('n', '<leader>hR', gitsigns.reset_buffer, { desc = 'git [R]eset buffer' })
map('n', '<leader>hp', gitsigns.preview_hunk, { desc = 'git [p]review hunk' })
map('n', '<leader>hb', gitsigns.blame_line, { desc = 'git [b]lame line' })
map('n', '<leader>hd', gitsigns.diffthis, { desc = 'git [d]iff against index' })
map('n', '<leader>hD', function()
gitsigns.diffthis '@'
end, { desc = 'git [D]iff against last commit' })
-- Toggles
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, { desc = '[T]oggle git show [b]lame line' })
map('n', '<leader>tD', gitsigns.toggle_deleted, { desc = '[T]oggle git show [D]eleted' })
end,
},
},
}

View File

@ -1,9 +0,0 @@
return {
{ -- Add indentation guides even on blank lines
'lukas-reineke/indent-blankline.nvim',
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help ibl`
main = 'ibl',
opts = {},
},
}

View File

@ -1,53 +0,0 @@
return {
{ -- Linting
'mfussenegger/nvim-lint',
event = { 'BufReadPre', 'BufNewFile' },
config = function()
local lint = require 'lint'
-- Defining in this format allows other plugins to define linters.
-- require('lint').linters_by_ft
--
-- However, note that this will enable a set of default linters,
-- which will cause errors unless these tools are available:
-- {
-- clojure = { "clj-kondo" },
-- dockerfile = { "hadolint" },
-- inko = { "inko" },
-- janet = { "janet" },
-- json = { "jsonlint" },
-- markdown = { "vale" },
-- rst = { "vale" },
-- ruby = { "ruby" },
-- terraform = { "tflint" },
-- text = { "vale" }
-- }
lint.linters_by_ft['markdown'] = { 'markdownlint' }
lint.linters_by_ft['typescript'] = { 'eslint' }
lint.linters_by_ft['javascript'] = { 'eslint' }
-- You can disable the default linters by setting their filetypes to nil:
-- lint.linters_by_ft['clojure'] = nil
-- lint.linters_by_ft['dockerfile'] = nil
-- lint.linters_by_ft['inko'] = nil
-- lint.linters_by_ft['janet'] = nil
-- lint.linters_by_ft['json'] = nil
-- lint.linters_by_ft['markdown'] = nil
-- lint.linters_by_ft['rst'] = nil
-- lint.linters_by_ft['ruby'] = nil
-- lint.linters_by_ft['terraform'] = nil
-- lint.linters_by_ft['text'] = nil
-- Create autocommand which carries out the actual linting
-- on the specified events.
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
group = lint_augroup,
callback = function()
require('lint').try_lint()
end,
})
end,
},
}

View File

@ -1,25 +0,0 @@
-- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim
return {
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
},
cmd = 'Neotree',
keys = {
{ '\\', ':Neotree reveal<CR>', { desc = 'NeoTree reveal' } },
},
opts = {
filesystem = {
window = {
mappings = {
['\\'] = 'close_window',
},
},
},
},
}

View File

@ -0,0 +1,6 @@
return {
"LazyVim/LazyVim",
opts = {
colorscheme = "catppuccin-latte",
},
}

View File

@ -0,0 +1,197 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, { name = "emoji" })
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util").lsp.on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, {
function()
return "😄"
end,
})
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
}

View File

@ -0,0 +1,48 @@
-- Resize window to prioritize the focused on.
-- https://github.com/nvim-focus/focus.nvim
return {
"nvim-focus/focus.nvim",
event = "VeryLazy",
opts = {
enable = true,
ui = {
-- Display line numbers in the focused window only.
hybridnumber = true,
-- Display signcolumn in the focused window only.
signcolumn = true,
},
},
config = function()
require("focus").setup({})
local ignore_buftypes = { "dbui", "nofile" }
local ignore_filetypes =
{ "dbui", "dapui_breakpoints", "dapui_stacks", "dapui_scopes", "dap_repl", "dapui_console" }
local augroup = vim.api.nvim_create_augroup("FocusDisable", { clear = true })
vim.api.nvim_create_autocmd("WinEnter", {
group = augroup,
callback = function(_)
if vim.tbl_contains(ignore_buftypes, vim.bo.buftype) then
vim.w.focus_disable = true
else
vim.w.focus_disable = false
end
end,
desc = "Disable focus autoresize for BufType",
})
vim.api.nvim_create_autocmd("FileType", {
group = augroup,
callback = function(_)
if vim.tbl_contains(ignore_filetypes, vim.bo.filetype) then
vim.b.focus_disable = true
else
vim.b.focus_disable = false
end
end,
desc = "Disable focus autoresize for FileType",
})
end,
}

View File

@ -0,0 +1,12 @@
return {
{
"nvim-lualine/lualine.nvim",
opts = function(_, opts)
-- Remove the git branch because it's already shown in tmux.
table.remove(opts.sections.lualine_b)
-- Remove the clock because I don't want it there.
table.remove(opts.sections.lualine_z)
end,
},
}

21
nvim/lua/plugins/test.lua Normal file
View File

@ -0,0 +1,21 @@
return {
{
"nvim-neotest/neotest",
dependencies = {
"haydenmeade/neotest-jest",
},
opts = function(_, opts)
table.insert(
opts.adapters,
require("neotest-jest")({
jestCommand = "npm test",
jestConfigFile = "jest.config.ts",
-- env = { CI = true },
cwd = function()
return vim.fn.getcwd()
end,
})
)
end,
},
}

View File

@ -0,0 +1,18 @@
return {
"christoomey/vim-tmux-navigator",
cmd = {
"TmuxNavigateLeft",
"TmuxNavigateDown",
"TmuxNavigateUp",
"TmuxNavigateRight",
"TmuxNavigatePrevious",
"TmuxNavigatorProcessList",
},
keys = {
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
},
}

3
nvim/stylua.toml Normal file
View File

@ -0,0 +1,3 @@
indent_type = "Spaces"
indent_width = 2
column_width = 120

View File

@ -0,0 +1,306 @@
// Place your key bindings in this file to override the defaults
[
// Remove undesired defaults
{
"key": "ctrl+\\",
"command": "-workbench.action.splitEditor"
},
{
"key": "ctrl+k ctrl+\\",
"command": "-workbench.action.splitEditorOrthogonal"
},
{
"key": "ctrl+k ctrl+\\",
"command": "-workbench.action.splitEditorLeft"
},
{
"key": "ctrl+k ctrl+\\",
"command": "-workbench.action.splitEditorUp"
},
{
"key": "ctrl+k ctrl+\\",
"command": "-workbench.action.splitEditorDown"
},
{
"key": "ctrl+k ctrl+\\",
"command": "-workbench.action.splitEditorRight"
},
{
"key": "ctrl+k ctrl+left",
"command": "-workbench.action.focusLeftGroup"
},
{
"key": "ctrl+k ctrl+right",
"command": "-workbench.action.focusRightGroup"
},
{
"key": "ctrl+k ctrl+up",
"command": "-workbench.action.focusAboveGroup"
},
{
"key": "ctrl+k ctrl+down",
"command": "-workbench.action.focusBelowGroup"
},
{
"key": "ctrl+shift+`",
"command": "-workbench.action.terminal.new",
"when": "terminalProcessSupported || terminalWebExtensionContributedProfile"
},
{
"key": "ctrl+t",
"command": "-workbench.action.showAllSymbols"
},
{
"key": "ctrl+j",
"command": "-workbench.action.togglePanel"
},
{
"key": "ctrl+`",
"command": "-workbench.action.terminal.toggleTerminal",
"when": "terminal.active"
},
{
"key": "ctrl+p",
"command": "-extension.vim_ctrl+p",
"when": "editorTextFocus && vim.active && vim.use<C-p> && !inDebugRepl || vim.active && vim.use<C-p> && !inDebugRepl && vim.mode == 'CommandlineInProgress' || vim.active && vim.use<C-p> && !inDebugRepl && vim.mode == 'SearchInProgressMode'"
},
{
"key": "ctrl+h",
"command": "-extension.vim_ctrl+h",
"when": "editorTextFocus && vim.active && vim.use<C-h> && !inDebugRepl"
},
{
"key": "ctrl+l",
"command": "-extension.vim_navigateCtrlL",
"when": "editorTextFocus && vim.active && vim.use<C-l> && !inDebugRepl"
},
{
"key": "ctrl+p",
"command": "-workbench.action.quickOpen"
},
{
"key": "ctrl+e",
"command": "-workbench.action.quickOpen"
},
{
"key": "ctrl+f12",
"command": "-editor.action.revealDefinition",
"when": "editorHasDefinitionProvider && editorTextFocus && isWeb"
},
{
"key": "f12",
"command": "-editor.action.revealDefinition",
"when": "editorHasDefinitionProvider && editorTextFocus"
},
{
"key": "ctrl+shift+m",
"command": "-workbench.actions.view.problems",
"when": "workbench.panel.markers.view.active"
},
{
"key": "alt+left",
"command": "-workbench.action.navigateBack",
"when": "canNavigateBack"
},
{
"key": "alt+right",
"command": "-workbench.action.navigateForward",
"when": "canNavigateForward && editorTextFocus && vim.active"
},
// Editing
{
"key": "shift+k",
"command": "editor.action.showHover",
"when": "editorTextFocus && vim.active && vim.mode != 'Insert'"
},
{
"key": "escape",
"command": "workbench.action.closeSidebar",
"when": "sideBarVisible"
},
// Editor pane navigation and management
{
"key": "ctrl+k",
"command": "workbench.action.focusAboveGroup",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
{
"key": "ctrl+j",
"command": "workbench.action.focusBelowGroup",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
{
"key": "ctrl+h",
"command": "workbench.action.focusLeftGroup",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
{
"key": "ctrl+l",
"command": "workbench.action.focusRightGroup",
"when": "editorTextFocus && vim.active && !inDebugRepl"
},
{
"key": "ctrl+b shift+5",
"command": "workbench.action.newGroupRight",
"when": "editorTextFocus"
},
{
"key": "ctrl+b shift+'",
"command": "workbench.action.newGroupBelow",
"when": "editorTextFocus"
},
{
"key": "ctrl+b z",
"command": "workbench.action.toggleEditorWidths",
"when": "editorTextFocus"
},
// Terminal Tmux pane navigation and management
{
"key": "ctrl+t",
"command": "workbench.action.terminal.toggleTerminal",
"when": "terminal.active"
},
{
"key": "ctrl+shift+`",
"command": "workbench.action.toggleMaximizedPanel"
},
// These escape codes allow sending keyboard shortcuts to tmux
// when normally vs-code would not send any chorded keyboard shortcuts.
// It also is setup so that these keyboard shortcuts work in both the editor
// and the terminal, but have different commands.
// Resources:
// - https://code.visualstudio.com/docs/terminal/advanced#_custom-sequence-keybindings
// - https://stackoverflow.com/questions/61742559/need-vscode-sendsequence-keybindings-for-previous-command-next-command-move-to
// - https://gist.github.com/riipandi/2f304a1cbf7615a8f912473b5f4a7cc3
// - `showkey -a`
{
"key": "ctrl+b p",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u0070"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b n",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u006e"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b d",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u0064"
},
"when": "terminalFocus"
},
{
"key": "ctrl+k",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u001b[A"
},
"when": "terminalFocus"
},
{
"key": "ctrl+j",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u001b[B"
},
"when": "terminalFocus"
},
{
"key": "ctrl+h",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u001b[D"
},
"when": "terminalFocus"
},
{
"key": "ctrl+l",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u001b[C"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b shift+5",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u0025"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b shift+'",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u0022"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b ,",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u002c"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b shift+;",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u003a"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b c",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u0063"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b [",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u005b"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b z",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u007a"
},
"when": "terminalFocus"
},
{
"key": "ctrl+b g",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0002\u0067"
},
"when": "terminalFocus"
},
{
"key": "ctrl+o",
"command": "workbench.action.navigateBack",
"when": "canNavigateBack"
},
{
"key": "ctrl+i",
"command": "workbench.action.navigateForward",
"when": "canNavigateForward && editorTextFocus && vim.active"
}
]

194
vs-code/user-settings.json Normal file
View File

@ -0,0 +1,194 @@
{
//
// Languages
//
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
},
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[templ]": {
"editor.defaultFormatter": "a-h.templ"
},
"[typescript]": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[typescriptreact]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"emmet.includeLanguages": {
"templ": "html"
},
"go.buildTags": "unit",
"go.toolsManagement.autoUpdate": true,
"gopls": {
// Supported by Catppuccin
"ui.semanticTokens": true,
"build.buildFlags": [
"-tags=unit"
]
},
"javascript.updateImportsOnFileMove.enabled": "always",
"tailwindCSS.includeLanguages": {
"templ": "html"
},
"typescript.updateImportsOnFileMove.enabled": "always",
//
// Remote Settings
//
"dev.containers.dockerPath": "docker",
"dev.containers.executeInWSL": true,
"dotfiles.installCommand": "install.sh",
"dotfiles.repository": "https://github.com/tgrosinger/dotfiles.git",
"dotfiles.targetPath": "~/.dotfiles",
//
// Fonts and Appearance
//
"editor.fontFamily": "JetBrainsMono Nerd Font, JetBrains Mono, 'Courier New', monospace",
"editor.fontLigatures": true,
//
// Theme
//
"editor.semanticHighlighting.enabled": true,
// prevent VSCode from modifying the terminal colors
"terminal.integrated.minimumContrastRatio": 1,
// make the window's titlebar use the workbench colors
"window.titleBarStyle": "custom",
//
// Editor Behavior
//
"diffEditor.experimental.showMoves": true,
"editor.accessibilitySupport": "off",
"editor.formatOnSave": true,
"editor.guides.bracketPairs": "active",
"editor.lineNumbers": "relative",
"editor.linkedEditing": true,
"editor.minimap.enabled": false,
"editor.renderWhitespace": "trailing",
"editor.stickyScroll.enabled": true,
"editor.wordWrap": "off",
"files.associations": {
"*.gohtml": "html"
},
"git.ignoreMissingGitWarning": true,
"githubPullRequests.pullBranch": "never",
"githubPullRequests.terminalLinksHandler": "github",
//
// GitLens
//
"gitlens.advanced.telemetry.enabled": false,
"gitlens.hovers.currentLine.over": "line",
"gitlens.telemetry.enabled": false,
"remote.autoForwardPortsSource": "hybrid",
"remote.containers.dotfiles.installCommand": "install.sh",
"remote.containers.dotfiles.repository": "https://github.com/tgrosinger/dotfiles.git",
"remote.containers.dotfiles.targetPath": "~/.dotfiles",
"scm.workingSets.enabled": true,
"settingsSync.ignoredExtensions": [
"bradlc.vscode-tailwindcss"
],
//
// Telemetry
//
"telemetry.telemetryLevel": "off",
"workbench.enableExperiments": false,
"workbench.settings.enableNaturalLanguageSearch": false,
"extensions.ignoreRecommendations": true,
//
// Vim
//
"vim.leader": " ",
"vim.handleKeys": {
// ctrl-o functionality in the plugin is not very reliable or predictable.
"<C-o>": false
},
"vim.normalModeKeyBindings": [
{
"before": [
"leader",
"n"
],
"commands": [
"editor.action.rename"
]
},
{
"before": [
"leader",
"s",
"f"
],
"commands": [
"workbench.action.quickOpen"
]
},
{
"before": [
"leader",
"s",
"g"
],
"commands": [
"workbench.action.findInFiles"
]
},
{
"before": [
"leader",
"g",
"r"
],
"commands": [
"editor.action.goToReferences"
]
},
{
"before": [
"leader",
"r",
"n"
],
"commands": [
"editor.action.rename"
]
},
{
"before": [
"leader",
"q"
],
"commands": [
"workbench.actions.view.problems"
]
},
{
"before": [
"leader",
"c",
"a"
],
"commands": [
"editor.action.quickFix"
]
}
],
//
// Window
//
"window.newWindowDimensions": "inherit",
"workbench.colorTheme": "Catppuccin Latte",
"workbench.editor.empty.hint": "hidden",
"workbench.sideBar.location": "right",
"workbench.iconTheme": "catppuccin-latte",
"lazygit-vscode.autoMaximizeWindow": true
}