Compare commits

...

61 Commits

Author SHA1 Message Date
5ab0f89765 feat(nvim): mini.nvim plugins + cleanup 2024-11-22 17:58:52 +02:00
d585d61537 chore(config): tweaks to configs and scripts 2024-11-22 17:54:37 +02:00
746646ae55 feat(shell): switched to antidote, asdf changes 2024-11-22 17:53:46 +02:00
dependabot[bot]
6e69ec6410 chore(deps): bump cross-spawn from 7.0.3 to 7.0.6 (#43)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-21 10:16:24 +02:00
af123e5138 chore(deps): update brewfile 2024-11-19 11:20:24 +02:00
3879289559 feat(tmux): removal of tmux-resurrect 2024-11-18 11:42:58 +02:00
392628e733 fix(shell): fixes to zsh and bash configs 2024-11-16 16:30:57 +02:00
aa70eab5fb fix(nvim): disable statuscol on certain ft and bt 2024-11-12 05:22:01 +02:00
e5311ca285 fix(nvim): finally a working colorcolumn 2024-11-12 05:21:26 +02:00
d5618c9b5f chore(config): tweaks to nvim config, autogroups 2024-11-09 19:49:21 +02:00
d091f5a88f feat(base): add tms bundle to antigen 2024-11-09 19:48:12 +02:00
cb9195e3ad chore(config): asdf, add libtmux to python 2024-11-09 19:47:42 +02:00
c91cc387b6 chore(docs): update working on readme 2024-11-09 19:47:02 +02:00
083091ea46 chore(deps): update asdf tool-versions, plugins 2024-11-08 15:59:54 +02:00
7ff74f0e15 feat(dfm): add asdf helpers 2024-11-08 15:36:47 +02:00
9d1f62fcca feat(dfm): more helpers, enable multiple commands 2024-11-08 15:35:56 +02:00
a563e82e33 chore(base): add lando, eza fix if missing 2024-11-08 15:33:43 +02:00
62ff7836e7 chore(config): wezterm config formatting, fonts 2024-11-08 15:32:04 +02:00
88cb573027 chore(config): update oh-my-posh cfg, completions 2024-11-08 15:31:29 +02:00
82772d8208 feat(config): tms configs 2024-11-07 10:04:33 +02:00
github-actions[bot]
240035569c chore: update pre-commit hooks (#42)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-11-06 13:56:19 +02:00
renovate[bot]
9697c200f9 chore(deps): update node to v22.11.0 (#41) 2024-11-01 13:04:20 +02:00
fd11f9966b chore(config): tmux-sessionizer bindings 2024-10-25 13:03:53 +03:00
722b3c0cde chore(scripts): tweak install-asdf, add update 2024-10-25 12:42:38 +03:00
4fcb9d9741 chore(config): fzf default opts 2024-10-25 12:42:38 +03:00
fc232f26f7 chore(config): update tmux config 2024-10-25 12:42:38 +03:00
8b078309cf chore(nvim): dashboard tweaks, add q for fast quit 2024-10-25 12:42:38 +03:00
5a8f990e52 chore(nvim): which-key tweaks 2024-10-25 12:42:38 +03:00
c76c5d08b0 chore(nvim): treesitter config tweaks 2024-10-25 12:42:38 +03:00
b2857e226c chore(nvim): telescope config tweaks 2024-10-25 12:42:38 +03:00
dfbac0c736 chore(nvim): lsp config tweaks, add neoconf, ts_ls 2024-10-25 12:42:38 +03:00
fdd713908c chore(nvim): cmp tweaks, add luasnip snippets 2024-10-25 12:42:37 +03:00
60210c9bec chore(deps): cleanup oh-my-posh config 2024-10-25 12:42:37 +03:00
eaf8d2bdca chore(config): update direnv config 2024-10-25 12:42:37 +03:00
cc00055626 chore(deps): update tool-versions & cargo-package
# Conflicts:
#	base/tool-versions
2024-10-25 12:42:34 +03:00
renovate[bot]
567de68844 feat(github-action): update actions/setup-python ( v5.2.0 → v5.3.0 )
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-24 23:17:20 +00:00
github-actions[bot]
ed0b229757 chore: update pre-commit hooks (#40)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-10-22 09:09:53 +03:00
c8b6243c0b chore(deps): update asdf dependencies 2024-10-17 23:47:05 +03:00
renovate[bot]
21a92eb145 chore(deps): update node to v22.10.0 (#39)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 23:38:09 +03:00
8ec317f582 chore: tweaks and cleanup 2024-10-17 23:29:40 +03:00
renovate[bot]
42201d8b68 feat(github-release): update python ( 3.12.7 → 3.13.0 ) (#38)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 10:36:55 +03:00
github-actions[bot]
0c003ae5b9 chore: update pre-commit hooks (#37)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-10-06 15:53:15 +03:00
d383031ec8 chore(docs): update nvim keybindings 2024-10-04 14:50:09 +03:00
renovate[bot]
fa5e5f16da feat(github-action)!: Update peter-evans/create-pull-request ( v6 → v7 ) (#36)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 10:43:47 +03:00
f82396236e chore(asdf): removed eza, lazygit. updated deps. 2024-10-03 01:52:46 +03:00
b127c2514d feat(nvim): another configuration tweak round
added snippets!
2024-10-03 01:51:39 +03:00
renovate[bot]
b06ac3bc0f feat(github-action)!: Update peter-evans/create-pull-request ( v5 → v6 ) (#35)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 01:21:03 +03:00
renovate[bot]
7e4ea90a05 fix(github-release): update python ( 3.12.6 → 3.12.7 ) (#34)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 23:35:20 +03:00
github-actions[bot]
d264a33d21 chore: update pre-commit hooks (#33)
Co-authored-by: ivuorinen <ivuorinen@users.noreply.github.com>
2024-10-01 09:26:30 +03:00
224ee56461 fix(workflow): pre-commit, run in the cloud 2024-10-01 08:51:27 +03:00
renovate[bot]
8147490c65 feat(github-action)!: Update peter-evans/create-pull-request ( v4 → v5 ) (#32)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:28:44 +03:00
renovate[bot]
c6d501347a feat(github-action)!: Update actions/setup-python ( v4.8.0 → v5.2.0 ) (#31)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:20:22 +03:00
renovate[bot]
d8044f2b6a feat(github-action)!: Update actions/checkout ( v3 → v4 ) (#30)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:12:02 +03:00
renovate[bot]
1b3fe6d12e feat(github-action): update actions/setup-python ( v4.5.0 → v4.8.0 )
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 21:05:17 +00:00
76b66d8c61 feat(workflow): pre-commit autoupdate 2024-09-30 21:41:56 +03:00
9c8644de17 feat(nvim): cleanup, fixes and helpers 2024-09-30 21:41:35 +03:00
120345b562 chore(nvim): ignore spell file changes 2024-09-30 02:49:16 +03:00
8accd4a60b chore(nvim): clear spell file 2024-09-30 02:42:19 +03:00
8fb03660ad chore(asdf): use system eza 2024-09-30 02:41:53 +03:00
8b2dc74f2a chore(brew): remove upstream removed font casks 2024-09-30 02:41:35 +03:00
8fa63e63bb chore(nvim): cleanup, formatting, fixes 2024-09-30 02:40:01 +03:00
79 changed files with 3724 additions and 1306 deletions

View File

@@ -8,6 +8,9 @@ indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = 100
[*.php]
indent_size = 4

10
.github/README.md vendored
View File

@@ -6,10 +6,10 @@ aware of yet. As I find more interesting tools, configs and other stuff,
this repository will live accordingly.
Please for the love of everything good do not use these 1:1 as your own dotfiles,
fork or download the repo as a zip and go from there with your own configs.
fork or download the repository as a zip and go from there with your own configs.
It would be nice if you'd add an issue linking to your fork or repo so I can
see what interesing stuff you've done with it. Sharing is caring.
see what interesting stuff you've done with it. Sharing is caring.
## Setup
@@ -28,9 +28,9 @@ see what interesing stuff you've done with it. Sharing is caring.
![screenshot of the oh-my-posh shell](./screenshots/oh-my-posh.png)
![screenshot of light version of tmux with nvim editing this repo](./screenshots/tmux-nvim-kickstart-light.png)
![screenshot of light version of tmux with nvim editing this repository](./screenshots/tmux-nvim-kickstart-light.png)
![screenshot of dark version of tmux with nvim editing this repo](./screenshots/tmux-nvim-kickstart-dark.png)
![screenshot of dark version of tmux with nvim editing this repository](./screenshots/tmux-nvim-kickstart-dark.png)
## Interesting files and locations
@@ -52,7 +52,7 @@ see what interesing stuff you've done with it. Sharing is caring.
| `local/` | `.local/` | XDG Base folder: `bin`, `share` and `state` |
| `ssh/` | `.ssh/` | SSH Configurations. |
### dfm - the dotfiles manager
### `dfm` - the dotfiles manager
[`.local/bin/dfm`][dfm] is a shell script that has some tools that help with dotfiles management.

View File

@@ -0,0 +1,23 @@
---
name: Pre-commit autoupdate
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
auto-update:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5.3.0
- run: pip install pre-commit && pre-commit autoupdate
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update/pre-commit-hooks
title: "chore: update pre-commit hooks"
commit-message: "chore: update pre-commit hooks"
body: Update versions of pre-commit hooks to latest version.

3
.gitignore vendored
View File

@@ -26,4 +26,7 @@ config/iterm2/AppSupport
config/gnupg/S.*
config/gnupg/s
config/gnupg/private-keys-v1.d
config/nvim/spell/*
!config/nvim/spell/.gitkeep
antidote_plugins.zsh

8
.gitmodules vendored
View File

@@ -23,10 +23,6 @@
path = config/tmux/plugins/tmux-continuum
url = https://github.com/tmux-plugins/tmux-continuum
ignore = dirty
[submodule "tmux/tmux-resurrect"]
path = config/tmux/plugins/tmux-resurrect
url = https://github.com/tmux-plugins/tmux-resurrect
ignore = dirty
[submodule "tmux/tmux-sensible"]
path = config/tmux/plugins/tmux-sensible
url = https://github.com/tmux-plugins/tmux-sensible.git
@@ -64,3 +60,7 @@
[submodule "asdf"]
path = local/bin/asdf
url = https://github.com/asdf-vm/asdf.git
[submodule "antidote"]
path = tools/antidote
url = https://github.com/mattmc3/antidote.git
shallow = true

View File

@@ -1,6 +1,7 @@
.git/**
config/cheat/cheatsheets/community/**
tools/dotbot/**
node_modules
tools/antidote/**
tools/dotbot-brew/**
tools/dotbot-include/**
node_modules
tools/dotbot/**

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
22.11.0

View File

@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
rev: v5.0.0
hooks:
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]
@@ -40,11 +40,11 @@ repos:
- id: shellcheck
- repo: https://github.com/scop/pre-commit-shfmt
rev: v3.9.0-1
rev: v3.10.0-1
hooks:
- id: shfmt
- repo: https://github.com/rhysd/actionlint
rev: v1.7.2
rev: v1.7.4
hooks:
- id: actionlint

1
.python-version Normal file
View File

@@ -0,0 +1 @@
3.13.0

View File

@@ -2,8 +2,8 @@ column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferDouble"
call_parentheses = "Always"
quote_style = "AutoPreferSingle"
call_parentheses = "None"
collapse_simple_statement = "Always"
[sort_requires]

View File

@@ -1,2 +0,0 @@
python 3.12.6
nodejs 22.9.0

View File

@@ -17,14 +17,16 @@ git submodule add --name cheat-tldr \
-f https://github.com/ivuorinen/cheatsheet-tldr.git config/cheat/cheatsheets/tldr
git submodule add --name asdf \
-f https://github.com/asdf-vm/asdf.git local/bin/asdf
git submodule add --name antidote \
--depth 1 \
-f https://github.com/mattmc3/antidote.git tools/antidote \
# tmux plugin manager and plugins
git submodule add --name tmux/tmux-continuum \
-f https://github.com/tmux-plugins/tmux-continuum config/tmux/plugins/tmux-continuum
git submodule add --name tmux/tmux-mode-indicator \
-f https://github.com/MunifTanjim/tmux-mode-indicator.git config/tmux/plugins/tmux-mode-indicator
git submodule add --name tmux/tmux-resurrect \
-f https://github.com/tmux-plugins/tmux-resurrect config/tmux/plugins/tmux-resurrect
git submodule add --name tmux/tmux-sensible \
-f https://github.com/tmux-plugins/tmux-sensible.git config/tmux/plugins/tmux-sensible
git submodule add --name tmux/tmux-sessionist \
@@ -45,10 +47,14 @@ for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $
git config "submodule.${MODULE}.ignore" all
done
# Mark certain repositories shallow
git config -f .gitmodules submodule.antidote.shallow true
# remove old submodules
[ -d "config/tmux/plugins/tpm" ] && rm -rf config/tmux/plugins/tpm
[ -d "config/tmux/plugins/tmux" ] && rm -rf config/tmux/plugins/tmux
[ -d "config/tmux/plugins/tmux-menus" ] && rm -rf config/tmux/plugins/tmux-menus
[ -d "config/tmux/plugins/tmux-resurrect" ] && rm -rf config/tmux/plugins/tmux-resurrect
[ -d "tools/dotbot-crontab" ] && rm -rf tools/dotbot-crontab
[ -d "tools/dotbot-snap" ] && rm -rf tools/dotbot-snap
[ -d "config/nvim-kickstart" ] && rm -rf config/nvim-kickstart

View File

@@ -14,10 +14,45 @@ source "$DOTFILES/config/shared.sh"
# Import ssh keys in keychain
ssh-add -A 2>/dev/null
x-have oh-my-posh && {
eval "$(oh-my-posh init bash --config "$DOTFILES/config/omp/own.toml")"
}
x-have antidot && {
eval "$(antidot init)"
}
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return ;;
esac
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u\[\033[01;33m\]@\[\033[01;36m\]\h \[\033[01;33m\]\w \[\033[01;35m\]\$ \[\033[00m\]'
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm* | rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*) ;;
esac
x-have oh-my-posh && {
eval "$(oh-my-posh init bash --config "$DOTFILES/config/omp/own.toml")"
}

View File

@@ -1 +1,2 @@
use node
use asdf

1
base/nvmrc Normal file
View File

@@ -0,0 +1 @@
lts/*

View File

@@ -1,29 +1,27 @@
asdf-plugin-manager 1.4.0
nodejs 22.9.0
golang 1.23.1
python 3.12.6
golang 1.23.3
ruby 3.3.4
rust 1.81.0
direnv 2.34.0
rust 1.82.0
direnv 2.35.0
fd 10.2.0
1password-cli 2.30.0
1password-cli 2.30.3
age 1.2.0
bottom 0.10.2
dotenv-linter 3.3.0
editorconfig-checker 2.8.0
github-cli 2.57.0
github-cli 2.61.0
hadolint 2.12.0
kubectl 1.31.1
pipx 1.7.1
pre-commit 3.8.0
kubectl 1.31.2
pre-commit 4.0.1
ripgrep 14.1.1
shellcheck 0.10.0
shfmt 3.9.0
terragrunt 0.67.10
tf-summarize 0.3.10
shfmt 3.10.0
terragrunt 0.68.8
tf-summarize 0.3.13
yamllint 1.35.1
yq 4.44.3
bats 1.11.0
gitleaks 8.18.4
delta 0.18.1
sops 3.9.0
eza 0.20.8
sops 3.9.1

57
base/zshrc Executable file → Normal file
View File

@@ -1,4 +1,5 @@
# this is my zsh config. there are many like it, but this one is mine.
# https://zsh.sourceforge.io/Intro/intro_3.html
# shellcheck shell=bash
# export VERBOSE=1
@@ -10,9 +11,36 @@ export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/nvim/mason/bin:$L
export SHARED_SCRIPTS_SOURCED=0
source "$DOTFILES/config/shared.sh"
source "${XDG_CONFIG_HOME:-$HOME/.config}/asdf-direnv/zshrc"
ZSH_COMPDUMP="$XDG_CACHE_HOME/zsh/zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
eval "$(oh-my-posh init zsh --config "$DOTFILES/config/omp/own.toml")"
load_antidote()
{
[[ ! -d "$ANTIDOTE_DIR" ]] && {
git submodule add \
--name antidote \
--depth=1 \
-f https://github.com/mattmc3/antidote.git "${ANTIDOTE_DIR}"
git config -f .gitmodules submodule.antidote.shallow true
}
zstyle ':antidote:bundle' use-friendly-names 'yes'
zsh_plugins=${ANTIDOTE_PLUGINS}
[[ -f ${zsh_plugins}.txt ]] || touch ${zsh_plugins}.txt
# Lazy-load antidote from its functions directory.
FPATH="$ANTIDOTE_DIR/functions:$FPATH"
autoload -Uz antidote
# Generate a new static file whenever .zsh_plugins.txt is updated.
if [[ ! ${zsh_plugins}.zsh -nt ${zsh_plugins}.txt ]]; then
antidote bundle <${zsh_plugins}.txt >|${zsh_plugins}.zsh
fi
# Source your static plugins file.
source ${zsh_plugins}.zsh
}
# Function to load antigen if available
load_antigen()
{
@@ -44,18 +72,24 @@ load_antigen()
zstyle :omz:plugins:ssh-agent lazy yes
zstyle :omz:plugins:ssh-agent quiet yes
# nvm
zstyle ':omz:plugins:nvm' autoload yes
# z, the zsh version
export ZSHZ_DATA="$XDG_STATE_HOME/z"
antigen bundle z
antigen bundle nvm
# these should be always available
antigen bundle jreese/zsh-titles
antigen bundle brew
antigen bundle colored-man-pages
antigen bundle zsh-users/zsh-completions
antigen bundle eza
x-have eza && antigen bundle eza
x-have tms && antigen bundle yuki-ycino/tms
# this needs to be the last item
# this needs to be the last bundle
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
fi
@@ -87,15 +121,12 @@ setup_tmux_window_name_plugin()
fi
}
main()
{
load_antigen
source_fzf_config
setup_tmux_window_name_plugin
if x-have antidot; then
eval "$(antidot init)"
fi
source "${XDG_CONFIG_HOME:-$HOME/.config}/asdf-direnv/zshrc"
}
# load_antigen
load_antidote
source_fzf_config
setup_tmux_window_name_plugin
x-have antidot && eval "$(antidot init)"
main "$@"
autoload -Uz compinit bashcompinit
compinit -d $ZSH_COMPDUMP
bashcompinit

View File

@@ -21,3 +21,5 @@ bob-nvim
bottom
// A modern alternative to ls
eza
// Tmux Sessionizer: A tool for opening git repositories as tmux sessions
tmux-sessionizer

View File

@@ -1,26 +1,27 @@
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
age https://github.com/threkk/asdf-age.git 4df80a0
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git ecd1642
bottom https://github.com/carbonteq/asdf-btm.git fd8a55a
direnv https://github.com/asdf-community/asdf-direnv.git a2219c2
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
golang https://github.com/asdf-community/asdf-golang.git 0e86b1d
hadolint https://github.com/devlincashman/asdf-hadolint.git 335e230
kubectl https://github.com/asdf-community/asdf-kubectl.git cbe6df4
lazygit https://github.com/nklmilojevic/asdf-lazygit.git 78e04f1
nodejs https://github.com/asdf-vm/asdf-nodejs.git c5b7c40
pipx https://github.com/yozachar/asdf-pipx.git 31db618
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
python https://github.com/asdf-community/asdf-python 7b0af87
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
ruby https://github.com/asdf-vm/asdf-ruby.git 27f78c9
rust https://github.com/code-lever/asdf-rust.git 95acf4f
shellcheck https://github.com/luizm/asdf-shellcheck.git 780d78d
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
terragrunt https://github.com/ohmer/asdf-terragrunt.git 4a6651a
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
yamllint https://github.com/ericcornelissen/asdf-yamllint.git 2f4fd4c
yq https://github.com/sudermanjr/asdf-yq.git 772992f
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
age https://github.com/threkk/asdf-age.git 396bdf6
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git b5862c1
bats https://github.com/timgluz/asdf-bats.git 299551f
bottom https://github.com/carbonteq/asdf-btm.git fd8a55a
delta https://github.com/andweeb/asdf-delta.git 501318b
direnv https://github.com/asdf-community/asdf-direnv.git 6ff3dbe
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
eza https://github.com/lwiechec/asdf-eza.git 11f578d
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
gitleaks https://github.com/jmcvetta/asdf-gitleaks.git 0cc0d7e
golang https://github.com/asdf-community/asdf-golang.git e2527a3
hadolint https://github.com/devlincashman/asdf-hadolint.git 335e230
kubectl https://github.com/asdf-community/asdf-kubectl.git 2fb3b57
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
ruby https://github.com/asdf-vm/asdf-ruby.git 194fe45
rust https://github.com/code-lever/asdf-rust.git 95acf4f
shellcheck https://github.com/luizm/asdf-shellcheck.git 66200ff
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
sops https://github.com/feniix/asdf-sops.git 5c7a2fb
terragrunt https://github.com/ohmer/asdf-terragrunt.git 4a6651a
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
yamllint https://github.com/ericcornelissen/asdf-yamllint.git bc2813e
yq https://github.com/sudermanjr/asdf-yq.git 772992f

View File

@@ -1,4 +1,4 @@
ansible
pipenv
semgrep
neovim
libtmux

View File

@@ -1,11 +1,11 @@
[global]
disable_stdin = true
disable_stdin = false
load_dotenv = true
hide_env_diff = true
hide_env_diff = false
[whitelist]
prefix = [
"~/Code/ivuorinen/"
"~/Code/"
]
exact = [
"~/.dotfiles/.envrc"

View File

@@ -14,30 +14,20 @@
# if DOTFILES is not set, set it to the default location
[ -z "$DOTFILES" ] && export DOTFILES="$HOME/.dotfiles"
# zsh completions directory
[ -z "$ZSH_COMPLETIONS" ] && export ZSH_COMPLETIONS="$XDG_CONFIG_HOME/zsh/completion"
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$XDG_DATA_HOME/bob/nvim-bin:$XDG_DATA_HOME/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
# Load bash completions if available for zsh
if [[ -n "$ZSH_VERSION" ]]; then
autoload bashcompinit
bashcompinit
fi
# Load asdf
export ASDF_DIR="$XDG_BIN_HOME/asdf"
if [[ -d $ASDF_DIR ]]; then
[[ -d $ASDF_DIR/bin ]] && x-path-prepend "$ASDF_DIR/bin"
[[ -d $ASDF_DIR/shims ]] && x-path-prepend "$ASDF_DIR/shims"
[[ -d $ASDF_DIR/completions ]] && fpath=("$ASDF_DIR/completions" $fpath)
[[ -d $ASDF_DIR/plugins ]] && fpath=("$ASDF_DIR/plugins" $fpath)
source "$ASDF_DIR/asdf.sh"
fi
# Add zsh completions to FPATH, compinit will be called later
FPATH="$ZSH_COMPLETIONS:$FPATH"
if ! command -v msg &> /dev/null; then
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "-> $1"
[[ "$VERBOSE" -eq 1 ]] && msgr msg "-> $1"
return 0
}
fi
@@ -125,7 +115,7 @@ preexec()
dfu()
{
(
cd "$DOTFILES" && git pull --ff-only && ./install
cd "$DOTFILES" && git rebase --ff --autostash && ./install
)
}
@@ -234,11 +224,11 @@ replacable()
FILE2="$2"
[[ ! -r "$FILE1" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 1 ($FILE1) does not exist"
[[ $VERBOSE -eq 1 ]] && msgr err "File 1 ($FILE1) does not exist"
return 0
}
[[ ! -r "$FILE2" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 2 ($FILE2) does not exist, replaceable"
[[ $VERBOSE -eq 1 ]] && msgr err "File 2 ($FILE2) does not exist, replaceable"
return 1
}
@@ -246,20 +236,20 @@ replacable()
FILE2_HASH=$(get_sha256sum "$FILE2")
[[ $FILE1_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 1 ($FILE1)"
[[ $VERBOSE -eq 1 ]] && msgr err "Could not get hash for file 1 ($FILE1)"
return 0
}
[[ $FILE2_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 2 ($FILE2), replaceable"
[[ $VERBOSE -eq 1 ]] && msgr err "Could not get hash for file 2 ($FILE2), replaceable"
return 1
}
[[ "$FILE1_HASH" == "$FILE2_HASH" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_ok "Files match, not replaceable: $FILE1"
[[ $VERBOSE -eq 1 ]] && msgr ok "Files match, not replaceable: $FILE1"
return 0
}
[[ $VERBOSE -eq 1 ]] && msg_warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
[[ $VERBOSE -eq 1 ]] && msgr warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
return 1
}
@@ -305,6 +295,42 @@ hash shopt 2> /dev/null && shopt -s checkwinsize
export SHORT_HOST=$(hostname -s)
# asdf
# https://github.com/asdf-vm/asdf
msg "Setting up asdf configuration"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
if [[ -d $ASDF_DIR ]]; then
[[ -d $ASDF_DIR/completions ]] && FPATH="$ASDF_DIR/completions:$FPATH"
[[ -d $ASDF_DIR/plugins ]] && FPATH="$ASDF_DIR/plugins:$FPATH"
export ASDF_CONFIG_FILE="${XDG_CONFIG_HOME}/asdf/asdfrc"
export ASDF_DATA_DIR="${ASDF_DIR}"
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
export ASDF_LOG_FILE="${XDG_CACHE_HOME}/asdf/asdf.log"
export ASDF_FORCE_PREPEND=yes
## Default package files
export ASDF_CRATE_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/cargo-packages"
export ASDF_GEM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/gem-packages"
export ASDF_GOLANG_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/golang-packages"
export ASDF_NPM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/npm-packages"
export ASDF_PYTHON_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/python-packages"
## Plugin configuration
export ASDF_DIRENV_IGNORE_MISSING_PLUGINS=1
export ASDF_GOLANG_MOD_VERSION_ENABLED=true
export ASDF_NODEJS_LEGACY_FILE_DYNAMIC_STRATEGY="latest_available"
## Add asdf to path
export PATH="${ASDF_DIR}/bin:${PATH}"
source "$ASDF_DIR/asdf.sh"
fi
# Antidote configuration
# https://getantidote.github.io/
msg "Setting up Antidote configuration"
export ANTIDOTE_DIR="$DOTFILES/tools/antidote"
export ANTIDOTE_HOME="$XDG_CACHE_HOME/antidote"
export ANTIDOTE_PLUGINS="$XDG_CONFIG_HOME/zsh/antidote_plugins"
# Antigen configuration
# https://github.com/zsh-users/antigen/wiki/Configuration
msg "Setting up Antigen configuration"
@@ -322,28 +348,6 @@ export ANSIBLE_GALAXY_CACHE_DIR="$XDG_CACHE_HOME/ansible/galaxy_cache"
x-dc "$ANSIBLE_HOME"
x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
# asdf
# https://github.com/asdf-vm/asdf
msg "Setting up asdf configuration"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
export ASDF_CONFIG_FILE="${XDG_CONFIG_HOME}/asdf/asdfrc"
export ASDF_DATA_DIR="${ASDF_DIR}"
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
export ASDF_LOG_FILE="${XDG_CACHE_HOME}/asdf/asdf.log"
export ASDF_FORCE_PREPEND=yes
## Default package files
export ASDF_CRATE_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/cargo-packages"
export ASDF_GEM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/gem-packages"
export ASDF_GOLANG_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/golang-packages"
export ASDF_NPM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/npm-packages"
export ASDF_PYTHON_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/python-packages"
## Plugin configuration
export ASDF_DIRENV_IGNORE_MISSING_PLUGINS=1
export ASDF_GOLANG_MOD_VERSION_ENABLED=true
export ASDF_NODEJS_LEGACY_FILE_DYNAMIC_STRATEGY="latest_available"
## Add asdf to path
export PATH="${ASDF_DIR}/bin:${PATH}"
# aws
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
@@ -400,6 +404,9 @@ x-dc "$DOCKER_CONFIG"
# Docker: Disable snyk ad
export DOCKER_SCAN_SUGGEST=false
# fzf
export FZF_DEFAULT_OPTS='--height 40% --tmux bottom,40% --layout reverse --border top'
# GnuPG
# https://gnupg.org/documentation/manuals/gnupg/Invoking-GPG.html
msg "Setting up GnuPG configuration"
@@ -411,6 +418,9 @@ msg "Setting up Go configuration"
export GOPATH="$XDG_DATA_HOME/go"
export GOBIN="$XDG_BIN_HOME"
# Lando
export PATH="$HOME/.lando/bin${PATH+:$PATH}" #landopath
# NPM: Add npm packages to path
msg "Setting up NPM configuration"
x-have node && {
@@ -435,6 +445,8 @@ export PYENV_ROOT="$XDG_STATE_HOME/pyenv"
## for MichaelAquilina/zsh-autoswitch-virtualenv
export AUTOSWITCH_VIRTUAL_ENV_DIR="$WORKON_HOME"
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
x-have pyenv && eval "$(pyenv init -)"
# Rust / cargo
msg "Setting up Rust/Cargo configuration"
@@ -463,6 +475,9 @@ export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
msg "Setting up tmux configuration"
export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
# tms, https://github.com/jrmoulton/tmux-sessionizer
export TMS_CONFIG_FILE="${XDG_CONFIG_HOME}/tms/config.toml"
# wakatime, https://github.com/wakatime/wakatime-cli
msg "Setting up Wakatime configuration"
export WAKATIME_HOME="$XDG_STATE_HOME/wakatime"

View File

@@ -20,3 +20,4 @@ auth.json
dfm.sh
.scannerwork
.phpactor.json
.zsh_history

View File

@@ -53,6 +53,10 @@ brew "aspell"
brew "autoconf"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# Cryptographic recipes and primitives for Python
brew "cryptography"
# Official Amazon AWS command-line interface
brew "awscli"
# Bourne-Again SHell, a UNIX command interpreter
brew "bash"
# GNU multiple precision arithmetic library
@@ -71,8 +75,6 @@ brew "gettext"
brew "glib"
# Mozilla CA bundle for Python
brew "certifi"
# Cryptographic recipes and primitives for Python
brew "cryptography"
# Get a file from an HTTP, HTTPS or FTP server
brew "curl"
# Lightweight DNS forwarder and DHCP server
@@ -85,6 +87,12 @@ brew "freetds"
brew "gd"
# GitHub command-line tool
brew "gh"
# OpenType text shaping engine
brew "harfbuzz"
# Secure hashing function
brew "libb2"
# Framework for layout and rendering of i18n text
brew "pango"
# Distributed revision control system
brew "git"
# Render markdown on the CLI
@@ -97,12 +105,6 @@ brew "gnutls"
brew "gnupg"
# Image manipulation
brew "netpbm"
# C/C++ and Java libraries for Unicode and globalization
brew "icu4c"
# OpenType text shaping engine
brew "harfbuzz"
# Framework for layout and rendering of i18n text
brew "pango"
# Library to render SVG files using Cairo
brew "librsvg"
# Graph visualization software from AT&T and Bell Labs
@@ -127,8 +129,6 @@ brew "json-c"
brew "krb5"
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
brew "legitify"
# Secure hashing function
brew "libb2"
# Postgres C API library
brew "libpq"
# Multi-platform support library with a focus on asynchronous I/O
@@ -143,10 +143,14 @@ brew "m-cli"
brew "nginx"
# Port scanning utility for large networks
brew "nmap"
# Libraries for security-enabled client and server applications
brew "nss"
# Open source suite of directory software
brew "openldap"
# General-purpose scripting language
brew "php"
# General-purpose scripting language
brew "php@8.2"
# Manage compile and link flags for libraries
brew "pkg-config"
# Send macOS User Notifications from the command-line

View File

@@ -9,9 +9,12 @@ insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 2
max_line_length = 100
max_line_length = 120
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
[*.json]
max_line_length = off

3
config/nvim/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
spell/*
!spell/.gitkeep

View File

@@ -1,7 +1,11 @@
column_width = 160
column_width = 80
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferSingle"
call_parentheses = "None"
collapse_simple_statement = "Always"
[sort_requires]
enabled = true

View File

@@ -7,7 +7,14 @@
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 }
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' },
@@ -21,7 +28,10 @@ end
vim.opt.rtp:prepend(lazypath)
-- ── Add ~/.local/bin to the PATH ────────────────────────────────────
vim.fn.setenv('PATH', vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH')
vim.fn.setenv(
'PATH',
vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH'
)
require 'options'
require 'autogroups'

View File

@@ -7,28 +7,65 @@ local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
-- ── Highlight on yank ───────────────────────────────────────────────
-- See `:help vim.highlight.on_yank()`
local highlight_group = augroup('YankHighlight', { clear = true })
autocmd('TextYankPost', {
callback = function()
vim.highlight.on_yank()
end,
group = highlight_group,
callback = function() vim.highlight.on_yank() end,
group = augroup('YankHighlight', { clear = true }),
pattern = '*',
})
-- ── Windows to close with "q" ───────────────────────────────────────
autocmd('FileType', {
callback = function()
vim.keymap.set('n', '<esc>', ':bd<CR>', { buffer = true, silent = true })
end,
group = augroup('close_with_q', { clear = true }),
pattern = {
'PlenaryTestPopup',
'checkhealth',
'dbout',
'gitsigns.blame',
'grug-far',
'help',
'startuptime',
'qf',
'lspinfo',
'man',
'checkhealth',
'neotest-output',
'neotest-output-panel',
'neotest-summary',
'notify',
'qf',
'spectre_panel',
'startuptime',
'tsplayground',
},
callback = function(event)
vim.bo[event.buf].buflisted = false
vim.keymap.set('n', 'q', '<cmd>close<cr>', {
buffer = event.buf,
silent = true,
desc = 'Quit buffer',
})
end,
})
-- ── make it easier to close man-files when opened inline ────────────
autocmd('FileType', {
group = augroup('man_unlisted', { clear = true }),
pattern = { 'man' },
callback = function(event) vim.bo[event.buf].buflisted = false end,
})
-- ── wrap and check for spell in text filetypes ──────────────────────
vim.api.nvim_create_autocmd('FileType', {
group = augroup('wrap_spell', { clear = true }),
pattern = { 'text', 'plaintex', 'typst', 'gitcommit', 'markdown' },
callback = function()
vim.opt_local.wrap = true
vim.opt_local.spell = true
end,
})
-- ── Fix conceallevel for json files ─────────────────────────────────
vim.api.nvim_create_autocmd({ 'FileType' }, {
group = augroup('json_conceal', { clear = true }),
pattern = { 'json', 'jsonc', 'json5' },
callback = function() vim.opt_local.conceallevel = 0 end,
})
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -19,6 +19,9 @@ vim.g.colors_variant_dark = 'tokyonight-storm'
-- Make sure editorconfig support is enabled
vim.g.editorconfig = true
-- Enable the colorcolumn
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })
-- Enable line numbers and relative line numbers
vim.opt.number = true
vim.opt.relativenumber = true
@@ -33,7 +36,8 @@ vim.opt.showmode = false
-- Schedule the setting after `UiEnter` because it can increase startup-time.
-- See `:help 'clipboard'`
vim.schedule(function()
vim.opt.clipboard = 'unnamedplus'
local c = vim.env.SSH_TTY and '' or 'unnamedplus'
vim.opt.clipboard = c
end)
vim.opt.breakindent = true -- Enable break indent
@@ -94,7 +98,8 @@ vim.g.loaded_ruby_provider = 0
-- kevinhwang91/nvim-ufo settings
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
vim.o.foldcolumn = '1' -- '0' is not bad
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
-- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
vim.o.foldenable = true
@@ -103,9 +108,27 @@ vim.o.winwidth = 15
vim.o.winminwidth = 10
vim.o.equalalways = false
-- folke/noice.nvim settings
vim.g.noice_ignored_filetypes = {
'fugitiveblame',
'fugitive',
'gitcommit',
'noice',
}
-- ── Deal with word wrap ───────────────────────────────────────────────────────
local m = vim.api.nvim_set_keymap
m('n', 'k', "v:count == 0 ? 'gk' : 'k'", { desc = 'Move up', noremap = true, expr = true })
m('n', 'j', "v:count == 0 ? 'gj' : 'j'", { desc = 'Move down', noremap = true, expr = true })
m(
'n',
'k',
"v:count == 0 ? 'gk' : 'k'",
{ desc = 'Move up', noremap = true, expr = true }
)
m(
'n',
'j',
"v:count == 0 ? 'gj' : 'j'",
{ desc = 'Move down', noremap = true, expr = true }
)
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -1,36 +0,0 @@
-- Autoformat
-- https://github.com/stevearc/conform.nvim
return {
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
keys = {
{
'<leader>cf',
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
mode = '',
desc = 'Format 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 = {
lua = { 'stylua' },
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use 'stop_after_first' to run the first available formatter from the list
javascript = { 'prettierd', 'prettier', stop_after_first = true },
},
},
}

View File

@@ -4,24 +4,54 @@ return {
{
'hrsh7th/nvim-cmp',
lazy = false,
version = false, -- Use the latest version of the plugin
event = 'InsertEnter',
dependencies = {
'hrsh7th/cmp-nvim-lsp',
-- ── LuaSnip Dependencies ────────────────────────────────────────────
-- Snippet Engine for Neovim written in Lua.
-- https://github.com/L3MON4D3/LuaSnip
{ 'L3MON4D3/LuaSnip', build = 'make install_jsregexp' },
-- luasnip completion source for nvim-cmp
-- https://github.com/saadparwaiz1/cmp_luasnip
{ 'saadparwaiz1/cmp_luasnip' },
{
'L3MON4D3/LuaSnip',
version = '*',
event = 'BufReadPre',
build = 'make install_jsregexp',
dependencies = {
-- luasnip completion source for nvim-cmp
-- https://github.com/saadparwaiz1/cmp_luasnip
'saadparwaiz1/cmp_luasnip',
'rafamadriz/friendly-snippets',
'molleweide/LuaSnip-snippets.nvim',
},
},
-- ── 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-buffer' },
{ 'hrsh7th/cmp-path' },
{ 'hrsh7th/cmp-nvim-lsp-signature-help' },
{ 'hrsh7th/cmp-emoji' },
{ 'hrsh7th/cmp-cmdline' },
-- cmp import and use all environment variables from .env.* and system
-- https://github.com/SergioRibera/cmp-dotenv
{ 'SergioRibera/cmp-dotenv' },
-- A dictionary completion source for nvim-cmp
-- https://github.com/uga-rosa/cmp-dictionary
{ 'uga-rosa/cmp-dictionary' },
-- An additional source for nvim-cmp to autocomplete packages and its versions
-- https://github.com/David-Kunz/cmp-npm
{
'David-Kunz/cmp-npm',
dependencies = { 'nvim-lua/plenary.nvim' },
ft = 'json',
opts = {},
},
-- https://github.com/chrisgrieser/cmp-nerdfont
{ 'chrisgrieser/cmp-nerdfont' },
-- ── Other deps ──────────────────────────────────────────────────────
-- vscode-like pictograms for neovim lsp completion items
-- https://github.com/onsails/lspkind.nvim
@@ -39,8 +69,8 @@ return {
cmd = 'Copilot',
build = ':Copilot setup',
event = { 'InsertEnter', 'LspAttach' },
fix_pairs = true,
opts = {
fix_pairs = true,
suggestion = { enabled = false },
panel = { enabled = false },
filetypes = {
@@ -50,9 +80,7 @@ return {
},
},
},
config = function()
require('copilot_cmp').setup()
end,
config = function() require('copilot_cmp').setup() end,
},
},
config = function()
@@ -60,42 +88,54 @@ return {
local luasnip = require 'luasnip'
local lspkind = require 'lspkind'
luasnip.config.setup {}
luasnip.snippets = require('luasnip_snippets').load_snippets()
require('luasnip.loaders.from_vscode').lazy_load()
require('copilot_cmp').setup()
require('cmp_dictionary').setup {
paths = { '/usr/share/dict/words' },
exact_length = 2,
}
local has_words_before = function()
if vim.api.nvim_get_option_value('buftype', {}) == 'prompt' then
return false
end
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match '^%s*$' == nil
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0
and vim.api
.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]
:match '^%s*$'
== nil
end
cmp.setup {
formatting = {
format = lspkind.cmp_format {
mode = 'symbol',
max_width = function()
return math.floor(0.45 * vim.o.columns)
end,
max_width = function() return math.floor(0.45 * vim.o.columns) end,
show_labelDetails = true,
symbol_map = {
Copilot = '',
Text = '',
Constructor = '',
},
},
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
view = {
width = function(_, _)
return math.min(80, vim.o.columns)
end,
entries = {
name = 'custom',
selection_order = 'near_cursor',
},
width = function(_, _) return math.min(80, vim.o.columns) end,
-- entries = {
-- name = 'custom',
-- selection_order = 'near_cursor',
-- },
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
expand = function(args) luasnip.lsp_expand(args.body) end,
},
mapping = cmp.mapping.preset.insert {
['<C-d>'] = cmp.mapping.scroll_docs(-4),
@@ -128,14 +168,20 @@ return {
end, { 'i', 's' }),
},
sources = {
-- function arg popups while typing
{ name = 'nvim_lsp_signature_help', group_index = 2 },
-- Copilot Source
{ name = 'copilot', group_index = 2 },
-- Other Sources
{ name = 'dictionary', keyword_length = 2, group_index = 2 },
{ name = 'npm', keyword_length = 4, group_index = 2 },
{ name = 'nvim_lsp', group_index = 2 },
{ name = 'path', group_index = 2 },
{ name = 'luasnip', group_index = 2 },
{ name = 'buffer', group_index = 2 },
{ name = 'dotenv', group_index = 2 },
{ name = 'path', group_index = 2 },
{ name = 'emoji', group_index = 2 },
{ name = 'nerdfont', group_index = 2 },
},
sorting = {
priority_weight = 2,
@@ -144,7 +190,7 @@ return {
-- Below is the default comparator list and order for nvim-cmp
cmp.config.compare.offset,
-- cmp.config.compare.scopes, --this is commented in nvim-cmp too
cmp.config.compare.scopes, --this is commented in nvim-cmp too
cmp.config.compare.exact,
cmp.config.compare.score,
cmp.config.compare.recently_used,
@@ -156,6 +202,34 @@ return {
},
},
}
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' },
},
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
}, {
{ name = 'cmdline' },
}),
matching = { disallow_symbol_nonprefix_matching = false },
})
end,
},
-- Luasnip choice node completion source for nvim-cmp
-- https://github.com/doxnit/cmp-luasnip-choice
{
'doxnit/cmp-luasnip-choice',
config = function()
require('cmp_luasnip_choice').setup {
auto_open = true, -- Automatically open nvim-cmp on choice node (default: true)
}
end,
},
}

View File

@@ -0,0 +1,9 @@
-- Commenting
-- "gc" to comment visual regions/lines
-- https://github.com/numToStr/Comment.nvim
return {
'numToStr/Comment.nvim',
version = '*',
event = { 'BufRead', 'BufNewFile' },
opts = {},
}

View File

@@ -0,0 +1,86 @@
-- ── Formatting ──────────────────────────────────────────────────────
-- Lightweight yet powerful formatter plugin for Neovim
-- https://github.com/stevearc/conform.nvim
return {
{
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
opts = {
-- Enable or disable logging
notify_on_error = false,
-- Set the default formatter for all filetypes
default_formatter = 'injected',
-- Set the default formatter for all filetypes
default_formatter_opts = {
lsp_format = 'fallback',
-- Set the default formatter for all filetypes
formatter = 'injected',
-- Set the default formatter for all filetypes
-- formatter_opts = {},
},
-- The options you set here will be merged with the builtin formatters.
-- You can also define any custom formatters here.
formatters = {
injected = { options = { ignore_errors = true } },
-- # Example of using dprint only when a dprint.json file is present
-- dprint = {
-- condition = function(ctx)
-- return vim.fs.find({ "dprint.json" }, { path = ctx.filename, upward = true })[1]
-- end,
-- },
--
-- # Example of using shfmt with extra args
-- shfmt = {
-- prepend_args = { "-i", "2", "-ci" },
-- },
},
formatters_by_ft = {
lua = { 'stylua' },
-- Conform will run multiple formatters sequentially
go = { 'goimports', 'gofmt' },
-- You can customize some of the format options for the filetype (:help conform.format)
-- rust = { 'rustfmt', lsp_format = 'fallback' },
},
format_on_save = function(bufnr)
-- Disable autoformat on certain filetypes
local ignore_filetypes = {
'c',
'cpp',
'sql',
'java',
}
if vim.tbl_contains(ignore_filetypes, vim.bo[bufnr].filetype) then
return
end
-- Disable with a global or buffer-local variable
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
-- Disable autoformat for files in a certain path
local bufname = vim.api.nvim_buf_get_name(bufnr)
if bufname:match '/node_modules/' then return end
if bufname:match '/vendor/' then return end
if bufname:match '/dist/' then return end
if bufname:match '/build/' then return end
return { timeout_ms = 500, lsp_format = 'fallback' }
end,
},
init = function()
-- If you want the formatexpr, here is the place to set it
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
end,
},
-- Automatically install formatters registered with conform.nvim via mason.nvim
-- https://github.com/zapling/mason-conform.nvim
{
'zapling/mason-conform.nvim',
depends = {
'stevearc/conform.nvim',
'williamboman/mason.nvim',
},
opts = {},
},
}

View File

@@ -1,25 +0,0 @@
return {
{
'rcarriga/nvim-dap-ui',
dependencies = {
'mfussenegger/nvim-dap',
'nvim-neotest/nvim-nio',
'theHamsta/nvim-dap-virtual-text',
'ray-x/go.nvim',
'ray-x/guihua.lua',
'leoluz/nvim-dap-go',
},
setup = function()
require('dapui').setup()
require('dap-go').setup()
require('nvim-dap-virtual-text').setup {}
vim.fn.sign_define('DapBreakpoint', {
text = '🔴',
texthl = 'DapBreakpoint',
linehl = 'DapBreakpoint',
numhl = 'DapBreakpoint',
})
end,
},
}

View File

@@ -0,0 +1,42 @@
-- Navigate your code with search labels, enhanced
-- character motions and Treesitter integration
-- https://github.com/folke/flash.nvim
return {
'folke/flash.nvim',
event = 'VeryLazy',
opts = {},
keys = {
{
'zk',
mode = { 'n', 'x', 'o' },
function() require('flash').jump() end,
desc = 'Flash',
},
{
'Zk',
mode = { 'n', 'x', 'o' },
function() require('flash').treesitter() end,
desc = 'Flash Treesitter',
},
{
'r',
mode = 'o',
function() require('flash').remote() end,
desc = 'Remote Flash',
},
{
'R',
mode = { 'o', 'x' },
function() require('flash').treesitter_search() end,
desc = 'Treesitter Search',
},
{
'<m-s>',
mode = { 'c' },
function() require('flash').toggle() end,
desc = 'Toggle Flash Search',
},
},
}
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -19,7 +19,8 @@ return {
hide_preview = false,
},
},
-- These two configs can also be passed down to the goto-preview definition and implementation calls for one off "peak" functionality.
-- These two configs can also be passed down to the goto-preview definition
-- and implementation calls for one off "peak" functionality.
focus_on_open = true, -- Focus the floating window when opening it.
dismiss_on_move = false, -- Dismiss the floating window when moving the cursor.
force_close = true, -- passed into vim.api.nvim_win_close's second argument. See :h nvim_win_close

View File

@@ -0,0 +1,47 @@
-- Getting you where you want with the fewest keystrokes.
-- https://github.com/ThePrimeagen/harpoon
return {
'ThePrimeagen/harpoon',
branch = 'harpoon2',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope.nvim',
},
config = function()
local harpoon = require 'harpoon'
harpoon:setup {}
-- basic telescope configuration
local conf = require('telescope.config').values
local function toggle_telescope(harpoon_files)
local file_paths = {}
for _, item in ipairs(harpoon_files.items) do
table.insert(file_paths, item.value)
end
require('telescope.pickers')
.new({}, {
prompt_title = 'Harpoon',
finder = require('telescope.finders').new_table {
results = file_paths,
},
previewer = conf.file_previewer {},
sorter = conf.generic_sorter {},
})
:find()
end
vim.keymap.set(
'n',
'<leader>hw',
function() toggle_telescope(harpoon:list()) end,
{ desc = 'Open harpoon window with telescope' }
)
vim.keymap.set(
'n',
'<leader>ht',
function() harpoon.ui:toggle_quick_menu(harpoon:list()) end,
{ desc = 'Open Harpoon Quick menu' }
)
end,
}

View File

@@ -1,37 +0,0 @@
return {
-- A better annotation generator.
-- Supports multiple languages and annotation conventions.
-- https://github.com/danymat/neogen
{ 'danymat/neogen', version = '*', opts = { enabled = true, snippet_engine = 'luasnip' } },
-- The Refactoring library based off the Refactoring book by Martin Fowler
-- https://github.com/ThePrimeagen/refactoring.nvim
{ 'ThePrimeagen/refactoring.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-treesitter/nvim-treesitter' }, opts = {} },
-- All the npm/yarn/pnpm commands I don't want to type
-- https://github.com/vuki656/package-info.nvim
{ 'vuki656/package-info.nvim', dependencies = { 'MunifTanjim/nui.nvim' } },
-- Add/change/delete surrounding delimiter pairs with ease. Written with ❤️ in Lua.
-- https://github.com/kylechui/nvim-surround
{ 'kylechui/nvim-surround', version = '*', event = 'VeryLazy' },
-- Highlight, list and search todo comments in your projects
-- https://github.com/folke/todo-comments.nvim
{ 'folke/todo-comments.nvim', dependencies = { 'nvim-lua/plenary.nvim' }, opts = {} },
-- Commenting
-- "gc" to comment visual regions/lines
-- https://github.com/numToStr/Comment.nvim
{ 'numToStr/Comment.nvim', event = { 'BufRead', 'BufNewFile' }, opts = {} },
-- Detect tabstop and shiftwidth automatically
-- https://github.com/tpope/vim-sleuth
{ 'tpope/vim-sleuth' },
-- Vim plugin for automatic time tracking and metrics
-- generated from your programming activity.
-- https://github.com/wakatime/vim-wakatime
{ 'wakatime/vim-wakatime', lazy = false, enabled = true },
}

View File

@@ -0,0 +1,21 @@
-- improve neovim lsp experience
-- https://github.com/nvimdev/lspsaga.nvim
-- https://nvimdev.github.io/lspsaga/
return {
'nvimdev/lspsaga.nvim',
event = 'LspAttach',
dependencies = {
'nvim-treesitter/nvim-treesitter', -- optional
'nvim-tree/nvim-web-devicons', -- optional
},
opts = {
code_action = {
show_server_name = true,
},
diagnostic = {
keys = {
quit = { 'q', '<ESC>' },
},
},
},
}

View File

@@ -1,288 +1,239 @@
-- Quickstart configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
-- ── Mason and LSPConfig integration ────────────────────────────────────
-- ── LSP settings. ───────────────────────────────────────────────
-- This function gets run when an LSP connects to a particular buffer.
-- Make runtime files discoverable to the server
local runtime_path = vim.split(package.path, ';')
table.insert(runtime_path, 'lua/?.lua')
table.insert(runtime_path, 'lua/?/init.lua')
-- nvim-cmp supports additional completion capabilities
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Tell the server the capability of foldingRange,
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
capabilities.textDocument.foldingRange = {
dynamicRegistration = true,
lineFoldingOnly = true,
}
return {
{
'neovim/nvim-lspconfig',
lazy = false,
dependencies = {
-- Garbage collector that stops inactive LSP clients to free RAM
-- https://github.com/Zeioth/garbage-day.nvim
{
'zeioth/garbage-day.nvim',
dependencies = 'neovim/nvim-lspconfig',
event = 'VeryLazy',
opts = {},
},
-- improve neovim lsp experience
-- https://github.com/nvimdev/lspsaga.nvim
{
'nvimdev/lspsaga.nvim',
dependencies = {
'nvim-treesitter/nvim-treesitter', -- optional
'nvim-tree/nvim-web-devicons', -- optional
},
opts = {
code_action = {
show_server_name = true,
},
diagnostic = {
keys = {
quit = { 'q', '<ESC>' },
},
},
},
},
-- ── Mason and LSPConfig integration ─────────────────────────────────
-- Automatically install LSPs to stdpath for neovim
-- Portable package manager for Neovim that runs everywhere Neovim runs.
-- Easily install and manage LSP servers, DAP servers, linters,
-- and formatters.
-- https://github.com/williamboman/mason.nvim
{ 'williamboman/mason.nvim' },
{ 'williamboman/mason-lspconfig.nvim' },
{ 'WhoIsSethDaniel/mason-tool-installer.nvim' },
-- ── Linting ─────────────────────────────────────────────────────────
-- An asynchronous linter plugin for Neovim complementary to the
-- built-in Language Server Protocol support.
-- https://github.com/mfussenegger/nvim-lint
{
'mfussenegger/nvim-lint',
event = { 'BufReadPre', 'BufNewFile' },
},
-- Extension to mason.nvim that makes it
-- easier to use nvim-lint with mason.nvim
-- https://github.com/rshkarin/mason-nvim-lint
{ 'rshkarin/mason-nvim-lint' },
-- ── Misc ────────────────────────────────────────────────────────────
-- vscode-like pictograms for neovim lsp completion items
-- https://github.com/onsails/lspkind-nvim
{ 'onsails/lspkind.nvim' },
-- JSON schemas for Neovim
-- https://github.com/b0o/SchemaStore.nvim
{ 'b0o/schemastore.nvim' },
},
config = function()
-- ── LSP settings. ───────────────────────────────────────────────────
-- This function gets run when an LSP connects to a particular buffer.
-- Make runtime files discoverable to the server
local runtime_path = vim.split(package.path, ';')
table.insert(runtime_path, 'lua/?.lua')
table.insert(runtime_path, 'lua/?/init.lua')
-- Generate a command `:Format` local to the LSP buffer
--
---@param _ nil Skipped
---@param bufnr number Buffer number
---@output nil
local on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
if vim.lsp.buf.format then
vim.lsp.buf.format()
elseif vim.lsp.buf.formatting then
vim.lsp.buf.formatting()
else
require('conform').format { async = true, lsp_fallback = true }
end
end, { desc = 'Format current buffer with LSP' })
end
-- ── Setup mason so it can manage external tooling ───────────────────
require('mason').setup()
-- ── Enable the following language servers ───────────────────────────
-- :help lspconfig-all for all pre-configured LSPs
local servers = {
ast_grep = {},
actionlint = {}, -- GitHub Actions
ansiblels = {}, -- Ansible
bashls = {}, -- Bash
-- csharp_ls = {}, -- C#, requires dotnet executable
css_variables = {}, -- CSS
cssls = {}, -- CSS
docker_compose_language_service = {}, -- Docker compose
dockerls = {}, -- Docker
eslint = {}, -- ESLint
gitlab_ci_ls = {}, -- GitLab CI
gopls = {}, -- Go
html = {}, -- HTML
intelephense = {}, -- PHP
pest_ls = {}, -- Pest (PHP)
phpactor = {}, -- PHP
psalm = {}, -- PHP
pyright = {}, -- Python
semgrep = {}, -- Security
shellcheck = {}, -- Shell scripts
shfmt = {}, -- Shell scripts formatting
stylelint_lsp = {}, -- Stylelint for S/CSS
stylua = {}, -- Used to format Lua code
tailwindcss = {}, -- Tailwind CSS
terraformls = {}, -- Terraform
tflint = {}, -- Terraform
ts_ls = {}, -- TypeScript/JS
typos_lsp = {}, -- Better writing
volar = {}, -- Vue
yamlls = {}, -- YAML
lua_ls = {
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT)
version = 'LuaJIT',
-- Setup your lua path
path = runtime_path,
},
diagnostics = {
globals = { 'vim' },
disable = {
-- Ignore Lua_LS's noisy `missing-fields` warnings
'missing-fields',
},
},
workspace = {
library = vim.api.nvim_get_runtime_file('', true),
checkThirdParty = false,
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = { enable = false },
completion = {
callSnippet = 'Replace',
},
},
},
},
jsonls = {
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
yaml = {
schemaStore = {
-- You must disable built-in schemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.
enable = false,
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
url = '',
},
schemas = require('schemastore').yaml.schemas(),
validate = { enable = true },
},
},
},
}
-- Mason servers should be it's own variable for mason-nvim-lint
'folke/neoconf.nvim',
cmd = 'Neoconf',
opts = {},
},
-- Portable package manager for Neovim that runs everywhere Neovim runs.
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
-- https://github.com/williamboman/mason.nvim
{
'williamboman/mason.nvim',
cmd = 'Mason',
run = ':MasonUpdate',
opts = {
PATH = 'prepend',
-- Mason servers to install
-- See: https://mason-registry.dev/registry/list
local mason_servers = {
'actionlint',
'ansible-language-server',
'ansible-lint',
'bash-language-server',
'blade-formatter',
ensure_installed = {
'clang-format',
'codespell',
'commitlint',
'diagnostic-languageserver',
'docker-compose-language-service',
'dockerfile-language-server',
'editorconfig-checker',
'fixjson',
'flake8',
'html-lsp',
'jq',
'jsonlint',
'luacheck',
'php-cs-fixer',
'phpcbf',
'phpcs',
'phpmd',
'semgrep',
'prettier',
'shellcheck',
'shfmt',
'stylelint',
'stylua',
'vue-language-server',
'yamllint',
}
local ensure_installed = vim.tbl_keys(servers or {})
vim.list_extend(ensure_installed, mason_servers)
-- ── Automagically install tools ─────────────────────────────────────
require('mason-tool-installer').setup {
ensure_installed = ensure_installed,
auto_update = true,
}
-- ── Ensure the servers above are installed ──────────────────────────
require('mason-lspconfig').setup {
automatic_installation = true,
ensure_installed = servers,
}
-- nvim-cmp supports additional completion capabilities
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
require('mason-lspconfig').setup_handlers {
},
},
},
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
-- https://github.com/williamboman/mason-lspconfig.nvim
{
'williamboman/mason-lspconfig.nvim',
opts = {
-- ── Enable the following language servers ───────────────────────────
-- :help lspconfig-all for all pre-configured LSPs
ensure_installed = {
'bashls',
-- 'csharp_ls',
'diagnosticls',
'gopls',
'html',
'intelephense',
'jsonls',
'lua_ls',
'tailwindcss',
'ts_ls',
'vimls',
'volar',
},
automatic_installation = true,
handlers = {
-- The first entry (without a key) will be the default handler
-- and will be called for each installed server that doesn't have
-- a dedicated handler.
function(server_name) -- default handler (optional)
require('lspconfig')[server_name].setup {}
end,
-- Next, you can provide a dedicated handler for specific servers.
-- For example, a handler override for the `rust_analyzer`:
-- ['rust_analyzer'] = function()
-- require('rust-tools').setup {}
-- end,
}
for _, lsp in ipairs(servers) do
require('lspconfig')[lsp].setup {
on_attach = on_attach,
capabilities = capabilities,
}
end
require('lspconfig').lua_ls.setup {
on_attach = on_attach,
capabilities = capabilities,
settings = {
Lua = servers.lua_ls.settings.Lua,
},
}
vim.api.nvim_create_autocmd('FileType', {
pattern = 'sh',
callback = function()
vim.lsp.start {
name = 'bash-language-server',
cmd = { 'bash-language-server', 'start' },
require('lspconfig')[server_name].setup {
on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(
bufnr,
'Format',
function(_)
require('conform').format {
formatters = { 'injected' },
async = true,
lsp_fallback = true,
}
end,
{ desc = 'Format current buffer with LSP' }
)
end,
capabilities = capabilities,
}
end,
})
-- Next, you can provide targeted overrides for specific servers.
['lua_ls'] = function()
require('lspconfig')['lua_ls'].setup {
on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(
bufnr,
'Format',
function(_)
require('conform').format {
formatters = { 'injected' },
async = true,
lsp_fallback = true,
}
end,
{ desc = 'Format current buffer with LSP' }
)
end,
capabilities = capabilities,
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're
-- using (most likely LuaJIT)
version = 'LuaJIT',
-- Setup your lua path
path = runtime_path,
},
diagnostics = {
globals = { 'vim' },
disable = {
-- Ignore lua_ls noisy `missing-fields` warnings
'missing-fields',
},
},
workspace = {
library = vim.api.nvim_get_runtime_file('', true),
checkThirdParty = false,
},
-- Do not send telemetry data containing a randomized
-- but unique identifier
telemetry = { enable = false },
-- ── Setup linting ───────────────────────────────────────────────────
require('mason-nvim-lint').setup {
ensure_installed = mason_servers or {},
quiet_mode = true,
}
local lint = require 'lint'
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
group = lint_augroup,
callback = function()
lint.try_lint()
completion = {
callSnippet = 'Replace',
},
},
},
}
end,
})
end,
['jsonls'] = function()
require('lspconfig')['jsonls'].setup {
on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(
bufnr,
'Format',
function(_)
require('conform').format {
formatters = { 'injected' },
async = true,
lsp_fallback = true,
}
end,
{ desc = 'Format current buffer with LSP' }
)
end,
capabilities = capabilities,
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
yaml = {
schemaStore = {
-- You must disable built-in SchemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.
enable = false,
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
url = '',
},
schemas = require('schemastore').yaml.schemas(),
validate = { enable = true },
},
},
}
end,
['ts_ls'] = function()
local mason_registry = require 'mason-registry'
local ts_plugin_location = mason_registry
.get_package('vue-language-server')
:get_install_path() .. '/node_modules/@vue/typescript-plugin'
require('lspconfig')['volar'].setup {
init_options = {
plugins = {
{
name = '@vue/typescript-plugin',
location = ts_plugin_location,
languages = { 'javascript', 'typescript', 'vue' },
},
},
},
filetypes = {
'typescript',
'javascript',
'javascriptreact',
'typescriptreact',
'vue',
},
}
end,
},
},
},
-- ── Misc ───────────────────────────────────────────────────
-- vscode-like pictograms for neovim lsp completion items
-- https://github.com/onsails/lspkind-nvim
{ 'onsails/lspkind.nvim', opts = {} },
-- JSON schemas for Neovim
-- https://github.com/b0o/SchemaStore.nvim
{ 'b0o/schemastore.nvim' },
-- ── LSP ────────────────────────────────────────────────────
-- Quick start configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
{ 'neovim/nvim-lspconfig', dependencies = { 'folke/neoconf.nvim' } },
-- Garbage collector that stops inactive LSP clients to free RAM
-- https://github.com/Zeioth/garbage-day.nvim
{
'zeioth/garbage-day.nvim',
dependencies = 'neovim/nvim-lspconfig',
event = 'VeryLazy',
opts = {},
},
}

View File

@@ -6,33 +6,65 @@ return {
'kyazdani42/nvim-web-devicons',
'folke/noice.nvim',
},
opts = {
options = {
icons_enabled = true,
component_separators = '|',
section_separators = '',
},
-- Sections
-- +-------------------------------------------------+
-- | A | B | C X | Y | Z |
-- +-------------------------------------------------+
sections = {
lualine_b = {
{
'buffers',
},
},
config = function()
local function diff_source()
local gitsigns = vim.b.gitsigns_status_dict
if gitsigns then
return {
added = gitsigns.added,
modified = gitsigns.changed,
removed = gitsigns.removed,
}
end
end
lualine_x = {
{
require('noice').api.statusline.mode.get,
cond = require('noice').api.statusline.mode.has,
require('lualine').setup {
options = {
icons_enabled = true,
component_separators = '|',
section_separators = '',
},
-- Sections
-- +-------------------------------------------------+
-- | A | B | C X | Y | Z |
-- +-------------------------------------------------+
sections = {
lualine_a = {
'mode',
},
{
require('noice').api.status.command.get,
cond = require('noice').api.status.command.has,
lualine_b = {
{ 'b:gitsigns_head', icon = '' },
{ 'diff', source = diff_source },
'diagnostics',
},
lualine_c = {
'filename',
},
lualine_x = {
'filetype',
},
lualine_y = {
'location',
},
lualine_z = {
{
require('noice').api.statusline.mode.get,
cond = require('noice').api.statusline.mode.has,
},
{
require('noice').api.status.command.get,
cond = require('noice').api.status.command.has,
},
},
},
},
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { 'filename' },
lualine_x = { 'location' },
lualine_y = {},
lualine_z = {},
},
}
end,
}

View File

@@ -0,0 +1,40 @@
-- https://github.com/echasnovski/mini.nvim
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
return {
-- Presets for common options and mappings
{ 'echasnovski/mini.basics', version = '*' },
-- Visualize and work with indent scope
-- Replaced lukas-reineke/indent-blankline.nvim
{ 'echasnovski/mini.indentscope', version = '*', opts = {} },
-- Animate common Neovim actions
-- Replaced anuvyklack/windows.nvim
{ 'echasnovski/mini.animate', version = '*', opts = {} },
-- Fast and feature-rich surround actions
-- Replaced kylechui/nvim-surround
{ 'echasnovski/mini.surround', version = '*', opts = {} },
-- Icons
{
'echasnovski/mini.icons',
opts = {
file = {
['.keep'] = { glyph = '󰊢', hl = 'MiniIconsGrey' },
['devcontainer.json'] = { glyph = '', hl = 'MiniIconsAzure' },
},
filetype = {
dotenv = { glyph = '', hl = 'MiniIconsYellow' },
},
},
},
-- Split and join arguments, lists, and other sequences
-- Replaced Wansmer/treesj
{ 'echasnovski/mini.splitjoin', version = '*', opts = {} },
-- Work with diff hunks
-- Replaced lewis6991/gitsigns.nvim
{ 'echasnovski/mini.diff', version = '*', opts = {} },
}

View File

@@ -0,0 +1,8 @@
-- A better annotation generator.
-- Supports multiple languages and annotation conventions.
-- https://github.com/danymat/neogen
return {
'danymat/neogen',
version = '*',
opts = { enabled = true, snippet_engine = 'luasnip' },
}

View File

@@ -1,14 +1,6 @@
-- Highly experimental plugin that completely replaces the UI
-- for messages, cmdline and the popupmenu.
-- https://github.com/folke/noice.nvim
vim.g.noice_ignored_filetypes = {
'fugitiveblame',
'fugitive',
'gitcommit',
'noice',
}
return {
'folke/noice.nvim',
lazy = false,
@@ -51,6 +43,13 @@ return {
},
opts = { skip = true },
},
{
filter = {
event = 'notify',
find = 'No information available',
},
opts = { skip = true },
},
},
views = {
cmdline_popup = {

View File

@@ -8,52 +8,16 @@ return {
{ 'nvim-lua/plenary.nvim' },
{ 'nvim-telescope/telescope-symbols.nvim' },
{ 'folke/which-key.nvim' },
-- Getting you where you want with the fewest keystrokes.
-- https://github.com/ThePrimeagen/harpoon
{
'ThePrimeagen/harpoon',
branch = 'harpoon2',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope.nvim',
},
config = function()
local harpoon = require 'harpoon'
harpoon:setup {}
-- basic telescope configuration
local conf = require('telescope.config').values
local function toggle_telescope(harpoon_files)
local file_paths = {}
for _, item in ipairs(harpoon_files.items) do
table.insert(file_paths, item.value)
end
require('telescope.pickers')
.new({}, {
prompt_title = 'Harpoon',
finder = require('telescope.finders').new_table {
results = file_paths,
},
previewer = conf.file_previewer {},
sorter = conf.generic_sorter {},
})
:find()
end
vim.keymap.set('n', '<leader>hw', function()
toggle_telescope(harpoon:list())
end, { desc = 'Open harpoon window with telescope' })
vim.keymap.set('n', '<leader>ht', function()
harpoon.ui:toggle_quick_menu(harpoon:list())
end, { desc = 'Open Harpoon Quick menu' })
end,
},
-- A Telescope picker to quickly access configurations
-- of plugins managed by lazy.nvim.
-- https://github.com/polirritmico/telescope-lazy-plugins.nvim
{ 'polirritmico/telescope-lazy-plugins.nvim' },
-- Neovim plugin. Telescope.nvim extension that adds LuaSnip integration.
-- https://github.com/benfowler/telescope-luasnip.nvim
{ 'benfowler/telescope-luasnip.nvim' },
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
-- Only load if `make` is available
{
@@ -61,6 +25,10 @@ return {
build = 'make',
cond = vim.fn.executable 'make' == 1,
},
-- Import modules with ease
-- https://github.com/piersolenski/telescope-import.nvim
{ 'piersolenski/telescope-import.nvim' },
},
config = function()
local t = require 'telescope'
@@ -86,12 +54,37 @@ return {
},
},
},
extensions = {
lazy_plugins = {
-- Must be a valid path to the file containing the lazy spec and setup() call.
lazy_config = vim.fn.stdpath 'config' .. '/init.lua',
},
import = {
-- Imports can be added at a specified line whilst keeping the cursor in place
insert_at_top = true,
-- Optionally support additional languages or modify existing languages...
custom_languages = {
{
-- The filetypes that ripgrep supports (find these via `rg --type-list`)
extensions = { 'js', 'ts' },
-- The Vim filetypes
filetypes = { 'vue' },
-- Optionally set a line other than 1
insert_at_line = 2, ---@type function|number
-- The regex pattern for the import statement
regex = [[^(?:import(?:[\"'\s]*([\w*{}\n, ]+)from\s*)?[\"'\s](.*?)[\"'\s].*)]],
},
},
},
},
}
-- Load extensions
pcall(t.load_extension, 'harpoon')
pcall(t.load_extension, 'git_worktree')
pcall(t.load_extension, 'lazy_plugins')
pcall(t.load_extension, 'luasnip')
pcall(t.load_extension, 'import')
-- Enable telescope fzf native, if installed
pcall(t.load_extension, 'fzf')
@@ -101,10 +94,12 @@ return {
-- See `:help telescope.keymap`
vim.keymap.set('n', '<leader>/', function()
-- You can pass additional configuration to telescope to change theme, layout, etc.
require('telescope.builtin').current_buffer_fuzzy_find(themes.get_dropdown {
winblend = 10,
previewer = true,
})
require('telescope.builtin').current_buffer_fuzzy_find(
themes.get_dropdown {
winblend = 20,
previewer = true,
}
)
end, { desc = '[/] Fuzzily search in current buffer]' })
end,
}

View File

@@ -0,0 +1,8 @@
-- Highlight, list and search todo comments in your projects
-- https://github.com/folke/todo-comments.nvim
return {
'folke/todo-comments.nvim',
version = '*',
dependencies = { 'nvim-lua/plenary.nvim' },
opts = {},
}

View File

@@ -2,11 +2,15 @@
-- https://github.com/nvim-treesitter/nvim-treesitter
return {
'nvim-treesitter/nvim-treesitter',
version = false, -- last release is way too old and doesn't work on Windows
build = function()
pcall(require('nvim-treesitter.install').update { with_sync = true })
end,
dependencies = {
'nvim-treesitter/nvim-treesitter-textobjects',
'nvim-treesitter/nvim-treesitter-refactor',
'nvim-treesitter/nvim-treesitter-context',
'JoosepAlviste/nvim-ts-context-commentstring',
},
config = function()
require('nvim-treesitter.configs').setup {
@@ -46,13 +50,39 @@ return {
'yaml',
},
refactor = {
navigation = {
enable = true,
-- Assign keymaps to false to disable them, e.g. `goto_definition = false`.
keymaps = {
goto_definition = '<leader>gnd',
list_definitions = '<leader>gnD',
list_definitions_toc = '<leader>gO',
goto_next_usage = '<a-*>',
goto_previous_usage = '<a-#>',
},
},
smart_rename = {
enable = true,
-- Assign keymaps to false to disable them, e.g. `smart_rename = false`.
keymaps = {
smart_rename = 'grr',
},
},
highlight_definitions = {
enable = true,
-- Set to false if you have an `updatetime` of ~100.
clear_on_cursor_move = true,
},
highlight_current_scope = { enable = false },
},
highlight = { enable = true },
indent = { enable = true },
incremental_selection = {
enable = true,
keymaps = {
init_selection = '<c-space>',
node_incremental = '<c-space>',
init_selection = '<a-space>',
node_incremental = '<a-space>',
scope_incremental = '<c-s>',
node_decremental = '<c-backspace>',
},

View File

@@ -7,7 +7,7 @@ return {
lazy = false,
dependencies = { 'nvim-tree/nvim-web-devicons' },
opts = {
auto_preview = false,
auto_preview = true,
auto_fold = true,
auto_close = true,
use_lsp_diagnostic_signs = true,

View File

@@ -1,21 +1,80 @@
-- Not UFO in the sky, but an ultra fold in Neovim.
-- https://github.com/kevinhwang91/nvim-ufo/
return {
{
'kevinhwang91/nvim-ufo',
version = '*',
dependencies = {
{ 'kevinhwang91/promise-async' },
{ 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' },
{
-- Status column plugin that provides a configurable
-- 'statuscolumn' and click handlers.
-- https://github.com/luukvbaal/statuscol.nvim
'luukvbaal/statuscol.nvim',
opts = {},
},
'kevinhwang91/nvim-ufo',
version = '*',
dependencies = {
{ 'neovim/nvim-lspconfig' },
{ 'kevinhwang91/promise-async' },
{ 'nvim-treesitter/nvim-treesitter' },
{
-- Status column plugin that provides a configurable
-- 'statuscolumn' and click handlers.
-- https://github.com/luukvbaal/statuscol.nvim
'luukvbaal/statuscol.nvim',
config = function()
local builtin = require 'statuscol.builtin'
require('statuscol').setup {
relculright = true,
ft_ignore = {
'dashboard',
'NvimTree',
'help',
'vim',
'alpha',
'dashboard',
'neo-tree',
'Trouble',
'lazy',
'toggleterm',
},
bt_ignore = {
'help',
'vim',
'alpha',
'dashboard',
'neo-tree',
'Trouble',
'lazy',
'toggleterm',
},
segments = {
{
text = { builtin.foldfunc },
click = 'v:lua.ScFa',
},
{
sign = {
namespace = { 'diagnostic/signs' },
maxwidth = 2,
-- auto = true,
},
click = 'v:lua.ScSa',
},
{
text = { builtin.lnumfunc, ' ' },
click = 'v:lua.ScLa',
},
},
}
end,
},
opts = {
},
config = function()
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.foldingRange = {
dynamicRegistration = true,
lineFoldingOnly = true,
}
local language_servers = require('lspconfig').util.available_servers() -- or list servers manually like {'gopls', 'clangd'}
for _, ls in ipairs(language_servers) do
require('lspconfig')[ls].setup {
capabilities = capabilities,
-- you can add other fields for setting up lsp server in this table
}
end
require('ufo').setup {
open_fold_hl_timeout = 150,
close_fold_kinds_for_ft = { 'imports', 'comment' },
preview = {
@@ -31,9 +90,11 @@ return {
jumpBot = ']',
},
},
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
return { 'treesitter', 'indent' }
end,
-- fold_virt_text_handler
--
-- This handler is called when the fold text is too long to fit in the window.
@@ -45,7 +106,13 @@ return {
---@param width number The width of the window.
---@param truncate function Truncate function
---@return table
fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate)
fold_virt_text_handler = function(
virtText,
lnum,
endLnum,
width,
truncate
)
local newVirtText = {}
local suffix = (' 󰁂 %d '):format(endLnum - lnum)
local sufWidth = vim.fn.strdisplaywidth(suffix)
@@ -72,6 +139,6 @@ return {
table.insert(newVirtText, { suffix, 'MoreMsg' })
return newVirtText
end,
},
},
}
end,
}

View File

@@ -4,9 +4,7 @@ return {
{
'folke/tokyonight.nvim',
priority = 1000, -- Make sure to load this before all the other start plugins.
init = function()
vim.cmd.colorscheme(vim.g.colors_theme)
end,
init = function() vim.cmd.colorscheme(vim.g.colors_theme) end,
opts = {
transparent = true,
},
@@ -29,65 +27,85 @@ return {
},
},
-- A neovim plugin that shows colorcolumn dynamically
-- https://github.com/Bekaboo/deadcolumn.nvim
{ 'Bekaboo/deadcolumn.nvim' },
-- vim dashboard
-- https://github.com/nvimdev/dashboard-nvim
{
'nvimdev/dashboard-nvim',
event = 'VimEnter',
config = function()
require('dashboard').setup {
theme = 'doom',
config = {
disable_move = true,
week_header = {
enable = true,
},
shortcut = {},
center = {
{
icon = '',
icon_hl = '@variable',
desc = 'Files',
group = 'Label',
action = 'Telescope find_files',
key = 'f',
},
{
icon = '',
desc = 'Marks',
group = 'DiagnosticHint',
action = 'Telescope harpoon marks',
key = 'a',
},
{
icon = '',
desc = 'TODO',
group = 'DiagnosticOptions',
action = 'TodoTelescope',
key = 't',
},
{
icon = '',
desc = 'Search',
group = 'Number',
action = 'Telescope live_grep',
key = 's',
},
{
icon = '󰊳 ',
desc = 'Lazy Update',
group = '@property',
action = 'Lazy update',
key = 'u',
},
{
icon = '',
desc = 'Quit',
group = 'DiagnosticError',
action = 'q',
key = 'q',
},
},
},
}
end,
dependencies = { { 'nvim-tree/nvim-web-devicons' } },
},
-- Remove all background colors to make nvim transparent
-- https://github.com/xiyaowong/nvim-transparent
{ 'xiyaowong/nvim-transparent', opts = {} },
-- Twilight is a Lua plugin for Neovim 0.5 that dims inactive
-- portions of the code you're editing using TreeSitter.
-- https://github.com/folke/twilight.nvim
{ 'folke/twilight.nvim', opts = {} },
-- Display a character as the colorcolumn
-- https://github.com/lukas-reineke/virt-column.nvim
{ 'lukas-reineke/virt-column.nvim', opts = {} },
-- Indent guides for Neovim
-- https://github.com/lukas-reineke/indent-blankline.nvim
{ 'lukas-reineke/indent-blankline.nvim', main = 'ibl', opts = {} },
-- Git integration for buffers
-- https://github.com/lewis6991/gitsigns.nvim
{
'lewis6991/gitsigns.nvim',
lazy = false,
opts = {
signs = {
add = { text = '+' },
change = { text = '~' },
delete = { text = '_' },
topdelete = { text = '' },
changedelete = { text = '~' },
},
current_line_blame = false,
on_attach = function(bufnr)
local gs = 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', 'gn', function()
if vim.wo.diff then
return ']c'
end
vim.schedule(function()
gs.next_hunk()
end)
return '<Ignore>'
end, { expr = true })
map('n', 'gp', function()
if vim.wo.diff then
return '[c'
end
vim.schedule(function()
gs.prev_hunk()
end)
return '<Ignore>'
end, { expr = true })
end,
},
},
-- ui components
{ 'MunifTanjim/nui.nvim', lazy = true },
-- Seamless navigation between tmux panes and vim splits
-- https://github.com/christoomey/vim-tmux-navigator
@@ -100,6 +118,7 @@ return {
'TmuxNavigateRight',
'TmuxNavigatePrevious',
},
opts = {},
},
-- Cloak allows you to overlay *'s over defined patterns in defined files.
@@ -142,7 +161,6 @@ return {
{
'bennypowers/nvim-regexplainer',
event = 'BufEnter',
lazy = false,
dependencies = {
'nvim-treesitter/nvim-treesitter',
'MunifTanjim/nui.nvim',
@@ -157,23 +175,14 @@ return {
-- https://github.com/LudoPinelli/comment-box.nvim
{ 'LudoPinelli/comment-box.nvim', opts = {} },
-- Automatically expand width of the current window.
-- Maximizes and restore it. And all this with nice animations!
-- https://github.com/anuvyklack/windows.nvim
{
'anuvyklack/windows.nvim',
dependencies = {
'anuvyklack/middleclass',
'anuvyklack/animation.nvim',
},
opts = {},
},
-- Plugin to improve viewing Markdown files in Neovim
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
{
'MeanderingProgrammer/render-markdown.nvim',
dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' },
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons',
},
ft = 'markdown',
opts = {},
},

View File

@@ -0,0 +1,3 @@
-- Detect tabstop and shiftwidth automatically
-- https://github.com/tpope/vim-sleuth
return { 'tpope/vim-sleuth' }

View File

@@ -0,0 +1,4 @@
-- Vim plugin for automatic time tracking and metrics
-- generated from your programming activity.
-- https://github.com/wakatime/vim-wakatime
return { 'wakatime/vim-wakatime', lazy = false, enabled = true }

View File

@@ -22,22 +22,31 @@ return {
{
'<leader>b',
group = '[b] Buffer',
expand = function()
-- Add the current buffers to the menu
return require('which-key.extras').expand.buf()
end,
-- Add the current buffers to the menu
expand = function() return require('which-key.extras').expand.buf() end,
},
{
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last' },
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First' },
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev' },
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next' },
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete' },
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout' },
},
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last', mode = 'n' },
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First', mode = 'n' },
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev', mode = 'n' },
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next', mode = 'n' },
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete', mode = 'n' },
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout', mode = 'n' },
-- ── Code ────────────────────────────────────────────────────────────
{ '<leader>c', group = '[c] Code' },
{ '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', desc = 'LSP: Code Action' },
{ '<leader>cg', '<cmd>lua require("neogen").generate()<CR>', desc = 'Generate annotations' },
{
'<leader>ca',
'<cmd>lua vim.lsp.buf.code_action()<CR>',
desc = 'LSP: Code Action',
},
{
'<leader>cg',
'<cmd>lua require("neogen").generate()<CR>',
desc = 'Generate annotations',
},
-- ── Code: CommentBox ────────────────────────────────────────────────
{ '<leader>cb', group = 'CommentBox' },
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
@@ -45,69 +54,117 @@ return {
{ '<leader>cbl', '<Cmd>CBline<CR>', desc = 'CommentBox: Simple Line' },
{ '<leader>cbm', '<Cmd>CBllbox14<CR>', desc = 'CommentBox: Marked' },
{ '<leader>cbt', '<Cmd>CBllline<CR>', desc = 'CommentBox: Titled Line' },
-- ── Code: package.json control ──────────────────────────────────────
-- See: lua/plugins/lazy.lua
{ '<leader>cn', group = 'package.json control' },
{ '<leader>cnd', '<cmd>lua require("package-info").delete()<cr>', desc = 'Delete package' },
{ '<leader>cni', '<cmd>lua require("package-info").install()<cr>', desc = 'Install package' },
{ '<leader>cns', '<cmd>lua require("package-info").show({ force = true })<cr>', desc = 'Show package info' },
{ '<leader>cnu', '<cmd>lua require("package-info").change_version()<cr>', desc = 'Change version' },
-- ── Code: Refactoring ───────────────────────────────────────────────
{ '<leader>cx', group = '[x] Refactoring' },
{
mode = { 'x' },
-- Extract function supports only visual mode
{ '<leader>cxe', "<cmd>lua require('refactoring').refactor('Extract Function')<cr>", desc = 'Extract Function' },
{ '<leader>cxf', "<cmd>lua require('refactoring').refactor('Extract Function To File')<cr>", desc = 'Extract Function to File' },
-- Extract variable supports only visual mode
{ '<leader>cxv', "<cmd>lua require('refactoring').refactor('Extract Variable')<cr>", desc = 'Extract Variable' },
},
-- Inline func supports only normal
{ '<leader>cxi', "<cmd>lua require('refactoring').refactor('Inline Function')<cr>", desc = 'Inline Function' },
-- Extract block supports only normal mode
{ '<leader>cxb', "<cmd>lua require('refactoring').refactor('Extract Block')<cr>", desc = 'Extract Block' },
{ '<leader>cxbf', "<cmd>lua require('refactoring').refactor('Extract Block To File')<cr>", desc = 'Extract Block to File' },
{
mode = { 'n', 'x' },
-- Inline var supports both normal and visual mode
{ '<leader>cxi', "<cmd>lua require('refactoring').refactor('Inline Variable')<cr>", desc = 'Inline Variable' },
},
-- ── Code: LSPSaga ───────────────────────────────────────────────────
-- See: lua/plugins/lsp.lua
{ '<C-a>', '<cmd>Lspsaga term_toggle<cr>', desc = 'LSPSaga: Open Floaterm' },
{ '<leader>ca', '<cmd>Lspsaga code_action<cr>', desc = 'LSPSaga: Code Actions' },
{ '<leader>cci', '<cmd>Lspsaga incoming_calls<cr>', desc = 'LSPSaga: Incoming Calls' },
{ '<leader>cco', '<cmd>Lspsaga outgoing_calls<cr>', desc = 'LSPSaga: Outgoing Calls' },
{ '<leader>cd', '<cmd>Lspsaga show_line_diagnostics<cr>', desc = 'LSPSaga: Show Line Diagnostics' },
-- <leader>cf = Code Format, see: lua/plugins/autoformat.lua
{ '<leader>ci', '<cmd>Lspsaga implement<cr>', desc = 'LSPSaga: Implementations' },
{ '<leader>cl', '<cmd>Lspsaga show_cursor_diagnostics<cr>', desc = 'LSPSaga: Show Cursor Diagnostics' },
{ '<leader>cp', '<cmd>Lspsaga peek_definition<cr>', desc = 'LSPSaga: Peek Definition' },
{
'<C-a>',
'<cmd>Lspsaga term_toggle<cr>',
desc = 'LSPSaga: Open Floaterm',
},
{
'<leader>ca',
'<cmd>Lspsaga code_action<cr>',
desc = 'LSPSaga: Code Actions',
},
{
'<leader>cci',
'<cmd>Lspsaga incoming_calls<cr>',
desc = 'LSPSaga: Incoming Calls',
},
{
'<leader>cco',
'<cmd>Lspsaga outgoing_calls<cr>',
desc = 'LSPSaga: Outgoing Calls',
},
{
'<leader>cd',
'<cmd>Lspsaga show_line_diagnostics<cr>',
desc = 'LSPSaga: Show Line Diagnostics',
},
{
'<leader>cf',
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
mode = {},
desc = 'Format buffer with Conform',
},
{
'<leader>ci',
'<cmd>Lspsaga implement<cr>',
desc = 'LSPSaga: Implementations',
},
{
'<leader>cl',
'<cmd>Lspsaga show_cursor_diagnostics<cr>',
desc = 'LSPSaga: Show Cursor Diagnostics',
},
{
'<leader>cp',
'<cmd>Lspsaga peek_definition<cr>',
desc = 'LSPSaga: Peek Definition',
},
{ '<leader>cr', '<cmd>Lspsaga rename<cr>', desc = 'LSPSaga: Rename' },
{ '<leader>cR', '<cmd>Lspsaga rename ++project<cr>', desc = 'LSPSaga: Rename Project wide' },
{ '<leader>cs', '<cmd>Lspsaga signature_help<cr>', desc = 'LSPSaga: Signature Documentation' },
{ '<leader>ct', '<cmd>Lspsaga peek_type_definition<cr>', desc = 'LSPSaga: Peek Type Definition' },
{ '<leader>cu', '<cmd>Lspsaga preview_definition<cr>', desc = 'LSPSaga: Preview Definition' },
{ '<leader>cv', '<cmd>Lspsaga diagnostic_jump_prev<cr>', desc = 'LSPSaga: Diagnostic Jump Prev' },
{ '<leader>cw', '<cmd>Lspsaga diagnostic_jump_next<cr>', desc = 'LSPSaga: Diagnostic Jump Next' },
-- ── DAP ─────────────────────────────────────────────────────────────
{ '<leader>d', group = '[d] DAP' },
{ '<leader>db', '<cmd>DapToggleBreakpoint', desc = 'DAP: Toggle Breakpoint' },
{ '<leader>dc', '<cmd>DapContinue', desc = 'DAP: Continue' },
{ '<leader>do', '<cmd>lua vim.diagnostic.open_float()<CR>', desc = 'Diagnostic: Open float' },
{ '<leader>dq', '<cmd>lua vim.diagnostic.setloclist()<CR>', desc = 'Diagnostic: Set loc list' },
{ '<leader>dr', "<cmd>lua require('dapui').open({reset = true})<CR>", desc = 'DAP: Reset' },
{ '<leader>ds', '<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>', desc = 'LSP: Document Symbols' },
{ '<leader>dt', '<cmd>DapUiToggle', desc = 'DAP: Toggle UI' },
{
'<leader>cR',
'<cmd>Lspsaga rename ++project<cr>',
desc = 'LSPSaga: Rename Project wide',
},
{
'<leader>cs',
'<cmd>Lspsaga signature_help<cr>',
desc = 'LSPSaga: Signature Documentation',
},
{
'<leader>ct',
'<cmd>Lspsaga peek_type_definition<cr>',
desc = 'LSPSaga: Peek Type Definition',
},
{
'<leader>cu',
'<cmd>Lspsaga preview_definition<cr>',
desc = 'LSPSaga: Preview Definition',
},
{
'<leader>cv',
'<cmd>Lspsaga diagnostic_jump_prev<cr>',
desc = 'LSPSaga: Diagnostic Jump Prev',
},
{
'<leader>cw',
'<cmd>Lspsaga diagnostic_jump_next<cr>',
desc = 'LSPSaga: Diagnostic Jump Next',
},
{
'<leader>cx',
'<cmd>Telescope import<cr>',
desc = 'Telescope import',
},
-- ── Harpoon ─────────────────────────────────────────────────────────
-- See: lua/plugins/telescope.lua
{ '<leader>h', group = '[h] Harpoon' },
{ '<leader>ha', '<cmd>lua require("harpoon"):list():add()<cr>', desc = 'harpoon file' },
{ '<leader>hn', '<cmd>lua require("harpoon"):list():next()<cr>', desc = 'harpoon to next file' },
{ '<leader>hp', '<cmd>lua require("harpoon"):list():prev()<cr>', desc = 'harpoon to previous file' },
{ '<leader>ht', "<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>", desc = 'DAP: Harpoon UI' },
{
{
'<leader>ha',
'<cmd>lua require("harpoon"):list():add()<cr>',
desc = 'harpoon file',
},
{
'<leader>hn',
'<cmd>lua require("harpoon"):list():next()<cr>',
desc = 'harpoon to next file',
},
{
'<leader>hp',
'<cmd>lua require("harpoon"):list():prev()<cr>',
desc = 'harpoon to previous file',
},
{
'<leader>ht',
"<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>",
desc = 'DAP: Harpoon UI',
},
},
-- ── LSP ─────────────────────────────────────────────────────────────
{ '<leader>l', group = '[l] LSP' },
@@ -115,63 +172,202 @@ return {
-- ── Quit ────────────────────────────────────────────────────────────
{ '<leader>q', group = '[q] Quit' },
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
{
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
},
-- ── Search ──────────────────────────────────────────────────────────
{ '<leader>s', group = '[s] Search' },
-- See: lua/plugins/telescope.lua
{ '<leader><space>', "<cmd>lua require('telescope.builtin').buffers()<cr>", desc = 'Find existing buffers' },
{ '<leader><tab>', "<cmd>lua require('telescope.builtin').commands()<CR>", desc = 'Telescope: Commands' },
{ '<leader>sd', "<cmd>lua require('telescope.builtin').diagnostics()<cr>", desc = 'Search Diagnostics' },
{ '<leader>sg', "<cmd>lua require('telescope.builtin').live_grep()<cr>", desc = 'Search by Grep' },
{ '<leader>sm', '<cmd>Telescope harpoon marks<CR>', desc = 'Harpoon Marks' },
{ '<leader>sn', "<cmd>lua require('telescope').extensions.notify.notify()<CR>", desc = 'Notify' },
{ '<leader>so', "<cmd>lua require('telescope.builtin').oldfiles()<cr>", desc = 'Find recently Opened files' },
{ '<leader>sp', "<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>", desc = 'Find neovim/lazy configs' },
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Todo' },
{ '<leader>sw', "<cmd>lua require('telescope.builtin').grep_string()<cr>", desc = 'Search current Word' },
{
'<leader><space>',
'<cmd>Telescope buffers<cr>',
desc = 'Find existing buffers',
},
{
'<leader>sc',
'<cmd>Telescope commands<CR>',
desc = 'Telescope: Commands',
},
{
'<leader>sd',
'<cmd>Telescope diagnostics<cr>',
desc = 'Search Diagnostics',
},
{
'<leader>sg',
'<cmd>Telescope live_grep<cr>',
desc = 'Search by Grep',
},
{
'<leader>sh',
'<cmd>Telescope highlights<cr>',
desc = 'List highlights',
},
{
'<leader>sl',
'<cmd>Telescope luasnip<CR>',
desc = 'Search LuaSnip',
},
{
'<leader>sm',
'<cmd>Telescope harpoon marks<CR>',
desc = 'Harpoon Marks',
},
{
'<leader>sn',
"<cmd>lua require('telescope').extensions.notify.notify()<CR>",
desc = 'Show Notifications',
},
{
'<leader>so',
'<cmd>Telescope oldfiles<cr>',
desc = 'Find recently Opened files',
},
{
'<leader>sp',
"<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>",
desc = 'Find neovim/lazy configs',
},
{
'<leader>sq',
'<cmd>Telescope quickfix<cr>',
desc = 'Quickfix list',
},
{
'<leader>sr',
group = 'References',
{
'<leader>srd',
'<cmd>Telescope lsp_definitions<CR>',
desc = 'Definitions',
},
{
'<leader>sri',
'<cmd>Telescope lsp_implementations<CR>',
desc = 'Implementations',
},
{
'<leader>srp',
'<cmd>Telescope lsp_document_symbols<CR>',
desc = 'Document Symbols',
},
{
'<leader>srr',
'<cmd>Telescope lsp_references<CR>',
desc = 'LSP References',
},
{
'<leader>srt',
'<cmd>Telescope lsp_type_definitions<CR>',
desc = 'Type Definitions',
},
{
'<leader>srw',
'<cmd>Telescope lsp_workspace_symbols<CR>',
desc = 'Workspace Symbols',
},
},
{
'<leader>ss',
'<cmd>Telescope treesitter',
desc = 'Treesitter symbols',
},
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Show Todo' },
{
'<leader>sw',
'<cmd>Telescope grep_string<cr>',
desc = 'Search current Word',
},
-- ── Toggle ──────────────────────────────────────────────────────────
{ '<leader>t', group = '[t] Toggle' },
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
{ '<leader>tt', '<cmd>TransparentToggle<CR>', desc = 'Toggle Transparency' },
{ '<leader>tw', '<cmd>Twilight<cr>', desc = 'Toggle Twilight' },
{
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
{
'<leader>tt',
'<cmd>TransparentToggle<CR>',
desc = 'Toggle Transparency',
},
},
-- ── Workspace ───────────────────────────────────────────────────────
{ '<leader>w', group = '[w] Workspace' },
{ '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', desc = 'LSP: Workspace Add Folder' },
{ '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', desc = 'LSP: Workspace List Folders' },
{ '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', desc = 'LSP: Workspace Remove Folder' },
{ '<leader>ws', '<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>', desc = 'LSP: Workspace Symbols' },
{
{
'<leader>wa',
'<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>',
desc = 'LSP: Workspace Add Folder',
},
{
'<leader>wl',
'<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>',
desc = 'LSP: Workspace List Folders',
},
{
'<leader>wr',
'<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>',
desc = 'LSP: Workspace Remove Folder',
},
{
'<leader>ws',
'<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>',
desc = 'LSP: Workspace Symbols',
},
},
-- ── Trouble ─────────────────────────────────────────────────────────
{ '<leader>x', group = '[x] Trouble' },
{ '<leader>xx', '<cmd>Trouble<cr>', desc = 'Toggle Trouble' },
{ '<leader>xw', '<cmd>Trouble workspace_diagnostics<cr>', desc = 'Toggle Workspace Diagnostics' },
{ '<leader>xd', '<cmd>Trouble document_diagnostics<cr>', desc = 'Toggle Document Diagnostics' },
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
{
{
'<leader>xx',
'<cmd>Trouble diagnostics<cr>',
desc = 'Toggle Trouble Diagnostics',
},
{
'<leader>xw',
'<cmd>Trouble workspace_diagnostics<cr>',
desc = 'Toggle Workspace Diagnostics',
},
{
'<leader>xd',
'<cmd>Trouble document_diagnostics<cr>',
desc = 'Toggle Document Diagnostics',
},
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
},
-- ── Help & Neoconf ──────────────────────────────────────────────────
{ '<leader>?', group = '[?] Help & neoconf' },
{ '<leader>?c', '<cmd>Neoconf<CR>', desc = 'Neoconf: Open' },
{ '<leader>?g', '<cmd>Neoconf global<CR>', desc = 'Neoconf: Global' },
{ '<leader>?l', '<cmd>Neoconf local<CR>', desc = 'Neoconf: Local' },
{ '<leader>?m', '<cmd>Neoconf lsp<CR>', desc = 'Neoconf: Show merged LSP config' },
{ '<leader>?s', '<cmd>Neoconf show<CR>', desc = 'Neoconf: Show merged config' },
{ '<leader>?w', '<cmd>lua require("which-key").show({global = false})<cr>', desc = 'Buffer Local Keymaps (which-key)' },
-- ── Help ────────────────────────────────────────────────────────────
{ '<leader>?', group = '[?] Help & Cheat sheets' },
{
{
'<leader>?h',
'<cmd>Telescope help_tags<cr>',
desc = 'Help tags',
},
{
'<leader>?m',
'<cmd>Telescope man_pages<cr>',
desc = 'Man pages',
},
{
'<leader>?w',
'<cmd>lua require("which-key").show({global = true})<cr>',
desc = 'Buffer Local Keymaps (which-key)',
},
},
-- ── Misc ────────────────────────────────────────────────────────────
{ '<leader>1', '<cmd>lua require("harpoon"):list():select(1)<cr>', desc = 'harpoon to file 1' },
{ '<leader>2', '<cmd>lua require("harpoon"):list():select(2)<cr>', desc = 'harpoon to file 2' },
{ '<leader>3', '<cmd>lua require("harpoon"):list():select(3)<cr>', desc = 'harpoon to file 3' },
{ '<leader>4', '<cmd>lua require("harpoon"):list():select(4)<cr>', desc = 'harpoon to file 4' },
{ '<leader>5', '<cmd>lua require("harpoon"):list():select(5)<cr>', desc = 'harpoon to file 5' },
{ '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', desc = 'LSP: Type Definition' },
{
'<leader>D',
'<cmd>lua vim.lsp.buf.type_definition()<CR>',
desc = 'LSP: Type Definition',
},
{ '<leader>e', '<cmd>Neotree reveal<CR>', desc = 'NeoTree reveal' },
-- ╭─────────────────────────────────────────────────────────╮
@@ -180,23 +376,55 @@ return {
{ 'y', group = 'Yank & Surround' },
{ 'gp', group = 'Goto Preview' },
{ 'gpd', '<cmd>lua require("goto-preview").goto_preview_definition()<CR>' },
{ 'gpi', '<cmd>lua require("goto-preview").goto_preview_implementation()<CR>' },
{ 'gpP', '<cmd>lua require("goto-preview").close_all_windows()<CR>' },
{
{
'gpd',
'<cmd>lua require("goto-preview").goto_preview_definition()<CR>',
desc = 'Goto: Preview Definition',
},
{
'gpi',
'<cmd>lua require("goto-preview").goto_preview_implementation()<CR>',
desc = 'Goto: Preview Implementation',
},
{
'gpP',
'<cmd>lua require("goto-preview").close_all_windows()<CR>',
desc = 'Goto: Close All Preview Windows',
},
},
-- ── tmux navigation ─────────────────────────────────────────────────
{ '<c-h>', '<cmd><C-U>TmuxNavigateLeft<cr>', desc = 'tmux: Navigate Left' },
{ '<c-j>', '<cmd><C-U>TmuxNavigateDown<cr>', desc = 'tmux: Navigate Down' },
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
{ '<c-l>', '<cmd><C-U>TmuxNavigateRight<cr>', desc = 'tmux: Navigate Right' },
{ '<c-\\>', '<cmd><C-U>TmuxNavigatePrevious<cr>', desc = 'tmux: Navigate Previous' },
{
{
'<c-h>',
'<cmd><C-U>TmuxNavigateLeft<cr>',
desc = 'tmux: Navigate Left',
},
{
'<c-j>',
'<cmd><C-U>TmuxNavigateDown<cr>',
desc = 'tmux: Navigate Down',
},
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
{
'<c-l>',
'<cmd><C-U>TmuxNavigateRight<cr>',
desc = 'tmux: Navigate Right',
},
{
'<c-\\>',
'<cmd><C-U>TmuxNavigatePrevious<cr>',
desc = 'tmux: Navigate Previous',
},
},
-- ── Old habits ──────────────────────────────────────────────────────
{ '<C-s>', '<cmd>w<CR>', desc = 'Save file' },
{ '<C-s>', '<cmd>w!<CR>', desc = 'Save file' },
-- ── Text manipulation in visual mode ────────────────────────────────
{
mode = 'v',
mode = { 'v', 'n' },
{ '>', '>gv', desc = 'Indent Right' },
{ '<', '<gv', desc = 'Indent Left' },
{ 'J', "<cmd>m '>+1<CR>gv=gv", desc = 'Move Block Down' },
@@ -204,23 +432,75 @@ return {
},
-- ── LSP ─────────────────────────────────────────────────────────────
{ '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', desc = 'LSP: Signature Documentation' },
{ 'K', '<cmd>Lspsaga hover_doc<cr>', desc = 'LSPSaga: Hover Documentation' },
{ 'dn', '<cmd>lua vim.diagnostic.goto_next()<CR>', desc = 'Diagnostic: Goto Next' },
{ 'dp', '<cmd>lua vim.diagnostic.goto_prev()<CR>', desc = 'Diagnostic: Goto Prev' },
{ 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', desc = 'LSP: Goto Declaration' },
{ 'gI', '<cmd>lua vim.lsp.buf.implementation()<CR>', desc = 'LSP: Goto Implementation' },
{ 'gR', '<cmd>Trouble lsp_references<cr>', desc = 'Toggle LSP References' },
{ 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', desc = 'LSP: Goto Definition' },
{ 'gr', '<cmd>lua require("telescope.builtin").lsp_references()<CR>', desc = 'LSP: Goto References' },
{
'<C-k>',
'<cmd>lua vim.lsp.buf.signature_help()<CR>',
desc = 'LSP: Signature Documentation',
},
{
'K',
'<cmd>Lspsaga hover_doc<cr>',
desc = 'LSPSaga: Hover Documentation',
},
{ 'd', group = 'Diagnostics' },
{
{
'dn',
'<cmd>lua vim.diagnostic.goto_next()<CR>',
desc = 'Diagnostic: Goto Next',
},
{
'dp',
'<cmd>lua vim.diagnostic.goto_prev()<CR>',
desc = 'Diagnostic: Goto Prev',
},
},
{
{ 'g', group = 'Goto' },
{
'gD',
'<cmd>lua vim.lsp.buf.declaration()<CR>',
desc = 'LSP: Goto Declaration',
},
{
'gI',
'<cmd>lua vim.lsp.buf.implementation()<CR>',
desc = 'LSP: Goto Implementation',
},
{
'gR',
'<cmd>Trouble lsp_references<cr>',
desc = 'Toggle LSP References',
},
{
'gd',
'<cmd>lua vim.lsp.buf.definition()<CR>',
desc = 'LSP: Goto Definition',
},
{
'gr',
'<cmd>lua require("telescope.builtin").lsp_references()<CR>',
desc = 'LSP: Goto References',
},
},
-- ── Misc keybinds ───────────────────────────────────────────────────
-- Sublime-like shortcut 'go to file' ctrl+p.
{ '<C-p>', '<cmd>Telescope find_files<CR>', desc = 'Search for files starting at current directory.' },
{
'<C-p>',
'<cmd>Telescope find_files<CR>',
desc = 'Search for files starting at current directory.',
},
{ 'QQ', '<cmd>q!<CR>', desc = 'Quit without saving' },
{ 'WW', '<cmd>w!<CR>', desc = 'Force write to file' },
{ 'ss', '<cmd>noh<CR>', desc = 'Clear Search Highlighting' },
{ 'jj', '<Esc>', desc = 'Esc without touching esc in insert mode', mode = 'i' },
{
'jj',
'<Esc>',
desc = 'Esc without touching esc in insert mode',
mode = 'i',
},
-- ── Splits ──────────────────────────────────────────────────────────
-- Use CTRL+<hjkl> to switch between windows in normal mode
@@ -240,12 +520,13 @@ return {
{ '<down>', '<cmd>echo "Use j to move!!"<CR>' },
-- ── Terminal ────────────────────────────────────────────────────────
-- 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.
-- 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.
-- 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.
{ '<Esc><Esc>', '<C-\\><C-n>', desc = 'Exit terminal mode', mode = 't' },
-- ── Search ──────────────────────────────────────────────────────────

View File

@@ -0,0 +1,462 @@
{
"While ..": {
"body": [
"while (${1:condition}) {",
"\t$0",
"}"
],
"prefix": "while .."
},
"argv (node)": {
"body": "const argv = process.argv.slice(2);",
"description": "Arguments from the command line. [0] is the node executable path, [1] the path of the file being executed, making [2] the first positional argument.",
"prefix": "argv (node)"
},
"cast (JSDoc)": {
"body": "/** @type {${1:string}} */ (${2:bracketedVar})",
"prefix": "cast (JSDoc)"
},
"class (JSDoc) + typedef (JSDoc)": {
"body": [
"/** @typedef {Object} ${1:name}",
" * @property {${2:string}} ${3:prop1}",
" */"
],
"description": "https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#typedef-callback-and-param",
"prefix": [
"class (JSDoc)",
"typedef (JSDoc)"
]
},
"do .. while ..": {
"body": [
"do {",
"\t$0",
"} while (${1:condition});"
],
"prefix": [
"do .. while",
"repeat until"
]
},
"ec (export const)": {
"body": "export const ${1:CONSTANT}",
"prefix": "ec (export const)"
},
"ef (export function)": {
"body": [
"export function ${1:name}($2) {",
"\t$0",
"}"
],
"prefix": "ef (export function)"
},
"filter ( => )": {
"body": "filter(${1:item} => ${1:item}$0)",
"prefix": "filter ( => )"
},
"for (i++)": {
"body": [
"for (let i = 0; i < ${1:array}.length; i++) {",
"\tconst ${2:element} = ${1:array}[i];",
"\t$0",
"}"
],
"prefix": "for (i++)"
},
"for (i--)": {
"body": [
"for (let i = ${1:array}.length - 1; i >= 0; i--) {",
"\tconst ${2:element} = ${1:array}[i];",
"\t$0",
"}"
],
"prefix": "for (i--)"
},
"for (key, value)": {
"body": [
"for (const [key, value] of Object.entries(${1:dict})) {",
"\t$0",
"}"
],
"prefix": "for (key, value)"
},
"for .. in (key)": {
"body": [
"for (const ${1:key} in ${2:object}) {",
"\t$0",
"}"
],
"prefix": "for .. in (key)"
},
"for .. of (array)": {
"body": [
"for (const ${1:iterator} of ${2:array}) {",
"\t$0",
"}"
],
"prefix": "for .. of (array)"
},
"forEach": {
"body": [
"forEach(${1:item} => {",
"\t$0",
"});"
],
"prefix": "forEach =>"
},
"function_trad": {
"body": [
"function ${1:name}() {",
"\t$0",
"}"
],
"prefix": "function"
},
"if ..": {
"body": [
"if (${1:condition}) {",
"\t$0",
"}"
],
"prefix": "if"
},
"if .. else": {
"body": [
"if (${1:condition}) {",
"\t$0",
"} else {",
"\t",
"}"
],
"prefix": "if .. else"
},
"ignore (biome formatter)": {
"body": "// biome-ignore format: ${1:explanation}",
"description": "Ignores the next block of code.",
"prefix": "ignore (biome formatter)"
},
"ignore file (TypeScript) + nocheck (TypeScript)": {
"body": "// @ts-nocheck",
"prefix": [
"ignore file (TypeScript)",
"nocheck (TypeScript)"
]
},
"map ( () => {} )": {
"body": [
"map(${1:item} => {",
"\t$0",
"\treturn;",
"})"
],
"prefix": "map ( () => {} )"
},
"map ( => )": {
"body": "map(${1:item} => ${1:item}$0)",
"prefix": "map ( => )"
},
"reduce()": {
"body": [
".reduce((acc, ${1:item}) => {",
"\t$0",
"\treturn acc;",
"}, ${2:initialValue})"
],
"prefix": "reduce()"
},
"relative date": {
"body": [
"/**",
" * @param {string} absoluteDate string to be converted to a date",
" * @return {string} relative date",
" */",
"function relativeDate(absoluteDate) {",
"\tconst deltaSecs = (+new Date() - +new Date(absoluteDate)) / 1000;",
"\t/** @type {\"year\"|\"month\"|\"week\"|\"day\"|\"hour\"|\"minute\"|\"second\"} */",
"\tlet unit;",
"\tlet delta;",
"\tif (deltaSecs < 60) {",
"\t\tunit = \"second\";",
"\t\tdelta = deltaSecs;",
"\t} else if (deltaSecs < 60 * 60) {",
"\t\tunit = \"minute\";",
"\t\tdelta = Math.ceil(deltaSecs / 60);",
"\t} else if (deltaSecs < 60 * 60 * 24) {",
"\t\tunit = \"hour\";",
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60);",
"\t} else if (deltaSecs < 60 * 60 * 24 * 7) {",
"\t\tunit = \"day\";",
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24);",
"\t} else if (deltaSecs < 60 * 60 * 24 * 7 * 4) {",
"\t\tunit = \"week\";",
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24 / 7);",
"\t} else if (deltaSecs < 60 * 60 * 24 * 7 * 4 * 12) {",
"\t\tunit = \"month\";",
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24 / 7 / 4);",
"\t} else {",
"\t\tunit = \"year\";",
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24 / 7 / 4 / 12);",
"\t}",
"\tconst formatter = new Intl.RelativeTimeFormat(\"en\", { style: \"long\", numeric: \"auto\" });",
"\treturn formatter.format(-delta, unit);",
"}"
],
"prefix": "relative date"
},
"replace": {
"body": "replace(/${1:regexp}/, \"$2\")",
"prefix": "replace"
},
"sort ( () => {} )": {
"body": [
"sort((a, b) => {",
"\treturn ${1:b - a};",
"})"
],
"description": "Sort Array with basic a-b-comparator function",
"prefix": "sort ( () => {} )"
},
"split by \\n": {
"body": ".split(\"\\n\")",
"prefix": ".split by \\n"
},
"split by \\r": {
"body": ".split(\"\\r\")",
"description": "required for output from app.doShellScript()",
"prefix": ".split by \\r"
},
"switch .. case": {
"body": [
"switch (${1:key}) {",
"\tcase ${2:value}:",
"\t\t$0",
"\t\tbreak;",
"\tdefault:",
"}"
],
"prefix": "switch .. case"
},
"ternary": {
"body": "${1:condition} ? ${2:value1} : ${3:value2}",
"prefix": "ternary"
},
"thousand separator": {
"body": ".toLocaleString(\"de-DE\")",
"description": "insert thousand separator into a digit string",
"prefix": "thousand separator"
},
"timeout + delay": {
"body": [
"setTimeout(() => {",
"\t$0",
"}, ${1:timeoutMs});"
],
"prefix": [
"timeout",
"delay"
]
},
"today as ISO 8601 string": {
"body": "new Date().toISOString().slice(0, 10);",
"prefix": "ISO date"
},
"today's date": {
"body": "const today = new Date();",
"prefix": [
"today",
"date"
]
},
"tomorrow's date": {
"body": [
"const tomorrow = new Date();",
"tomorrow.setDate(tomorrow.getDate() + 1);"
],
"prefix": [
"tomorrow",
"date"
]
},
"try .. catch": {
"body": [
"try {",
"\t$0",
"} catch (_error) {",
"\t",
"}"
],
"description": "leading underscore so the variable is ignored by biome when not used.",
"prefix": "try .. catch"
},
"type (JSDoc)": {
"body": "/** @type {${1:string}} */",
"prefix": "type (JSDoc)"
},
"type: Record (JSDoc)": {
"body": "/** @type {Record<string, string>} */",
"prefix": "type: Record (JSDoc)"
},
"unique items": {
"body": "${1:arr} = [...new Set(${2:arr})];",
"prefix": "unique items"
},
"Class": {
"prefix": [
"clax"
],
"body": [
"export class $1 ${2:extends ${3:Parent} }{",
"\tconstructor(${4:props}) {",
"\t\tthis.$4 = $4;",
"\t}",
"",
"\t$0",
"}"
],
"description": "Class definition template."
},
"test": {
"prefix": [
"it"
],
"body": [
"it('${1:should ${2}}', async () => {",
"\t$0",
"});"
],
"description": "Test template"
},
"method": {
"prefix": [
"mtd"
],
"body": [
"${1:async ${2:method}}(${3:params}) {",
"\t$0",
"}"
],
"description": "method"
},
"function": {
"prefix": [
"fun"
],
"body": [
"${1:async }${2:(${3:params})} => {$0}"
],
"description": "function"
},
"const": {
"prefix": [
"const"
],
"body": [
"const $1 = $0;"
],
"description": "const"
},
"let": {
"prefix": [
"let"
],
"body": [
"let $1 = $0;"
],
"description": "let"
},
"Console log": {
"prefix": [
"cl"
],
"body": [
"console.log($0);"
],
"description": "Console log"
},
"Console debug": {
"prefix": [
"cd"
],
"body": [
"console.debug($0);"
],
"description": "Console debug"
},
"Console log all": {
"prefix": [
"clj"
],
"body": [
"console.log(JSON.stringify($0, null, 2));"
],
"description": "Console log whole object"
},
"Console debug all": {
"prefix": [
"cdj"
],
"body": [
"console.debug(JSON.stringify($0, null, 2));"
],
"description": "Console debug whole object"
},
"If": {
"prefix": [
"if"
],
"body": [
"if (${1:condition}) {",
"\t$0",
"}"
],
"description": "Console debug whole object"
},
"If-else": {
"prefix": [
"ifelse"
],
"body": [
"if (${1:condition}) {",
"\t$2",
"} else {",
"\t$0",
"}"
],
"description": "Console debug whole object"
},
"docblock": {
"prefix": [
"/**"
],
"body": [
"/**",
" * $0",
" */"
]
},
"trycatch": {
"prefix": [
"tc"
],
"body": [
"try {",
"\t$0",
"} catch (e) {",
"\tthrow e;",
"}"
],
"description": "Try catch block"
},
"Describe test": {
"prefix": [
"desc"
],
"body": [
"describe('${1}', () => {",
"\t$0",
"})"
],
"description": "Describe test"
}
}

View File

@@ -0,0 +1,262 @@
{
"@class (LuaDoc)": {
"body": [
"---@class (exact) ${1:class_name}",
"---@field ${2:field_name} string"
],
"description": "https://github.com/LuaLS/lua-language-server/wiki/Annotations#class",
"prefix": "@class (LuaDoc)"
},
"@type (LuaDoc)": {
"body": "---@type ${1:string}",
"prefix": "@type (LuaDoc)"
},
"Record (type)": {
"body": "---@type table<string, string>",
"prefix": "Record (type)"
},
"count occurrences in string": {
"body": "local _, count = ${1:str}:gsub(\"${2:find}\", \"\")",
"prefix": "count occurrences in string"
},
"export module": {
"body": [
"local M = {}",
"--------------------------------------------------------------------------------",
"",
"$0--------------------------------------------------------------------------------",
"return M"
],
"prefix": "export module"
},
"find all in string": {
"body": [
"local ${1:matches} = {}",
"for match in ${2:str}:gmatch(${3:pattern}) do",
"\ttable.insert(${1:matches}, match)",
"end"
],
"prefix": "find all in string"
},
"for each (list)": {
"body": [
"for _, ${1:v} in pairs(${2:table}) do",
"\t$0",
"end"
],
"prefix": "for each (list)"
},
"for each line (of file)": {
"body": [
"for line in io.lines(${1:filepath}) do",
"\t$0",
"end"
],
"prefix": [
"for each line (file)",
"read file (as lines)"
]
},
"home": {
"body": "os.getenv(\"HOME\")",
"prefix": "home"
},
"if .. then .. else": {
"body": [
"if ${1:true} then",
"\t$2",
"else",
"\t$0",
"end"
],
"filetype": "lua",
"prefix": "if .. then .. else"
},
"nodiscard": {
"body": "---@nodiscard",
"description": "Luadoc Annotation that a function's return value should not be discarded. https://github.com/LuaLS/lua-language-server/wiki/Annotations#nodiscard",
"prefix": "nodiscard"
},
"path of this file": {
"body": "local pathOfThisFile = debug.getinfo(1).source:sub(2)",
"prefix": "path of this file"
},
"path separator (os-independent)": {
"body": "local osPathSep = package.config:sub(1, 1)",
"prefix": "path separator (os-independent)"
},
"pcall": {
"body": [
"local success = pcall(${1:func})",
"if not success then",
"\t$0",
"\treturn",
"end"
],
"prefix": [
"try",
"pcall"
]
},
"read file": {
"body": [
"---@param filePath string",
"---@return string? -- content or error message",
"---@return boolean success",
"local function readFile(filePath)",
"\tlocal file, err = io.open(filePath, \"r\")",
"\tif not file then return err, false end",
"\tlocal content = file:read(\"*a\")",
"\tfile:close()",
"\treturn content, true",
"end"
],
"prefix": "read file"
},
"redirect (metatable __index)": {
"body": [
"setmetatable(M, {",
"\t__index = function(_, key)",
"\t\treturn function(...)",
"\t\t\trequire(${1:moduleToRedirectTo})[key](...)",
"\t\tend",
"\tend,",
"})"
],
"prefix": "redirect (metatable __index)"
},
"round number": {
"body": "local roundedNum = tonumber(string.format(\"%.${1:decimals}f\", exactNum))",
"prefix": "round number"
},
"safe require": {
"body": [
"local ok, ${1:module} = require(\"${1:module}\")",
"if not (ok and ${1:module}) then return end",
"${1:module}.$0"
],
"prefix": "safe require"
},
"sort (table)": {
"body": "table.sort(${1:table}, function(a, b) return ${2:a} > ${3:b} end)",
"prefix": "sort (table)"
},
"split (gmatch)": {
"body": [
"local acc = {}",
"for part in ${1:str}:gmatch(\"(.-)\" .. ${2:delimiter}) do",
"\ttable.insert(acc, part)",
"end"
],
"filetype": "lua",
"prefix": "split (gmatch)"
},
"ternary": {
"body": "${1:condition} and ${2:value1} or ${3:value2}",
"prefix": "ternary"
},
"trim trailing line break": {
"body": ":gsub(\"\\n$\", \"\")",
"prefix": "trim"
},
"write file": {
"body": [
"---@param str string",
"---@param filePath string",
"---@return string|nil -- error message",
"local function overwriteFile(filePath, str)",
"\tlocal file, _ = io.open(filePath, \"w\")",
"\tif not file then return end",
"\tfile:write(str)",
"\tfile:close()",
"end"
],
"description": "Overwriting file, for appending use `a` instead of `w`.",
"prefix": "write file"
},
"Create Auto Command": {
"prefix": "autocmd",
"body": [
"vim.api.nvim_create_autocmd(\"${1:event}\", {",
" group = vim.api.nvim_create_augroup(\"${2:group}\", { clear = true }),",
" callback = function(ev)",
" ${0}",
" end",
"})"
]
},
"Create Auto Command Group": {
"prefix": "augroup",
"body": [
"vim.api.nvim_create_augroup(\"${1:group}\", { clear = true })$0"
]
},
"Current Win": {
"prefix": "win",
"body": "local win = vim.api.nvim_get_current_win()\n$0"
},
"Current Buf": {
"prefix": "buf",
"body": "local buf = vim.api.nvim_get_current_buf()\n$0"
},
"Buf Valid": {
"prefix": "bufvalid",
"body": "vim.api.nvim_buf_is_valid(${1:buf})"
},
"Win Valid": {
"prefix": "winvalid",
"body": "vim.api.nvim_win_is_valid(${1:win})"
},
"Win Call": {
"prefix": "wincall",
"body": [
"vim.api.nvim_win_call(${1:win}, function(win)",
" ${0}",
"end)"
]
},
"Buf Call": {
"prefix": "bufcall",
"body": [
"vim.api.nvim_buf_call(${1:buf}, function(buf)",
" ${0}",
"end)"
]
},
"Schedule": {
"prefix": "schedule",
"body": [
"vim.schedule(function()",
" ${0}",
"end)"
]
},
"Table Deep Extend": {
"prefix": "deepextend",
"body": "vim.tbl_deep_extend(\"force\", ${1:table}, ${2:table})$0"
},
"Table Filter": {
"prefix": "filter",
"body": [
"vim.tbl_filter(function()",
" $0",
"end, ${1:table})"
]
},
"Table Map": {
"prefix": "map",
"body": [
"vim.tbl_map(function()",
" $0",
"end, ${1:table})"
]
},
"Table Values": {
"prefix": "values",
"body": "vim.tbl_values(${1:table})"
},
"Table Keys": {
"prefix": "keys",
"body": "vim.tbl_keys(${1:table})"
}
}

View File

@@ -0,0 +1,133 @@
{
"Misc": {
"body": "Miscellaneous",
"prefix": "Misc"
},
"bash (Codeblock)": {
"body": [
"```bash",
"$CLIPBOARD$0",
"```"
],
"prefix": "bash (Codeblock)"
},
"caution (callout)": {
"body": [
"> [!CAUTION]",
"> $0"
],
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
"prefix": "caution (callout)"
},
"details & summary": {
"body": [
"<details>",
"<summary>${1:Text}</summary>",
"$0",
"</details>"
],
"description": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details",
"prefix": [
"toggle / fold",
"details & summary"
]
},
"ignore file (ltex)": {
"body": "<!-- LTeX: enabled=false -->",
"prefix": "ignore file (ltex)"
},
"image": {
"body": "<img src=\"${1:image_path}\" alt=\"${2:alt text}\" width=\"${3:50%}\">",
"description": "HTML syntax for images used to display images with reduced size",
"prefix": "image"
},
"important (callout)": {
"body": [
"> [!IMPORTANT]",
"> $0"
],
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
"prefix": "important (callout)"
},
"insert table 2x2": {
"body": [
"| ${1:Column1} | ${2:Column2} |",
"|--------------- | -------------- |",
"| ${3:Item1.1} | ${4:Item2.1} |"
],
"prefix": "table (2x2)"
},
"insert toc": {
"body": [
"## Table of Content",
"",
"<!-- toc -->"
],
"description": "https://github.com/jonschlinkert/markdown-toc#tocinsert",
"prefix": "insert toc"
},
"js (Codeblock)": {
"body": [
"```js",
"$CLIPBOARD$0",
"```"
],
"prefix": "js (Codeblock)"
},
"kbd": {
"body": "<kbd>$0</kbd>",
"description": "HTML tag for keys",
"prefix": "kbd"
},
"lua (Codeblock)": {
"body": [
"```lua",
"$CLIPBOARD$0",
"```"
],
"prefix": "lua (Codeblock)"
},
"note (GitHub callout)": {
"body": [
"> [!NOTE]",
"> $0"
],
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
"prefix": [
"info (callout)",
"note (callout)"
]
},
"py (Codeblock)": {
"body": [
"```py",
"$CLIPBOARD$0",
"```"
],
"prefix": "py (Codeblock)"
},
"tip (callout)": {
"body": [
"> [!TIP]",
"> $0"
],
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
"prefix": "tip (callout)"
},
"ts (Codeblock)": {
"body": [
"```ts",
"$CLIPBOARD$0",
"```"
],
"prefix": "ts (Codeblock)"
},
"warning (callout)": {
"body": [
"> [!WARNING]",
"> $0"
],
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
"prefix": "warning (callout)"
}
}

View File

@@ -0,0 +1,165 @@
snippet php "php"
<?php
${1}
snippet ec "ec"
echo '${1}'${2};
snippet vd "vd"
var_dump(${1});
# Includes and requires
snippet inc "inc"
include_once '${1}';${2}
snippet req "req"
require_once '${1}';${2}
# define(...)
snippet def "def"
define('${1}'${2});${3}
# Doxygen comments
snippet d "/**"
/**
* ${1}
*/${2}
snippet code "code"
* @code
* ${1}
* @endcode
# Class
snippet cl "cl"
class ${1} {
${2}
function ${3:__construct}(${4}) {
${5}
}
}
snippet pubf "public method"
public function ${1}(${2}): $3
{
${0}
}
snippet prof "protected method"
protected function ${1}(${2}): $3
{
${0}
}
snippet prif "private method"
protected function ${1}(${2}): $3
{
${0}
}
snippet testt "test method (prefix)"
public function test_${1}()
{
${0}
}
snippet testa "test method (annotation)"
/** @test */
public function ${1}()
{
${0}
}
# $this->
snippet . "$this->" i
$this->
# If statement
snippet if "if"
if (${1}) {
${2}
}
snippet ife "ife"
if (${1}) {
${2}
} else {
${3}
}
snippet elif "elif"
else if (${1}) {
${2}
}
snippet el "el"
else {
${1}
}
# Switch
snippet sw "sw"
switch (${1}) {
default:
break;
}
snippet case "case"
case '${1}':
${2}
break;${3}
# Do-while loop
snippet do "do"
do {
${2}
} while (${1});
# While loop
snippet wh "wh"
while (${1}) {
${2}
}
# For loop
snippet for "for"
for (${1}; ${2}; ${3}) {
${4}
}
snippet fore "fore"
foreach (${1} as ${2}) {
${3}
}
# Functions and methods
snippet fun "fun"
function ${1}(${2}) {
${3}
}
snippet met "met"
${1}function ${2}(${3}) {
${4}
}
# Return
snippet r "return"
return ${1}
# Todos
snippet todo "todo"
// TODO ${1}

View File

@@ -0,0 +1,334 @@
{
"PATH (export)": {
"body": "export PATH=/usr/local/lib:/usr/local/bin:/opt/homebrew/bin/:\\$PATH",
"description": "Extends PATH in a way that homebrew installed CLIs are recognized in ARM and Intel Macs.",
"prefix": "PATH (export)"
},
"awk (get field)": {
"body": "awk '{ print $${1:1} }'",
"description": "Retrieve a field from the piped in string, with whitespace as the default field delimiter. `$n` means that the nth field will be used.",
"prefix": "awk (field)"
},
"check device name": {
"body": "scutil --get ComputerName | grep -q \"$0\"",
"prefix": "device name"
},
"check if dark mode (macOS)": {
"body": "defaults read -g AppleInterfaceStyle &>/dev/null; && echo 'isDark'",
"prefix": "check if dark mode (macOS)"
},
"check if in git repo": {
"body": "if ! git rev-parse --is-inside-work-tree &>/dev/null ; then print \"\\e[0;33mfile is not ins a git repository.\\e[0m\" && return 1 ; fi",
"prefix": "check if in git repo"
},
"check if installed": {
"body": [
"if [[ ! -x \"\\$(command -v ${1:cli})\" ]]; then print \"\\e[0;33m${1:cli} not installed.\\e[0m\" && return 1; fi",
"$0"
],
"description": "https://stackoverflow.com/a/26759734/22114136",
"prefix": "check if installed"
},
"check if on macOS": {
"body": "[[ \"\\$OSTYPE\" =~ \"darwin\" ]]",
"prefix": "check if on macOS"
},
"check if process is running": {
"body": "pgrep -xq \"${1:process}\" && $0",
"prefix": "check if process is running"
},
"check if sudo user": {
"body": "sudo -nv && ${1:some_sudo_action}",
"prefix": "check if sudo user"
},
"confirmation prompt": {
"body": [
"# confirmation prompt",
"print \"\\e[1;34m$0Proceed? (y/n)\\e[0m\"",
"read -rk pressed",
"echo",
"if [[ \"\\$pressed\" != \"y\" ]]; then",
"\techo \"Aborted.\"",
"\treturn 1",
"fi",
"echo"
],
"prefix": "confirmation prompt"
},
"default value": {
"body": "\\${${1:var}:-${2:default_value}}",
"prefix": "default value"
},
"directory of script": {
"body": "\"$(dirname \"$(readlink -f \"\\$0\")\")\"",
"prefix": "directory of this script"
},
"elseif": {
"body": "elif [[ ${1:condition} ]]; then\n\t${0}",
"description": "Add an elseif to an if statement.",
"prefix": "elseif"
},
"extension": {
"body": "ext=${${1:file_name}##*.}",
"prefix": "get extension"
},
"filename": {
"body": "file_name=$(basename \"$${1:file_path}\")",
"prefix": "filename"
},
"filename w/o ext": {
"body": "${1:file_name}=${${1:file_name}%.*}",
"prefix": "filename w/o ext"
},
"find & xargs": {
"body": "find . -print0 | xargs -0 -I '{}'",
"prefix": "find & xargs"
},
"find -exec": {
"body": "find . $0 -exec open '{}' \\;",
"prefix": "find -exec"
},
"for each file": {
"body": [
"for filename in *.txt; do",
"\techo \"\\$filename\"",
"done"
],
"prefix": "for each file"
},
"for each line (read)": {
"body": [
"while read -r line; do",
"\techo \"\\$line\"$0",
"done < \"\\$${1:input_file}\""
],
"prefix": "for each line (read)"
},
"for each line (variable)": {
"body": [
"echo \"\\$lines\" | while read -r line; do",
"\techo \"\\$line\"",
"done"
],
"prefix": "for each line (variable)"
},
"for i ..": {
"body": [
"for ((i = 0; i <= ${1:length}; i++)); do",
" echo \\$i$0",
"done"
],
"prefix": "for i .."
},
"function": {
"body": "function ${1:name} {\n\t${0}\n}",
"prefix": "function"
},
"get nth line from string": {
"body": "line=$(echo \"\\$${1:str}\" | sed -n \"${2:n}p\")",
"prefix": "get nth line from string"
},
"i++": {
"body": "((${1:i}++))",
"prefix": "i++"
},
"i--": {
"body": "((${1:i}--))",
"prefix": "i--"
},
"if (short)": {
"body": "[[ \"\\$${1:var}\" ]] && $0",
"prefix": "if (short)"
},
"if .. then": {
"body": [
"if [[ \"\\$${1:var}\" ]]; then",
"\t$0",
"fi"
],
"prefix": "if .. then"
},
"if .. then .. else": {
"body": [
"if [[ \"$${1:cond}\" ]]; then",
"\t$0",
"else",
"\t",
"fi"
],
"prefix": "if .. then .. else"
},
"input (stdin or $1)": {
"body": [
"if [[ $# -eq 0 ]]; then",
"\tinput=$(< /dev/stdin)",
"else",
"\tinput=\"$1\"",
"fi"
],
"description": "reads either from STDIN or $1. stdin may have unescaped newlines, which have to be removed, e.g. via `tr -d '\n'`.",
"prefix": "input (stdin or $1)"
},
"notify (msg)": {
"body": "osascript -e 'display notification \"\" with title \"${1:msg}\"'",
"prefix": "notify (msg)"
},
"notify (var)": {
"body": "osascript -e \"display notification \\\"\\\" with title \\\"$${1:var}\\\"\"",
"prefix": "notify (var)"
},
"null (pipe)": {
"body": "&> /dev/null",
"prefix": "null (pipe)"
},
"osascript jxa (run script)": {
"body": "osascript -l JavaScript \"${1:file}\"",
"prefix": [
"jxa (run script)",
"osascript -l JavaScript"
]
},
"plist: extract key": {
"body": "plutil -extract name.childkey xml1 -o - example.plist | sed -n 4p | cut -d'>' -f2 | cut -d'<' -f1",
"prefix": "plist: extract key"
},
"print in blue": {
"body": "print \"\\e[1;34m$0\\e[0m\"",
"prefix": "print in blue"
},
"progress bar": {
"body": [
"for _ in {1..100}; do",
"\tprintf \"🬋\"",
"\tsleep 0.5",
"done"
],
"prefix": "progress bar"
},
"quicklook": {
"body": "qlmanage -p \"${1:filepath}\"",
"description": "QuickLook the file. MacOS only.",
"prefix": "quicklook"
},
"redirect to stderr": {
"body": ">&2",
"prefix": "redirect to stderr"
},
"resolve home": {
"body": "${1:path}=\"\\${${1:path}/#\\~/\\$HOME}\"",
"prefix": "resolve home"
},
"restart app": {
"body": [
"killall \"${1:app_name}\"",
"while pgrep -xq \"${1:app_name}\"; do sleep 0.1; done",
"open -a \"${1:app_name}\""
],
"description": "safely restart app, avoiding race condition",
"prefix": "restart app"
},
"sed substitution": {
"body": "sed 's/$0//'",
"prefix": "sed substitution"
},
"shebang": {
"body": "#!/usr/bin/env zsh",
"prefix": "shebang"
},
"slice": {
"body": "${1:var}=\"${${1:var}:${2:from}:${3:to}}\"",
"prefix": "slice"
},
"spinner": {
"body": [
"# spinner with 20s timeout",
"spinner=\"⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏\"",
"for i in {1..100}; do",
"\tpos=\\$((i % \\${#spinner}))",
"\tprintf \"\\r%s\" \"\\${spinner:\\$pos:1}\"",
"\tsleep 0.2",
"done",
"printf \"\\r\" # remove spinner"
],
"prefix": "spinner"
},
"stderr (merge with stdout)": {
"body": "2>&1",
"prefix": "stderr (merge with stdout)"
},
"stdin": {
"body": "stdin=\\$(< /dev/stdin)",
"description": "$(cat) also works. See https://stackoverflow.com/questions/32363887/in-a-bash-function-how-do-i-get-stdin-into-a-variable",
"prefix": "stdin"
},
"stdout is to a terminal": {
"body": "[[ -t true ]]",
"prefix": "stdout is to a terminal"
},
"substitute": {
"body": "\\${${1:var}//${2:search}/${3:replace}}",
"description": "one slash for single substitution, two for global",
"prefix": "substitute (expansion)"
},
"suppress stderr": {
"body": "2>/dev/null",
"prefix": "suppress stderr"
},
"switch case": {
"body": [
"case $${1:var} in",
"\"one\" | \"two\")",
"\techo \"foo\"",
"\t;;",
"\"three\")",
"\techo \"bar\"",
"\t;;",
"*)",
"\techo \"default\"",
"\t;;",
"esac"
],
"description": "A case command first expands word, and tries to match it against each pattern in turn.",
"prefix": "switch case"
},
"ternary": {
"body": "\\$([[ \"${1:cond}\" ]] && echo \"${2:value1}\" || echo \"${3:value2}\")",
"prefix": "ternary"
},
"then": {
"body": "then\n\t$0\nfi",
"prefix": "then .. fi"
},
"today (ISO date) + now": {
"body": "${1:now}=\\$(date +\"%Y-%m-%d %H:%M:%S\")",
"prefix": [
"today (ISO date)",
"now"
]
},
"trim whitespace": {
"body": "${1:text}=$(echo -n \"$${1:text}\" | sed -e 's/^ *//' -e 's/ *$//')",
"prefix": "trim whitespace"
},
"urlEncode": {
"body": "osascript -l JavaScript -e \"encodeURIComponent('${1:text}')\"",
"prefix": "urlEncode"
},
"wait until app running": {
"body": "while ! pgrep -xq \"${1:app_name}\"; do sleep 0.1; done",
"prefix": "wait until app running"
},
"wait until app terminated": {
"body": "while pgrep -xq \"${1:app_name}\"; do sleep 0.1; done",
"prefix": "wait until app terminated"
},
"while": {
"body": "while [[ ${1:condition} ]]; do\n\t${0}\ndone\n",
"description": "A while loop by condition.",
"prefix": "while"
},
"xargs (for each line)": {
"body": "xargs -I {} ${1:some_cmd} '{}'",
"prefix": "xargs (for each line)"
}
}

View File

@@ -0,0 +1,7 @@
{
"schema (modeline)": {
"body": "# yaml-language-server: $$schema=${1:url}",
"description": "https://github.com/redhat-developer/yaml-language-server#using-inlined-schema",
"prefix": "schema (modeline)"
}
}

View File

View File

@@ -1,120 +0,0 @@
#'ve
i/!
i've/!
I've
I
good
#rd
#rd/!
#rd
#rd
#rd/!
#rd
wrd/!
neovim
github
folke
nvim
keybinds
https
CommentBox
lua
dap
lsp
wincmd
CTRL
hjkl
resizing
noh
UiEnter
signcolumn
popup
whitespace
listchars
completeopt
Autoformat
stevearc
isort
formatters
formatter
hrsh7th
cmp
repos
editorconfig
rmagatti
goto
UI
api
configs
bufhidden
ThePrimeagen
preservim
tpope
todo
lukas
reineke
blankline
tabstop
shiftwidth
wakatime
numToStr
zbirenbaum
onsails
lspkind
pictograms
vscode
SergioRibera
dotenv
config
schemaStore
TypeError
dev
Automagically
runtime
discoverable
lspconfig
pre
LSPs
Stylelint
CSS
PHP
GitLab
ESLint
Ansible
Terraform
TypeScript
JS
Vue
YAML
LSPSaga
luasnip
saadparwaiz1
LuaSnip
L3MON4D3
jumplist
textobjects
scm
textobj
treesitter
statusline
lualine
ivuorinen's
lazylazy
cmdline
popupmenu
noice
statuscolumn
TreeSitter
ivuorinen
github
github
Tampere
Logrotate
sysvinit
Noice
fzf
linters
LSPConfig
deps
Noice
stdpath

Binary file not shown.

View File

@@ -1,122 +1,117 @@
"$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json"
final_space = true
console_title_template = "{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}"
version = 2
console_title_template = '{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}'
version = 3
auto_upgrade = true
[[blocks]]
alignment = "left"
type = "prompt"
[[blocks.segments]]
foreground = "cyan"
style = "powerline"
template = "{{ .Icon }}"
type = "os"
[[blocks.segments]]
type = "session"
style = "plain"
template = " {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}"
[[blocks.segments]]
foreground = "cyan"
style = "plain"
template = " {{ .Path }} "
type = "path"
[blocks.segments.properties]
style = "mixed"
[blocks.segments.mapped_locations]
"~/Code/*" = ""
"~/Code/ivuorinen/" = ""
[[blocks.segments]]
type = "git"
style = "plain"
foreground = "lightGreen"
# template = "{{ .UpstreamIcon }}{{ .HEAD }} {{ if or (.Staging.Changed) (.Working.Changed) }}({{if .Behind }}\u2193 {{ .Behind }} {{ end }}{{if .Staging.Changed }}\uF046 {{ .Staging.String }} {{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }}| {{ end }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}){{ end }}"
template = "{{ .UpstreamIcon }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }}  {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }}  {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }}  {{ .StashCount }}{{ end }}"
[blocks.segments.properties]
fetch_status = true
fetch_upstream_icon = true
[blocks.segments.properties.untracked_modes]
"~/Code/oh-my-posh/" = "no"
[[blocks.segments]]
type = "terraform"
style = "plain"
foreground = "#000000"
background = "#ebcc34"
template = "{{.WorkspaceName}}"
[[blocks]]
alignment = "left"
type = "prompt"
[[blocks.segments]]
foreground = "#68a063"
style = "plain"
template = " {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}"
type = "node"
[blocks.segments.properties]
display_mode = "files"
fetch_package_manager = true
fetch_version = true
[[blocks.segments]]
foreground = "#4063D8"
style = "plain"
template = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}"
type = "crystal"
[blocks.segments.properties]
display_mode = "files"
fetch_version = true
[[blocks.segments]]
foreground = "#DE3F24"
style = "plain"
template = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}"
type = "ruby"
[blocks.segments.properties]
display_mode = "files"
fetch_version = true
[[blocks.segments]]
foreground = "#FED142"
style = "plain"
template = " {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}"
type = "python"
[blocks.segments.properties]
display_mode = "context"
fetch_virtual_env = false
[[blocks]]
alignment = "left"
newline = true
type = "prompt"
[[blocks.segments]]
background = "transparent"
foreground = "lightGreen"
foreground_templates = [ "{{ if gt .Code 0 }}red{{ end }}" ]
style = "plain"
template = "➜"
type = "status"
[blocks.segments.properties]
always_enabled = true
final_space = true
[transient_prompt]
background = "transparent"
foreground = "lightGreen"
foreground_templates = [ "{{ if gt .Code 0 }}red{{ end }}" ]
template = "➜ "
template = '➜ '
foreground = 'lightGreen'
background = 'transparent'
foreground_templates = ['{{ if gt .Code 0 }}red{{ end }}']
[[blocks]]
type = 'prompt'
alignment = 'left'
[[blocks.segments]]
style = 'powerline'
template = '{{ .Icon }}'
foreground = 'cyan'
type = 'os'
[[blocks.segments]]
style = 'plain'
template = ' {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}'
type = 'session'
[[blocks.segments]]
style = 'plain'
template = ' {{ .Path }} '
foreground = 'cyan'
type = 'path'
[blocks.segments.properties]
style = 'mixed'
[[blocks.segments]]
style = 'plain'
template = '{{ .UpstreamIcon }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }}  {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }}  {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }}  {{ .StashCount }}{{ end }}'
foreground = 'lightGreen'
type = 'git'
[blocks.segments.properties]
fetch_status = true
fetch_upstream_icon = true
[blocks.segments.properties.untracked_modes]
'~/Code/oh-my-posh/' = 'no'
[[blocks.segments]]
style = 'plain'
template = '{{.WorkspaceName}}'
foreground = '#000000'
background = '#ebcc34'
type = 'terraform'
[[blocks]]
type = 'prompt'
alignment = 'left'
[[blocks.segments]]
style = 'plain'
template = ' {{ if .PackageManagerIcon }}{{ .PackageManagerIcon }} {{ end }}{{ .Full }}'
foreground = '#68a063'
type = 'node'
[blocks.segments.properties]
display_mode = 'files'
fetch_package_manager = true
fetch_version = true
[[blocks.segments]]
style = 'plain'
template = ' {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}'
foreground = '#4063D8'
type = 'crystal'
[blocks.segments.properties]
display_mode = 'files'
fetch_version = true
[[blocks.segments]]
style = 'plain'
template = ' {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}'
foreground = '#DE3F24'
type = 'ruby'
[blocks.segments.properties]
display_mode = 'files'
fetch_version = true
[[blocks.segments]]
style = 'plain'
template = ' {{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }}'
foreground = '#FED142'
type = 'python'
[blocks.segments.properties]
display_mode = 'context'
fetch_version = true
fetch_virtual_env = true
[[blocks]]
type = 'prompt'
alignment = 'left'
newline = true
[[blocks.segments]]
style = 'plain'
template = '➜'
foreground = 'lightGreen'
background = 'transparent'
type = 'status'
foreground_templates = ['{{ if gt .Code 0 }}red{{ end }}']
[blocks.segments.properties]
always_enabled = true

5
config/tms/config.toml Normal file
View File

@@ -0,0 +1,5 @@
default_session = "main"
[[search_dirs]]
path = "~/Code"
depth = 10

View File

@@ -28,6 +28,15 @@ bind -n M-Down select-pane -D
# Reload tmux config with <prefix> + r
bind r source-file ~/.dotfiles/config/tmux/tmux.conf \; display "tmux cfg reloaded!"
# Switch to next client with <prefix>( and previous with <prefix>)
bind -r '(' switch-client -p\; refresh-client -S
bind -r ')' switch-client -n\; refresh-client -S
# tms, https://github.com/jrmoulton/tmux-sessionizer
bind C-h display-popup -E "tms"
bind C-j display-popup -E "tms switch"
bind C-k display-popup -E "tms windows"
# Open a new window with <prefix> + N
bind N new-window
@@ -112,7 +121,7 @@ set-option -g status-left ''
set-option -g window-status-format ' #I:#W '
set-option -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} '
set-option -g status-right "#{hostname_short}/#S #{tmux_mode_indicator}"
set-option -g status-right "#{hostname_short}/#(tms sessions) #{tmux_mode_indicator}"
set -g pane-border-style "fg=#3b4261"
set -g pane-active-border-style "fg=#7aa2f7"
@@ -138,15 +147,11 @@ set -g @tmux_window_name_max_name_len "20"
set -g @tmux_window_name_use_tilde "True"
set -g @tmux_window_name_shells "['bash', 'fish', 'sh', 'zsh', 'oh-my-posh']"
set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']"
set -g @tmux_window_name_ignored_programs "['sqlite3', 'x-set-php-aliases', 'oh-my-posh', 'antidot']" # Default is []
set -g @tmux_window_name_substitute_sets "[('.+ipython2', 'ipython2'), ('.+ipython3', 'ipython3'), ('.+\.local', '.local')]"
set -g @tmux_window_name_ignored_programs "['sqlite3', 'oh-my-posh', 'antidot', 'direnv']" # Default is []
set -g @tmux_window_name_substitute_sets "[('.+ipython2', 'ipython2'), ('.+ipython3', 'ipython3'), ('.+\.local', '.local'), ('.+asdf', 'asdf')]"
## https://github.com/tmux-plugins/tmux-continuum
set -g @continuum-restore 'on'
## https://github.com/tmux-plugins/tmux-resurrect
set -g @resurrect-strategy-nvim 'session'
set -g @resurrect-dir '~/.local/state/tmux/tmux-resurrect'
# set -g @continuum-restore 'on'
## https://github.com/MunifTanjim/tmux-mode-indicator
set -g @mode_indicator_prefix_mode_style 'bg=default,fg=#7aa2f7'
@@ -160,9 +165,8 @@ set -g @mode_indicator_sync_mode_style 'bg=default,fg=red'
run-shell ~/.dotfiles/config/tmux/plugins/tmux-sensible/sensible.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-window-name/tmux_window_name.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-resurrect/resurrect.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-sessionist/sessionist.tmux
# run-shell ~/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux
# run-shell ~/.dotfiles/config/tmux/plugins/tmux-sessionist/sessionist.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-mode-indicator/mode_indicator.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-suspend/suspend.tmux
run-shell ~/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux

View File

@@ -1,9 +1,14 @@
local wezterm = require("wezterm")
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
-- Font and font size
config.font_size = 14.0
config.font = wezterm.font("JetBrainsMonoNL Nerd Font Mono")
config.font = wezterm.font_with_fallback {
'JetBrainsMonoNL Nerd Font Mono',
'JetBrains Mono',
'Noto Color Emoji',
'Symbols Nerd Font Mono',
}
-- Make the window a bit transparent
config.window_background_opacity = 0.97
@@ -15,16 +20,16 @@ config.send_composed_key_when_left_alt_is_pressed = true
-- Function to detect the theme based on appearance
function Scheme_for_appearance(appearance)
if appearance:find("Dark") then
return "Tokyo Night Storm"
if appearance:find 'Dark' then
return 'Tokyo Night Storm'
else
return "Tokyo Night Day"
return 'Tokyo Night Day'
end
end
-- Set the color scheme based on appearance
---@diagnostic disable-next-line: unused-local
wezterm.on("window-config-reloaded", function(window, pane)
wezterm.on('window-config-reloaded', function(window, pane)
local overrides = window:get_config_overrides() or {}
local appearance = window:get_appearance()
local scheme = Scheme_for_appearance(appearance)

View File

@@ -0,0 +1,31 @@
# This file is for Antidote plugins
# https://getantidote.github.io/usage
# vim: ft=ini
# set up Zsh completions with plugins
mattmc3/ez-compinit
zsh-users/zsh-completions kind:fpath path:src
# frameworks like oh-my-zsh are supported
getantidote/use-omz # handle OMZ dependencies
ohmyzsh/ohmyzsh path:lib # load OMZ's library
ohmyzsh/ohmyzsh path:plugins/colored-man-pages # load OMZ plugins
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
ohmyzsh/ohmyzsh path:plugins/extract
ohmyzsh/ohmyzsh path:plugins/z
ohmyzsh/ohmyzsh path:plugins/eza
# Add some programmer plugins
ohmyzsh/ohmyzsh path:plugins/git
ohmyzsh/ohmyzsh path:plugins/golang
ohmyzsh/ohmyzsh path:plugins/python
ohmyzsh/ohmyzsh path:plugins/nvm
# Add core plugins that make Zsh a bit more like Fish
zsh-users/zsh-completions path:src kind:fpath
zdharma-continuum/fast-syntax-highlighting
# Add some plugins that are not in OMZ
jreese/zsh-titles
yuki-ycino/tms

View File

@@ -0,0 +1,212 @@
#compdef oh-my-posh
compdef _oh-my-posh oh-my-posh
# zsh completion for oh-my-posh -*- shell-script -*-
__oh-my-posh_debug()
{
local file="$BASH_COMP_DEBUG_FILE"
if [[ -n ${file} ]]; then
echo "$*" >> "${file}"
fi
}
_oh-my-posh()
{
local shellCompDirectiveError=1
local shellCompDirectiveNoSpace=2
local shellCompDirectiveNoFileComp=4
local shellCompDirectiveFilterFileExt=8
local shellCompDirectiveFilterDirs=16
local shellCompDirectiveKeepOrder=32
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder
local -a completions
__oh-my-posh_debug "\n========= starting completion logic =========="
__oh-my-posh_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}"
# The user could have moved the cursor backwards on the command-line.
# We need to trigger completion from the $CURRENT location, so we need
# to truncate the command-line ($words) up to the $CURRENT location.
# (We cannot use $CURSOR as its value does not work when a command is an alias.)
words=("${=words[1,CURRENT]}")
__oh-my-posh_debug "Truncated words[*]: ${words[*]},"
lastParam=${words[-1]}
lastChar=${lastParam[-1]}
__oh-my-posh_debug "lastParam: ${lastParam}, lastChar: ${lastChar}"
# For zsh, when completing a flag with an = (e.g., oh-my-posh -n=<TAB>)
# completions must be prefixed with the flag
setopt local_options BASH_REMATCH
if [[ "${lastParam}" =~ '-.*=' ]]; then
# We are dealing with a flag with an =
flagPrefix="-P ${BASH_REMATCH}"
fi
# Prepare the command to obtain completions
requestComp="${words[1]} __complete ${words[2,-1]}"
if [ "${lastChar}" = "" ]; then
# If the last parameter is complete (there is a space following it)
# We add an extra empty parameter so we can indicate this to the go completion code.
__oh-my-posh_debug "Adding extra empty parameter"
requestComp="${requestComp} \"\""
fi
__oh-my-posh_debug "About to call: eval ${requestComp}"
# Use eval to handle any environment variables and such
out=$(eval ${requestComp} 2>/dev/null)
__oh-my-posh_debug "completion output: ${out}"
# Extract the directive integer following a : from the last line
local lastLine
while IFS='\n' read -r line; do
lastLine=${line}
done < <(printf "%s\n" "${out[@]}")
__oh-my-posh_debug "last line: ${lastLine}"
if [ "${lastLine[1]}" = : ]; then
directive=${lastLine[2,-1]}
# Remove the directive including the : and the newline
local suffix
(( suffix=${#lastLine}+2))
out=${out[1,-$suffix]}
else
# There is no directive specified. Leave $out as is.
__oh-my-posh_debug "No directive found. Setting do default"
directive=0
fi
__oh-my-posh_debug "directive: ${directive}"
__oh-my-posh_debug "completions: ${out}"
__oh-my-posh_debug "flagPrefix: ${flagPrefix}"
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
__oh-my-posh_debug "Completion received error. Ignoring completions."
return
fi
local activeHelpMarker="_activeHelp_ "
local endIndex=${#activeHelpMarker}
local startIndex=$((${#activeHelpMarker}+1))
local hasActiveHelp=0
while IFS='\n' read -r comp; do
# Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker)
if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then
__oh-my-posh_debug "ActiveHelp found: $comp"
comp="${comp[$startIndex,-1]}"
if [ -n "$comp" ]; then
compadd -x "${comp}"
__oh-my-posh_debug "ActiveHelp will need delimiter"
hasActiveHelp=1
fi
continue
fi
if [ -n "$comp" ]; then
# If requested, completions are returned with a description.
# The description is preceded by a TAB character.
# For zsh's _describe, we need to use a : instead of a TAB.
# We first need to escape any : as part of the completion itself.
comp=${comp//:/\\:}
local tab="$(printf '\t')"
comp=${comp//$tab/:}
__oh-my-posh_debug "Adding completion: ${comp}"
completions+=${comp}
lastComp=$comp
fi
done < <(printf "%s\n" "${out[@]}")
# Add a delimiter after the activeHelp statements, but only if:
# - there are completions following the activeHelp statements, or
# - file completion will be performed (so there will be choices after the activeHelp)
if [ $hasActiveHelp -eq 1 ]; then
if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then
__oh-my-posh_debug "Adding activeHelp delimiter"
compadd -x "--"
hasActiveHelp=0
fi
fi
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
__oh-my-posh_debug "Activating nospace."
noSpace="-S ''"
fi
if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then
__oh-my-posh_debug "Activating keep order."
keepOrder="-V"
fi
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
# File extension filtering
local filteringCmd
filteringCmd='_files'
for filter in ${completions[@]}; do
if [ ${filter[1]} != '*' ]; then
# zsh requires a glob pattern to do file filtering
filter="\*.$filter"
fi
filteringCmd+=" -g $filter"
done
filteringCmd+=" ${flagPrefix}"
__oh-my-posh_debug "File filtering command: $filteringCmd"
_arguments '*:filename:'"$filteringCmd"
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
# File completion for directories only
local subdir
subdir="${completions[1]}"
if [ -n "$subdir" ]; then
__oh-my-posh_debug "Listing directories in $subdir"
pushd "${subdir}" >/dev/null 2>&1
else
__oh-my-posh_debug "Listing directories in ."
fi
local result
_arguments '*:dirname:_files -/'" ${flagPrefix}"
result=$?
if [ -n "$subdir" ]; then
popd >/dev/null 2>&1
fi
return $result
else
__oh-my-posh_debug "Calling _describe"
if eval _describe $keepOrder "completions" completions $flagPrefix $noSpace; then
__oh-my-posh_debug "_describe found some completions"
# Return the success of having called _describe
return 0
else
__oh-my-posh_debug "_describe did not find completions."
__oh-my-posh_debug "Checking if we should do file completion."
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
__oh-my-posh_debug "deactivating file completion"
# We must return an error code here to let zsh know that there were no
# completions found by _describe; this is what will trigger other
# matching algorithms to attempt to find completions.
# For example zsh can match letters in the middle of words.
return 1
else
# Perform file completion
__oh-my-posh_debug "Activating file completion"
# We must return the result of this command, so it must be the
# last command, or else we must store its result to return it.
_arguments '*:filename:_files'" ${flagPrefix}"
fi
fi
fi
}
# don't run the completion function when being source-ed or eval-ed
if [ "$funcstack[1]" = "_oh-my-posh" ]; then
_oh-my-posh
fi

View File

@@ -2,98 +2,12 @@
```txt
n <Space>/ * <Lua 380: ~/.config/nvim/lua/plugins/telescope.lua:82>
n <Space>/ * <Lua 398: ~/.config/nvim/lua/plugins/telescope.lua:95>
[/] Fuzzily search in current buffer]
n <Space>hw * <Lua 42: ~/.config/nvim/lua/plugins/harpoon.lua:40>
Open harpoon window with telescope
n <Space>1 * <Lua 40: ~/.config/nvim/lua/plugins/harpoon.lua:68>
harpoon to file 1
n <Space>hn * <Lua 39: ~/.config/nvim/lua/plugins/harpoon.lua:61>
harpoon to next file
n <Space>hp * <Lua 38: ~/.config/nvim/lua/plugins/harpoon.lua:54>
harpoon to previous file
n <Space>ha * <Lua 37: ~/.config/nvim/lua/plugins/harpoon.lua:47>
harpoon file
n <Space>5 * <Lua 36: ~/.config/nvim/lua/plugins/harpoon.lua:96>
harpoon to file 5
n <Space>4 * <Lua 35: ~/.config/nvim/lua/plugins/harpoon.lua:89>
harpoon to file 4
n <Space>3 * <Lua 34: ~/.config/nvim/lua/plugins/harpoon.lua:82>
harpoon to file 3
n <Space>2 * <Lua 33: ~/.config/nvim/lua/plugins/harpoon.lua:75>
harpoon to file 2
n <Space>tc * <Cmd>CloakToggle<CR>
[tc] Toggle Cloak
n <Space>xx * <Cmd>Trouble<CR>
Toggle Trouble
n <Space>xq * <Cmd>Trouble quickfix<CR>
Toggle Quickfix
n <Space>xl * <Cmd>Trouble loclist<CR>
Toggle Loclist
n <Space>xd * <Cmd>Trouble document_diagnostics<CR>
Toggle Document Diagnostics
n <Space>xw * <Cmd>Trouble workspace_diagnostics<CR>
Toggle Workspace Diagnostics
n <Space>?s * <Cmd>Neoconf show<CR>
Neoconf: Show merged config
n <Space>?m * <Cmd>Neoconf lsp<CR>
Neoconf: Show merged LSP config
n <Space>?l * <Cmd>Neoconf local<CR>
Neoconf: Local
n <Space>?g * <Cmd>Neoconf global<CR>
Neoconf: Global
n <Space>?c * <Cmd>Neoconf<CR>
Neoconf: Open
n <Space>wl * <Cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>
LSP: Workspace List Folders
n <Space>wr * <Cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>
LSP: Workspace Remove Folder
n <Space>wa * <Cmd>lua vim.lsp.buf.add_workspace_folder()<CR>
LSP: Workspace Add Folder
n <Space>ws * <Cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>
LSP: Workspace Symbols
n <Space>ds * <Cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>
LSP: Document Symbols
n <Space>D * <Cmd>lua vim.lsp.buf.type_definition()<CR>
LSP: Type Definition
n <Space>ca * <Cmd>lua vim.lsp.buf.code_action()<CR>
LSP: Code Action
n <Space>cr * <Cmd>lua vim.lsp.buf.rename()<CR>
LSP: Rename
n <Space>dq * <Cmd>lua vim.diagnostic.setloclist()<CR>
Diagnostic: Set loc list
n <Space>do * <Cmd>lua vim.diagnostic.open_float()<CR>
Diagnostic: Open float
<Space>cf * <Lua 107: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
[f] Format buffer
n <Space>e * <Lua 81: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
NeoTree reveal
n <Space>cg * <Lua 50: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Generate annotations
n <Space>zm * <Lua 49: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search mappings.
n <Space>zh * <Lua 48: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search history of opened files
n <Space>zb * <Lua 47: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search open buffers.
n <Space>zt * <Lua 46: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search open tabs.
n <Space>zc * <Lua 32: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search commands.
n <Space>zf * <Lua 31: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search for files in given path.
n <Space>zg * <Lua 25: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search with rg (aka live grep).
n <Space>dc * <Lua 45: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
DAP: Continue
n <Space>db * <Lua 44: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
DAP: Toggle Breakpoint
n <Space>dt * <Lua 43: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
DAP: Toggle UI
n <Space>ht * <Lua 369: ~/.config/nvim/lua/plugins/harpoon.lua:16>
n <Space>ht * <Lua 393: ~/.config/nvim/lua/plugins/harpoon.lua:43>
Open Harpoon Quick menu
n <Space>dr * <Lua 41: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
DAP: Reset
n <Space>hw * <Lua 390: ~/.config/nvim/lua/plugins/harpoon.lua:37>
Open harpoon window with telescope
x # * <Lua 7: vim/_defaults.lua:0>
:help v_#-default
o % <Plug>(MatchitOperationForward)
@@ -105,45 +19,102 @@ x * * <Lua 3: vim/_defaults.lua:0>
:help v_star-default
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
:help v_@-default
n K * <Cmd>lua vim.lsp.buf.hover()<CR>
LSP: Hover Documentation
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
:help v_Q-default
x S <Plug>VSurround
o R * <Lua 102: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Treesitter Search
x R * <Lua 99: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Treesitter Search
n Y * y$
:help Y-default
n Zk * <Lua 98: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Flash Treesitter
o Zk * <Lua 96: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Flash Treesitter
x Zk * <Lua 95: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Flash Treesitter
o [% <Plug>(MatchitOperationMultiBackward)
x [% <Plug>(MatchitVisualMultiBackward)
n [% <Plug>(MatchitNormalMultiBackward)
o [h * V<Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
x [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
n [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
o [H * V<Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
x [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
n [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
o [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
x [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
n [i * <Cmd>lua MiniIndentscope.operator('top', true)<CR>
Go to indent scope top
n [d * <Lua 15: vim/_defaults.lua:0>
Jump to the previous diagnostic
o ]% <Plug>(MatchitOperationMultiForward)
x ]% <Plug>(MatchitVisualMultiForward)
n ]% <Plug>(MatchitNormalMultiForward)
o ]H * V<Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
x ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
n ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
o ]h * V<Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
x ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
n ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
o ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
x ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
n ]i * <Cmd>lua MiniIndentscope.operator('bottom', true)<CR>
Go to indent scope bottom
n ]d * <Lua 14: vim/_defaults.lua:0>
Jump to the next diagnostic
x a% <Plug>(MatchitVisualTextObject)
n cS <Plug>CSurround
n cs <Plug>Csurround
n ds <Plug>Dsurround
n dp * <Cmd>lua vim.diagnostic.goto_prev()<CR>
Diagnostic: Goto Prev
n dn * <Cmd>lua vim.diagnostic.goto_next()<CR>
Diagnostic: Goto Next
o ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
Object scope with border
x ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
Object scope with border
n gR * :RegexplainerToggle<CR>
Toggle Regexplainer
o g% <Plug>(MatchitOperationBackward)
x g% <Plug>(MatchitVisualBackward)
n g% <Plug>(MatchitNormalBackward)
x gS <Plug>VgSurround
n gR * :RegexplainerToggle<CR>
Toggle Regexplainer
n gD * <Cmd>lua vim.lsp.buf.declaration()<CR>
LSP: Goto Declaration
n gd * <Cmd>lua vim.lsp.buf.definition()<CR>
LSP: Goto Definition
n gr * <Cmd>lua require("telescope.builtin").lsp_references()<CR>
LSP: Goto References
n gI * <Cmd>lua vim.lsp.buf.implementation()<CR>
LSP: Goto Implementation
n gP * <Lua 454: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:132>
Close preview windows
n gpr * <Lua 453: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:114>
Preview references
n gpD * <Lua 452: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:105>
Preview declaration
n gpi * <Lua 451: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:91>
Preview implementation
n gpt * <Lua 450: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:77>
Preview type definition
n gpd * <Lua 449: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:63>
Preview definition
x gS * :<C-U>lua MiniSplitjoin.toggle({ region = MiniSplitjoin.get_visual_region() })<CR>
Toggle arguments
n gS * v:lua.MiniSplitjoin.operator("toggle") . " "
Toggle arguments
o gh * <Cmd>lua MiniDiff.textobject()<CR>
Hunk range textobject
x gH * <Lua 417: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:960>
Reset hunks
n gH * <Lua 416: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:960>
Reset hunks
x gh * <Lua 415: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:958>
Apply hunks
n gh * <Lua 414: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:958>
Apply hunks
o gc * <Lua 13: vim/_defaults.lua:0>
Comment textobject
n gcc * <Lua 12: vim/_defaults.lua:0>
@@ -156,17 +127,58 @@ x gx * <Lua 9: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
n gx * <Lua 8: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
o ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
Object scope
x ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
Object scope
n j * v:count == 0 ? 'gj' : 'j'
Move down
n k * v:count == 0 ? 'gk' : 'k'
Move up
n n * <Lua 51: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Twilight
n ySS <Plug>YSsurround
n ySs <Plug>YSsurround
n yss <Plug>Yssurround
n yS <Plug>YSurround
n ys <Plug>Ysurround
o r * <Lua 97: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Remote Flash
n shn * <Lua 547: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Highlight next surrounding
n sFn * <Lua 546: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Find next left surrounding
n sfn * <Lua 545: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Find next right surrounding
n srn * <Lua 544: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Replace next surrounding
n sdn * <Lua 543: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Delete next surrounding
n shl * <Lua 542: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Highlight previous surrounding
n sFl * <Lua 541: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Find previous left surrounding
n sfl * <Lua 540: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Find previous right surrounding
n srl * <Lua 539: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Replace previous surrounding
n sdl * <Lua 538: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Delete previous surrounding
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
Add surrounding to selection
n sn * <Lua 537: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:895>
Update `MiniSurround.config.n_lines`
n sh * <Lua 536: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Highlight surrounding
n sF * <Lua 535: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Find left surrounding
n sf * <Lua 534: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Find right surrounding
n sr * <Lua 533: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Replace surrounding
n sd * <Lua 532: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Delete surrounding
n sa * <Lua 531: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
Add surrounding
n zk * <Lua 100: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Flash
o zk * <Lua 94: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Flash
x zk * <Lua 92: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Flash
x <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward)
o <Plug>(MatchitOperationMultiForward) * :<C-U>call matchit#MultiMatch("W", "o")<CR>
o <Plug>(MatchitOperationMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "o")<CR>
@@ -180,44 +192,29 @@ x <Plug>(MatchitVisualBackward) * :<C-U>call matchit#Match_wrapper('',0,'v')<CR
x <Plug>(MatchitVisualForward) * :<C-U>call matchit#Match_wrapper('',1,'v')<CR>:if col("''") != col("$") | exe ":normal! m'" | endif<CR>gv``
n <Plug>(MatchitNormalBackward) * :<C-U>call matchit#Match_wrapper('',0,'n')<CR>
n <Plug>(MatchitNormalForward) * :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
v <Plug>VgSurround * :<C-U>call <SNR>27_opfunc(visualmode(),visualmode() ==# 'V' ? 0 : 1)<CR>
v <Plug>VSurround * :<C-U>call <SNR>27_opfunc(visualmode(),visualmode() ==# 'V' ? 1 : 0)<CR>
n <Plug>YSurround * <SNR>27_opfunc2('setup')
n <Plug>Ysurround * <SNR>27_opfunc('setup')
n <Plug>YSsurround * <SNR>27_opfunc2('setup').'_'
n <Plug>Yssurround * '^'.v:count1.<SNR>27_opfunc('setup').'g_'
n <Plug>CSurround * :<C-U>call <SNR>27_changesurround(1)<CR>
n <Plug>Csurround * :<C-U>call <SNR>27_changesurround()<CR>
n <Plug>Dsurround * :<C-U>call <SNR>27_dosurround(<SNR>27_inputtarget())<CR>
n <Plug>SurroundRepeat * .
n <C-L> * :<C-U>TmuxNavigateRight<CR>
n <C-Bslash> * :<C-U>TmuxNavigatePrevious<CR>
n <C-J> * :<C-U>TmuxNavigateDown<CR>
n <C-H> * :<C-U>TmuxNavigateLeft<CR>
n <C-K> * :<C-U>TmuxNavigateUp<CR>
s <Plug>luasnip-jump-prev * <Lua 283: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:57>
s <Plug>luasnip-jump-prev * <Lua 345: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:57>
LuaSnip: Jump to the previous node
s <Plug>luasnip-jump-next * <Lua 282: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:54>
s <Plug>luasnip-jump-next * <Lua 344: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:54>
LuaSnip: Jump to the next node
s <Plug>luasnip-prev-choice * <Lua 281: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:51>
s <Plug>luasnip-prev-choice * <Lua 343: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:51>
LuaSnip: Change to the previous choice from the choiceNode
s <Plug>luasnip-next-choice * <Lua 280: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:48>
s <Plug>luasnip-next-choice * <Lua 342: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:48>
LuaSnip: Change to the next choice from the choiceNode
s <Plug>luasnip-expand-snippet * <Lua 279: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:45>
s <Plug>luasnip-expand-snippet * <Lua 341: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:45>
LuaSnip: Expand the current snippet
s <Plug>luasnip-expand-or-jump * <Lua 278: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:42>
s <Plug>luasnip-expand-or-jump * <Lua 340: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:42>
LuaSnip: Expand or jump in the current snippet
<Plug>luasnip-expand-repeat * <Lua 276: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:35>
<Plug>luasnip-expand-repeat * <Lua 338: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:35>
LuaSnip: Repeat last node expansion
n <Plug>luasnip-delete-check * <Lua 274: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:28>
n <Plug>luasnip-delete-check * <Lua 336: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:28>
LuaSnip: Removes current snippet from jumplist
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
n <C-P> * <Lua 26: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
FZF: search for files starting at current directory.
n <C-W><C-D> <C-W>d
Show diagnostics under the cursor
n <C-W>d * <Lua 16: vim/_defaults.lua:0>
Show diagnostics under the cursor
n <C-L> * <Cmd>nohlsearch|diffupdate|normal! <C-L><CR>
:help CTRL-L-default
```
- Generated on Wed 25 Sep 2024 14:52:25 EEST
- Generated on Fri 22 Nov 2024 15:30:39 EET

View File

@@ -392,18 +392,106 @@ section_brew()
! x-have brew && menu_section "$USAGE_PREFIX" "brew not available on this system"
}
section_asdf()
{
USAGE_PREFIX="$SCRIPT asdf <command>"
MENU=(
"install:Install asdf"
"current:Show asdf current versions"
"global:Show asdf global versions"
"installed:Show asdf installed versions"
"local:Show asdf local versions"
"versions:Show asdf versions"
"where:Show asdf where"
"which:Show asdf which"
)
case "$1" in
install)
msg "Installing asdf..."
bash "$DOTFILES/scripts/install-asdf.sh both" \
&& msg_yay "asdf installed!"
;;
current)
asdf current
;;
global)
asdf global
;;
installed)
asdf list
;;
local)
asdf local
;;
versions)
asdf list all
;;
where)
asdf where
;;
which)
asdf which
;;
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
esac
}
section_helpers()
{
USAGE_PREFIX="$SCRIPT helpers <command>"
MENU=(
"aliases:<shell> (bash, zsh) Show aliases for bash or zsh"
"colors:Show colors"
"env:Show environment variables"
"functions:Show functions"
"nvim:Show nvim keybindings"
"path:Show \$PATH dir by dir"
"tmux:Show tmux keybindings"
"wezterm:Show wezterm keybindings"
)
case "$1" in
CMD="$1"
shift
SECTION="$1"
shift
case "$CMD" in
path)
# shellcheck disable=2001
for i in $(echo "$PATH" | sed 's/:/ /g'); do echo "$i"; done
;;
aliases)
case "$SECTION" in
"zsh")
zsh -ixc : 2>&1 | grep -E '> alias' | sed "s|$HOME|~|" | grep -v "(eval)"
;;
"bash")
bash -ixc : 2>&1 | grep -E '> alias' | sed "s|$HOME|~|" | grep -v "(eval)"
;;
*)
echo "$SCRIPT helpers aliases <shell> (bash, zsh)"
;;
esac
;;
"colors")
for i in {0..255}; do echo -en "\e[38;5;${i}m${i} "; done
;;
"env")
env | sort
;;
"functions")
declare -F
;;
"nvim")
cat "$DOTFILES/docs/nvim-keybindings.md"
;;
"tmux")
cat "$DOTFILES/docs/tmux-keybindings.md"
;;
"wezterm")
cat "$DOTFILES/docs/wezterm-keybindings.md"
;;
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
esac
}
@@ -524,9 +612,16 @@ section_tests()
MENU=(
"msg:List all log functions from shared.sh"
"params:List all parameters"
)
case "$1" in
params)
echo "All parameters:"
for i in "$@"; do
echo " $i"
done
;;
msg)
msg "msg"
msg_done "msg_done"
@@ -555,6 +650,8 @@ usage()
echo ""
section_install
echo ""
section_asdf
echo ""
section_brew
echo ""
section_check
@@ -566,14 +663,22 @@ usage()
section_helpers
}
# The main loop. first keyword after $0 triggers section, or help.
case "$1" in
install) section_install "$2" ;;
brew) section_brew "$2" ;;
check) section_check "$2" ;;
dotfiles) section_dotfiles "$2" ;;
helpers) section_helpers "$2" ;;
docs) section_docs "$2" ;;
tests) section_tests "$2" ;;
*) usage && exit 0 ;;
esac
main()
{
SECTION="$1"
shift
# The main loop. The first keyword after $0 triggers section, or help.
case "$SECTION" in
install) section_install "$@" ;;
asdf) section_asdf "$@" ;;
brew) section_brew "$@" ;;
check) section_check "$@" ;;
dotfiles) section_dotfiles "$@" ;;
helpers) section_helpers "$@" ;;
docs) section_docs "$@" ;;
tests) section_tests "$@" ;;
*) usage && exit 0 ;;
esac
}
main "$@"

View File

@@ -4,7 +4,7 @@
#
# It also updates asdf and the plugins, and then reshim asdf.
#
# Usage: ./install-asdf.sh [both|install|add_plugins]
# Usage: ./install-asdf.sh [both|install|update|add_plugins]
# Author: Ismo Vuorinen <https://github.com/ivuorinen>
# License: MIT
#
@@ -13,9 +13,37 @@ source "${DOTFILES}/config/shared.sh"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
export PATH="${ASDF_DIR}/bin:$PATH"
# If ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME is not set, set it
if [ -z "${ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME}" ]; then
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
fi
msg "Sourcing asdf in your shell"
. "$ASDF_DIR/asdf.sh"
ASDF_INSTALLABLES=(
"1password-cli:github.com/NeoHsu/asdf-1password-cli.git"
"age:github.com/threkk/asdf-age.git"
"bottom:github.com/carbonteq/asdf-btm.git"
"direnv:github.com/asdf-community/asdf-direnv.git"
"dotenv-linter:github.com/wesleimp/asdf-dotenv-linter.git"
"editorconfig-checker:github.com/gabitchov/asdf-editorconfig-checker.git"
"fd:gitlab.com/wt0f/asdf-fd.git"
"github-cli:github.com/bartlomiejdanek/asdf-github-cli.git"
"golang:github.com/asdf-community/asdf-golang.git"
"hadolint:github.com/devlincashman/asdf-hadolint.git"
"kubectl:github.com/asdf-community/asdf-kubectl.git"
"pre-commit:github.com/jonathanmorley/asdf-pre-commit.git"
"ripgrep:gitlab.com/wt0f/asdf-ripgrep.git"
"rust:github.com/code-lever/asdf-rust.git"
"shellcheck:github.com/luizm/asdf-shellcheck.git"
"shfmt:github.com/luizm/asdf-shfmt.git"
"terragrunt:github.com/ohmer/asdf-terragrunt.git"
"tf-summarize:github.com/adamcrews/asdf-tf-summarize.git"
"yamllint:github.com/ericcornelissen/asdf-yamllint.git"
"yq:github.com/sudermanjr/asdf-yq.git"
)
# Function to update asdf and plugins
update_asdf()
{
@@ -24,43 +52,24 @@ update_asdf()
asdf global asdf-plugin-manager "$(asdf latest asdf-plugin-manager)"
asdf-plugin-manager version
asdf-plugin-manager add-all
asdf-plugin-manager update-all
asdf-plugin-manager export > "${ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME}"
asdf install
return 0
}
update_asdf_commands()
{
msg "Updating asdf commands using asdf-plugin-manager"
asdf-plugin-manager update-all
return 0
}
# Function to install asdf plugins
install_asdf_plugins()
{
ASDF_INSTALLABLES=(
"1password-cli:github.com/NeoHsu/asdf-1password-cli.git"
"age:github.com/threkk/asdf-age.git"
"bottom:github.com/carbonteq/asdf-btm.git"
"direnv:github.com/asdf-community/asdf-direnv.git"
"dotenv-linter:github.com/wesleimp/asdf-dotenv-linter.git"
"editorconfig-checker:github.com/gabitchov/asdf-editorconfig-checker.git"
"eza:github.com/lwiechec/asdf-eza.git"
"fd:gitlab.com/wt0f/asdf-fd.git"
"github-cli:github.com/bartlomiejdanek/asdf-github-cli.git"
"golang:github.com/asdf-community/asdf-golang.git"
"hadolint:github.com/devlincashman/asdf-hadolint.git"
"kubectl:github.com/asdf-community/asdf-kubectl.git"
"lazygit:github.com/nklmilojevic/asdf-lazygit.git"
"nodejs:github.com/asdf-vm/asdf-nodejs.git"
"pipx:github.com/yozachar/asdf-pipx.git"
"pre-commit:github.com/jonathanmorley/asdf-pre-commit.git"
"python:github.com/asdf-community/asdf-python.git"
"ripgrep:gitlab.com/wt0f/asdf-ripgrep.git"
"rust:github.com/code-lever/asdf-rust.git"
"shellcheck:github.com/luizm/asdf-shellcheck.git"
"shfmt:github.com/luizm/asdf-shfmt.git"
"terragrunt:github.com/ohmer/asdf-terragrunt.git"
"tf-summarize:github.com/adamcrews/asdf-tf-summarize.git"
"yamllint:github.com/ericcornelissen/asdf-yamllint.git"
"yq:github.com/sudermanjr/asdf-yq.git"
)
msg "Installing asdf plugins"
for item in "${ASDF_INSTALLABLES[@]}"; do
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
@@ -72,7 +81,7 @@ install_asdf_plugins()
done
msg "Exporting asdf plugin versions"
asdf-plugin-manager export > "${XDG_CONFIG_HOME}/asdf/plugin-versions"
asdf-plugin-manager export > "${ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME}"
return 0
}
@@ -87,7 +96,7 @@ reshim()
# create usage function
usage()
{
echo "Usage: $0 [both|install|add_plugins]"
echo "Usage: $0 [both|install|add_plugins|update]"
exit 1
}
@@ -99,6 +108,10 @@ main()
update_asdf
reshim
;;
"update")
update_asdf_commands
reshim
;;
"install")
update_asdf
reshim

View File

@@ -3,18 +3,15 @@
#
# shellcheck source=shared.sh
echo "This file ($0) has been deprecated in favor of asdf. Please use asdf instead."
exit 0
eval "$DOTFILES/config/shared.sh"
# Enable verbosity with VERBOSE=1
VERBOSE="${VERBOSE:-0}"
msg "Starting to install npm packages"
msgr msg "Starting to install npm packages"
if ! command -v npm &> /dev/null; then
msg_err "npm could not be found."
msgr err "npm could not be found."
exit 0
fi
@@ -38,9 +35,9 @@ install_packages()
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
if npm ls -g -p "$pkg" &> /dev/null; then
msg_run_done "$pkg" "already installed"
msgr run_done "$pkg" "already installed"
else
msg_run "Installing npm package:" "$pkg"
msgr run "Installing npm package:" "$pkg"
npm install -g --no-fund --no-progress --no-timing "$pkg"
fi
echo ""
@@ -50,7 +47,7 @@ install_packages()
# Function to upgrade all global npm packages
upgrade_global_packages()
{
msg_run "Upgrading all global packages"
msgr run "Upgrading all global packages"
npm -g --no-progress --no-timing --no-fund outdated
npm -g --no-timing --no-fund upgrade
}
@@ -58,7 +55,7 @@ upgrade_global_packages()
# Function to clean npm cache
clean_npm_cache()
{
msg_run "Cleaning up npm cache"
msgr run "Cleaning up npm cache"
npm cache verify
npm cache clean --force
npm cache verify
@@ -69,7 +66,7 @@ main()
install_packages
upgrade_global_packages
clean_npm_cache
msg_yay "npm package installations complete"
msgr yay "npm package installations complete"
}
main "$@"

View File

@@ -3,9 +3,6 @@
#
# shellcheck source=shared.sh
echo "This file ($0) has been deprecated in favor of asdf. Please use asdf instead."
exit 0
source "${DOTFILES}/config/shared.sh"
# Enable verbosity with VERBOSE=1

View File

@@ -131,7 +131,7 @@ systemsetup -settimezone "Europe/Helsinki" > /dev/null
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
# Stop iTunes from responding to the keyboard media keys
#launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist 2> /dev/null
launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist 2> /dev/null
###############################################################################
# Screen #

View File

@@ -11,7 +11,7 @@
[ -z "$SHARED_SCRIPTS_SOURCED" ] && {
source "${DOTFILES}/config/shared.sh"
msgr done "(!) shared.sh not sourced"
msgr warn "(!) shared.sh not sourced"
# Set variable that checks if the shared.sh script has been sourced only once
# shellcheck disable=SC2034

1
tools/antidote Submodule

Submodule tools/antidote added at 64b786480f

View File

@@ -2706,9 +2706,9 @@ cosmiconfig@^9.0.0:
parse-json "^5.2.0"
cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"