mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-28 20:45:50 +00:00
Compare commits
141 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6186c5cba4 | |||
| c453dcbf84 | |||
| 4daaa62aed | |||
| f56d5682d1 | |||
| 439638b686 | |||
| a8a473a46d | |||
| eb91a43bbd | |||
|
|
193fae662e | ||
|
|
117ca1a944 | ||
| 1f1a6d42ad | |||
| cca265cd99 | |||
| cc6abb53ba | |||
| ab34c148a6 | |||
|
|
910b29ed9f | ||
| 3fb0a75a62 | |||
|
|
f73abb508b | ||
|
|
1dd3d952cf | ||
| 1ffd6e1569 | |||
| a76033a48a | |||
| 34dc18883e | |||
| 832d8b94f3 | |||
| c40eb765f8 | |||
|
|
1bb7e9076b | ||
|
|
17821dfefa | ||
| 19327947ed | |||
| 2356fc4c61 | |||
| 45219deccb | |||
| 5471aba1a4 | |||
|
|
6f6ee3611c | ||
|
|
d8f9cdf265 | ||
| abb6de05be | |||
| 60ef48e918 | |||
| e58c79a3c3 | |||
| d47f21286d | |||
| 3f108c9353 | |||
|
|
4a68146786 | ||
|
|
cf79e61943 | ||
| 43dcb303a0 | |||
| 1b03f0bbd6 | |||
| 8a52c9a97e | |||
| 8e84c3aef7 | |||
| acd2f7fc6d | |||
| 1e4aa1558a | |||
| b314c0ba76 | |||
| ece46561c4 | |||
| 196d217c34 | |||
| 7d2fc55791 | |||
| 74fb12f093 | |||
|
|
d7988bcad7 | ||
| 320ae35dcd | |||
| 0964253be5 | |||
|
|
f3f7ecc522 | ||
|
|
b88de0c3ae | ||
| c5e6860595 | |||
| b5a3c34fc3 | |||
| 87c89cf828 | |||
|
|
8d57c9425e | ||
|
|
cfe97d81a7 | ||
| 2f13ad324a | |||
|
|
d203fc9d51 | ||
| bf279b6def | |||
| 87926f8d9b | |||
| 6b056f6072 | |||
| 823cdbc07f | |||
| 0f6157eb04 | |||
| 721fe614a7 | |||
| 5ea16d4653 | |||
| 900e6a8f85 | |||
| 16673de789 | |||
| c732a75184 | |||
|
|
96280e6e9b | ||
| 5ab0f89765 | |||
| d585d61537 | |||
| 746646ae55 | |||
|
|
6e69ec6410 | ||
| af123e5138 | |||
| 3879289559 | |||
| 392628e733 | |||
| aa70eab5fb | |||
| e5311ca285 | |||
| d5618c9b5f | |||
| d091f5a88f | |||
| cb9195e3ad | |||
| c91cc387b6 | |||
| 083091ea46 | |||
| 7ff74f0e15 | |||
| 9d1f62fcca | |||
| a563e82e33 | |||
| 62ff7836e7 | |||
| 88cb573027 | |||
| 82772d8208 | |||
|
|
240035569c | ||
|
|
9697c200f9 | ||
| fd11f9966b | |||
| 722b3c0cde | |||
| 4fcb9d9741 | |||
| fc232f26f7 | |||
| 8b078309cf | |||
| 5a8f990e52 | |||
| c76c5d08b0 | |||
| b2857e226c | |||
| dfbac0c736 | |||
| fdd713908c | |||
| 60210c9bec | |||
| eaf8d2bdca | |||
| cc00055626 | |||
|
|
567de68844 | ||
|
|
ed0b229757 | ||
| c8b6243c0b | |||
|
|
21a92eb145 | ||
| 8ec317f582 | |||
|
|
42201d8b68 | ||
|
|
0c003ae5b9 | ||
| d383031ec8 | |||
|
|
fa5e5f16da | ||
| f82396236e | |||
| b127c2514d | |||
|
|
b06ac3bc0f | ||
|
|
7e4ea90a05 | ||
|
|
d264a33d21 | ||
| 224ee56461 | |||
|
|
8147490c65 | ||
|
|
c6d501347a | ||
|
|
d8044f2b6a | ||
|
|
1b3fe6d12e | ||
| 76b66d8c61 | |||
| 9c8644de17 | |||
| 120345b562 | |||
| 8accd4a60b | |||
| 8fb03660ad | |||
| 8b2dc74f2a | |||
| 8fa63e63bb | |||
| 4ca5b63b75 | |||
| 5a59872377 | |||
| 38419eda28 | |||
| fc85dbaa6c | |||
| 250e7f5666 | |||
| 8f96922033 | |||
| 4c4de2dc26 | |||
| b8c163e028 | |||
| 0a974c2a17 |
@@ -8,6 +8,12 @@ indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
max_line_length = 100
|
||||
|
||||
[*.lua]
|
||||
max_line_length = 120
|
||||
|
||||
[*.php]
|
||||
indent_size = 4
|
||||
|
||||
@@ -20,6 +26,8 @@ indent_size = 1
|
||||
indent_style = tab
|
||||
|
||||
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
|
||||
indent_size = 2
|
||||
tab_width = 2
|
||||
shell_variant = bash # --language-variant
|
||||
binary_next_line = true
|
||||
switch_case_indent = true # --case-indent
|
||||
@@ -31,5 +39,5 @@ function_next_line = true # --func-next-line
|
||||
# such as "shfmt -l -w .". When formatting files directly,
|
||||
# like "shfmt -w third_party/foo.sh" or "shfmt --filename=third_party/foo.sh",
|
||||
# the ignore logic is applied only when the --apply-ignore flag is given.
|
||||
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**}]
|
||||
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**,config/tmux/plugins/**}]
|
||||
ignore = true
|
||||
|
||||
10
.github/README.md
vendored
10
.github/README.md
vendored
@@ -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.
|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
## 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.
|
||||
|
||||
|
||||
24
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
24
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: Pre-commit autoupdate
|
||||
on:
|
||||
schedule:
|
||||
# At 04:00 on Monday and Thursday.
|
||||
- cron: "0 4 * * 1,4"
|
||||
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.
|
||||
4
.github/workflows/update-submodules.yml
vendored
4
.github/workflows/update-submodules.yml
vendored
@@ -1,7 +1,9 @@
|
||||
---
|
||||
name: Update submodules
|
||||
on:
|
||||
schedule: [{ cron: 0 3 * * * }]
|
||||
schedule:
|
||||
# At 04:00 on Monday and Thursday.
|
||||
- cron: "0 4 * * 1,4"
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
update-submodules:
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -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
|
||||
*.bak
|
||||
|
||||
11
.gitmodules
vendored
11
.gitmodules
vendored
@@ -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,10 @@
|
||||
[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
|
||||
[submodule "dotbot-asdf"]
|
||||
path = tools/dotbot-asdf
|
||||
url = https://github.com/sobolevn/dotbot-asdf
|
||||
|
||||
5
.ignore
5
.ignore
@@ -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,5 +1,5 @@
|
||||
{
|
||||
"diagnostics.globals": [
|
||||
"vim"
|
||||
]
|
||||
}
|
||||
"diagnostics.globals": [
|
||||
"vim"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.6.0
|
||||
rev: v5.0.0
|
||||
hooks:
|
||||
- id: requirements-txt-fixer
|
||||
- id: detect-private-key
|
||||
- id: trailing-whitespace
|
||||
args: [--markdown-linebreak-ext=md]
|
||||
- id: check-case-conflict
|
||||
- id: check-merge-conflict
|
||||
- id: check-executables-have-shebangs
|
||||
- id: check-shebang-scripts-are-executable
|
||||
- id: check-symlinks
|
||||
- id: check-toml
|
||||
@@ -19,7 +22,7 @@ repos:
|
||||
args: [--autofix, --no-sort-keys]
|
||||
|
||||
- repo: https://github.com/igorshubovych/markdownlint-cli
|
||||
rev: v0.41.0
|
||||
rev: v0.43.0
|
||||
hooks:
|
||||
- id: markdownlint
|
||||
args: [-c, .markdownlint.yaml, --fix]
|
||||
@@ -29,22 +32,27 @@ repos:
|
||||
hooks:
|
||||
- id: yamllint
|
||||
|
||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||
rev: v4.0.0-alpha.8
|
||||
hooks:
|
||||
- id: prettier
|
||||
|
||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||
rev: v0.10.0.1
|
||||
- repo: https://github.com/koalaman/shellcheck-precommit
|
||||
rev: v0.10.0
|
||||
hooks:
|
||||
- id: shellcheck
|
||||
|
||||
- repo: https://github.com/scop/pre-commit-shfmt
|
||||
rev: v3.9.0-1
|
||||
rev: v3.10.0-2
|
||||
hooks:
|
||||
- id: shfmt
|
||||
|
||||
- repo: https://github.com/rhysd/actionlint
|
||||
rev: v1.7.1
|
||||
rev: v1.7.4
|
||||
hooks:
|
||||
- id: actionlint
|
||||
|
||||
- repo: https://github.com/renovatebot/pre-commit-hooks
|
||||
rev: 39.82.9
|
||||
hooks:
|
||||
- id: renovate-config-validator
|
||||
|
||||
- repo: https://github.com/JohnnyMorganz/StyLua
|
||||
rev: v2.0.2
|
||||
hooks:
|
||||
- id: stylua # or stylua-system / stylua-github
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
# vim: ft=gitignore
|
||||
.mypy_cache/*
|
||||
Brewfile.lock.json
|
||||
config/cheat/cheatsheets/community
|
||||
config/cheat/cheatsheets/tldr
|
||||
config/fzf/*
|
||||
config/nvim-kickstart/*
|
||||
config/nvim/*
|
||||
config/tmux/plugins/*
|
||||
config/zsh/*
|
||||
lazy-lock.json
|
||||
local/bin/antigen.zsh
|
||||
local/bin/asdf
|
||||
tools/antidote/*
|
||||
tools/dotbot*
|
||||
|
||||
1
.python-version
Normal file
1
.python-version
Normal file
@@ -0,0 +1 @@
|
||||
3.13.1
|
||||
@@ -1,2 +0,0 @@
|
||||
python 3.12.6
|
||||
nodejs 22.9.0
|
||||
@@ -9,6 +9,8 @@ git submodule add --name dotbot-include \
|
||||
-f https://gitlab.com/gnfzdz/dotbot-include.git tools/dotbot-include
|
||||
git submodule add --name dotbot-pip \
|
||||
-f https://github.com/sobolevn/dotbot-pip.git tools/dotbot-pip
|
||||
git submodule add --name dotbot-asdf \
|
||||
-f https://github.com/sobolevn/dotbot-asdf tools/dotbot-asdf
|
||||
|
||||
# other repos
|
||||
git submodule add --name cheat-community \
|
||||
@@ -17,14 +19,15 @@ 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 +48,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
|
||||
|
||||
@@ -14,10 +14,10 @@ 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)"
|
||||
}
|
||||
|
||||
PROMPT_DIRTRIM=3
|
||||
PROMPT_COMMAND='PS1_CMD1=$(git branch --show-current 2>/dev/null)'
|
||||
PS1='\[\e[95m\]\u\[\e[0m\]@\[\e[38;5;22;2m\]\h\[\e[0m\] \[\e[38;5;33m\]\w\[\e[0m\] \[\e[92;2m\]${PS1_CMD1}\n\[\e[39m\]➜\[\e[0m\] '
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
use node
|
||||
use asdf
|
||||
|
||||
1
base/nvmrc
Normal file
1
base/nvmrc
Normal file
@@ -0,0 +1 @@
|
||||
lts/*
|
||||
@@ -1,31 +1,19 @@
|
||||
asdf-plugin-manager 1.3.1
|
||||
nodejs 22.8.0
|
||||
golang 1.23.1
|
||||
python 3.12.6
|
||||
ruby 3.3.4
|
||||
rust 1.81.0
|
||||
direnv 2.34.0
|
||||
eza 0.19.3
|
||||
golang 1.23.4
|
||||
rust 1.83.0
|
||||
direnv 2.35.0
|
||||
fd 10.2.0
|
||||
1password-cli 2.30.0
|
||||
age 1.2.0
|
||||
bottom 0.10.2
|
||||
1password-cli 2.30.3
|
||||
age 1.2.1
|
||||
dotenv-linter 3.3.0
|
||||
editorconfig-checker 2.8.0
|
||||
github-cli 2.56.0
|
||||
github-cli 2.64.0
|
||||
hadolint 2.12.0
|
||||
kubectl 1.31.1
|
||||
pipx 1.7.1
|
||||
pre-commit 3.8.0
|
||||
kubectl 1.32.0
|
||||
pre-commit 4.0.1
|
||||
ripgrep 14.1.1
|
||||
shellcheck 0.10.0
|
||||
shfmt 3.9.0
|
||||
terragrunt 0.67.5
|
||||
tf-summarize 0.3.10
|
||||
shfmt 3.10.0
|
||||
terragrunt 0.71.1
|
||||
tf-summarize 0.3.14
|
||||
yamllint 1.35.1
|
||||
yq 4.44.3
|
||||
bats 1.11.0
|
||||
gitleaks 8.18.4
|
||||
delta 0.18.1
|
||||
lazygit 0.44.0
|
||||
sops 3.9.0
|
||||
yq 4.44.6
|
||||
|
||||
79
base/zshrc
Executable file → Normal file
79
base/zshrc
Executable file → Normal file
@@ -1,65 +1,23 @@
|
||||
# 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
|
||||
# export DEBUG=1
|
||||
autoload -U promptinit; promptinit
|
||||
|
||||
export DOTFILES="$HOME/.dotfiles"
|
||||
LOCAL_SHARE="$HOME/.local/share"
|
||||
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/nvim-kickstart/mason/bin:$LOCAL_SHARE/bob/nvim-bin:$LOCAL_SHARE/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
|
||||
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/nvim/mason/bin:$LOCAL_SHARE/bob/nvim-bin:$LOCAL_SHARE/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
|
||||
export SHARED_SCRIPTS_SOURCED=0
|
||||
|
||||
source "$DOTFILES/config/shared.sh"
|
||||
source "${XDG_CONFIG_HOME:-$HOME/.config}/asdf-direnv/zshrc"
|
||||
|
||||
eval "$(oh-my-posh init zsh --config "$DOTFILES/config/omp/own.toml")"
|
||||
ZSH_COMPDUMP="$XDG_CACHE_HOME/zsh/zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
|
||||
|
||||
# Function to load antigen if available
|
||||
load_antigen()
|
||||
{
|
||||
local antigen_zsh_path="$XDG_BIN_HOME/antigen.zsh"
|
||||
# shellcheck source=../../.local/bin/antigen.zsh
|
||||
if [[ -f "$antigen_zsh_path" ]]; then
|
||||
source "$antigen_zsh_path"
|
||||
|
||||
antigen use oh-my-zsh
|
||||
|
||||
# Disable ls colors to avoid issues with eza
|
||||
export DISABLE_LS_COLORS=true
|
||||
|
||||
export ZSH_TMUX_AUTOSTART=false
|
||||
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
|
||||
export ZSH_TMUX_UNICODE=true
|
||||
export ZSH_TMUX_AUTOQUIT=false
|
||||
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
|
||||
|
||||
zstyle ':omz:plugins:eza' 'dirs-first' yes
|
||||
zstyle ':omz:plugins:eza' 'git-status' yes
|
||||
zstyle ':omz:plugins:eza' 'icons' yes
|
||||
zstyle ':omz:plugins:eza' 'ls' yes
|
||||
zstyle ':omz:plugins:eza' 'prompt' yes
|
||||
|
||||
if [[ "$OSTYPE" == darwin* ]]; then
|
||||
zstyle :omz:plugins:ssh-agent keychain yes
|
||||
fi
|
||||
zstyle :omz:plugins:ssh-agent lazy yes
|
||||
zstyle :omz:plugins:ssh-agent quiet yes
|
||||
|
||||
# z, the zsh version
|
||||
export ZSHZ_DATA="$XDG_STATE_HOME/z"
|
||||
antigen bundle z
|
||||
|
||||
# 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
|
||||
|
||||
# this needs to be the last item
|
||||
antigen bundle zsh-users/zsh-syntax-highlighting
|
||||
antigen apply
|
||||
fi
|
||||
}
|
||||
source "$DOTFILES/config/zsh/antidote.zsh"
|
||||
# source "$DOTFILES/config/zsh/prompt.zsh"
|
||||
|
||||
# Function to source FZF configuration
|
||||
source_fzf_config()
|
||||
@@ -75,7 +33,7 @@ source_fzf_config()
|
||||
setup_tmux_window_name_plugin()
|
||||
{
|
||||
if [[ -n "$TMUX" ]]; then
|
||||
local tmux_window_name_plugin="$DOTFILES/config/tmux/plugins/tmux-window-name/scripts/rename_session_windows.py"
|
||||
local tmux_window_name_plugin="$TMUX_PLUGINS/tmux-window-name/scripts/rename_session_windows.py"
|
||||
if [[ -f "$tmux_window_name_plugin" ]]; then
|
||||
tmux_window_name()
|
||||
{
|
||||
@@ -87,15 +45,14 @@ 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"
|
||||
}
|
||||
source_fzf_config
|
||||
setup_tmux_window_name_plugin
|
||||
x-have antidot && eval "$(antidot init)"
|
||||
|
||||
main "$@"
|
||||
autoload -Uz compinit bashcompinit
|
||||
compinit -d $ZSH_COMPDUMP
|
||||
bashcompinit
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
||||
export P10K_CONFIG="$DOTFILES/config/zsh/p10k.zsh"
|
||||
[[ ! -f "$P10K_CONFIG" ]] || source "$P10K_CONFIG"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
--container-architecture linux/amd64
|
||||
-P ubuntu-latest=catthehacker/ubuntu:act-latest
|
||||
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
||||
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
||||
|
||||
187
config/aerospace/aerospace.toml
Normal file
187
config/aerospace/aerospace.toml
Normal file
@@ -0,0 +1,187 @@
|
||||
# Start AeroSpace at login
|
||||
start-at-login = false
|
||||
|
||||
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
||||
enable-normalization-flatten-containers = true
|
||||
enable-normalization-opposite-orientation-for-nested-containers = true
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
|
||||
# The 'accordion-padding' specifies the size of accordion padding
|
||||
# You can set 0 to disable the padding feature
|
||||
accordion-padding = 10
|
||||
|
||||
# Possible values: tiles|accordion
|
||||
default-root-container-layout = 'tiles'
|
||||
|
||||
# Possible values: horizontal|vertical|auto
|
||||
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
|
||||
# tall monitor (anything higher than wide) gets vertical orientation
|
||||
default-root-container-orientation = 'auto'
|
||||
|
||||
# Mouse follows focus when focused monitor changes
|
||||
# Drop it from your config, if you don't like this behavior
|
||||
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
|
||||
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
|
||||
# Fallback value (if you omit the key): on-focused-monitor-changed = []
|
||||
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
|
||||
|
||||
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
|
||||
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
|
||||
# Also see: https://nikitabobko.github.io/AeroSpace/goodness#disable-hide-app
|
||||
automatically-unhide-macos-hidden-apps = true
|
||||
|
||||
# [[on-window-detected]]
|
||||
# if.app-id = 'com.apple.systempreferences'
|
||||
# if.app-name-regex-substring = 'settings'
|
||||
# if.window-title-regex-substring = 'substring'
|
||||
# if.workspace = 'workspace-name'
|
||||
# if.during-aerospace-startup = true
|
||||
# check-further-callbacks = true
|
||||
# run = ['layout floating', 'move-node-to-workspace S'] # The callback itself
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'org.ferdium.ferdium-app' # Ferdium, has WhatsApp etc.
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-name-regex-substring = 'finder'
|
||||
run = 'layout floating'
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.finder' # Finder
|
||||
run = 'layout floating'
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.mail' # Mail
|
||||
run = 'layout floating'
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.DanPristupov.Fork' # Fork
|
||||
run = 'layout floating'
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.flexibits.fantastical2.mac' # Fantastical
|
||||
run = 'layout floating'
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'org.whispersystems.signal-desktop' # Signal
|
||||
run = 'layout floating'
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.tidal.desktop'
|
||||
run = ['layout floating', 'move-node-to-workspace 2']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.TV'
|
||||
run = 'layout floating'
|
||||
|
||||
# Possible values: (qwerty|dvorak)
|
||||
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
|
||||
[key-mapping]
|
||||
preset = 'qwerty'
|
||||
|
||||
# Gaps between windows (inner-*) and between monitor edges (outer-*).
|
||||
# Possible values:
|
||||
# - Constant: gaps.outer.top = 8
|
||||
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
|
||||
# In this example, 24 is a default value when there is no match.
|
||||
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
|
||||
[gaps]
|
||||
inner.horizontal = 5
|
||||
inner.vertical = 5
|
||||
# outer.top = 0
|
||||
outer.top = [{ monitor.'^built-in retina display$' = 0 }, 0]
|
||||
outer.right = 0
|
||||
outer.bottom = 0
|
||||
outer.left = 0
|
||||
|
||||
# 'main' binding mode declaration
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||
# 'main' binding mode must be always presented
|
||||
# Fallback value (if you omit the key): mode.main.binding = {}
|
||||
[mode.main.binding]
|
||||
|
||||
# All possible keys:
|
||||
# - Letters. a, b, c, ..., z
|
||||
# - Numbers. 0, 1, 2, ..., 9
|
||||
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
|
||||
# - F-keys. f1, f2, ..., f20
|
||||
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,
|
||||
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab
|
||||
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
|
||||
# keypadMinus, keypadMultiply, keypadPlus
|
||||
# - Arrows. left, down, up, right
|
||||
|
||||
# All possible modifiers: cmd, alt, ctrl, shift
|
||||
|
||||
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
|
||||
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3)
|
||||
# alt-enter = '''exec-and-forget osascript -e '
|
||||
# tell application "Terminal"
|
||||
# do script
|
||||
# activate
|
||||
# end tell'
|
||||
# '''
|
||||
|
||||
alt-cmd-shift-f = 'fullscreen'
|
||||
alt-cmd-f = 'layout floating'
|
||||
|
||||
alt-cmd-left = 'join-with left'
|
||||
alt-cmd-down = 'join-with down'
|
||||
alt-cmd-up = 'join-with up'
|
||||
alt-cmd-right = 'join-with right'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
|
||||
alt-h = 'focus left'
|
||||
alt-j = 'focus down'
|
||||
alt-k = 'focus up'
|
||||
alt-l = 'focus right'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
||||
alt-shift-h = 'move left'
|
||||
alt-shift-j = 'move down'
|
||||
alt-shift-k = 'move up'
|
||||
alt-shift-l = 'move right'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
|
||||
cmd-shift-1 = 'workspace 1' # Main
|
||||
cmd-shift-2 = 'workspace 2' # Music
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
|
||||
alt-cmd-1 = 'move-node-to-workspace 1 --focus-follows-window'
|
||||
alt-cmd-2 = 'move-node-to-workspace 2 --focus-follows-window'
|
||||
|
||||
shift-tab = 'workspace-back-and-forth'
|
||||
# alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||
alt-a = 'mode apps'
|
||||
alt-s = 'mode service'
|
||||
alt-d = 'mode resize'
|
||||
|
||||
[mode.apps.binding]
|
||||
esc = ['reload-config', 'mode main']
|
||||
alt-b = ['exec-and-forget open -a /Applications/Brave Browser.app', 'mode main']
|
||||
alt-c = ['exec-and-forget open -a /Applications/Ferdium.app', 'mode main']
|
||||
alt-o = ['exec-and-forget open -a /Applications/Obsidian.app', 'mode main']
|
||||
alt-s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main']
|
||||
alt-t = ['exec-and-forget open -a /Applications/TIDAL.app', 'mode main']
|
||||
alt-w = ['exec-and-forget open -a /Applications/WezTerm.app', 'mode main']
|
||||
|
||||
[mode.service.binding]
|
||||
esc = ['reload-config', 'mode main']
|
||||
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
||||
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
|
||||
backspace = ['close-all-windows-but-current', 'mode main']
|
||||
|
||||
[mode.resize.binding]
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#resize
|
||||
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||
h = 'resize smart -70'
|
||||
l = 'resize smart +70'
|
||||
esc = ['reload-config', 'mode main']
|
||||
@@ -130,6 +130,6 @@ X_ALIAS_FILES=(
|
||||
)
|
||||
for aliasFile in "${X_ALIAS_FILES[@]}"; do
|
||||
# shellcheck source=$HOME/.config/alias-secret
|
||||
[ -f "$aliasFile" ] && source "$aliasFile" && msg "Sourced $aliasFile"
|
||||
[ -f "$aliasFile" ] && source "$aliasFile" && msgr ok "Sourced $aliasFile"
|
||||
done
|
||||
unset X_ALIAS_FILES
|
||||
|
||||
@@ -19,3 +19,7 @@ bob-nvim
|
||||
// bottom, btm - A cross-platform graphical process/system monitor with
|
||||
// a customizable interface and a multitude of features.
|
||||
bottom
|
||||
// A modern alternative to ls
|
||||
eza
|
||||
// Tmux Sessionizer: A tool for opening git repositories as tmux sessions
|
||||
tmux-sessionizer
|
||||
|
||||
@@ -17,3 +17,5 @@ github.com/charmbracelet/glow@v1.5.1
|
||||
github.com/rhysd/actionlint/cmd/actionlint@v1.7.1
|
||||
// Cleans up your $HOME from those pesky dotfiles
|
||||
github.com/doron-cohen/antidot@v0.6.3
|
||||
// FZF is a general-purpose command-line fuzzy finder.
|
||||
github.com/junegunn/fzf@latest
|
||||
|
||||
@@ -1,27 +1,20 @@
|
||||
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
|
||||
eza https://github.com/lwiechec/asdf-eza.git eee3d59
|
||||
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
|
||||
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
|
||||
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 e2527a3
|
||||
hadolint https://github.com/devlincashman/asdf-hadolint.git c8eb88b
|
||||
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
|
||||
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
|
||||
terragrunt https://github.com/ohmer/asdf-terragrunt.git 29f2935
|
||||
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
|
||||
yamllint https://github.com/ericcornelissen/asdf-yamllint.git e4cfb17
|
||||
yq https://github.com/sudermanjr/asdf-yq.git 772992f
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ansible
|
||||
pipenv
|
||||
semgrep
|
||||
neovim
|
||||
libtmux
|
||||
|
||||
73
config/cheat/cheatsheets/personal/printf
Normal file
73
config/cheat/cheatsheets/personal/printf
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
tags: [printf, bash, zsh]
|
||||
---
|
||||
|
||||
# printf
|
||||
|
||||
The printf command accepts the following syntax:
|
||||
|
||||
`printf [-v var] [format specifiers] [arguments]`
|
||||
|
||||
- [-v var]
|
||||
The optional -v flag assigns the output to the [var]
|
||||
variable instead of printing it in standard output.
|
||||
|
||||
- [format specifiers]
|
||||
Format specifiers are strings that determine the methods of
|
||||
formatting specifiers. The following section includes a
|
||||
list of accepted specifiers.
|
||||
|
||||
- [arguments]
|
||||
Arguments can be any value or variable, and the [format specifiers]
|
||||
point to the [arguments]. If there are more arguments than format
|
||||
specifiers, the format string is reused until it interprets
|
||||
the last argument.
|
||||
|
||||
If there are fewer format specifiers than arguments, number formats
|
||||
are set to zero (0), while string formats are set to null (empty).
|
||||
|
||||
## printf Specifiers
|
||||
|
||||
Format Description
|
||||
------ -----------
|
||||
%c Treat the arguments as a single character.
|
||||
%d Treat the input as a decimal (integer) number (base 10).
|
||||
%e Treats the input as an exponential floating-point number.
|
||||
%f Treat the input as a floating-point number.
|
||||
%i Treat the input as an integer number (base 10).
|
||||
%o Treats the input as an octal number (base 8).
|
||||
%s Treat the input as a string of characters.
|
||||
%u Treat the input as an unsigned decimal (integer) number.
|
||||
%x Treats the input as a hexadecimal number (base 16).
|
||||
%% Print a percent sign.
|
||||
%Wd Print the W integer X digits wide.
|
||||
%(format)T Outputs a date-time string resulting from using format as a
|
||||
format string for strftime. The corresponding argument can
|
||||
be the number of seconds since Epoch (January 1, 1970, 00:00),
|
||||
-1 (the current time), or -2 (shell startup time).
|
||||
Not specifying an argument uses the current time as the default value.
|
||||
\% Print a percent sign.
|
||||
\n Prints a newline character.
|
||||
\t Print a tab character.
|
||||
|
||||
Some format specifiers accept format modifiers that modify their actions.
|
||||
Enter the modifiers between the % character and the character that
|
||||
specifies the format.
|
||||
|
||||
Available format modifiers are:
|
||||
|
||||
<N>. Enter a number that specifies a minimum field width.
|
||||
If the output text is shorter, it's padded with spaces.
|
||||
If the text is longer, the field expands.
|
||||
. (dot). When used with a field width modifier, the field doesn't
|
||||
expand for longer text. Instead, the text is truncated.
|
||||
-. Left-aligns the printed text. The default alignment is right.
|
||||
0. Pads the numbers with zeros instead of spaces.
|
||||
<space>. Pads a positive number with a space, and a negative
|
||||
number with a minus (-).
|
||||
+. Prints all numbers signed (+ for positive, - for negative).
|
||||
'. For decimal conversions, applies the thousands grouping
|
||||
separator to the integer portion of the output according
|
||||
to the current LC_NUMERIC file.
|
||||
|
||||
|
||||
@@ -61,12 +61,6 @@ cheatpaths:
|
||||
path: ~/.config/cheat/cheatsheets/community
|
||||
tags: [community]
|
||||
readonly: true
|
||||
# If you have personalized cheatsheets, list them last. They will take
|
||||
# precedence over the more global cheatsheets.
|
||||
- name: personal
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
||||
tags: [personal]
|
||||
readonly: false
|
||||
- name: pure-bash-bible
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
|
||||
tags: [pure-bash-bible]
|
||||
@@ -75,6 +69,13 @@ cheatpaths:
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
|
||||
tags: [tldr]
|
||||
readonly: true
|
||||
# If you have personalized cheatsheets, list them last. They will take
|
||||
# precedence over the more global cheatsheets.
|
||||
- name: personal
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
||||
tags: [personal]
|
||||
readonly: false
|
||||
|
||||
# While it requires no configuration here, it's also worth noting that
|
||||
# cheat will automatically append directories named '.cheat' within the
|
||||
# current working directory to the 'cheatpath'. This can be very useful if
|
||||
|
||||
@@ -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"
|
||||
|
||||
131
config/exports
131
config/exports
@@ -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
|
||||
@@ -53,7 +43,7 @@ else
|
||||
# Optionally write a msg to stderr suggesting users install bkt.
|
||||
bkt()
|
||||
{
|
||||
while [[ "$1" == --* ]]; do shift; done
|
||||
while [[ $1 == --* ]]; do shift; done
|
||||
"$@"
|
||||
}
|
||||
fi
|
||||
@@ -125,7 +115,7 @@ preexec()
|
||||
dfu()
|
||||
{
|
||||
(
|
||||
cd "$DOTFILES" && git pull --ff-only && ./install
|
||||
cd "$DOTFILES" && git rebase --ff --autostash && ./install
|
||||
)
|
||||
}
|
||||
|
||||
@@ -192,6 +182,7 @@ nonascii()
|
||||
# Usage: strip_nonascii "string"
|
||||
strip_nonascii()
|
||||
{
|
||||
# shellcheck disable=SC2001
|
||||
echo "$1" | LC_ALL=C sed 's/[^[:print:][:space:]]//g'
|
||||
}
|
||||
|
||||
@@ -199,7 +190,7 @@ strip_nonascii()
|
||||
# Usage: slugify "string"
|
||||
slugify()
|
||||
{
|
||||
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z
|
||||
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr '[:upper:]' '[:lower:]'
|
||||
}
|
||||
|
||||
# https://stackoverflow.com/a/85932
|
||||
@@ -233,33 +224,33 @@ replacable()
|
||||
FILE1="$1"
|
||||
FILE2="$2"
|
||||
|
||||
[[ ! -r "$FILE1" ]] && {
|
||||
[[ $VERBOSE -eq 1 ]] && msg_err "File 1 ($FILE1) does not exist"
|
||||
[[ ! -r $FILE1 ]] && {
|
||||
[[ $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"
|
||||
[[ ! -r $FILE2 ]] && {
|
||||
[[ $VERBOSE -eq 1 ]] && msgr err "File 2 ($FILE2) does not exist, replaceable"
|
||||
return 1
|
||||
}
|
||||
|
||||
FILE1_HASH=$(get_sha256sum "$FILE1")
|
||||
FILE2_HASH=$(get_sha256sum "$FILE2")
|
||||
|
||||
[[ $FILE1_HASH = "" ]] && {
|
||||
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 1 ($FILE1)"
|
||||
[[ $FILE1_HASH == "" ]] && {
|
||||
[[ $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"
|
||||
[[ $FILE2_HASH == "" ]] && {
|
||||
[[ $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"
|
||||
[[ $FILE1_HASH == "$FILE2_HASH" ]] && {
|
||||
[[ $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
|
||||
}
|
||||
@@ -303,8 +294,45 @@ export GREP_OPTIONS="--color=auto"
|
||||
# update the values of LINES and COLUMNS.
|
||||
hash shopt 2> /dev/null && shopt -s checkwinsize
|
||||
|
||||
# shellcheck disable=SC2155
|
||||
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 +350,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 +406,10 @@ x-dc "$DOCKER_CONFIG"
|
||||
# Docker: Disable snyk ad
|
||||
export DOCKER_SCAN_SUGGEST=false
|
||||
|
||||
# fzf
|
||||
export FZF_BASE="${XDG_CONFIG_HOME}/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 +421,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 +448,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"
|
||||
@@ -461,7 +476,17 @@ export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
|
||||
# tmux
|
||||
# https://tmux.github.io/
|
||||
msg "Setting up tmux configuration"
|
||||
export TMUX_PLUGINS="$XDG_CONFIG_HOME/tmux/plugins"
|
||||
export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
|
||||
## These settings are for zsh-tmux
|
||||
export ZSH_TMUX_AUTOSTART=false
|
||||
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
|
||||
export ZSH_TMUX_UNICODE=true
|
||||
export ZSH_TMUX_AUTOQUIT=false
|
||||
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
|
||||
|
||||
# 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"
|
||||
@@ -470,6 +495,7 @@ x-dc "$WAKATIME_HOME"
|
||||
|
||||
# Misc
|
||||
msg "Setting up miscellaneous configuration"
|
||||
export ZSHZ_DATA="$XDG_STATE_HOME/z"
|
||||
export CHEAT_USE_FZF=true
|
||||
export SQLITE_HISTORY="${XDG_CACHE_HOME}/sqlite_history"
|
||||
|
||||
@@ -479,6 +505,7 @@ X_EXPORTS_FILES=(
|
||||
"$HOME/.config/exports-$(hostname)-secret"
|
||||
)
|
||||
for exportFile in "${X_EXPORTS_FILES[@]}"; do
|
||||
# shellcheck source=$HOME/.config/exports-secret
|
||||
[ -f "$exportFile" ] && source "$exportFile" && msg "Sourced $exportFile"
|
||||
done
|
||||
unset X_EXPORTS_FILES
|
||||
|
||||
@@ -11,3 +11,5 @@
|
||||
[include]
|
||||
path = ~/.config/git/overrides/config
|
||||
|
||||
[advice]
|
||||
detachedHead = false
|
||||
|
||||
@@ -20,3 +20,4 @@ auth.json
|
||||
dfm.sh
|
||||
.scannerwork
|
||||
.phpactor.json
|
||||
.zsh_history
|
||||
|
||||
@@ -13,6 +13,7 @@ tap "jesseduffield/lazygit"
|
||||
tap "k8sgpt-ai/k8sgpt"
|
||||
tap "keith/formulae"
|
||||
tap "mongodb/brew"
|
||||
tap "nikitabobko/tap"
|
||||
tap "reviewdog/tap"
|
||||
tap "shivammathur/extensions"
|
||||
tap "shivammathur/php"
|
||||
@@ -21,6 +22,20 @@ tap "teamookla/speedtest"
|
||||
tap "xwmx/taps"
|
||||
# Run your GitHub Actions locally
|
||||
brew "act"
|
||||
# Simple, modern, secure file encryption
|
||||
brew "age"
|
||||
# Mozilla CA certificate store
|
||||
brew "ca-certificates"
|
||||
# Mozilla CA bundle for Python
|
||||
brew "certifi"
|
||||
# Cryptographic recipes and primitives for Python
|
||||
brew "cryptography"
|
||||
# YAML Parser
|
||||
brew "libyaml"
|
||||
# Automate deployment, configuration, and upgrading
|
||||
brew "ansible"
|
||||
# Checks ansible playbooks for practices and behaviour
|
||||
brew "ansible-lint"
|
||||
# Generic-purpose lossless compression algorithm by Google
|
||||
brew "brotli"
|
||||
# Library and utilities for processing GIFs
|
||||
@@ -31,6 +46,8 @@ brew "highway"
|
||||
brew "imath"
|
||||
# JPEG image codec that aids compression and decompression
|
||||
brew "jpeg-turbo"
|
||||
# Library for manipulating PNG images
|
||||
brew "libpng"
|
||||
# Zstandard is a real-time compression algorithm
|
||||
brew "zstd"
|
||||
# New file format for still image compression
|
||||
@@ -39,28 +56,38 @@ brew "jpeg-xl"
|
||||
brew "aom"
|
||||
# Apache Portable Runtime library
|
||||
brew "apr"
|
||||
# Mozilla CA certificate store
|
||||
brew "ca-certificates"
|
||||
# Cryptography and SSL/TLS Toolkit
|
||||
brew "openssl@3"
|
||||
# Companion library to apr, the Apache Portable Runtime library
|
||||
brew "apr-util"
|
||||
# Password hashing library and CLI utility
|
||||
brew "argon2"
|
||||
# Spell checker with better logic than ispell
|
||||
brew "aspell"
|
||||
# Automatic configure script builder
|
||||
brew "autoconf"
|
||||
# Collection of over 500 reusable autoconf macros
|
||||
brew "autoconf-archive"
|
||||
# Bourne-Again SHell, a UNIX command interpreter
|
||||
brew "bash"
|
||||
# Tool for generating GNU Standards-compliant Makefiles
|
||||
brew "automake"
|
||||
# GNU multiple precision arithmetic library
|
||||
brew "gmp"
|
||||
# GNU File, Shell, and Text utilities
|
||||
brew "coreutils"
|
||||
# Extendable version manager with support for Ruby, Node.js, Erlang & more
|
||||
brew "asdf"
|
||||
# Spell checker with better logic than ispell
|
||||
brew "aspell"
|
||||
# Collection of over 500 reusable autoconf macros
|
||||
brew "autoconf-archive"
|
||||
# Package compiler and linker metadata toolkit
|
||||
brew "pkgconf"
|
||||
# Automated text file generator
|
||||
brew "autogen"
|
||||
# Official Amazon AWS command-line interface
|
||||
brew "awscli"
|
||||
# Bourne-Again SHell, a UNIX command interpreter
|
||||
brew "bash"
|
||||
# Clone of cat(1) with syntax highlighting and Git integration
|
||||
brew "bat"
|
||||
# Bash Automated Testing System
|
||||
brew "bats-core"
|
||||
# Parser generator
|
||||
brew "bison"
|
||||
# Software library to render fonts
|
||||
brew "freetype"
|
||||
# XML-based font configuration API for X Windows
|
||||
@@ -69,46 +96,76 @@ brew "fontconfig"
|
||||
brew "gettext"
|
||||
# Core application library for C
|
||||
brew "glib"
|
||||
# Mozilla CA bundle for Python
|
||||
brew "certifi"
|
||||
# Cryptographic recipes and primitives for Python
|
||||
brew "cryptography"
|
||||
# Human-friendly and fast alternative to cut and (sometimes) awk
|
||||
brew "choose-rust"
|
||||
# Cross-platform make
|
||||
brew "cmake"
|
||||
# Get a file from an HTTP, HTTPS or FTP server
|
||||
brew "curl"
|
||||
# Lightweight DNS forwarder and DHCP server
|
||||
brew "dnsmasq"
|
||||
# Spellchecker wrapping library
|
||||
brew "enchant"
|
||||
# Perl lib for reading and writing EXIF metadata
|
||||
brew "exiftool"
|
||||
# Banner-like program prints strings as ASCII art
|
||||
brew "figlet"
|
||||
# Lock file during command
|
||||
brew "flock"
|
||||
# Libraries to talk to Microsoft SQL Server and Sybase databases
|
||||
brew "freetds"
|
||||
# Monitor a directory for changes and run a shell command
|
||||
brew "fswatch"
|
||||
# Command-line fuzzy finder written in Go
|
||||
brew "fzf"
|
||||
# Graphics library to dynamically manipulate images
|
||||
brew "gd"
|
||||
# Disk usage analyzer with console interface written in Go
|
||||
brew "gdu"
|
||||
# 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"
|
||||
# Enable transparent encryption/decryption of files in a git repo
|
||||
brew "git-crypt"
|
||||
# Small git utilities
|
||||
brew "git-extras"
|
||||
# See your latest local git branches, formatted real fancy
|
||||
brew "git-recent"
|
||||
# Render markdown on the CLI
|
||||
brew "glow"
|
||||
# GNU implementation of the famous stream editor
|
||||
brew "gnu-sed"
|
||||
# Validating, recursive, caching DNS resolver
|
||||
brew "unbound"
|
||||
# GNU Transport Layer Security (TLS) Library
|
||||
brew "gnutls"
|
||||
# GNU Pretty Good Privacy (PGP) package
|
||||
brew "gnupg"
|
||||
# Library access to GnuPG
|
||||
brew "gpgme"
|
||||
# Open source suite of directory software
|
||||
brew "openldap"
|
||||
# Manage your GnuPG keys with ease!
|
||||
brew "gpg-tui"
|
||||
# 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
|
||||
brew "graphviz"
|
||||
# GNU grep, egrep and fgrep
|
||||
brew "grep"
|
||||
# Popular GNU data compression program
|
||||
brew "gzip"
|
||||
# Text-based UI library
|
||||
brew "ncurses"
|
||||
# Improved top (interactive process viewer)
|
||||
brew "htop"
|
||||
# Portable abstraction of the hierarchical topology of modern architectures
|
||||
@@ -119,6 +176,8 @@ brew "libheif"
|
||||
brew "imagemagick"
|
||||
# Modular IRC client
|
||||
brew "irssi"
|
||||
# Image manipulation library
|
||||
brew "jpeg"
|
||||
# Lightweight and flexible command-line JSON processor
|
||||
brew "jq"
|
||||
# JSON parser for C
|
||||
@@ -127,38 +186,76 @@ brew "json-c"
|
||||
brew "krb5"
|
||||
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
|
||||
brew "legitify"
|
||||
# Secure hashing function
|
||||
brew "libb2"
|
||||
# BSD-style licensed readline alternative
|
||||
brew "libedit"
|
||||
# Conversion library
|
||||
brew "libiconv"
|
||||
# Postgres C API library
|
||||
brew "libpq"
|
||||
# Version of the SSL/TLS protocol forked from OpenSSL
|
||||
brew "libressl"
|
||||
# Multi-platform support library with a focus on asynchronous I/O
|
||||
brew "libuv"
|
||||
# YAML Parser
|
||||
brew "libyaml"
|
||||
# GNOME XML library
|
||||
brew "libxml2"
|
||||
# C library for reading, creating, and modifying zip archives
|
||||
brew "libzip"
|
||||
# Package manager for the Lua programming language
|
||||
brew "luarocks"
|
||||
# LZMA-based compression program similar to gzip or bzip2
|
||||
brew "lzip"
|
||||
# Swiss Army Knife for macOS
|
||||
brew "m-cli"
|
||||
# Collection of tools that nobody wrote when UNIX was young
|
||||
brew "moreutils"
|
||||
# NCurses Disk Usage
|
||||
brew "ncdu"
|
||||
# HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
|
||||
brew "nginx"
|
||||
# Port scanning utility for large networks
|
||||
brew "nmap"
|
||||
# Open source suite of directory software
|
||||
brew "openldap"
|
||||
# Libraries for security-enabled client and server applications
|
||||
brew "nss"
|
||||
# Cryptography and SSL/TLS Toolkit
|
||||
brew "openssl@1.1"
|
||||
# ISO-C API and CLI for generating UUIDs
|
||||
brew "ossp-uuid"
|
||||
# General-purpose scripting language
|
||||
brew "php"
|
||||
# Manage compile and link flags for libraries
|
||||
brew "pkg-config"
|
||||
brew "php@8.2"
|
||||
# General-purpose scripting language
|
||||
brew "php@8.3", link: true
|
||||
# Python version management
|
||||
brew "pyenv"
|
||||
# Migrate pip packages from one Python version to another
|
||||
brew "pyenv-pip-migrate"
|
||||
# Pyenv plugin to manage virtualenv
|
||||
brew "pyenv-virtualenv"
|
||||
# Interpreted, interactive, object-oriented programming language
|
||||
brew "python@3.11"
|
||||
# Install various Ruby versions and implementations
|
||||
brew "ruby-build"
|
||||
# Ruby version manager
|
||||
brew "rbenv"
|
||||
# Generate C-based recognizers from regular expressions
|
||||
brew "re2c"
|
||||
# Static analysis and lint tool, for (ba)sh scripts
|
||||
brew "shellcheck"
|
||||
# Send macOS User Notifications from the command-line
|
||||
brew "terminal-notifier"
|
||||
# Tool which checks for the support of TLS/SSL ciphers and flaws
|
||||
brew "testssl"
|
||||
# Terraform version manager inspired by rbenv
|
||||
brew "tfenv"
|
||||
# Linter for Terraform files
|
||||
brew "tflint"
|
||||
# Static analysis security scanner for your terraform code
|
||||
brew "tfsec"
|
||||
# Terminal multiplexer
|
||||
brew "tmux"
|
||||
# Display directories as trees (with optional color/HTML output)
|
||||
brew "tree"
|
||||
# Tool for creating isolated virtual python environments
|
||||
brew "virtualenv"
|
||||
# Command-line interface to the WakaTime api
|
||||
brew "wakatime-cli"
|
||||
# Executes a program periodically, showing output fullscreen
|
||||
@@ -167,10 +264,16 @@ brew "watch"
|
||||
brew "wget"
|
||||
# Check your $HOME for unwanted files and directories
|
||||
brew "xdg-ninja", args: ["HEAD"]
|
||||
# General-purpose lossless data-compression library
|
||||
brew "zlib"
|
||||
# Watcher for macOS 10.14+ light/dark mode changes
|
||||
brew "cormacrelf/tap/dark-notify"
|
||||
# Igbinary PHP extension
|
||||
brew "shivammathur/extensions/igbinary@8.3"
|
||||
# Cleans up your $HOME from those pesky dotfiles
|
||||
brew "doron-cohen/tap/antidot"
|
||||
# lets you quickly switch between multiple git user profiles
|
||||
brew "gesquive/tap/git-user"
|
||||
# Automated code review tool integrated with any code analysis tools regardless of programming language.
|
||||
brew "reviewdog/tap/reviewdog"
|
||||
# Imagick PHP extension
|
||||
brew "shivammathur/extensions/imagick@8.3"
|
||||
# Mcrypt PHP extension
|
||||
@@ -186,9 +289,15 @@ brew "shivammathur/extensions/uuid@8.3"
|
||||
# Yaml PHP extension
|
||||
brew "shivammathur/extensions/yaml@8.3"
|
||||
# General-purpose scripting language
|
||||
brew "shivammathur/php/php", link: false
|
||||
# General-purpose scripting language
|
||||
brew "shivammathur/php/php-debug"
|
||||
# Find & fix known vulnerabilities in open-source dependencies
|
||||
brew "snyk/tap/snyk"
|
||||
# Command-line interface for 1Password
|
||||
cask "1password-cli"
|
||||
# AeroSpace is an i3-like tiling window manager for macOS
|
||||
cask "aerospace"
|
||||
# Text editor
|
||||
cask "coda"
|
||||
# Universal database tool and SQL client
|
||||
@@ -202,10 +311,7 @@ cask "font-jetbrains-mono-nerd-font"
|
||||
cask "font-lato"
|
||||
cask "font-open-sans"
|
||||
cask "font-roboto"
|
||||
cask "font-source-code-pro"
|
||||
cask "font-source-code-pro-for-powerline"
|
||||
cask "font-source-sans-pro"
|
||||
cask "font-source-serif-pro"
|
||||
# GIT client
|
||||
cask "fork"
|
||||
# HTTP and GraphQL Client
|
||||
|
||||
@@ -9,3 +9,12 @@ insert_final_newline = true
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
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
3
config/nvim/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
spell/*
|
||||
!spell/.gitkeep
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"diagnostics.globals": [
|
||||
"vim"
|
||||
]
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"neodev": {
|
||||
"library": {
|
||||
"enabled": true,
|
||||
"plugins": [
|
||||
"nvim-lspconfig",
|
||||
"lsp",
|
||||
"completion",
|
||||
]
|
||||
}
|
||||
},
|
||||
"neoconf": {
|
||||
"plugins": {
|
||||
"lua_ls": {
|
||||
"enabled": true
|
||||
},
|
||||
}
|
||||
},
|
||||
"lspconfig": {
|
||||
"lua_ls": {
|
||||
"Lua.completion.callSnippet": "Replace",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,11 +1,20 @@
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ ivuorinen's Neovim configuration │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Install lazylazy
|
||||
-- ── Install lazylazy ────────────────────────────────────────────────
|
||||
-- https://github.com/folke/lazy.nvim
|
||||
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
if not 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' },
|
||||
@@ -18,17 +27,39 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
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'
|
||||
)
|
||||
|
||||
require 'options'
|
||||
require 'autogroups'
|
||||
|
||||
-- ── Load plugins ────────────────────────────────────────────────────
|
||||
require('lazy').setup(
|
||||
-- Automatically load plugins from lua/plugins
|
||||
'plugins',
|
||||
-- Lazy Configuration
|
||||
{
|
||||
checker = {
|
||||
-- Automatically check for updates
|
||||
enabled = true,
|
||||
-- We don't want to be notified about updates
|
||||
notify = false,
|
||||
},
|
||||
change_detection = {
|
||||
-- No need to notify about changes
|
||||
notify = false,
|
||||
},
|
||||
install = {
|
||||
colorscheme = { vim.g.colors_theme },
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
require('nvm-default').setup()
|
||||
|
||||
require 'keymaps'
|
||||
|
||||
require('lazy').setup {
|
||||
checker = {
|
||||
-- Automatically check for updates
|
||||
enabled = true,
|
||||
nofity = false,
|
||||
},
|
||||
spec = {
|
||||
-- Import plugins from `lua/plugins` directory
|
||||
{ import = 'plugins' },
|
||||
},
|
||||
}
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
107
config/nvim/lua/autogroups.lua
Normal file
107
config/nvim/lua/autogroups.lua
Normal file
@@ -0,0 +1,107 @@
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Autogroups │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group
|
||||
local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
|
||||
|
||||
-- Highlight on yank
|
||||
-- See `:help vim.highlight.on_yank()`
|
||||
autocmd('TextYankPost', {
|
||||
callback = function() vim.highlight.on_yank() end,
|
||||
group = augroup('YankHighlight', { clear = true }),
|
||||
pattern = '*',
|
||||
})
|
||||
|
||||
-- Set the numberwidth to the maximum line number.
|
||||
--
|
||||
-- This fixes the issue where the line numbers jump
|
||||
-- around when moving between lines relative line numbers enabled.
|
||||
autocmd({ 'BufEnter', 'BufWinEnter', 'TabEnter' }, {
|
||||
callback = function()
|
||||
local max_line_count = vim.fn.line '$'
|
||||
-- Only adjust if the file is large enough to matter
|
||||
if max_line_count > 99 then
|
||||
vim.opt.numberwidth = #tostring(max_line_count) + 1
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Windows to close with "q"
|
||||
autocmd('FileType', {
|
||||
group = augroup('close_with_q', { clear = true }),
|
||||
pattern = {
|
||||
'PlenaryTestPopup',
|
||||
'checkhealth',
|
||||
'dbout',
|
||||
'gitsigns.blame',
|
||||
'grug-far',
|
||||
'help',
|
||||
'lspinfo',
|
||||
'man',
|
||||
'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
|
||||
autocmd('FileType', {
|
||||
group = augroup('wrap_spell', { clear = true }),
|
||||
pattern = {
|
||||
'text',
|
||||
'plaintex',
|
||||
'typst',
|
||||
'gitcommit',
|
||||
'markdown',
|
||||
'asciidoc',
|
||||
'rst',
|
||||
'tex',
|
||||
},
|
||||
callback = function()
|
||||
vim.opt_local.wrap = true
|
||||
vim.opt_local.spell = true
|
||||
end,
|
||||
})
|
||||
|
||||
-- Fix conceallevel for json files
|
||||
autocmd({ 'FileType' }, {
|
||||
group = augroup('json_conceal', { clear = true }),
|
||||
pattern = { 'json', 'jsonc', 'json5' },
|
||||
callback = function() vim.opt_local.conceallevel = 0 end,
|
||||
})
|
||||
|
||||
-- Set filetype for SSH config directory
|
||||
-- Pattern handles directories with files like:
|
||||
-- .dotfiles/ssh/config.d/*, .ssh/config.local, .ssh/config.work
|
||||
autocmd({ 'BufRead', 'BufNewFile' }, {
|
||||
desc = 'Set filetype for SSH config directory',
|
||||
pattern = {
|
||||
'*/?.ssh/{config|shared}.d/*',
|
||||
'*/?.ssh/config.local',
|
||||
'*/?.ssh/config.work',
|
||||
},
|
||||
command = 'set filetype=sshconfig',
|
||||
})
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
@@ -1,72 +1,156 @@
|
||||
vim.api.nvim_set_keymap('i', 'jj', '<Esc>', { noremap = false })
|
||||
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=120 :
|
||||
|
||||
-- buffers
|
||||
vim.api.nvim_set_keymap('n', '<leader>bk', ':blast<enter>', { desc = 'Buffer: Last', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', '<leader>bj', ':bfirst<enter>', { desc = 'Buffer: First', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', '<leader>bh', ':bprev<enter>', { desc = 'Buffer: Prev', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', '<leader>bl', ':bnext<enter>', { desc = 'Buffer: Next', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', '<leader>bd', ':Bdelete<enter>', { desc = 'Buffer: Delete', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', '<leader>bw', ':Bwipeout<enter>', { desc = 'Buffer: Wipeout', noremap = false })
|
||||
require 'utils'
|
||||
|
||||
-- files
|
||||
vim.api.nvim_set_keymap('n', 'QQ', ':q!<enter>', { desc = 'Quickly Quit', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', 'WW', ':w!<enter>', { desc = 'Force write', noremap = false })
|
||||
vim.api.nvim_set_keymap('n', 'E', '$', { noremap = false })
|
||||
vim.api.nvim_set_keymap('n', 'B', '^', { noremap = false })
|
||||
vim.api.nvim_set_keymap('n', 'tT', ':TransparentToggle<CR>', { desc = 'Toggle Transparency', noremap = true })
|
||||
vim.api.nvim_set_keymap('n', 'ss', ':noh<CR>', { noremap = true })
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Keymaps │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- splits
|
||||
vim.api.nvim_set_keymap('n', '<C-W>,', ':vertical resize -10<CR>', { desc = 'V Resize -', noremap = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-W>.', ':vertical resize +10<CR>', { desc = 'V Resize +', noremap = true })
|
||||
-- ── Disable arrow keys in normal mode ───────────────────────────────
|
||||
K.n('<left>', ':echo "Use h to move!!"<CR>')
|
||||
K.n('<right>', ':echo "Use l to move!!"<CR>')
|
||||
K.n('<up>', ':echo "Use k to move!!"<CR>')
|
||||
K.n('<down>', ':echo "Use j to move!!"<CR>')
|
||||
|
||||
-- Quicker close split
|
||||
vim.keymap.set('n', '<leader>qf', ':q<CR>', { desc = 'Quicker close split', silent = true, noremap = true })
|
||||
-- ── Splits ──────────────────────────────────────────────────────────
|
||||
K.n('<C-w>,', ':vertical resize -10<CR>', { desc = 'V Resize -' })
|
||||
K.n('<C-w>.', ':vertical resize +10<CR>', { desc = 'V Resize +' })
|
||||
K.n('<C-w>-', ':resize -10<CR>', { desc = 'H Resize -' })
|
||||
K.n('<C-w>+', ':resize +10<CR>', { desc = 'H Resize +' })
|
||||
K.n('<C-w>=', '<C-w>=', { desc = 'Equal Size Splits' })
|
||||
|
||||
-- Keymaps for better default experience
|
||||
-- See `:help vim.keymap.set()`
|
||||
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })
|
||||
-- ── Deal with word wrap ─────────────────────────────────────────────
|
||||
K.n(
|
||||
'k',
|
||||
"v:count == 0 ? 'gk' : 'k'",
|
||||
{ desc = 'Move up', noremap = true, expr = true }
|
||||
)
|
||||
K.n(
|
||||
'j',
|
||||
"v:count == 0 ? 'gj' : 'j'",
|
||||
{ desc = 'Move down', noremap = true, expr = true }
|
||||
)
|
||||
|
||||
-- Remap for dealing with word wrap
|
||||
vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
|
||||
vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
|
||||
-- ── Text manipulation ───────────────────────────────────────────────
|
||||
K.d('<', { 'n', 'v' }, '<gv', 'Indent Left')
|
||||
K.d('>', { 'n', 'v' }, '>gv', 'Indent Right')
|
||||
K.d('<C-k>', { 'n', 'v' }, ":m '<-2<CR>gv=gv", 'Move Block Up')
|
||||
K.d('<C-j>', { 'n', 'v' }, ":m '>+1<CR>gv=gv", 'Move Block Down')
|
||||
|
||||
vim.keymap.set('n', '<leader>xe', '<cmd>GoIfErr<cr>', { desc = 'Go If Error', silent = true, noremap = true })
|
||||
-- ── Other operations ────────────────────────────────────────────────
|
||||
K.nl('o', function() require('snacks').gitbrowse() end, 'Open repo in browser')
|
||||
K.n('<C-s>', ':w!<cr>', { desc = 'Save', noremap = true })
|
||||
K.n('<esc><esc>', ':nohlsearch<cr>', { desc = 'Clear Search Highlighting' })
|
||||
|
||||
-- TIP: Disable arrow keys in normal mode
|
||||
vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
|
||||
vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
|
||||
vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
|
||||
vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
|
||||
-- ── Buffer operations ───────────────────────────────────────────────
|
||||
-- Mappings for buffer management operations like switching, deleting, etc.
|
||||
-- Convention: All mappings start with 'b' followed by the operation
|
||||
K.nl('ba', ':%bd|e#|bd#<cr>', 'Close all except current')
|
||||
K.nl('bd', ':lua MiniBufremove.delete()<CR>', 'Delete')
|
||||
K.nl('bh', ':bprev<cr>', 'Prev')
|
||||
K.nl('bj', ':bfirst<cr>', 'First')
|
||||
K.nl('bk', ':blast<cr>', 'Last')
|
||||
K.nl('bl', ':bnext<cr>', 'Next')
|
||||
K.nl('bw', ':lua MiniBufremove.wipeout()<CR>', 'Wipeout')
|
||||
|
||||
-- Keybinds to make split navigation easier.
|
||||
-- Use CTRL+<hjkl> to switch between windows
|
||||
--
|
||||
-- See `:help wincmd` for a list of all window commands
|
||||
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
|
||||
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
|
||||
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
|
||||
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
|
||||
-- ── Code & LSP operations ───────────────────────────────────────────
|
||||
-- Mappings for code and LSP operations like code actions, formatting, etc.
|
||||
-- Convention: All mappings start with 'c' followed by the operation
|
||||
-- unless it's a generic operation like signature help or hover
|
||||
K.n('<C-l>', ':lua vim.lsp.buf.signature_help()<CR>', { desc = 'Signature' })
|
||||
K.n('K', ':Lspsaga hover_doc<cr>', { desc = 'Hover Documentation' })
|
||||
K.ld('ca', 'n', ':Lspsaga code_action<cr>', 'Code Action')
|
||||
K.ld('cci', 'n', ':Lspsaga incoming_calls<cr>', 'Incoming Calls')
|
||||
K.ld('cco', 'n', ':Lspsaga outgoing_calls<cr>', 'Outgoing Calls')
|
||||
K.ld('cd', 'n', ':Lspsaga show_line_diagnostics<cr>', 'Line Diagnostics')
|
||||
-- K.ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()<CR>', 'Format')
|
||||
K.ld('cg', 'n', ':lua require("neogen").generate()<CR>', 'Generate annotations')
|
||||
K.ld('ci', 'n', ':Lspsaga implement<cr>', 'Implementations')
|
||||
K.ld('cl', 'n', ':Lspsaga show_cursor_diagnostics<cr>', 'Cursor Diagnostics')
|
||||
K.ld('cp', 'n', ':Lspsaga peek_definition<cr>', 'Peek Definition')
|
||||
K.ld('cr', 'n', ':Lspsaga rename<cr>', 'Rename')
|
||||
K.ld('cR', 'n', ':Lspsaga rename ++project<cr>', 'Rename Project wide')
|
||||
K.ld('cs', 'n', ':Telescope lsp_document_symbols<CR>', 'LSP Document Symbols')
|
||||
K.ld('ct', 'n', ':Lspsaga peek_type_definition<cr>', 'Peek Type Definition')
|
||||
K.ld('cT', 'n', ':Telescope lsp_type_definitions<CR>', 'LSP Type Definitions')
|
||||
K.ld('cu', 'n', ':Lspsaga preview_definition<cr>', 'Preview Definition')
|
||||
K.ld('cv', 'n', ':Lspsaga diagnostic_jump_prev<cr>', 'Diagnostic Jump Prev')
|
||||
K.ld('cw', 'n', ':Lspsaga diagnostic_jump_next<cr>', 'Diagnostic Jump Next')
|
||||
|
||||
-- Old habits
|
||||
vim.keymap.set('n', '<C-s>', '<cmd>w<CR>', { desc = 'Save file' })
|
||||
vim.keymap.set('n', '<leader>qq', '<cmd>wq!<CR>', { desc = '[qq] Quickly Quit' })
|
||||
-- ── CommentBox operations ───────────────────────────────────────────
|
||||
-- Mappings for creating and managing comment boxes
|
||||
-- Convention: All mappings start with 'cb' followed by the box type
|
||||
K.nl('cbb', '<Cmd>CBccbox<CR>', 'CB: Box Title')
|
||||
K.nl('cbd', '<Cmd>CBd<CR>', 'CB: Remove a box')
|
||||
K.nl('cbl', '<Cmd>CBline<CR>', 'CB: Simple Line')
|
||||
K.nl('cbm', '<Cmd>CBllbox14<CR>', 'CB: Marked')
|
||||
K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
|
||||
|
||||
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
|
||||
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
|
||||
-- is not what someone will guess without a bit more experience.
|
||||
--
|
||||
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
|
||||
-- or just use <C-\><C-n> to exit terminal mode
|
||||
vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
|
||||
|
||||
-- [[ Highlight on yank ]]
|
||||
-- See `:help vim.highlight.on_yank()`
|
||||
local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
|
||||
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
-- ── Telescope operations ────────────────────────────────────────────
|
||||
-- Mappings for Telescope operations like finding files, buffers, etc.
|
||||
-- Convention: All mappings start with 's' followed by the operation
|
||||
-- unless it's a generic operation like searching or finding buffers
|
||||
K.nl('f', ':Telescope find_files<cr>', 'Find Files')
|
||||
K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers')
|
||||
K.nl(
|
||||
'/',
|
||||
function()
|
||||
require('telescope.builtin').current_buffer_fuzzy_find(
|
||||
require('telescope.themes').get_dropdown {
|
||||
winblend = 20,
|
||||
previewer = true,
|
||||
}
|
||||
)
|
||||
end,
|
||||
group = highlight_group,
|
||||
pattern = '*',
|
||||
})
|
||||
'Fuzzily search in current buffer'
|
||||
)
|
||||
|
||||
K.nl('sc', ':Telescope commands<cr>', 'Commands')
|
||||
K.nl('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics')
|
||||
K.nl('sg', ':Telescope live_grep<cr>', 'Search by Grep')
|
||||
K.nl('sh', ':Telescope help_tags<cr>', 'Help tags')
|
||||
K.nl('sk', ':Telescope keymaps<cr>', 'Search Keymaps')
|
||||
K.nl('sl', ':Telescope luasnip<CR>', 'Search LuaSnip')
|
||||
K.nl('so', ':Telescope oldfiles<CR>', 'Old Files')
|
||||
K.nl(
|
||||
'sp',
|
||||
':lua require("telescope").extensions.lazy_plugins.lazy_plugins()<cr>',
|
||||
'Lazy Plugins'
|
||||
)
|
||||
K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix')
|
||||
K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter')
|
||||
K.nl('st', ':TodoTelescope<cr>', 'Search Todos')
|
||||
K.nl('sw', ':Telescope grep_string<cr>', 'Grep String')
|
||||
K.nl('sx', ':Telescope import<cr>', 'Telescope: Import')
|
||||
|
||||
-- ── Trouble operations ──────────────────────────────────────────────
|
||||
-- Convention is 'x' followed by the operation
|
||||
K.nl('xd', ':Trouble document_diagnostics<cr>', 'Document Diagnostics')
|
||||
K.nl('xl', ':Trouble loclist<cr>', 'Location List')
|
||||
K.nl('xq', ':Trouble quickfix<cr>', 'Quickfix')
|
||||
K.nl('xw', ':Trouble workspace_diagnostics<cr>', 'Workspace Diagnostics')
|
||||
K.nl('xx', ':Trouble diagnostics<cr>', 'Diagnostic')
|
||||
|
||||
-- ── Toggle settings ─────────────────────────────────────────────────
|
||||
-- Convention is 't' followed by the operation
|
||||
K.nl('tc', ':CloakToggle<cr>', 'Cloak: Toggle')
|
||||
K.nl('te', ':Neotree toggle<cr>', 'Toggle Neotree')
|
||||
K.nl('tl', ToggleBackground, 'Toggle Light/Dark Mode')
|
||||
K.nl('tn', ':Noice dismiss<cr>', 'Noice: Dismiss Notification')
|
||||
|
||||
-- ── Quit operations ─────────────────────────────────────────────────
|
||||
-- Convention is 'q' followed by the operation
|
||||
K.nl('qf', ':q<CR>', 'Quicker close split')
|
||||
K.nl('qq', function()
|
||||
if vim.fn.confirm('Force save and quit?', '&Yes\n&No', 2) == 1 then
|
||||
vim.cmd 'wq!'
|
||||
end
|
||||
end, 'Quit with force saving')
|
||||
K.nl('qw', ':wq<CR>', 'Write and quit')
|
||||
K.nl('qQ', function()
|
||||
if vim.fn.confirm('Force quit without saving?', '&Yes\n&No', 2) == 1 then
|
||||
vim.cmd 'q!'
|
||||
end
|
||||
end, 'Force quit without saving')
|
||||
|
||||
-- That concludes the keymaps section of the config.
|
||||
|
||||
122
config/nvim/lua/nvm-default/init.lua
Normal file
122
config/nvim/lua/nvm-default/init.lua
Normal file
@@ -0,0 +1,122 @@
|
||||
-- Get nvm default version and use it in node_host_prog
|
||||
-- and g.copilot_node_command.
|
||||
--
|
||||
-- This module automatically configures Neovim to use the default Node.js version
|
||||
-- from NVM. It requires a working NVM installation and 'default' alias to be set,
|
||||
-- and also neovim npm package to be installed.
|
||||
--
|
||||
-- You can install the neovim package by running:
|
||||
-- npm i --global neovim
|
||||
--
|
||||
-- Usage:
|
||||
-- require('nvm-default').setup({
|
||||
-- add_to_path = true, -- optional: add NVM bin directory to PATH
|
||||
-- nvm_path = "~/.nvm", -- optional: custom NVM installation path
|
||||
-- notify_level = "info" -- optional: notification level
|
||||
-- })
|
||||
|
||||
local M = {}
|
||||
|
||||
M.name = 'nvm-default.nvim'
|
||||
M.version = '0.1.0' -- x-release-please-version
|
||||
|
||||
-- Helper function to run a shell command
|
||||
---@param cmd string Run a shell command
|
||||
---@return string? Return the result of the command
|
||||
local function run_command(cmd)
|
||||
local result = vim.fn.system(cmd)
|
||||
return vim.v.shell_error == 0 and result:gsub('%s+$', '') or nil
|
||||
end
|
||||
|
||||
-- Helper function to show a notification
|
||||
---@param msg string Show a message
|
||||
---@param level "info"|"warn"|"error"|"trace" Notification level
|
||||
local function n(msg, level)
|
||||
if msg == nil then msg = M.name .. ': No message provided' end
|
||||
if level == nil then level = 'trace' end
|
||||
|
||||
local log_level = vim.log.levels.INFO
|
||||
|
||||
if level == 'info' then
|
||||
log_level = vim.log.levels.INFO
|
||||
elseif level == 'warn' then
|
||||
log_level = vim.log.levels.WARN
|
||||
elseif level == 'error' then
|
||||
log_level = vim.log.levels.ERROR
|
||||
elseif level == 'trace' then
|
||||
log_level = vim.log.levels.TRACE
|
||||
end
|
||||
|
||||
vim.notify(M.name .. ': ' .. msg, log_level)
|
||||
end
|
||||
|
||||
---@class NvmDefaultOptions
|
||||
---@field add_to_path boolean Add found NVM bin directory to PATH
|
||||
---@field nvm_path string Where nvm installation is located
|
||||
---@field notify_level number|"info"|"warn"|"error"|"trace" Notification level filter
|
||||
|
||||
-- Default options
|
||||
---@type NvmDefaultOptions
|
||||
M.defaults = {
|
||||
add_to_path = vim.g.nvm_default_add_to_path or true,
|
||||
nvm_path = vim.fn.expand(os.getenv 'NVM_DIR' or '~/.nvm'),
|
||||
notify_level = vim.g.nvm_default_notify_level or 'info',
|
||||
}
|
||||
|
||||
-- Fetch the NVM default version or fallback to node version
|
||||
---@param opts? NvmDefaultOptions Plugin options
|
||||
function M.setup(opts)
|
||||
local options = vim.tbl_deep_extend('force', M.defaults, opts or {})
|
||||
|
||||
local nvm_path = options.nvm_path
|
||||
local node_version = run_command(
|
||||
string.format('. %s/nvm.sh && nvm version default', nvm_path)
|
||||
) or run_command(string.format('. %s/nvm.sh && nvm version node', nvm_path))
|
||||
|
||||
if node_version and node_version:match '^v' then
|
||||
-- Set vim.g.node_host_prog and vim.g.copilot_node_command
|
||||
local current_nvm_version_path =
|
||||
string.format('%s/versions/node/%s', nvm_path, node_version)
|
||||
local current_nvm_node_bin_path =
|
||||
string.format('%s/bin', current_nvm_version_path)
|
||||
local current_nvm_node_bin =
|
||||
string.format('%s/node', current_nvm_node_bin_path)
|
||||
local neovim_node_host_bin_path =
|
||||
string.format('%s/neovim-node-host', current_nvm_node_bin_path)
|
||||
|
||||
-- Collect missing files and directories errors for error output
|
||||
local missing = {}
|
||||
|
||||
-- If node_dir isn't there, stop and show error
|
||||
if not vim.fn.isdirectory(current_nvm_version_path) then
|
||||
table.insert(missing, 'Node.js directory: ' .. current_nvm_version_path)
|
||||
end
|
||||
|
||||
-- If node_bin isn't there, stop and show error
|
||||
if not vim.fn.filereadable(current_nvm_node_bin) then
|
||||
table.insert(missing, 'Node.js binary: ' .. current_nvm_node_bin)
|
||||
end
|
||||
|
||||
if not vim.fn.filereadable(neovim_node_host_bin_path) then
|
||||
table.insert(missing, 'Neovim host binary: ' .. neovim_node_host_bin_path)
|
||||
end
|
||||
|
||||
if #missing > 0 then
|
||||
n('Missing required files:\n- ' .. table.concat(missing, '\n- '), 'error')
|
||||
return
|
||||
end
|
||||
|
||||
-- Add to PATH if requested. Can be turned off by setting if it messes with
|
||||
-- other tools.
|
||||
if options.add_to_path then
|
||||
vim.env.PATH = current_nvm_node_bin_path .. ':' .. vim.env.PATH
|
||||
end
|
||||
|
||||
vim.g.node_host_prog = neovim_node_host_bin_path
|
||||
vim.g.copilot_node_command = current_nvm_node_bin
|
||||
else
|
||||
n('Unable to determine the Node.js version from nvm.', 'error')
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -1,85 +1,55 @@
|
||||
vim.g.mapleader = ' '
|
||||
vim.g.maplocalleader = ' '
|
||||
|
||||
-- Set to true if you have a Nerd Font installed and selected in the terminal
|
||||
vim.g.have_nerd_font = true
|
||||
|
||||
-- Make sure editorconfig support is enabled
|
||||
vim.g.editorconfig = true
|
||||
|
||||
-- [[ Setting options ]]
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ neovim configuration options │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
-- See `:help vim.opt`
|
||||
-- `:help vim.g`
|
||||
-- For more options, you can see `:help option-list`
|
||||
|
||||
vim.opt.number = true
|
||||
vim.opt.relativenumber = true
|
||||
local g = vim.g -- A table to store global variables
|
||||
local o = vim.opt -- A table to store global options
|
||||
|
||||
-- Enable mouse mode, can be useful for resizing splits for example!
|
||||
vim.opt.mouse = 'a'
|
||||
-- vim.global
|
||||
g.mapleader = ' ' -- Space as the leader key
|
||||
g.maplocalleader = ' ' -- Space as the local leader key
|
||||
|
||||
-- Don't show the mode, since it's already in the status line
|
||||
vim.opt.showmode = false
|
||||
g.colors_theme = 'tokyonight' -- Set the colorscheme
|
||||
g.colors_variant_light = 'tokyonight-day' -- Set the light variant
|
||||
g.colors_variant_dark = 'tokyonight-storm' -- Set the dark variant
|
||||
|
||||
g.editorconfig = true -- Make sure editorconfig support is enabled
|
||||
g.loaded_perl_provider = 0 -- Disable perl provider
|
||||
g.loaded_ruby_provider = 0 -- Disable ruby provider
|
||||
g.loaded_java_provider = 0 -- Disable java provider
|
||||
|
||||
-- vim.options
|
||||
-- Most of the good defaults are provided by `mini.basics`
|
||||
-- See: lua/plugins/mini.lua
|
||||
o.ignorecase = true -- Ignore case in search patterns
|
||||
o.inccommand = 'split' -- Preview substitutions live, as you type!
|
||||
o.number = true -- Show line numbers
|
||||
o.numberwidth = 3 -- Set the width of the number column
|
||||
o.relativenumber = true -- Show relative line numbers
|
||||
o.scrolloff = 15 -- Show context around cursor
|
||||
o.signcolumn = 'yes:3' -- Keep signcolumn on by default
|
||||
o.spell = true -- Enable spell checking
|
||||
o.spelllang = 'en_us' -- Set the spell checking language
|
||||
o.splitbelow = true -- split to the bottom
|
||||
o.splitright = true -- vsplit to the right
|
||||
o.termguicolors = true -- Enable GUI colors
|
||||
o.timeoutlen = 250 -- Decrease mapped sequence wait time
|
||||
o.updatetime = 250 -- 250 ms = 2,5 seconds
|
||||
o.sessionoptions =
|
||||
'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions'
|
||||
|
||||
-- Enable the colorcolumn
|
||||
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })
|
||||
|
||||
-- Sync clipboard between OS and Neovim.
|
||||
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||||
-- Remove this option if you want your OS clipboard to remain independent.
|
||||
-- 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
|
||||
vim.opt.smartindent = true -- Insert indents automatically
|
||||
|
||||
-- Save undo history
|
||||
vim.opt.undofile = true
|
||||
|
||||
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
|
||||
vim.opt.ignorecase = true
|
||||
vim.opt.smartcase = true
|
||||
|
||||
-- Keep signcolumn on by default
|
||||
vim.opt.signcolumn = 'yes'
|
||||
|
||||
-- Decrease update time
|
||||
vim.opt.updatetime = 250
|
||||
vim.wo.signcolumn = 'yes'
|
||||
|
||||
-- Decrease mapped sequence wait time
|
||||
-- Displays which-key popup sooner
|
||||
vim.opt.timeoutlen = 300
|
||||
|
||||
-- Configure how new splits should be opened
|
||||
vim.opt.splitright = true
|
||||
vim.opt.splitbelow = true
|
||||
|
||||
-- Sets how neovim will display certain whitespace characters in the editor.
|
||||
-- See `:help 'list'`
|
||||
-- and `:help 'listchars'`
|
||||
vim.opt.list = true
|
||||
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
|
||||
|
||||
-- Preview substitutions live, as you type!
|
||||
vim.opt.inccommand = 'split'
|
||||
|
||||
-- Show which line your cursor is on
|
||||
vim.opt.cursorline = true
|
||||
|
||||
-- Minimal number of screen lines to keep above and below the cursor.
|
||||
vim.opt.scrolloff = 10
|
||||
|
||||
-- Enable break indent
|
||||
vim.o.breakindent = true
|
||||
|
||||
-- Save undo history
|
||||
vim.o.undofile = true
|
||||
|
||||
-- Set completeopt to have a better completion experience
|
||||
vim.o.completeopt = 'menuone,noselect'
|
||||
-- Fixes Notify opacity issues
|
||||
vim.o.termguicolors = true
|
||||
|
||||
-- Set spell checking
|
||||
vim.o.spell = true
|
||||
|
||||
vim.g.loaded_perl_provider = 0
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
-- Autoformat
|
||||
-- https://github.com/stevearc/conform.nvim
|
||||
return {
|
||||
'stevearc/conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
keys = {
|
||||
{
|
||||
'<leader>cf',
|
||||
function()
|
||||
require('conform').format { async = true, lsp_fallback = true }
|
||||
end,
|
||||
mode = '',
|
||||
desc = '[f] 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 },
|
||||
},
|
||||
},
|
||||
}
|
||||
119
config/nvim/lua/plugins/blink.lua
Normal file
119
config/nvim/lua/plugins/blink.lua
Normal file
@@ -0,0 +1,119 @@
|
||||
return {
|
||||
-- Performant, batteries-included completion plugin for Neovim
|
||||
-- https:/github.com/saghen/blink.cmp
|
||||
{
|
||||
'saghen/blink.cmp',
|
||||
version = '*',
|
||||
lazy = false, -- lazy loading handled internally
|
||||
dependencies = {
|
||||
-- Compatibility layer for using nvim-cmp sources on blink.cmp
|
||||
-- https://github.com/Saghen/blink.compat
|
||||
{
|
||||
'saghen/blink.compat',
|
||||
version = '*',
|
||||
-- lazy.nvim will automatically load the plugin when it's required by blink.cmp
|
||||
opts = {
|
||||
-- make sure to set opts so that lazy.nvim calls blink.compat's setup
|
||||
impersonate_nvim_cmp = true,
|
||||
},
|
||||
},
|
||||
|
||||
-- Set of preconfigured snippets for different languages.
|
||||
-- https://github.com/rafamadriz/friendly-snippets
|
||||
{ 'rafamadriz/friendly-snippets' },
|
||||
|
||||
-- Lua plugin to turn github copilot into a cmp source
|
||||
-- https://github.com/giuxtaposition/blink-cmp-copilot
|
||||
{
|
||||
'giuxtaposition/blink-cmp-copilot',
|
||||
dependencies = {
|
||||
-- Fully featured & enhanced replacement for copilot.vim complete
|
||||
-- with API for interacting with Github Copilot
|
||||
-- https://github.com/zbirenbaum/copilot.lua
|
||||
{
|
||||
'zbirenbaum/copilot.lua',
|
||||
cmd = 'Copilot',
|
||||
build = ':Copilot setup',
|
||||
event = { 'InsertEnter', 'LspAttach' },
|
||||
opts = {
|
||||
fix_pairs = true,
|
||||
suggestion = { enabled = false },
|
||||
panel = { enabled = false },
|
||||
filetypes = {
|
||||
markdown = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
---@module 'blink.cmp'
|
||||
---@type blink.cmp.Config
|
||||
opts = {
|
||||
-- 'default' for mappings similar to built-in completion
|
||||
-- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate)
|
||||
-- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept
|
||||
-- see the "default configuration" section below for full documentation on how to define
|
||||
-- your own keymap.
|
||||
keymap = {
|
||||
preset = 'super-tab',
|
||||
-- Use Ctrl-x to trigger auto completion
|
||||
['<C-x>'] = { 'show', 'show_documentation', 'hide_documentation' },
|
||||
},
|
||||
|
||||
appearance = {
|
||||
-- Sets the fallback highlight groups to nvim-cmp's highlight groups
|
||||
-- Useful for when your theme doesn't support blink.cmp
|
||||
-- will be removed in a future release
|
||||
use_nvim_cmp_as_default = true,
|
||||
-- Set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
|
||||
-- Adjusts spacing to ensure icons are aligned
|
||||
nerd_font_variant = vim.g.nerd_font_variant or 'mono',
|
||||
},
|
||||
|
||||
completion = {
|
||||
menu = {
|
||||
draw = {
|
||||
columns = {
|
||||
{ 'label', 'label_description', gap = 1 },
|
||||
{ 'kind_icon', 'kind', gap = 1 },
|
||||
},
|
||||
},
|
||||
},
|
||||
documentation = {
|
||||
auto_show = true,
|
||||
},
|
||||
ghost_text = {
|
||||
enabled = false,
|
||||
},
|
||||
},
|
||||
|
||||
-- default list of enabled providers defined so that you can extend it
|
||||
-- elsewhere in your config, without redefining it, via `opts_extend`
|
||||
sources = {
|
||||
default = {
|
||||
'lsp',
|
||||
'copilot',
|
||||
'path',
|
||||
'snippets',
|
||||
'buffer',
|
||||
},
|
||||
providers = {
|
||||
copilot = {
|
||||
name = 'copilot',
|
||||
module = 'blink-cmp-copilot',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- experimental auto-brackets support
|
||||
-- completion = { accept = { auto_brackets = { enabled = true } } }
|
||||
|
||||
-- experimental signature help support
|
||||
signature = { enabled = true },
|
||||
},
|
||||
-- allows extending the enabled_providers array elsewhere in your config
|
||||
-- without having to redefine it
|
||||
opts_extend = { 'sources.completion.enabled_providers' },
|
||||
},
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
return {
|
||||
-- Autocompletion
|
||||
-- https://github.com/hrsh7th/nvim-cmp
|
||||
{
|
||||
'hrsh7th/nvim-cmp',
|
||||
event = 'InsertEnter',
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
'L3MON4D3/LuaSnip',
|
||||
'saadparwaiz1/cmp_luasnip',
|
||||
-- Adds other completion capabilities.
|
||||
-- nvim-cmp does not ship with all sources by default. They are split
|
||||
-- into multiple repos for maintenance purposes.
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
'hrsh7th/cmp-path',
|
||||
'onsails/lspkind.nvim',
|
||||
{
|
||||
'zbirenbaum/copilot-cmp',
|
||||
dependencies = {
|
||||
{
|
||||
'zbirenbaum/copilot.lua',
|
||||
cmd = 'Copilot',
|
||||
build = ':Copilot setup',
|
||||
event = { 'InsertEnter', 'LspAttach' },
|
||||
fix_pairs = true,
|
||||
opts = {
|
||||
suggestion = { enabled = false },
|
||||
panel = { enabled = false },
|
||||
filetypes = {
|
||||
markdown = true,
|
||||
help = true,
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
config = function()
|
||||
require('copilot_cmp').setup()
|
||||
end,
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local cmp = require 'cmp'
|
||||
local luasnip = require 'luasnip'
|
||||
local lspkind = require 'lspkind'
|
||||
luasnip.config.setup {}
|
||||
|
||||
cmp.setup {
|
||||
formatting = {
|
||||
format = lspkind.cmp_format {
|
||||
mode = 'symbol',
|
||||
min_width = 40,
|
||||
max_width = 100,
|
||||
symbol_map = {
|
||||
Copilot = ''
|
||||
},
|
||||
},
|
||||
},
|
||||
view = {
|
||||
entries = 'native',
|
||||
},
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert {
|
||||
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||
-- Manually trigger a completion from nvim-cmp.
|
||||
-- Generally you don't need this, because nvim-cmp will display
|
||||
-- completions whenever it has completion options available.
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<CR>'] = cmp.mapping.confirm {
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = true,
|
||||
},
|
||||
['<Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
},
|
||||
sources = {
|
||||
-- Copilot Source
|
||||
{ name = 'copilot', group_index = 2 },
|
||||
-- Other Sources
|
||||
{ name = 'nvim_lsp', group_index = 2 },
|
||||
{ name = 'path', group_index = 2 },
|
||||
{ name = 'luasnip', group_index = 2 },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
87
config/nvim/lua/plugins/code.lua
Normal file
87
config/nvim/lua/plugins/code.lua
Normal file
@@ -0,0 +1,87 @@
|
||||
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' },
|
||||
},
|
||||
|
||||
-- Cloak allows you to overlay *'s over defined patterns in defined files.
|
||||
-- https://github.com/laytan/cloak.nvim
|
||||
{
|
||||
'laytan/cloak.nvim',
|
||||
version = '*',
|
||||
opts = {
|
||||
enabled = true,
|
||||
cloak_character = '*',
|
||||
-- The applied highlight group (colors) on the cloaking, see `:h highlight`.
|
||||
highlight_group = 'Comment',
|
||||
patterns = {
|
||||
{
|
||||
-- Match any file starting with ".env".
|
||||
-- This can be a table to match multiple file patterns.
|
||||
file_pattern = {
|
||||
'.env*',
|
||||
'wrangler.toml',
|
||||
'.dev.vars',
|
||||
},
|
||||
-- Match an equals sign and any character after it.
|
||||
-- This can also be a table of patterns to cloak,
|
||||
-- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
|
||||
cloak_pattern = '=.+',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Describe the regexp under the cursor
|
||||
-- https://github.com/bennypowers/nvim-regexplainer
|
||||
{
|
||||
'bennypowers/nvim-regexplainer',
|
||||
event = 'BufEnter',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'MunifTanjim/nui.nvim',
|
||||
},
|
||||
opts = {
|
||||
-- automatically show the explainer when the cursor enters a regexp
|
||||
auto = true,
|
||||
},
|
||||
},
|
||||
|
||||
-- Clarify and beautify your comments using boxes and lines.
|
||||
-- https://github.com/LudoPinelli/comment-box.nvim
|
||||
{
|
||||
'LudoPinelli/comment-box.nvim',
|
||||
event = 'BufEnter',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Plugin to improve viewing Markdown files in Neovim
|
||||
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
|
||||
{
|
||||
'MeanderingProgrammer/render-markdown.nvim',
|
||||
event = 'BufEnter',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'nvim-tree/nvim-web-devicons',
|
||||
},
|
||||
ft = 'markdown',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
{
|
||||
'ray-x/go.nvim',
|
||||
dependencies = { -- optional packages
|
||||
'ray-x/guihua.lua',
|
||||
'neovim/nvim-lspconfig',
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
},
|
||||
config = function() require('go').setup() end,
|
||||
event = { 'CmdlineEnter' },
|
||||
ft = { 'go', 'gomod' },
|
||||
build = ':lua require("go.install").update_all_sync()', -- if you need to install/update all binaries
|
||||
},
|
||||
}
|
||||
@@ -1,30 +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',
|
||||
},
|
||||
keys = {
|
||||
{ '<leader>dt', '<cmd>DapUiToggle', desc = 'DAP: Toggle UI' },
|
||||
{ '<leader>db', '<cmd>DapToggleBreakpoint', desc = 'DAP: Toggle Breakpoint' },
|
||||
{ '<leader>dc', '<cmd>DapContinue', desc = 'DAP: Continue' },
|
||||
{ '<leader>dr', ":lua require('dapui').open({reset = true})<CR>", desc = 'DAP: Reset' },
|
||||
{ '<leader>ht', ":lua require('harpoon.ui').toggle_quick_menu()<CR>", desc = 'DAP: Harpoon UI' },
|
||||
},
|
||||
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,
|
||||
},
|
||||
}
|
||||
85
config/nvim/lua/plugins/folke.lua
Normal file
85
config/nvim/lua/plugins/folke.lua
Normal file
@@ -0,0 +1,85 @@
|
||||
return {
|
||||
-- A collection of small QoL plugins for Neovim
|
||||
-- https://github.com/folke/snacks.nvim
|
||||
{
|
||||
'folke/snacks.nvim',
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
---@type snacks.Config
|
||||
opts = {
|
||||
bigfile = { enabled = true },
|
||||
gitbrowse = { enabled = true },
|
||||
notifier = {
|
||||
enabled = true,
|
||||
timeout = 3000,
|
||||
},
|
||||
notify = { enabled = true },
|
||||
quickfile = { enabled = true },
|
||||
statuscolumn = {
|
||||
enabled = true,
|
||||
left = { 'mark', 'sign' }, -- priority of signs on the left (high to low)
|
||||
right = { 'fold', 'git' }, -- priority of signs on the right (high to low)
|
||||
folds = {
|
||||
open = true, -- show open fold icons
|
||||
git_hl = false, -- use Git Signs hl for fold icons
|
||||
},
|
||||
git = {
|
||||
-- patterns to match Git signs
|
||||
patterns = { 'GitSign', 'MiniDiffSign' },
|
||||
},
|
||||
refresh = 50, -- refresh at most every 50ms
|
||||
},
|
||||
words = { enabled = true },
|
||||
styles = {
|
||||
notification = {
|
||||
wo = { wrap = true }, -- Wrap notifications
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
-- A pretty diagnostics, references, telescope results,
|
||||
-- quickfix and location list to help you solve all the
|
||||
-- trouble your code is causing.
|
||||
-- https://github.com/folke/trouble.nvim
|
||||
{
|
||||
'folke/trouble.nvim',
|
||||
lazy = false,
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
---@type trouble.Config
|
||||
opts = {
|
||||
auto_preview = true,
|
||||
auto_fold = true,
|
||||
auto_close = true,
|
||||
use_lsp_diagnostic_signs = true,
|
||||
},
|
||||
},
|
||||
-- Navigate your code with search labels, enhanced
|
||||
-- character motions and Treesitter integration
|
||||
-- https://github.com/folke/flash.nvim
|
||||
{
|
||||
'folke/flash.nvim',
|
||||
event = 'VeryLazy',
|
||||
---@type Flash.Config
|
||||
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',
|
||||
},
|
||||
{
|
||||
'<m-s>',
|
||||
mode = { 'c' },
|
||||
function() require('flash').toggle() end,
|
||||
desc = 'Toggle Flash Search',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
return {
|
||||
-- fzf <3 vim
|
||||
-- https://github.com/junegunn/fzf.vim
|
||||
'junegunn/fzf.vim',
|
||||
dependencies = {
|
||||
{ 'junegunn/fzf', run = ':call fzf#install()' },
|
||||
},
|
||||
keys = {
|
||||
-- Stolen from https://github.com/erikw/dotfiles/blob/d68d6274d67ac47afa20b9a0b9f3b0fa54bcdaf3/.config/nvim/lua/plugins.lua
|
||||
-- Search for files in given path.
|
||||
{ '<Leader><space>', ':FZF<space>', desc = 'FZF: search for files in given path.' },
|
||||
-- Sublime-like shortcut 'go to file' ctrl+p.
|
||||
{ '<C-p>', ':Files<CR>', desc = 'FZF: search for files starting at current directory.' },
|
||||
{ '<Leader>zc', ':Commands<CR>', desc = 'FZF: search commands.' },
|
||||
{ '<Leader>zt', ':Tags<CR>', desc = 'FZF: search in tags file' },
|
||||
{ '<Leader>zb', ':Buffers<CR>', desc = 'FZF: search open buffers.' },
|
||||
-- Ref: https://medium.com/@paulodiovani/vim-buffers-windows-and-tabs-an-overview-8e2a57c57afa
|
||||
{ '<Leader>zt', ':Windows<CR>', desc = 'FZF: search open tabs.' },
|
||||
{ '<Leader>zh', ':History<CR>', desc = 'FZF: search history of opened files' },
|
||||
{ '<Leader>zm', ':Maps<CR>', desc = 'FZF: search mappings.' },
|
||||
{ '<Leader>zg', ':Rg<CR>', desc = 'FZF: search with rg (aka live grep).' },
|
||||
},
|
||||
config = function()
|
||||
-- To ignore a certain path in a git project from both RG and FD used by FZF,
|
||||
-- the eaiest way is to create ignore files and exclude the in local git clone.
|
||||
-- Ref: https://stackoverflow.com/a/1753078/265508
|
||||
-- $ cd git_proj/
|
||||
-- $ echo "path/to/exclude" > .rgignore
|
||||
-- $ echo "path/to/exclude" > .fdignore
|
||||
-- $ printf ".rgignore\n.fdignore" >> .git/info/exclude
|
||||
end,
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
return {
|
||||
-- Git integration for buffers
|
||||
-- https://github.com/lewis6991/gitsigns.nvim
|
||||
{
|
||||
'lewis6991/gitsigns.nvim',
|
||||
config = function()
|
||||
require('gitsigns').setup {
|
||||
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,
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
return {
|
||||
-- A small Neovim plugin for previewing definitions using floating windows.
|
||||
-- https://github.com/rmagatti/goto-preview
|
||||
'rmagatti/goto-preview',
|
||||
dependencies = {
|
||||
{ 'nvim-telescope/telescope.nvim' },
|
||||
},
|
||||
keys = {
|
||||
{ 'n', 'gpd', '<cmd>lua require("goto-preview").goto_preview_definition()<CR>' },
|
||||
{ 'n', 'gpi', '<cmd>lua require("goto-preview").goto_preview_implementation()<CR>' },
|
||||
{ 'n', 'gP', '<cmd>lua require("goto-preview").close_all_windows()<CR>' },
|
||||
},
|
||||
config = function()
|
||||
require('goto-preview').setup {
|
||||
width = 120, -- Width of the floating window
|
||||
height = 15, -- Height of the floating window
|
||||
border = { '↖', '─', '┐', '│', '┘', '─', '└', '│' }, -- Border characters of the floating window
|
||||
default_mappings = true,
|
||||
debug = false, -- Print debug information
|
||||
opacity = nil, -- 0-100 opacity level of the floating window where 100 is fully transparent.
|
||||
resizing_mappings = false, -- Binds arrow keys to resizing the floating window.
|
||||
post_open_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook.
|
||||
references = { -- Configure the telescope UI for slowing the references cycling window.
|
||||
telescope = require('telescope.themes').get_dropdown {
|
||||
hide_preview = false,
|
||||
},
|
||||
},
|
||||
-- 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
|
||||
bufhidden = 'wipe', -- the bufhidden option to set on the floating window. See :h bufhidden
|
||||
stack_floating_preview_windows = true, -- Whether to nest floating windows
|
||||
preview_window_title = { enable = true, position = 'left' },
|
||||
}
|
||||
end,
|
||||
}
|
||||
@@ -1,103 +0,0 @@
|
||||
return {
|
||||
-- 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 {}
|
||||
|
||||
vim.keymap.set('n', '<leader>ht', function()
|
||||
harpoon.ui:toggle_quick_menu(harpoon:list())
|
||||
end)
|
||||
|
||||
-- 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>xa', function()
|
||||
toggle_telescope(harpoon:list())
|
||||
end, { desc = 'Open harpoon window' })
|
||||
end,
|
||||
keys = {
|
||||
{
|
||||
'<leader>xa',
|
||||
function()
|
||||
require('harpoon'):list():add()
|
||||
end,
|
||||
desc = 'harpoon file',
|
||||
},
|
||||
{
|
||||
'<leader>xN',
|
||||
function()
|
||||
require('harpoon'):list():prev()
|
||||
end,
|
||||
desc = 'harpoon to previous file',
|
||||
},
|
||||
{
|
||||
'<leader>xn',
|
||||
function()
|
||||
require('harpoon'):list():next()
|
||||
end,
|
||||
desc = 'harpoon to next file',
|
||||
},
|
||||
{
|
||||
'<leader>1',
|
||||
function()
|
||||
require('harpoon'):list():select(1)
|
||||
end,
|
||||
desc = 'harpoon to file 1',
|
||||
},
|
||||
{
|
||||
'<leader>2',
|
||||
function()
|
||||
require('harpoon'):list():select(2)
|
||||
end,
|
||||
desc = 'harpoon to file 2',
|
||||
},
|
||||
{
|
||||
'<leader>3',
|
||||
function()
|
||||
require('harpoon'):list():select(3)
|
||||
end,
|
||||
desc = 'harpoon to file 3',
|
||||
},
|
||||
{
|
||||
'<leader>4',
|
||||
function()
|
||||
require('harpoon'):list():select(4)
|
||||
end,
|
||||
desc = 'harpoon to file 4',
|
||||
},
|
||||
{
|
||||
'<leader>5',
|
||||
function()
|
||||
require('harpoon'):list():select(5)
|
||||
end,
|
||||
desc = 'harpoon to file 5',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
return {
|
||||
-- vscode-like pictograms for neovim lsp completion items
|
||||
-- https://github.com/onsails/lspkind-nvim
|
||||
{ 'onsails/lspkind.nvim' },
|
||||
|
||||
-- Rethinking Vim as a tool for writing
|
||||
-- https://github.com/preservim/vim-pencil
|
||||
{ 'preservim/vim-pencil' },
|
||||
|
||||
-- obsession.vim: continuously updated session files
|
||||
-- https://github.com/tpope/vim-obsession
|
||||
{ 'tpope/vim-obsession' },
|
||||
|
||||
-- surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease
|
||||
-- https://github.com/tpope/vim-surround
|
||||
{ 'tpope/vim-surround' },
|
||||
|
||||
-- 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',
|
||||
config = function()
|
||||
require('todo-comments').setup {}
|
||||
end,
|
||||
},
|
||||
|
||||
-- LSP Configuration & Plugins
|
||||
-- Meta type definitions for the Lua platform Luvit.
|
||||
-- https://github.com/Bilal2453/luvit-meta
|
||||
{ 'Bilal2453/luvit-meta', lazy = true },
|
||||
|
||||
-- Indent guides for Neovim
|
||||
-- https://github.com/lukas-reineke/indent-blankline.nvim
|
||||
{
|
||||
'lukas-reineke/indent-blankline.nvim',
|
||||
main = 'ibl',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Commenting
|
||||
-- https://github.com/numToStr/Comment.nvim
|
||||
{
|
||||
'numToStr/Comment.nvim', -- "gc" to comment visual regions/lines
|
||||
event = { 'BufRead', 'BufNewFile' },
|
||||
config = function()
|
||||
require('Comment').setup()
|
||||
end,
|
||||
},
|
||||
|
||||
-- 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 },
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
return {
|
||||
|
||||
{ -- Linting
|
||||
'mfussenegger/nvim-lint',
|
||||
event = { 'BufReadPre', 'BufNewFile' },
|
||||
config = function()
|
||||
local lint = require 'lint'
|
||||
lint.linters_by_ft = {
|
||||
markdown = { 'markdownlint' },
|
||||
}
|
||||
|
||||
-- To allow other plugins to add linters to require('lint').linters_by_ft,
|
||||
-- instead set linters_by_ft like this:
|
||||
-- lint.linters_by_ft = lint.linters_by_ft or {}
|
||||
-- lint.linters_by_ft['markdown'] = { 'markdownlint' }
|
||||
--
|
||||
-- However, note that this will enable a set of default linters,
|
||||
-- which will cause errors unless these tools are available:
|
||||
-- {
|
||||
-- clojure = { "clj-kondo" },
|
||||
-- dockerfile = { "hadolint" },
|
||||
-- inko = { "inko" },
|
||||
-- janet = { "janet" },
|
||||
-- json = { "jsonlint" },
|
||||
-- markdown = { "vale" },
|
||||
-- rst = { "vale" },
|
||||
-- ruby = { "ruby" },
|
||||
-- terraform = { "tflint" },
|
||||
-- text = { "vale" }
|
||||
-- }
|
||||
--
|
||||
-- You can disable the default linters by setting their filetypes to nil:
|
||||
-- lint.linters_by_ft['clojure'] = nil
|
||||
-- lint.linters_by_ft['dockerfile'] = nil
|
||||
-- lint.linters_by_ft['inko'] = nil
|
||||
-- lint.linters_by_ft['janet'] = nil
|
||||
-- lint.linters_by_ft['json'] = nil
|
||||
-- lint.linters_by_ft['markdown'] = nil
|
||||
-- lint.linters_by_ft['rst'] = nil
|
||||
-- lint.linters_by_ft['ruby'] = nil
|
||||
-- lint.linters_by_ft['terraform'] = nil
|
||||
-- lint.linters_by_ft['text'] = nil
|
||||
|
||||
-- Create autocommand which carries out the actual linting
|
||||
-- on the specified events.
|
||||
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
|
||||
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
|
||||
group = lint_augroup,
|
||||
callback = function()
|
||||
lint.try_lint()
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,262 +1,340 @@
|
||||
-- Quickstart configs for Nvim LSP
|
||||
-- https://github.com/neovim/nvim-lspconfig
|
||||
return {
|
||||
-- Neovim plugin to manage global and project-local settings
|
||||
-- Should be included before LSP Config
|
||||
-- https://github.com/folke/neoconf.nvim
|
||||
{
|
||||
'folke/neoconf.nvim',
|
||||
keys = {
|
||||
{ '<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' },
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ LSP Setup and configuration │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- LSP Servers are installed and configured by lsp-setup.nvim
|
||||
-- Mason formatters Conform uses to format files
|
||||
-- These are automatically configured by zapling/mason-conform.nvim
|
||||
|
||||
local lsp_servers = {
|
||||
bashls = {},
|
||||
-- csharp_ls = {},
|
||||
diagnosticls = {},
|
||||
gopls = {
|
||||
settings = {
|
||||
gopls = {
|
||||
hints = {
|
||||
rangeVariableTypes = true,
|
||||
parameterNames = true,
|
||||
constantValues = true,
|
||||
assignVariableTypes = true,
|
||||
compositeLiteralFields = true,
|
||||
compositeLiteralTypes = true,
|
||||
functionTypeParameters = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
require('neoconf').setup()
|
||||
end,
|
||||
},
|
||||
|
||||
{
|
||||
'neovim/nvim-lspconfig',
|
||||
dependencies = {
|
||||
-- Automatically install LSPs to stdpath for neovim
|
||||
'williamboman/mason.nvim',
|
||||
'williamboman/mason-lspconfig.nvim',
|
||||
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||
-- Useful status updates for LSP
|
||||
{
|
||||
'j-hui/fidget.nvim',
|
||||
opts = {
|
||||
notification = {
|
||||
window = {
|
||||
winblend = 50,
|
||||
align = 'top',
|
||||
},
|
||||
html = {},
|
||||
intelephense = {},
|
||||
jsonls = {},
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
completion = {
|
||||
callSnippet = 'Replace',
|
||||
},
|
||||
diagnostics = {
|
||||
globals = {
|
||||
'vim',
|
||||
-- busted
|
||||
'describe',
|
||||
'it',
|
||||
'before_each',
|
||||
'after_each',
|
||||
'assert',
|
||||
},
|
||||
disable = {
|
||||
-- Ignore lua_ls noisy `missing-fields` warnings
|
||||
'missing-fields',
|
||||
},
|
||||
},
|
||||
hint = {
|
||||
enable = false,
|
||||
arrayIndex = 'Auto',
|
||||
await = true,
|
||||
paramName = 'All',
|
||||
paramType = true,
|
||||
semicolon = 'SameLine',
|
||||
setType = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
tailwindcss = {},
|
||||
ts_ls = {
|
||||
settings = {
|
||||
typescript = {
|
||||
inlayHints = {
|
||||
includeInlayParameterNameHints = 'all',
|
||||
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
|
||||
includeInlayFunctionParameterTypeHints = true,
|
||||
includeInlayVariableTypeHints = true,
|
||||
includeInlayVariableTypeHintsWhenTypeMatchesName = false,
|
||||
includeInlayPropertyDeclarationTypeHints = true,
|
||||
includeInlayFunctionLikeReturnTypeHints = true,
|
||||
includeInlayEnumMemberValueHints = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
vimls = {},
|
||||
volar = {
|
||||
settings = {
|
||||
typescript = {
|
||||
inlayHints = {
|
||||
enumMemberValues = {
|
||||
enabled = true,
|
||||
},
|
||||
functionLikeReturnTypes = {
|
||||
enabled = true,
|
||||
},
|
||||
propertyDeclarationTypes = {
|
||||
enabled = true,
|
||||
},
|
||||
parameterTypes = {
|
||||
enabled = true,
|
||||
suppressWhenArgumentMatchesName = true,
|
||||
},
|
||||
variableTypes = {
|
||||
enabled = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
'b0o/schemastore.nvim',
|
||||
{
|
||||
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
|
||||
-- used for completion, annotations and signatures of Neovim apis
|
||||
'folke/lazydev.nvim',
|
||||
dependencies = {
|
||||
-- `wezterm-types` provides types for the Wezterm terminal
|
||||
{
|
||||
'justinsgithub/wezterm-types',
|
||||
as = 'wezterm',
|
||||
},
|
||||
},
|
||||
ft = 'lua',
|
||||
opts = {
|
||||
library = {
|
||||
-- Load luvit types when the `vim.uv` word is found
|
||||
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
|
||||
-- Load wezterm types when the `wezterm` word is found
|
||||
{ path = 'wezterm-types', mods = { 'wezterm' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
'folke/neoconf.nvim',
|
||||
},
|
||||
keys = {
|
||||
{ '<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' },
|
||||
{ 'dn', '<cmd>lua vim.diagnostic.goto_next()<CR>', desc = 'Diagnostic: Goto Next' },
|
||||
{ 'dp', '<cmd>lua vim.diagnostic.goto_prev()<CR>', desc = 'Diagnostic: Goto Prev' },
|
||||
{ '<leader>cr', '<cmd>lua vim.lsp.buf.rename()<CR>', desc = 'LSP: Rename' },
|
||||
{ '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', desc = 'LSP: Code Action' },
|
||||
{ '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' },
|
||||
{ 'gI', '<cmd>lua vim.lsp.buf.implementation()<CR>', desc = 'LSP: Goto Implementation' },
|
||||
{ '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', desc = 'LSP: Type Definition' },
|
||||
{ '<leader>ds', '<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>', desc = 'LSP: Document Symbols' },
|
||||
{ '<leader>ws', '<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>', desc = 'LSP: Workspace Symbols' },
|
||||
{ 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', desc = 'LSP: Hover Documentation' },
|
||||
{ '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', desc = 'LSP: Signature Documentation' },
|
||||
{ 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', desc = 'LSP: Goto Declaration' },
|
||||
{ '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', desc = 'LSP: Workspace Add Folder' },
|
||||
{ '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', desc = 'LSP: Workspace Remove Folder' },
|
||||
{ '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', desc = 'LSP: Workspace List Folders' },
|
||||
},
|
||||
config = function()
|
||||
-- LSP settings.
|
||||
-- This function gets run when an LSP connects to a particular buffer.
|
||||
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()
|
||||
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
|
||||
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
|
||||
local servers = {
|
||||
-- :help lspconfig-all for all pre-configured LSPs
|
||||
ast_grep = {},
|
||||
|
||||
actionlint = {}, -- GitHub Actions
|
||||
ansiblels = {}, -- Ansible
|
||||
bashls = {}, -- Bash
|
||||
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 = {
|
||||
completion = {
|
||||
callSnippet = 'Replace',
|
||||
},
|
||||
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
|
||||
diagnostics = { disable = { 'missing-fields' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
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(),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local ensure_installed = vim.tbl_keys(servers or {})
|
||||
vim.list_extend(ensure_installed, {
|
||||
'actionlint',
|
||||
'ansible-language-server',
|
||||
'ansible-lint',
|
||||
'bash-language-server',
|
||||
'blade-formatter',
|
||||
'commitlint',
|
||||
'diagnostic-languageserver',
|
||||
'docker-compose-language-service',
|
||||
'dockerfile-language-server',
|
||||
'editorconfig-checker',
|
||||
'fixjson',
|
||||
'flake8',
|
||||
'html-lsp',
|
||||
'jq',
|
||||
'jsonlint',
|
||||
'luacheck',
|
||||
'php-cs-fixer',
|
||||
'phpcs',
|
||||
'phpmd',
|
||||
'semgrep',
|
||||
'shellcheck',
|
||||
'shfmt',
|
||||
'stylelint',
|
||||
'stylua',
|
||||
'yamllint',
|
||||
})
|
||||
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)
|
||||
|
||||
for _, lsp in ipairs(servers) do
|
||||
require('lspconfig')[lsp].setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end
|
||||
|
||||
-- Turn on lsp status information
|
||||
require('fidget').setup()
|
||||
|
||||
-- Example custom configuration for lua
|
||||
--
|
||||
-- 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')
|
||||
|
||||
require('lspconfig').lua_ls.setup {
|
||||
on_attach = on_attach,
|
||||
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' },
|
||||
},
|
||||
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 },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd('FileType', {
|
||||
pattern = 'sh',
|
||||
callback = function()
|
||||
vim.lsp.start {
|
||||
name = 'bash-language-server',
|
||||
cmd = { 'bash-language-server', 'start' },
|
||||
}
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
return {
|
||||
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
|
||||
-- used for completion, annotations and signatures of Neovim apis
|
||||
-- https://github.com/folke/lazydev.nvim
|
||||
{
|
||||
'folke/lazydev.nvim',
|
||||
ft = 'lua',
|
||||
opts = {
|
||||
library = {
|
||||
-- Load luvit types when the `vim.uv` word is found
|
||||
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Meta type definitions for the Lua platform Luvit.
|
||||
-- https://github.com/Bilal2453/luvit-meta
|
||||
{ 'Bilal2453/luvit-meta', lazy = true },
|
||||
|
||||
-- improve neovim lsp experience
|
||||
-- https://github.com/nvimdev/lspsaga.nvim
|
||||
-- https://nvimdev.github.io/lspsaga/
|
||||
{
|
||||
'nvimdev/lspsaga.nvim',
|
||||
event = 'LspAttach',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'nvim-tree/nvim-web-devicons',
|
||||
},
|
||||
opts = {
|
||||
code_action = {
|
||||
show_server_name = true,
|
||||
keys = {
|
||||
quit = { 'q', '<ESC>' },
|
||||
},
|
||||
},
|
||||
diagnostic = {
|
||||
keys = {
|
||||
quit = { 'q', '<ESC>' },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- A simple wrapper for nvim-lspconfig and mason-lspconfig
|
||||
-- to easily setup LSP servers.
|
||||
-- https://github.com/junnplus/lsp-setup.nvim
|
||||
{
|
||||
'junnplus/lsp-setup.nvim',
|
||||
dependencies = {
|
||||
-- Quickstart configs for Nvim LSP
|
||||
-- https://github.com/neovim/nvim-lspconfig
|
||||
{ 'neovim/nvim-lspconfig' },
|
||||
|
||||
-- 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',
|
||||
version = '*',
|
||||
cmd = 'Mason',
|
||||
run = ':MasonUpdate',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Extensible UI for Neovim notifications and LSP progress messages.
|
||||
-- https://github.com/j-hui/fidget.nvim
|
||||
{
|
||||
'j-hui/fidget.nvim',
|
||||
version = '*',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- 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' },
|
||||
|
||||
-- Install and upgrade third party tools automatically
|
||||
-- https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim
|
||||
{
|
||||
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||
version = '*',
|
||||
opts = {
|
||||
auto_install = true,
|
||||
auto_update = true,
|
||||
ensure_installed = {
|
||||
'actionlint',
|
||||
'editorconfig-checker',
|
||||
'goimports',
|
||||
'gotests',
|
||||
'phpcbf',
|
||||
'pint',
|
||||
'prettierd',
|
||||
'shellcheck',
|
||||
'shfmt',
|
||||
'staticcheck',
|
||||
'stylua',
|
||||
'vint',
|
||||
'yamlfmt',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- JSON schemas for Neovim
|
||||
-- https://github.com/b0o/SchemaStore.nvim
|
||||
{ 'b0o/schemastore.nvim' },
|
||||
|
||||
-- Performant, batteries-included completion plugin for Neovim
|
||||
-- https://github.com/saghen/blink.cmp
|
||||
-- See lua/plugins/blink.lua for configs
|
||||
{ 'saghen/blink.cmp' },
|
||||
},
|
||||
opts = {
|
||||
default_mappings = false,
|
||||
mappings = {
|
||||
gd = 'lua require"telescope.builtin".lsp_definitions()',
|
||||
gi = 'lua require"telescope.builtin".lsp_implementations()',
|
||||
gr = 'lua require"telescope.builtin".lsp_references()',
|
||||
},
|
||||
inlay_hints = {
|
||||
enabled = true,
|
||||
},
|
||||
servers = lsp_servers,
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('lazydev').setup()
|
||||
require('lsp-setup').setup(opts)
|
||||
local lspconfig = require 'lspconfig'
|
||||
for server, config in pairs(opts.servers) do
|
||||
-- passing config.capabilities to blink.cmp merges with the capabilities in your
|
||||
-- `opts[server].capabilities, if you've defined it
|
||||
config.capabilities =
|
||||
require('blink.cmp').get_lsp_capabilities(config.capabilities)
|
||||
lspconfig[server].setup(config)
|
||||
end
|
||||
|
||||
lspconfig.lua_ls.on_init = function(client)
|
||||
if client.workspace_folders then
|
||||
local path = client.workspace_folders[1].name
|
||||
if
|
||||
vim.loop.fs_stat(path .. '/.luarc.json')
|
||||
or vim.loop.fs_stat(path .. '/.luarc.jsonc')
|
||||
then
|
||||
return
|
||||
end
|
||||
end
|
||||
client.config.settings.Lua =
|
||||
vim.tbl_deep_extend('force', client.config.settings.Lua, {
|
||||
runtime = {
|
||||
-- Tell the language server which version of Lua you're using
|
||||
-- (most likely LuaJIT in the case of Neovim)
|
||||
version = 'LuaJIT',
|
||||
},
|
||||
-- Make the server aware of Neovim runtime files
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
library = {
|
||||
vim.env.VIMRUNTIME,
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
lspconfig.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 },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- Lightweight yet powerful formatter plugin for Neovim
|
||||
-- https://github.com/stevearc/conform.nvim
|
||||
{
|
||||
'stevearc/conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
keys = {
|
||||
{
|
||||
'<leader>cf',
|
||||
function()
|
||||
require('conform').format { async = true, lsp_format = 'fallback' }
|
||||
end,
|
||||
mode = '',
|
||||
desc = 'Format buffer',
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
notify_on_error = false,
|
||||
---@type nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts
|
||||
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 }
|
||||
local lsp_format_opt
|
||||
if disable_filetypes[vim.bo[bufnr].filetype] then
|
||||
lsp_format_opt = 'never'
|
||||
else
|
||||
lsp_format_opt = 'fallback'
|
||||
end
|
||||
return {
|
||||
timeout_ms = 500,
|
||||
lsp_format = lsp_format_opt,
|
||||
}
|
||||
end,
|
||||
formatters_by_ft = {
|
||||
lua = { 'stylua' },
|
||||
sh = { 'shfmt' },
|
||||
bash = { 'shfmt' },
|
||||
-- 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 },
|
||||
},
|
||||
},
|
||||
},
|
||||
-- Automatically install formatters registered with conform.nvim via mason.nvim
|
||||
-- https://github.com/zapling/mason-conform.nvim
|
||||
{ 'zapling/mason-conform.nvim', opts = {} },
|
||||
}
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
-- Fancier statusline
|
||||
-- https://github.com/nvim-lualine/lualine.nvim
|
||||
return {
|
||||
'nvim-lualine/lualine.nvim',
|
||||
dependencies = {
|
||||
'kyazdani42/nvim-web-devicons',
|
||||
'folke/noice.nvim',
|
||||
},
|
||||
config = function()
|
||||
require('lualine').setup {
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
component_separators = '|',
|
||||
section_separators = '',
|
||||
},
|
||||
sections = {
|
||||
lualine_x = {
|
||||
{
|
||||
require('noice').api.statusline.mode.get,
|
||||
cond = require('noice').api.statusline.mode.has,
|
||||
-- color = { fg = '#ff9e64' },
|
||||
},
|
||||
{
|
||||
require('noice').api.status.command.get,
|
||||
cond = require('noice').api.status.command.has,
|
||||
-- color = { fg = '#ff9e64' },
|
||||
},
|
||||
},
|
||||
lualine_a = {
|
||||
{
|
||||
'buffers',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
||||
254
config/nvim/lua/plugins/mini.lua
Normal file
254
config/nvim/lua/plugins/mini.lua
Normal file
@@ -0,0 +1,254 @@
|
||||
return {
|
||||
-- Library of 40+ independent Lua modules improving overall Neovim
|
||||
-- (version 0.8 and higher) experience with minimal effort
|
||||
--
|
||||
-- https://github.com/echasnovski/mini.nvim
|
||||
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
|
||||
--
|
||||
-- YouTube: Text editing with 'mini.nvim' - Neovimconf 2024 - Evgeni Chasnovski
|
||||
-- https://www.youtube.com/watch?v=cNK5kYJ7mrs
|
||||
{
|
||||
'echasnovski/mini.nvim',
|
||||
version = '*',
|
||||
priority = 1001,
|
||||
config = function()
|
||||
-- Presets for common options and mappings
|
||||
-- h: MiniBasics.config
|
||||
require('mini.basics').setup {
|
||||
options = {
|
||||
basics = true,
|
||||
extra_ui = true,
|
||||
},
|
||||
mappings = {
|
||||
basic = true,
|
||||
option_toggle_prefix = [[<leader>tm]],
|
||||
},
|
||||
}
|
||||
|
||||
-- Animate common Neovim actions
|
||||
-- Replaced anuvyklack/windows.nvim
|
||||
require('mini.animate').setup()
|
||||
|
||||
-- Buffer removing (unshow, delete, wipeout), which saves window layout
|
||||
-- Replaced famiu/bufdelete.nvim
|
||||
require('mini.bufremove').setup()
|
||||
|
||||
-- Show next key clues
|
||||
-- Replaced folke/which-key.nvim
|
||||
local miniclue = require 'mini.clue'
|
||||
miniclue.setup {
|
||||
window = {
|
||||
config = {
|
||||
width = 'auto',
|
||||
},
|
||||
},
|
||||
triggers = {
|
||||
-- Leader triggers
|
||||
{ mode = 'n', keys = '<Leader>' },
|
||||
{ mode = 'x', keys = '<Leader>' },
|
||||
|
||||
-- Built-in completion
|
||||
{ mode = 'i', keys = '<C-x>' },
|
||||
|
||||
-- `g` key
|
||||
{ mode = 'n', keys = 'g' },
|
||||
{ mode = 'x', keys = 'g' },
|
||||
|
||||
-- Marks
|
||||
{ mode = 'n', keys = "'" },
|
||||
{ mode = 'n', keys = '`' },
|
||||
{ mode = 'x', keys = "'" },
|
||||
{ mode = 'x', keys = '`' },
|
||||
|
||||
-- Registers
|
||||
{ mode = 'n', keys = '"' },
|
||||
{ mode = 'x', keys = '"' },
|
||||
{ mode = 'i', keys = '<C-r>' },
|
||||
{ mode = 'c', keys = '<C-r>' },
|
||||
|
||||
-- Window commands
|
||||
{ mode = 'n', keys = '<C-w>' },
|
||||
|
||||
-- `z` key
|
||||
{ mode = 'n', keys = 'z' },
|
||||
{ mode = 'x', keys = 'z' },
|
||||
},
|
||||
|
||||
-- These mark the sections in the popup
|
||||
clues = {
|
||||
miniclue.gen_clues.builtin_completion(),
|
||||
miniclue.gen_clues.g(),
|
||||
miniclue.gen_clues.marks(),
|
||||
miniclue.gen_clues.registers(),
|
||||
miniclue.gen_clues.windows(),
|
||||
miniclue.gen_clues.z(),
|
||||
{ mode = 'n', keys = '<Leader>b', desc = '+Buffers' },
|
||||
{ mode = 'n', keys = '<Leader>c', desc = '+Code' },
|
||||
{ mode = 'n', keys = '<Leader>cb', desc = '+CommentBox' },
|
||||
{ mode = 'n', keys = '<Leader>cc', desc = '+Calls' },
|
||||
{ mode = 'n', keys = '<Leader>q', desc = '+Quit' },
|
||||
{ mode = 'n', keys = '<Leader>s', desc = '+Telescope' },
|
||||
{ mode = 'n', keys = '<Leader>t', desc = '+Toggle' },
|
||||
{ mode = 'n', keys = '<Leader>tm', desc = '+Mini' },
|
||||
{ mode = 'n', keys = '<Leader>x', desc = '+Trouble' },
|
||||
{ mode = 'n', keys = '<leader>z', desc = '+TreeSitter' },
|
||||
{ mode = 'n', keys = '<leader>zg', desc = '+Goto' },
|
||||
{ mode = 'n', keys = '<Leader>?', desc = '+Help' },
|
||||
{ mode = 'n', keys = 'd', desc = '+Diagnostics' },
|
||||
{ mode = 'n', keys = 'y', desc = '+Yank' },
|
||||
},
|
||||
}
|
||||
|
||||
-- Comment lines
|
||||
-- Replaced numToStr/Comment.nvim
|
||||
require('mini.comment').setup()
|
||||
|
||||
-- Highlight cursor word and its matches
|
||||
require('mini.cursorword').setup()
|
||||
|
||||
-- Work with diff hunks
|
||||
-- Replaced lewis6991/gitsigns.nvim
|
||||
require('mini.diff').setup()
|
||||
|
||||
-- Git integration
|
||||
require('mini.git').setup()
|
||||
|
||||
-- Highlight patterns in text
|
||||
-- Replaced folke/todo-comments.nvim
|
||||
local hp = require 'mini.hipatterns'
|
||||
hp.setup {
|
||||
highlighters = {
|
||||
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE', 'BUG', 'PERF' words
|
||||
fixme = {
|
||||
pattern = '%f[%w]()FIXME:?%s*()%f[%W]',
|
||||
group = 'MiniHipatternsFixme',
|
||||
},
|
||||
hack = {
|
||||
pattern = '%f[%w]()HACK:?%s*()%f[%W]',
|
||||
group = 'MiniHipatternsHack',
|
||||
},
|
||||
todo = {
|
||||
pattern = '%f[%w]()TODO:?%s*()%f[%W]',
|
||||
group = 'MiniHipatternsNote',
|
||||
},
|
||||
note = {
|
||||
pattern = '%f[%w]()NOTE()%f[%W]',
|
||||
group = 'MiniHipatternsNote',
|
||||
},
|
||||
bug = {
|
||||
pattern = '%f[%w]()BUG:?%s*()%f[%W]',
|
||||
group = 'MiniHipatternsHack',
|
||||
},
|
||||
perf = {
|
||||
pattern = '%f[%w]()PERF:?%s*()%f[%W]',
|
||||
group = 'MiniHipatternsNote',
|
||||
},
|
||||
},
|
||||
|
||||
-- Highlight hex color strings (`#rrggbb`) using that color
|
||||
hex_color = hp.gen_highlighter.hex_color(),
|
||||
}
|
||||
|
||||
-- Icons
|
||||
require('mini.icons').setup {
|
||||
file = {
|
||||
['.keep'] = { glyph = '', hl = 'MiniIconsGrey' },
|
||||
['devcontainer.json'] = { glyph = '', hl = 'MiniIconsAzure' },
|
||||
},
|
||||
filetype = {
|
||||
dotenv = { glyph = '', hl = 'MiniIconsYellow' },
|
||||
},
|
||||
}
|
||||
|
||||
-- Visualize and work with indent scope
|
||||
-- Replaced lukas-reineke/indent-blankline.nvim
|
||||
require('mini.indentscope').setup()
|
||||
|
||||
-- Jump to next/previous single character
|
||||
require('mini.jump').setup {
|
||||
mappings = {
|
||||
forward = 'f',
|
||||
backward = 'F',
|
||||
forward_till = 't',
|
||||
backward_till = 'T',
|
||||
repeat_jump = ';',
|
||||
},
|
||||
}
|
||||
|
||||
-- Move lines and blocks of text
|
||||
require('mini.move').setup()
|
||||
|
||||
-- Text edit operators
|
||||
-- g= - Evaluate text and replace with output
|
||||
-- gx - Exchange text regions
|
||||
-- gm - Multiply (duplicate) text
|
||||
-- gr - Replace text with register
|
||||
-- gs - Sort text
|
||||
require('mini.operators').setup()
|
||||
|
||||
-- Session management (read, write, delete)
|
||||
require('mini.sessions').setup {
|
||||
autowrite = true,
|
||||
directory = vim.g.sessions_dir or vim.fn.stdpath 'data' .. '/sessions',
|
||||
file = '',
|
||||
}
|
||||
|
||||
-- Split and join arguments, lists, and other sequences
|
||||
-- Replaced Wansmer/treesj
|
||||
require('mini.splitjoin').setup()
|
||||
|
||||
-- Fast and flexible start screen
|
||||
-- Replaced glepnir/dashboard-nvim
|
||||
local starter = require 'mini.starter'
|
||||
starter.setup {
|
||||
items = {
|
||||
starter.sections.telescope(),
|
||||
starter.sections.builtin_actions(),
|
||||
starter.sections.sessions(5, true),
|
||||
},
|
||||
content_hooks = {
|
||||
starter.gen_hook.adding_bullet(),
|
||||
starter.gen_hook.indexing('all', { 'Builtin actions' }),
|
||||
starter.gen_hook.aligning('center', 'center'),
|
||||
},
|
||||
}
|
||||
|
||||
-- Minimal and fast statusline module with opinionated default look
|
||||
-- Replaced nvim-lualine/lualine.nvim
|
||||
local sl = require 'mini.statusline'
|
||||
sl.setup {
|
||||
use_icons = true,
|
||||
set_vim_settings = true,
|
||||
content = {
|
||||
active = function()
|
||||
local mode, mode_hl = sl.section_mode { trunc_width = 120 }
|
||||
local git = sl.section_git { trunc_width = 75 }
|
||||
local diagnostics = sl.section_diagnostics { trunc_width = 75 }
|
||||
local filename = sl.section_filename { trunc_width = 9999 }
|
||||
local fileinfo = sl.section_fileinfo { trunc_width = 120 }
|
||||
local location = sl.section_location { trunc_width = 75 }
|
||||
return sl.combine_groups {
|
||||
{ hl = mode_hl, strings = { mode } },
|
||||
{ hl = 'statuslineDevinfo', strings = { git, diagnostics } },
|
||||
'%<', -- Mark general truncate point
|
||||
{ hl = 'statuslineFilename', strings = { filename } },
|
||||
'%=', -- End left alignment
|
||||
{ hl = 'statuslineFileinfo', strings = { fileinfo } },
|
||||
{ hl = mode_hl, strings = { location } },
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
-- Fast and feature-rich surround actions
|
||||
-- Replaced kylechui/nvim-surround
|
||||
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
|
||||
-- - sd' - [S]urround [D]elete [']quotes
|
||||
-- - sr)' - [S]urround [R]eplace [)] [']
|
||||
require('mini.surround').setup()
|
||||
|
||||
-- Work with trailing whitespace
|
||||
require('mini.trailspace').setup()
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
-- Neo-tree is a Neovim plugin to browse the file system
|
||||
-- https://github.com/nvim-neo-tree/neo-tree.nvim
|
||||
|
||||
return {
|
||||
'nvim-neo-tree/neo-tree.nvim',
|
||||
version = '*',
|
||||
@@ -9,43 +8,62 @@ return {
|
||||
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
|
||||
'MunifTanjim/nui.nvim',
|
||||
{
|
||||
-- This plugins prompts the user to pick a window and returns
|
||||
-- the window id of the picked window
|
||||
-- https://github.com/s1n7ax/nvim-window-picker
|
||||
's1n7ax/nvim-window-picker',
|
||||
version = '2.*',
|
||||
config = function()
|
||||
require('window-picker').setup {
|
||||
filter_rules = {
|
||||
include_current_win = false,
|
||||
autoselect_one = true,
|
||||
-- filter using buffer options
|
||||
bo = {
|
||||
-- if the file type is one of following, the window will be ignored
|
||||
filetype = { 'neo-tree', 'neo-tree-popup', 'notify' },
|
||||
-- if the buffer type is one of following, the window will be ignored
|
||||
buftype = { 'terminal', 'quickfix' },
|
||||
},
|
||||
opts = {
|
||||
filter_rules = {
|
||||
include_current_win = false,
|
||||
autoselect_one = true,
|
||||
-- filter using buffer options
|
||||
bo = {
|
||||
-- if the file type is one of following, the window will be ignored
|
||||
filetype = { 'neo-tree', 'neo-tree-popup', 'notify' },
|
||||
-- if the buffer type is one of following, the window will be ignored
|
||||
buftype = { 'terminal', 'quickfix' },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
cmd = 'Neotree',
|
||||
keys = {
|
||||
{ '<leader>e', ':Neotree reveal<CR>', desc = 'NeoTree reveal' },
|
||||
},
|
||||
opts = {
|
||||
close_if_last_window = true,
|
||||
popup_border_style = 'rounded',
|
||||
enable_git_status = true,
|
||||
enable_diagnostics = true,
|
||||
git_status = {
|
||||
symbols = {
|
||||
-- Change type
|
||||
added = '',
|
||||
modified = '',
|
||||
deleted = '✖',
|
||||
renamed = '',
|
||||
-- Status type
|
||||
untracked = '',
|
||||
ignored = '',
|
||||
unstaged = '',
|
||||
staged = '',
|
||||
conflict = '',
|
||||
},
|
||||
},
|
||||
filesystem = {
|
||||
window = {
|
||||
mappings = {
|
||||
['<Esc>'] = 'close_window',
|
||||
['q'] = 'close_window',
|
||||
},
|
||||
},
|
||||
filtered_items = {
|
||||
hide_dotfiles = true,
|
||||
hide_gitignored = true,
|
||||
hide_hidden = true, -- only works on Windows for hidden files/directories
|
||||
hide_by_name = {
|
||||
never_show = {
|
||||
'.DS_Store',
|
||||
},
|
||||
hide_by_name = {
|
||||
'node_modules',
|
||||
},
|
||||
always_show = {
|
||||
@@ -87,6 +105,7 @@ return {
|
||||
'.*rc.*',
|
||||
'.env*',
|
||||
'.prettierrc*',
|
||||
'.markdownlint*',
|
||||
'.stylua.*',
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
return {
|
||||
-- Highly experimental plugin that completely replaces the UI
|
||||
-- for messages, cmdline and the popupmenu.
|
||||
-- https://github.com/folke/noice.nvim
|
||||
'folke/noice.nvim',
|
||||
lazy = false,
|
||||
enabled = true,
|
||||
dependencies = {
|
||||
'MunifTanjim/nui.nvim',
|
||||
-- A fancy, configurable, notification manager for NeoVim
|
||||
-- https://github.com/rcarriga/nvim-notify
|
||||
'rcarriga/nvim-notify',
|
||||
'hrsh7th/nvim-cmp',
|
||||
},
|
||||
keys = {
|
||||
{ 'n', '<leader>tn', ':Noice dismiss<CR>', desc = 'Noice dismiss' },
|
||||
},
|
||||
config = function()
|
||||
vim.g.noice_ignored_filetypes = { 'fugitiveblame', 'fugitive', 'gitcommit', 'noice' }
|
||||
require('noice').setup {
|
||||
lsp = {
|
||||
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
|
||||
override = {
|
||||
['vim.lsp.util.convert_input_to_markdown_lines'] = true,
|
||||
['vim.lsp.util.stylize_markdown'] = true,
|
||||
['cmp.entry.get_documentation'] = true, -- requires hrsh7th/nvim-cmp
|
||||
},
|
||||
},
|
||||
-- you can enable a preset for easier configuration
|
||||
presets = {
|
||||
bottom_search = false, -- use a classic bottom cmdline for search
|
||||
command_palette = true, -- position the cmdline and popupmenu together
|
||||
long_message_to_split = true, -- long messages will be sent to a split
|
||||
inc_rename = false, -- enables an input dialog for inc-rename.nvim
|
||||
lsp_doc_border = false, -- add a border to hover docs and signature help
|
||||
},
|
||||
routes = {
|
||||
{
|
||||
filter = {
|
||||
event = 'msg_show',
|
||||
any = {
|
||||
{ find = '%d+L, %d+B' },
|
||||
{ find = '; after #%d+' },
|
||||
{ find = '; before #%d+' },
|
||||
{ find = '%d fewer lines' },
|
||||
{ find = '%d more lines' },
|
||||
},
|
||||
},
|
||||
opts = { skip = true },
|
||||
},
|
||||
},
|
||||
views = {
|
||||
cmdline_popup = {
|
||||
position = {
|
||||
row = 5,
|
||||
col = '50%',
|
||||
},
|
||||
size = {
|
||||
width = 60,
|
||||
height = 'auto',
|
||||
},
|
||||
},
|
||||
popupmenu = {
|
||||
relative = 'editor',
|
||||
position = {
|
||||
row = 8,
|
||||
col = '50%',
|
||||
},
|
||||
size = {
|
||||
width = 60,
|
||||
height = 10,
|
||||
},
|
||||
border = {
|
||||
style = 'rounded',
|
||||
padding = { 0, 1 },
|
||||
},
|
||||
win_options = {
|
||||
winhighlight = { Normal = 'Normal', FloatBorder = 'DiagnosticInfo' },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
||||
24
config/nvim/lua/plugins/other.lua
Normal file
24
config/nvim/lua/plugins/other.lua
Normal file
@@ -0,0 +1,24 @@
|
||||
return {
|
||||
{
|
||||
'rmagatti/auto-session',
|
||||
lazy = false,
|
||||
version = '*',
|
||||
---@module "auto-session"
|
||||
---@type AutoSession.Config
|
||||
opts = {
|
||||
suppressed_dirs = {
|
||||
'/',
|
||||
'~/',
|
||||
'~/Downloads',
|
||||
'~/Library',
|
||||
},
|
||||
-- log_level = 'debug',
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
'nvim-lua/plenary.nvim',
|
||||
version = '*',
|
||||
lazy = false,
|
||||
},
|
||||
}
|
||||
@@ -7,8 +7,18 @@ return {
|
||||
dependencies = {
|
||||
{ 'nvim-lua/plenary.nvim' },
|
||||
{ 'nvim-telescope/telescope-symbols.nvim' },
|
||||
{ 'folke/which-key.nvim' },
|
||||
{ 'ThePrimeagen/harpoon' },
|
||||
|
||||
-- Telescope plugin for file browsing
|
||||
{ 'nvim-telescope/telescope-file-browser.nvim' },
|
||||
|
||||
-- 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
|
||||
@@ -17,26 +27,20 @@ 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'
|
||||
local a = require 'telescope.actions'
|
||||
local themes = require 'telescope.themes'
|
||||
|
||||
-- [[ Configure Telescope ]]
|
||||
-- See `:help telescope` and `:help telescope.setup()`
|
||||
t.setup {
|
||||
defaults = {
|
||||
layout_strategy = 'horizontal',
|
||||
layout_config = {
|
||||
preview_width = 0.65,
|
||||
horizontal = {
|
||||
size = {
|
||||
width = '95%',
|
||||
height = '95%',
|
||||
},
|
||||
},
|
||||
},
|
||||
pickers = {
|
||||
find_files = {
|
||||
theme = 'dropdown',
|
||||
@@ -51,42 +55,42 @@ 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')
|
||||
|
||||
-- [[ Telescope Keymaps ]]
|
||||
-- See `:help telescope.builtin`
|
||||
-- See `:help telescope.keymap`
|
||||
local b = require 'telescope.builtin'
|
||||
|
||||
local wk = require 'which-key'
|
||||
wk.add {
|
||||
-- { '<leader><space>', b.buffers, desc = '[ ] Find existing buffers' },
|
||||
{ '<leader>gR', "<cmd>lua require('telescope').extensions.git_worktree.create_git_worktree()<CR>", desc = 'Create Git worktree' },
|
||||
{ '<leader>gr', "<cmd>lua require('telescope').extensions.git_worktree.git_worktrees()<CR>", desc = 'Git worktrees' },
|
||||
{ '<leader>sS', b.git_status, desc = '' },
|
||||
{ '<leader>sd', b.diagnostics, desc = '[S]earch [D]iagnostics' },
|
||||
{ '<leader>sf', b.find_files, desc = '[S]earch [F]iles' },
|
||||
{ '<leader>sg', b.live_grep, desc = '[S]earch by [G]rep' },
|
||||
{ '<leader>sm', ':Telescope harpoon marks<CR>', desc = 'Harpoon Marks' },
|
||||
{ '<leader>sn', "<cmd>lua require('telescope').extensions.notify.notify()<CR>", desc = 'Notify' },
|
||||
{ '<leader>so', b.oldfiles, desc = '[?] Find recently opened files' },
|
||||
{ '<leader>sw', b.grep_string, desc = '[S]earch current [W]ord' },
|
||||
{ '<leader>st', ':TodoTelescope<CR>', desc = 'Telescope: Todo' },
|
||||
{ '<leader><tab>', "<Cmd>lua require('telescope.builtin').commands()<CR>", desc = 'Telescope: Commands' },
|
||||
}
|
||||
|
||||
vim.keymap.set('n', '<leader>/', function()
|
||||
-- You can pass additional configuration to telescope to change theme, layout, etc.
|
||||
b.current_buffer_fuzzy_find(themes.get_dropdown {
|
||||
winblend = 10,
|
||||
previewer = true,
|
||||
})
|
||||
end, { desc = '[/] Fuzzily search in current buffer]' })
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -1,107 +1,68 @@
|
||||
-- Highlight, edit, and navigate code
|
||||
-- https://github.com/nvim-treesitter/nvim-treesitter
|
||||
return {
|
||||
-- Highlight, edit, and navigate code
|
||||
-- https://github.com/nvim-treesitter/nvim-treesitter
|
||||
'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 {
|
||||
---@type TSConfig
|
||||
opts = {
|
||||
auto_install = true, -- Auto install the parser generators
|
||||
sync_install = false, -- Sync install the parser generators, install async
|
||||
|
||||
-- Add languages to be installed here that you want installed for treesitter
|
||||
ensure_installed = {
|
||||
'bash',
|
||||
'c',
|
||||
'css',
|
||||
'diff',
|
||||
'go',
|
||||
'html',
|
||||
'javascript',
|
||||
'jsdoc',
|
||||
'json',
|
||||
'jsonc',
|
||||
'lua',
|
||||
'luadoc',
|
||||
'markdown',
|
||||
'markdown_inline',
|
||||
'python',
|
||||
'query',
|
||||
'regex',
|
||||
'rust',
|
||||
'sql',
|
||||
'terraform',
|
||||
'toml',
|
||||
'tsx',
|
||||
'typescript',
|
||||
'vim',
|
||||
'vimdoc',
|
||||
'xml',
|
||||
'yaml',
|
||||
},
|
||||
-- Add languages to be installed here that you want installed for treesitter
|
||||
ensure_installed = {
|
||||
'bash',
|
||||
'json',
|
||||
'jsonc',
|
||||
'lua',
|
||||
'luadoc',
|
||||
'markdown',
|
||||
'markdown_inline',
|
||||
'query',
|
||||
'regex',
|
||||
'vim',
|
||||
'vimdoc',
|
||||
'yaml',
|
||||
},
|
||||
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true },
|
||||
incremental_selection = {
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true },
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = '<c-space>',
|
||||
node_incremental = '<c-space>',
|
||||
scope_incremental = '<c-s>',
|
||||
node_decremental = '<c-backspace>',
|
||||
},
|
||||
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
|
||||
keymaps = {
|
||||
-- You can use the capture groups defined in textobjects.scm
|
||||
['aa'] = '@parameter.outer',
|
||||
['ia'] = '@parameter.inner',
|
||||
['af'] = '@function.outer',
|
||||
['if'] = '@function.inner',
|
||||
['ac'] = '@class.outer',
|
||||
['ic'] = '@class.inner',
|
||||
['ii'] = '@conditional.inner',
|
||||
['ai'] = '@conditional.outer',
|
||||
['il'] = '@loop.inner',
|
||||
['al'] = '@loop.outer',
|
||||
['at'] = '@comment.outer',
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true, -- whether to set jumps in the jumplist
|
||||
goto_next_start = {
|
||||
[']f'] = '@function.outer',
|
||||
[']]'] = '@class.outer',
|
||||
},
|
||||
goto_next_end = {
|
||||
[']F'] = '@function.outer',
|
||||
[']['] = '@class.outer',
|
||||
},
|
||||
goto_previous_start = {
|
||||
['[f'] = '@function.outer',
|
||||
['[['] = '@class.outer',
|
||||
},
|
||||
goto_previous_end = {
|
||||
['[F'] = '@function.outer',
|
||||
['[]'] = '@class.outer',
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
['<leader>a'] = '@parameter.inner',
|
||||
},
|
||||
swap_previous = {
|
||||
['<leader>A'] = '@parameter.inner',
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true, -- whether to set jumps in the jumplist
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('nvim-treesitter.configs').setup(opts)
|
||||
|
||||
vim.api.nvim_create_autocmd({ 'FileType' }, {
|
||||
callback = function()
|
||||
-- Set foldmethod to treesitter if available
|
||||
if require('nvim-treesitter.parsers').has_parser() then
|
||||
vim.opt.foldmethod = 'expr'
|
||||
vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
|
||||
else
|
||||
-- Otherwise, set foldmethod to syntax
|
||||
vim.opt.foldmethod = 'syntax'
|
||||
end
|
||||
|
||||
vim.opt.foldlevel = 9 -- Open all folds by default
|
||||
vim.opt.foldnestmax = 99 -- Maximum fold nesting
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
return {
|
||||
'folke/trouble.nvim',
|
||||
lazy = false,
|
||||
dependencies = 'nvim-tree/nvim-web-devicons',
|
||||
keys = {
|
||||
{ '<leader>xx', '<cmd>TroubleToggle<cr>', desc = 'Toggle Trouble' },
|
||||
{ '<leader>xw', '<cmd>TroubleToggle workspace_diagnostics<cr>', desc = 'Toggle Workspace Diagnostics' },
|
||||
{ '<leader>xd', '<cmd>TroubleToggle document_diagnostics<cr>', desc = 'Toggle Document Diagnostics' },
|
||||
{ '<leader>xl', '<cmd>TroubleToggle loclist<cr>', desc = 'Toggle Loclist' },
|
||||
{ '<leader>xq', '<cmd>TroubleToggle quickfix<cr>', desc = 'Toggle Quickfix' },
|
||||
{ 'gR', '<cmd>TroubleToggle lsp_references<cr>', desc = 'Toggle LSP References' },
|
||||
},
|
||||
config = function()
|
||||
require('trouble').setup {
|
||||
auto_preview = false,
|
||||
auto_fold = true,
|
||||
auto_close = true,
|
||||
use_lsp_diagnostic_signs = true,
|
||||
}
|
||||
|
||||
-- Diagnostic signs
|
||||
-- https://github.com/folke/trouble.nvim/issues/52
|
||||
local signs = {
|
||||
Error = ' ',
|
||||
Warning = ' ',
|
||||
Hint = ' ',
|
||||
Information = ' ',
|
||||
}
|
||||
for type, icon in pairs(signs) do
|
||||
local hl = 'DiagnosticSign' .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
local handler = function(virtText, lnum, endLnum, width, truncate)
|
||||
local newVirtText = {}
|
||||
local suffix = (' %d '):format(endLnum - lnum)
|
||||
local sufWidth = vim.fn.strdisplaywidth(suffix)
|
||||
local targetWidth = width - sufWidth
|
||||
local curWidth = 0
|
||||
for _, chunk in ipairs(virtText) do
|
||||
local chunkText = chunk[1]
|
||||
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
if targetWidth > curWidth + chunkWidth then
|
||||
table.insert(newVirtText, chunk)
|
||||
else
|
||||
chunkText = truncate(chunkText, targetWidth - curWidth)
|
||||
local hlGroup = chunk[2]
|
||||
table.insert(newVirtText, { chunkText, hlGroup })
|
||||
chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
-- str width returned from truncate() may less than 2nd argument, need padding
|
||||
if curWidth + chunkWidth < targetWidth then
|
||||
suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth)
|
||||
end
|
||||
break
|
||||
end
|
||||
curWidth = curWidth + chunkWidth
|
||||
end
|
||||
table.insert(newVirtText, { suffix, 'MoreMsg' })
|
||||
return newVirtText
|
||||
end
|
||||
|
||||
return {
|
||||
-- Not UFO in the sky, but an ultra fold in Neovim.
|
||||
-- https://github.com/kevinhwang91/nvim-ufo/
|
||||
{
|
||||
'kevinhwang91/nvim-ufo',
|
||||
lazy = false,
|
||||
enabled = true,
|
||||
version = '*',
|
||||
dependencies = {
|
||||
'kevinhwang91/promise-async',
|
||||
{ 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' },
|
||||
{
|
||||
'luukvbaal/statuscol.nvim',
|
||||
config = function()
|
||||
local builtin = require 'statuscol.builtin'
|
||||
require('statuscol').setup {
|
||||
relculright = true,
|
||||
segments = {
|
||||
{ text = { builtin.foldfunc }, click = 'v:lua.ScFa' },
|
||||
{ text = { '%s' }, click = 'v:lua.ScSa' },
|
||||
{ text = { builtin.lnumfunc, ' ' }, click = 'v:lua.ScLa' },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
},
|
||||
init = function()
|
||||
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
|
||||
vim.o.foldlevelstart = 99
|
||||
vim.o.foldenable = true
|
||||
end,
|
||||
opts = {
|
||||
open_fold_hl_timeout = 150,
|
||||
close_fold_kinds_for_ft = { 'imports', 'comment' },
|
||||
preview = {
|
||||
win_config = {
|
||||
border = { '', '─', '', '', '', '─', '', '' },
|
||||
winhighlight = 'Normal:Folded',
|
||||
winblend = 0,
|
||||
},
|
||||
mappings = {
|
||||
scrollU = '<C-u>',
|
||||
scrollD = '<C-d>',
|
||||
jumpTop = '[',
|
||||
jumpBot = ']',
|
||||
},
|
||||
},
|
||||
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
|
||||
return { 'treesitter', 'indent' }
|
||||
end,
|
||||
fold_virt_text_handler = handler,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -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 'tokyonight'
|
||||
end,
|
||||
init = function() vim.cmd.colorscheme(vim.g.colors_theme) end,
|
||||
opts = {
|
||||
transparent = true,
|
||||
},
|
||||
@@ -20,138 +18,28 @@ return {
|
||||
update_interval = 1000,
|
||||
set_dark_mode = function()
|
||||
vim.api.nvim_set_option_value('background', 'dark', {})
|
||||
vim.cmd 'colorscheme tokyonight-storm'
|
||||
vim.cmd.colorscheme(vim.g.colors_variant_dark)
|
||||
end,
|
||||
set_light_mode = function()
|
||||
vim.api.nvim_set_option_value('background', 'light', {})
|
||||
vim.cmd 'colorscheme tokyonight-day'
|
||||
vim.cmd.colorscheme(vim.g.colors_variant_light)
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
-- A neovim plugin that shows colorcolumn dynamically
|
||||
-- https://github.com/Bekaboo/deadcolumn.nvim
|
||||
{ 'Bekaboo/deadcolumn.nvim' },
|
||||
|
||||
-- Remove all background colors to make nvim transparent
|
||||
-- https://github.com/xiyaowong/nvim-transparent
|
||||
{ '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',
|
||||
ft = 'markdown', -- Highlight markdown files
|
||||
keys = {
|
||||
{ 'n', 'tw', '<cmd>Twilight<cr>', desc = 'Twilight' },
|
||||
},
|
||||
},
|
||||
-- Display a character as the colorcolumn
|
||||
-- https://github.com/lukas-reineke/virt-column.nvim
|
||||
{ 'lukas-reineke/virt-column.nvim', opts = {} },
|
||||
|
||||
-- Seamless navigation between tmux panes and vim splits
|
||||
-- https://github.com/christoomey/vim-tmux-navigator
|
||||
{
|
||||
'christoomey/vim-tmux-navigator',
|
||||
lazy = false,
|
||||
enabled = true,
|
||||
cmd = {
|
||||
'TmuxNavigateLeft',
|
||||
'TmuxNavigateDown',
|
||||
'TmuxNavigateUp',
|
||||
'TmuxNavigateRight',
|
||||
'TmuxNavigatePrevious',
|
||||
},
|
||||
keys = {
|
||||
{ '<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' },
|
||||
},
|
||||
},
|
||||
-- Cloak allows you to overlay *'s over defined patterns in defined files.
|
||||
-- https://github.com/laytan/cloak.nvim
|
||||
{
|
||||
'laytan/cloak.nvim',
|
||||
enabled = true,
|
||||
lazy = false,
|
||||
version = '*',
|
||||
config = function()
|
||||
require('cloak').setup {
|
||||
enabled = true,
|
||||
cloak_character = '*',
|
||||
-- The applied highlight group (colors) on the cloaking, see `:h highlight`.
|
||||
highlight_group = 'Comment',
|
||||
patterns = {
|
||||
{
|
||||
-- Match any file starting with ".env".
|
||||
-- This can be a table to match multiple file patterns.
|
||||
file_pattern = {
|
||||
'.env*',
|
||||
'wrangler.toml',
|
||||
'.dev.vars',
|
||||
},
|
||||
-- Match an equals sign and any character after it.
|
||||
-- This can also be a table of patterns to cloak,
|
||||
-- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
|
||||
cloak_pattern = '=.+',
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
keys = {
|
||||
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = '[tc] Toggle Cloak' },
|
||||
},
|
||||
},
|
||||
-- Close buffer without messing up with the window.
|
||||
-- https://github.com/famiu/bufdelete.nvim
|
||||
{ 'famiu/bufdelete.nvim' },
|
||||
-- Neovim plugin for locking a buffer to a window
|
||||
-- https://github.com/stevearc/stickybuf.nvim
|
||||
{ 'stevearc/stickybuf.nvim', opts = {} },
|
||||
-- Describe the regexp under the cursor
|
||||
-- https://github.com/bennypowers/nvim-regexplainer
|
||||
{
|
||||
'bennypowers/nvim-regexplainer',
|
||||
lazy = false,
|
||||
enabled = true,
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'MunifTanjim/nui.nvim',
|
||||
},
|
||||
opts = {
|
||||
-- automatically show the explainer when the cursor enters a regexp
|
||||
auto = true,
|
||||
},
|
||||
},
|
||||
-- Clarify and beautify your comments using boxes and lines.
|
||||
-- https://github.com/LudoPinelli/comment-box.nvim
|
||||
{
|
||||
'LudoPinelli/comment-box.nvim',
|
||||
opts = {},
|
||||
init = function()
|
||||
local wk = require 'which-key'
|
||||
|
||||
wk.add {
|
||||
{ '<leader>cb', group = 'CommentBox' },
|
||||
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
|
||||
{ '<leader>cbd', '<Cmd>CBd<CR>', desc = 'CommentBox: Remove a box' },
|
||||
{ '<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' },
|
||||
}
|
||||
end,
|
||||
},
|
||||
-- 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',
|
||||
},
|
||||
config = function()
|
||||
vim.o.winwidth = 15
|
||||
vim.o.winminwidth = 10
|
||||
vim.o.equalalways = false
|
||||
require('windows').setup()
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
4
config/nvim/lua/plugins/wakatime.lua
Normal file
4
config/nvim/lua/plugins/wakatime.lua
Normal 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 }
|
||||
@@ -1,48 +0,0 @@
|
||||
-- Useful plugin to show you pending keybinds.
|
||||
-- https://github.com/folke/which-key.nvim
|
||||
return {
|
||||
'folke/which-key.nvim',
|
||||
lazy = false,
|
||||
version = '*',
|
||||
priority = 1001, -- Make sure to load this as soon as possible
|
||||
dependencies = {
|
||||
'nvim-lua/plenary.nvim',
|
||||
'echasnovski/mini.icons',
|
||||
},
|
||||
config = function()
|
||||
local wk = require 'which-key'
|
||||
wk.setup()
|
||||
|
||||
wk.add {
|
||||
-- Groups
|
||||
{
|
||||
'<leader>b',
|
||||
group = '[b] Buffer',
|
||||
expand = function()
|
||||
return require('which-key.extras').expand.buf()
|
||||
end,
|
||||
},
|
||||
{ '<leader>c', group = '[c] Code' },
|
||||
{ '<leader>d', group = '[d] Document' },
|
||||
{ '<leader>g', group = '[g] Git' },
|
||||
{ '<leader>l', group = '[l] LSP' },
|
||||
{ '<leader>p', group = '[p] Project' },
|
||||
{ '<leader>q', group = '[q] Quit' },
|
||||
{ '<leader>s', group = '[s] Search' },
|
||||
{ '<leader>t', group = '[t] Toggle' },
|
||||
{ '<leader>w', group = '[w] Workspace' },
|
||||
{ '<leader>x', group = '[z] Trouble' },
|
||||
{ '<leader>z', group = '[x] FZF & Harpoon' },
|
||||
{ '<leader>?', group = '[?] Help' },
|
||||
{
|
||||
'<leader>?w',
|
||||
function()
|
||||
wk.show { global = false }
|
||||
end,
|
||||
desc = 'Buffer Local Keymaps (which-key)',
|
||||
},
|
||||
-- Misc keybinds
|
||||
{ 'QQ', ':q!<CR>', desc = 'Quit without saving' },
|
||||
}
|
||||
end,
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
#'ve
|
||||
i/!
|
||||
i've/!
|
||||
I've
|
||||
I
|
||||
good
|
||||
#rd
|
||||
#rd/!
|
||||
#rd
|
||||
#rd
|
||||
#rd/!
|
||||
#rd
|
||||
wrd/!
|
||||
82
config/nvim/lua/utils.lua
Normal file
82
config/nvim/lua/utils.lua
Normal file
@@ -0,0 +1,82 @@
|
||||
-- These are my utility functions
|
||||
-- I use to make my life bit easier
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Function shortcuts for keymap set │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Keymap set shortcut
|
||||
--@type vim.keymap.set
|
||||
local s = vim.keymap.set
|
||||
|
||||
-- Keymap shortcut functions
|
||||
K = {}
|
||||
|
||||
-- Handle description
|
||||
---@param desc string|table? Optional description. Can be a string or a table.
|
||||
---@return table -- The description as a table.
|
||||
local function handleDesc(desc)
|
||||
if type(desc) == 'string' then
|
||||
-- Convert string to table with `desc` as a key
|
||||
-- If the string is empty, just return as an empty description
|
||||
return { desc = desc }
|
||||
elseif type(desc) == 'table' then
|
||||
-- If desc doesn't have 'desc' key, combine it with
|
||||
-- others with empty description
|
||||
if not desc.desc then
|
||||
desc.desc = '?'
|
||||
return desc
|
||||
end
|
||||
-- Use the table as is
|
||||
return desc
|
||||
else
|
||||
-- Default to an empty table if `desc` is nil or an unsupported type
|
||||
return { desc = '?' }
|
||||
end
|
||||
end
|
||||
|
||||
-- Normal mode keymaps
|
||||
---@param key string rhs, required
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table? Options, optional
|
||||
K.n = function(key, cmd, opts)
|
||||
opts = handleDesc(opts or {})
|
||||
s('n', key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Leader keymap shortcut function
|
||||
-- It prepends '<leader>' to the key
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts table|string? Options (or just description), optional
|
||||
K.nl = function(key, cmd, opts)
|
||||
opts = handleDesc(opts)
|
||||
K.n('<leader>' .. key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Keymap shortcut function with mode defined, good for sorting by rhs
|
||||
---@param key string rhs, required
|
||||
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts string|table description, required
|
||||
K.d = function(key, mode, cmd, opts)
|
||||
opts = handleDesc(opts or {})
|
||||
s(mode, key, cmd, opts)
|
||||
end
|
||||
|
||||
-- Leader based keymap shortcut function with mode defined
|
||||
---@param key string rhs, required, but will be prepended with '<leader>'
|
||||
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
|
||||
---@param cmd string|function lhs, required
|
||||
---@param opts string|table description (or opts), required
|
||||
K.ld = function(key, mode, cmd, opts)
|
||||
opts = handleDesc(opts or {})
|
||||
s(mode, '<leader>' .. key, cmd, opts)
|
||||
end
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ Options related helper functions │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Toggle background between light and dark
|
||||
function ToggleBackground() vim.o.bg = vim.o.bg == 'light' and 'dark' or 'light' end
|
||||
462
config/nvim/snippets/javascript.json
Normal file
462
config/nvim/snippets/javascript.json
Normal 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"
|
||||
}
|
||||
}
|
||||
262
config/nvim/snippets/lua.json
Normal file
262
config/nvim/snippets/lua.json
Normal 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})"
|
||||
}
|
||||
}
|
||||
133
config/nvim/snippets/markdown.json
Normal file
133
config/nvim/snippets/markdown.json
Normal 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)"
|
||||
}
|
||||
}
|
||||
165
config/nvim/snippets/php.snippets
Normal file
165
config/nvim/snippets/php.snippets
Normal 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}
|
||||
334
config/nvim/snippets/sh.json
Normal file
334
config/nvim/snippets/sh.json
Normal 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)"
|
||||
}
|
||||
}
|
||||
7
config/nvim/snippets/yaml.json
Normal file
7
config/nvim/snippets/yaml.json
Normal 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)"
|
||||
}
|
||||
}
|
||||
0
config/nvim/spell/.gitkeep
Normal file
0
config/nvim/spell/.gitkeep
Normal file
5
config/nvm/default-packages
Normal file
5
config/nvm/default-packages
Normal file
@@ -0,0 +1,5 @@
|
||||
# $NVM_DIR/default-packages
|
||||
|
||||
yarn
|
||||
neovim
|
||||
corepack
|
||||
@@ -16,7 +16,7 @@
|
||||
{
|
||||
"type": "session",
|
||||
"style": "plain",
|
||||
"template": " {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}"
|
||||
"template": " {{ if .SSHSession }}\ueba9 {{ .UserName }}@{{ end }}{{ .HostName }}"
|
||||
},
|
||||
{
|
||||
"foreground": "cyan",
|
||||
@@ -27,14 +27,14 @@
|
||||
"template": " {{ .Path }} ",
|
||||
"type": "path",
|
||||
"mapped_locations": {
|
||||
"~/Code/*": "\uF09B"
|
||||
"~/Code/*": "\uf09b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"style": "plain",
|
||||
"foreground": "lightGreen",
|
||||
"template": "{{ .UpstreamIcon }}{{ 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 }}{{ 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 }}\uf044 {{ .Working.String }}{{ end }}){{ end }}",
|
||||
"properties": {
|
||||
"fetch_status": true,
|
||||
"fetch_upstream_icon": true,
|
||||
@@ -100,7 +100,7 @@
|
||||
{
|
||||
"type": "php",
|
||||
"style": "plain",
|
||||
"template": " {{ .Full }} "
|
||||
"template": " \ue73d {{ .Full }} "
|
||||
}
|
||||
],
|
||||
"type": "prompt"
|
||||
|
||||
@@ -1,122 +1,117 @@
|
||||
"$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json"
|
||||
console_title_template = '{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}'
|
||||
version = 3
|
||||
auto_upgrade = false
|
||||
final_space = true
|
||||
console_title_template = "{{.UserName}}@{{.HostName}} {{.Shell}} in {{.PWD}}"
|
||||
version = 2
|
||||
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
|
||||
|
||||
[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
|
||||
|
||||
@@ -42,7 +42,7 @@ if ! declare -f msg > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg()
|
||||
{
|
||||
[ "$VERBOSE" -eq 1 ] && echo "$1"
|
||||
[ "$VERBOSE" -eq 1 ] && msgr msg "$1"
|
||||
return 0
|
||||
}
|
||||
msg "msg was not defined, defined it now"
|
||||
@@ -54,7 +54,7 @@ if ! declare -f msg_err > /dev/null; then
|
||||
# $1 - error message (string)
|
||||
msg_err()
|
||||
{
|
||||
echo "(!) ERROR: $1" >&2
|
||||
msgr err "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
@@ -65,7 +65,7 @@ if ! declare -f msg_done > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg_done()
|
||||
{
|
||||
echo "✓ $1"
|
||||
msgr done "$1"
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
@@ -76,7 +76,7 @@ if ! declare -f msg_run > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg_run()
|
||||
{
|
||||
echo "→ $1"
|
||||
msgr run "$1"
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
@@ -87,10 +87,29 @@ if ! declare -f msg_ok > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg_ok()
|
||||
{
|
||||
echo "✓ $1"
|
||||
msgr ok "$1"
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
|
||||
if ! declare -f array_diff > /dev/null; then
|
||||
# Function to compare two arrays and return the difference
|
||||
# Example: array_diff DIFFERENCE ARRAY1 ARRAY2
|
||||
# $1 - variable to store the difference
|
||||
# $2 - first array
|
||||
# $3 - second array
|
||||
# Output to $1 the difference between $2 and $3
|
||||
# Source: https://stackoverflow.com/a/42399479/594940
|
||||
array_diff()
|
||||
{
|
||||
# shellcheck disable=SC1083,SC2086
|
||||
eval local ARR1=\(\"\${$2[@]}\"\)
|
||||
# shellcheck disable=SC1083,SC2086
|
||||
eval local ARR2=\(\"\${$3[@]}\"\)
|
||||
local IFS=$'\n'
|
||||
mapfile -t "$1" < <(comm -23 <(echo "${ARR1[*]}" | sort) <(echo "${ARR2[*]}" | sort))
|
||||
}
|
||||
fi
|
||||
|
||||
source "$DOTFILES/config/exports"
|
||||
source "$DOTFILES/config/alias"
|
||||
|
||||
5
config/tms/config.toml
Normal file
5
config/tms/config.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
default_session = "main"
|
||||
|
||||
[[search_dirs]]
|
||||
path = "~/Code"
|
||||
depth = 10
|
||||
Submodule config/tmux/plugins/tmux-resurrect deleted from e87d7d592c
@@ -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', 'antidote', 'direnv', 'md5']" # 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
|
||||
|
||||
@@ -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)
|
||||
|
||||
53
config/zsh/antidote.zsh
Executable file
53
config/zsh/antidote.zsh
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
# Setup antidote for Oh My Zsh
|
||||
# vim: ft=zsh et sw=2 ts=2
|
||||
|
||||
[[ -z "$DOTFILES" ]] && DOTFILES="$HOME/.dotfiles"
|
||||
[[ -z "$ANTIDOTE_DIR" ]] && ANTIDOTE_DIR="$DOTFILES/tools/antidote"
|
||||
[[ -z "$ANTIDOTE_HOME" ]] && ANTIDOTE_HOME="$XDG_CACHE_HOME/antidote"
|
||||
[[ -z "$ANTIDOTE_PLUGINS" ]] && ANTIDOTE_PLUGINS="$XDG_CONFIG_HOME/zsh/antidote_plugins"
|
||||
|
||||
[[ ! -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
|
||||
}
|
||||
|
||||
# Plugin configurations
|
||||
zstyle ':antidote:bundle' use-friendly-names 'yes'
|
||||
zstyle ':omz:update' mode reminder
|
||||
zstyle ':omz:plugins:nvm' autoload yes
|
||||
|
||||
# Pure prompt settings
|
||||
export PURE_PROMPT_SYMBOL='➜'
|
||||
export PURE_GIT_UNTRACKED_DIRTY=0
|
||||
export PURE_CMD_MAX_EXEC_TIME=86400 # 24 hours
|
||||
zstyle ':prompt:pure:git:stash' show yes
|
||||
zstyle ':prompt:pure:execution_time' show no
|
||||
zstyle ':prompt:pure:user' color magenta
|
||||
zstyle ':prompt:pure:user:root' color red
|
||||
zstyle ':prompt:pure:host' color green
|
||||
zstyle ':prompt:pure:path' color white
|
||||
zstyle ':prompt:pure:prompt:success' color green
|
||||
zstyle ':prompt:pure:prompt:error' color red
|
||||
|
||||
# Disable ls colors to avoid issues with eza
|
||||
export DISABLE_LS_COLORS=true
|
||||
zstyle ':omz:plugins:eza' 'dirs-first' yes
|
||||
zstyle ':omz:plugins:eza' 'git-status' yes
|
||||
zstyle ':omz:plugins:eza' 'icons' yes
|
||||
zstyle ':omz:plugins:eza' 'ls' yes
|
||||
zstyle ':omz:plugins:eza' 'prompt' yes
|
||||
|
||||
[[ -f "${ANTIDOTE_PLUGINS}.txt" ]] || touch "${ANTIDOTE_PLUGINS}.txt"
|
||||
FPATH="$ANTIDOTE_DIR/functions:$FPATH"
|
||||
autoload -Uz antidote
|
||||
if [[ ! "${ANTIDOTE_PLUGINS}.zsh" -nt "${ANTIDOTE_PLUGINS}.txt" ]]; then
|
||||
antidote bundle <"${ANTIDOTE_PLUGINS}.txt" >|"${ANTIDOTE_PLUGINS}.zsh"
|
||||
fi
|
||||
|
||||
# Source your static plugins file.
|
||||
# shellcheck source=$HOME/.dotfiles/config/zsh/antidote_plugins.zsh
|
||||
source "${ANTIDOTE_PLUGINS}.zsh"
|
||||
43
config/zsh/antidote_plugins.txt
Normal file
43
config/zsh/antidote_plugins.txt
Normal file
@@ -0,0 +1,43 @@
|
||||
# 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
|
||||
|
||||
# Theme
|
||||
# mafredri/zsh-async # for pure
|
||||
# sindresorhus/pure # pure itself
|
||||
|
||||
romkatv/powerlevel10k
|
||||
|
||||
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
|
||||
ohmyzsh/ohmyzsh path:plugins/brew
|
||||
ohmyzsh/ohmyzsh path:plugins/extract
|
||||
ohmyzsh/ohmyzsh path:plugins/eza
|
||||
ohmyzsh/ohmyzsh path:plugins/fzf
|
||||
ohmyzsh/ohmyzsh path:plugins/git
|
||||
ohmyzsh/ohmyzsh path:plugins/golang
|
||||
ohmyzsh/ohmyzsh path:plugins/gpg-agent
|
||||
ohmyzsh/ohmyzsh path:plugins/nvm
|
||||
ohmyzsh/ohmyzsh path:plugins/python
|
||||
ohmyzsh/ohmyzsh path:plugins/tmux
|
||||
ohmyzsh/ohmyzsh path:plugins/z
|
||||
|
||||
# Automatically activate nvm if .nvmrc file is present
|
||||
ivuorinen/nvm-auto-use
|
||||
|
||||
# Add core plugins that make Zsh a bit more like Fish
|
||||
zdharma-continuum/fast-syntax-highlighting
|
||||
|
||||
# Add some plugins that are not in OMZ
|
||||
jreese/zsh-titles
|
||||
yuki-ycino/tms
|
||||
|
||||
# This needs to be last bundle
|
||||
# zsh-users/zsh-syntax-highlighting
|
||||
175
config/zsh/completion/_dfm
Normal file
175
config/zsh/completion/_dfm
Normal file
@@ -0,0 +1,175 @@
|
||||
#compdef dfm
|
||||
# Completion for dfm, the dotfiles manager
|
||||
|
||||
_dfm_get_script_description() {
|
||||
local file="$1"
|
||||
sed -n '/@description/s/.*@description *\(.*\)/\1/p' "$file" | head -1
|
||||
}
|
||||
|
||||
_dfm_get_available_scripts() {
|
||||
local scripts=()
|
||||
local dotfiles="${HOME}/.dotfiles"
|
||||
|
||||
for script in "${dotfiles}/scripts/install-"*.sh; do
|
||||
if [ -f "$script" ]; then
|
||||
local name=$(basename "$script" .sh | sed 's/install-//')
|
||||
local desc=$(_dfm_get_script_description "$script")
|
||||
[ -z "$desc" ] && desc="No description available"
|
||||
scripts+=("${name}:${desc}")
|
||||
fi
|
||||
done
|
||||
|
||||
echo ${(F)scripts}
|
||||
}
|
||||
|
||||
_dfm()
|
||||
{
|
||||
local -a commands sections
|
||||
|
||||
sections=(
|
||||
'install:Installation commands'
|
||||
'asdf:ASDF version manager commands'
|
||||
'brew:Homebrew package manager commands'
|
||||
'check:System check commands'
|
||||
'dotfiles:Dotfiles management commands'
|
||||
'docs:Documentation commands'
|
||||
'helpers:Helper utilities'
|
||||
'scripts:Installation scripts'
|
||||
'tests:Test commands'
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
"1: :->sections" \
|
||||
"*::arg:->args"
|
||||
|
||||
case "$state" in
|
||||
sections)
|
||||
_describe 'sections' sections
|
||||
;;
|
||||
args)
|
||||
case $line[1] in
|
||||
install)
|
||||
local -a install_cmds
|
||||
install_cmds=(
|
||||
'all:Install everything in correct order'
|
||||
'cargo:Install rust/cargo packages'
|
||||
'cheat-databases:Install cheat external cheatsheet databases'
|
||||
'composer:Install composer'
|
||||
'dotenv:Install dotenv-linter'
|
||||
'fonts:Install programming fonts'
|
||||
'gh:Install GitHub CLI Extensions'
|
||||
'go:Install Go Packages'
|
||||
'imagick:Install ImageMagick CLI'
|
||||
'starship:Install starship.rs'
|
||||
'macos:Setup nice macOS defaults'
|
||||
'neofetch:Install neofetch'
|
||||
'nvm:Install Node Version Manager'
|
||||
'nvm-latest:Install latest LTS node'
|
||||
'npm:Install NPM Packages'
|
||||
'ntfy:Install ntfy'
|
||||
'ohmybash:Install oh-my-bash'
|
||||
'pip:Install pip/python packages'
|
||||
'z:Install z'
|
||||
)
|
||||
_describe 'install commands' install_cmds
|
||||
;;
|
||||
|
||||
asdf)
|
||||
local -a asdf_cmds
|
||||
asdf_cmds=(
|
||||
'current:Show current versions'
|
||||
'global:Show global versions'
|
||||
'installed:Show installed versions'
|
||||
'plugins-update:Update all plugins'
|
||||
'plugins-install:Install plugins from configuration'
|
||||
'plugins-remove:Remove installed plugins'
|
||||
'reset:Reset plugins'
|
||||
'fix-tool-versions:Remove uninstalled plugins from .tool-versions'
|
||||
'versions:Show versions'
|
||||
'where:Show where'
|
||||
'which:Show which'
|
||||
)
|
||||
_describe 'asdf commands' asdf_cmds
|
||||
;;
|
||||
|
||||
brew)
|
||||
local -a brew_cmds
|
||||
brew_cmds=(
|
||||
'install:Install items from Brewfile'
|
||||
'update:Update and upgrade packages'
|
||||
'updatebundle:Update Brewfile with descriptions'
|
||||
'autoupdate:Setup brew auto-update'
|
||||
'leaves:List brew leaves'
|
||||
'clean:Clean up packages'
|
||||
'untracked:List untracked packages'
|
||||
)
|
||||
_describe 'brew commands' brew_cmds
|
||||
;;
|
||||
|
||||
check)
|
||||
local -a check_cmds
|
||||
check_cmds=(
|
||||
'arch:Check architecture'
|
||||
'host:Check hostname'
|
||||
)
|
||||
_describe 'check commands' check_cmds
|
||||
;;
|
||||
|
||||
dotfiles)
|
||||
local -a dotfiles_cmds
|
||||
dotfiles_cmds=(
|
||||
'fmt:Run all formatters'
|
||||
'yamlfmt:Run yamlfmt'
|
||||
'shfmt:Run shfmt'
|
||||
'reset_all:Reset everything'
|
||||
'reset_nvim:Reset neovim'
|
||||
)
|
||||
_describe 'dotfiles commands' dotfiles_cmds
|
||||
;;
|
||||
|
||||
docs)
|
||||
local -a docs_cmds
|
||||
docs_cmds=(
|
||||
'all:Update all documentation'
|
||||
'tmux:Update tmux documentation'
|
||||
'nvim:Update nvim documentation'
|
||||
'wezterm:Update wezterm documentation'
|
||||
)
|
||||
_describe 'docs commands' docs_cmds
|
||||
;;
|
||||
|
||||
helpers)
|
||||
local -a helpers_cmds
|
||||
helpers_cmds=(
|
||||
'aliases:Show aliases'
|
||||
'colors:Show colors'
|
||||
'env:Show environment variables'
|
||||
'functions:Show functions'
|
||||
'nvim:Show nvim keybindings'
|
||||
'path:Show PATH'
|
||||
'tmux:Show tmux keybindings'
|
||||
'wezterm:Show wezterm keybindings'
|
||||
)
|
||||
_describe 'helper commands' helpers_cmds
|
||||
;;
|
||||
|
||||
scripts)
|
||||
local -a script_cmds
|
||||
script_cmds=("${(@f)$(_dfm_get_available_scripts)}")
|
||||
_describe 'available scripts' script_cmds
|
||||
;;
|
||||
|
||||
tests)
|
||||
local -a test_cmds
|
||||
test_cmds=(
|
||||
'msg:List log functions'
|
||||
'params:List parameters'
|
||||
)
|
||||
_describe 'test commands' test_cmds
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_dfm "$@"
|
||||
212
config/zsh/completion/_oh-my-posh
Normal file
212
config/zsh/completion/_oh-my-posh
Normal 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
|
||||
205
config/zsh/p10k.zsh
Normal file
205
config/zsh/p10k.zsh
Normal file
@@ -0,0 +1,205 @@
|
||||
# shellcheck disable=SC1073,SC1072
|
||||
#
|
||||
# Generated by Powerlevel10k configuration wizard on 2024-12-10 at 10:05 EET.
|
||||
# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 7533.
|
||||
# Wizard options: nerdfont-v3 + powerline, small icons, pure, original, 2 lines, sparse,
|
||||
# transient_prompt, instant_prompt=verbose.
|
||||
# Type `p10k configure` to generate another config.
|
||||
#
|
||||
# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure).
|
||||
#
|
||||
# Differences from Pure:
|
||||
#
|
||||
# - Git:
|
||||
# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state.
|
||||
# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`).
|
||||
#
|
||||
# Apart from the differences listed above, the replication of Pure prompt is exact. This includes
|
||||
# even the questionable parts. For example, just like in Pure, there is no indication of Git status
|
||||
# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt
|
||||
# doesn't fit on one line, it wraps around with no attempt to shorten it.
|
||||
#
|
||||
# If you like the general style of Pure but not particularly attached to all its quirks, type
|
||||
# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking
|
||||
# advantage of Powerlevel10k features that aren't present in Pure.
|
||||
|
||||
# Temporarily change options.
|
||||
'builtin' 'local' '-a' 'p10k_config_opts'
|
||||
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
|
||||
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
|
||||
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
|
||||
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
|
||||
|
||||
() {
|
||||
emulate -L zsh -o extended_glob
|
||||
|
||||
# Unset all configuration options.
|
||||
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
|
||||
|
||||
# Zsh >= 5.1 is required.
|
||||
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
|
||||
|
||||
# Prompt colors.
|
||||
local grey='242'
|
||||
local red='1'
|
||||
local yellow='3'
|
||||
local blue='33'
|
||||
local magenta='5'
|
||||
local cyan='6'
|
||||
local white='7'
|
||||
local green='2'
|
||||
|
||||
# Left prompt segments.
|
||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||
# =========================[ Line #1 ]=========================
|
||||
context # user@host
|
||||
dir # current directory
|
||||
vcs # git status
|
||||
# command_execution_time # previous command duration
|
||||
go
|
||||
nvm
|
||||
aws
|
||||
# =========================[ Line #2 ]=========================
|
||||
newline # \n
|
||||
virtualenv # python virtual environment
|
||||
prompt_char # prompt symbol
|
||||
)
|
||||
|
||||
# Right prompt segments.
|
||||
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
||||
# =========================[ Line #1 ]=========================
|
||||
# command_execution_time # previous command duration
|
||||
# virtualenv # python virtual environment
|
||||
# context # user@host
|
||||
# time # current time
|
||||
# =========================[ Line #2 ]=========================
|
||||
newline # \n
|
||||
)
|
||||
|
||||
# Basic style options that define the overall prompt look.
|
||||
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
|
||||
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
|
||||
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons
|
||||
|
||||
# Add an empty line before each prompt except the first. This doesn't emulate the bug
|
||||
# in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar.
|
||||
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
|
||||
|
||||
# Magenta prompt symbol if the last command succeeded.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$green
|
||||
# Red prompt symbol if the last command failed.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red
|
||||
# Default prompt symbol.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='➜'
|
||||
# Prompt symbol in command vi mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='←'
|
||||
# Prompt symbol in visual vi mode is the same as in command mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='←'
|
||||
# Prompt symbol in overwrite vi mode is the same as in command mode.
|
||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
|
||||
|
||||
# Grey Python Virtual Environment.
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey
|
||||
# Don't show Python version.
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
|
||||
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
||||
|
||||
# Blue current directory.
|
||||
typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue
|
||||
|
||||
# Context format when root: user@host. The first part red, the rest green.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$red}%n%f%F{$green}@%m%f"
|
||||
# Context format when not root: host. The host is green.
|
||||
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$green}%m%f"
|
||||
# Don't show context unless root or in SSH.
|
||||
# typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=
|
||||
|
||||
# Show previous command duration only if it's >= 86400s = 24h.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=86400
|
||||
# Don't show fractional seconds. Thus, 7s rather than 7.3s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
|
||||
# Duration format: 1d 2h 3m 4s.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
|
||||
# Yellow previous command duration.
|
||||
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow
|
||||
|
||||
# Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones.
|
||||
typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey
|
||||
|
||||
# Disable async loading indicator to make directories that aren't Git repositories
|
||||
# indistinguishable from large Git repositories without known state.
|
||||
typeset -g POWERLEVEL9K_VCS_LOADING_TEXT=
|
||||
|
||||
# Don't wait for Git status even for a millisecond, so that prompt always updates
|
||||
# asynchronously when Git state changes.
|
||||
typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0
|
||||
|
||||
# Cyan ahead/behind arrows.
|
||||
typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan
|
||||
# Don't show remote branch, current tag or stashes.
|
||||
typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind)
|
||||
# Don't show the branch icon.
|
||||
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
|
||||
# When in detached HEAD state, show @commit where branch normally goes.
|
||||
typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
|
||||
# Don't show staged, unstaged, untracked indicators.
|
||||
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=
|
||||
# Show '*' when there are staged, unstaged or untracked files.
|
||||
typeset -g POWERLEVEL9K_VCS_DIRTY_ICON=':'
|
||||
# Show '⇣' if local branch is behind remote.
|
||||
typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣'
|
||||
# Show '⇡' if local branch is ahead of remote.
|
||||
typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡'
|
||||
# Don't show the number of commits next to the ahead/behind arrows.
|
||||
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
|
||||
# Remove space between '⇣' and '⇡' and all trailing spaces.
|
||||
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }'
|
||||
|
||||
# Grey current time.
|
||||
typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey
|
||||
# Format for the current time: 09:51:02. See `man 3 strftime`.
|
||||
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
|
||||
# If set to true, time will update when you hit enter. This way prompts for the past
|
||||
# commands will contain the start times of their commands rather than the end times of
|
||||
# their preceding commands.
|
||||
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
|
||||
|
||||
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
|
||||
# when accepting a command line. Supported values:
|
||||
#
|
||||
# - off: Don't change prompt when accepting a command line.
|
||||
# - always: Trim down prompt when accepting a command line.
|
||||
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
|
||||
# typed after changing current working directory.
|
||||
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always
|
||||
|
||||
# Instant prompt mode.
|
||||
#
|
||||
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
|
||||
# it incompatible with your zsh configuration files.
|
||||
# - quiet: Enable instant prompt and don't print warnings when detecting console output
|
||||
# during zsh initialization. Choose this if you've read and understood
|
||||
# https://github.com/romkatv/powerlevel10k#instant-prompt.
|
||||
# - verbose: Enable instant prompt and print a warning when detecting console output during
|
||||
# zsh initialization. Choose this if you've never tried instant prompt, haven't
|
||||
# seen the warning, or if you are unsure what this all means.
|
||||
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
|
||||
|
||||
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
|
||||
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
|
||||
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
|
||||
# really need it.
|
||||
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
|
||||
|
||||
# If p10k is already loaded, reload configuration.
|
||||
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
|
||||
(( ! $+functions[p10k] )) || p10k reload
|
||||
}
|
||||
|
||||
# Tell `p10k configure` which file it should overwrite.
|
||||
typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
|
||||
|
||||
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
|
||||
'builtin' 'unset' 'p10k_config_opts'
|
||||
57
config/zsh/prompt.zsh
Executable file
57
config/zsh/prompt.zsh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
# Setup prompt
|
||||
# vim: ft=zsh:
|
||||
|
||||
setopt PROMPT_SUBST
|
||||
|
||||
# Setup vcs_info
|
||||
autoload -Uz vcs_info
|
||||
zstyle ':vcs_info:*' enable git
|
||||
zstyle ':vcs_info:*' max-exports 2
|
||||
zstyle ':vcs_info:*' check-for-changes true
|
||||
zstyle ':vcs_info:*' check-for-staged-changes true
|
||||
zstyle ':vcs_info:*' use-simple true
|
||||
zstyle ':vcs_info:*' unstagedstr '%F{red}*' # display this when there are unstaged changes
|
||||
zstyle ':vcs_info:*' stagedstr '%F{yellow}+' # display this when there are staged changes
|
||||
|
||||
zstyle ':vcs_info:*' formats '%F{5}%F{2}%b%c%u%F{5}%f '
|
||||
zstyle ':vcs_info:*' actionformats '%F{5}%F{2}%b%F{3}|%F{1}%a%c%u%F{5}%f '
|
||||
|
||||
theme_precmd () {
|
||||
vcs_info
|
||||
}
|
||||
|
||||
export NL=$'\n'
|
||||
|
||||
# Set defaults for display.
|
||||
# We want the host always, but only the user if we are in an SSH session or root.
|
||||
P_HOST="%F{green}%m%f"
|
||||
P_USER=''
|
||||
|
||||
# If we are in an SSH session, we want to show the username
|
||||
[[ "$SSH_CONNECTION" != '' ]] && P_USER="%{${fg}[magenta]%}%n%f"
|
||||
|
||||
# If we are root, color the user name differently
|
||||
[[ $UID -eq 0 ]] && P_USER="%{${fg}[red]%}%n%f"
|
||||
|
||||
# If P_USER is set, suffix user with @ giving us user@host
|
||||
[[ -n "$P_USER" ]] && P_USER="$P_USER@"
|
||||
|
||||
# Combine the prompt parts. Could be just the host, or user@host.
|
||||
P_PREFIX="$P_USER$P_HOST"
|
||||
|
||||
# Set the color of the current directory
|
||||
P_DIR="%F{blue}%~%f"
|
||||
|
||||
# Change the color of the prompt if the last command failed
|
||||
P_SHELL="%(?.%F{green}.%F{red})➜%f"
|
||||
|
||||
# Any extras we want to display
|
||||
P_EXTRA=""
|
||||
|
||||
# Set the prompt
|
||||
# user@host /path/to/current/dir (branch) ➜
|
||||
export PROMPT="${P_PREFIX} ${P_DIR} %{$reset_color%}${vcs_info_msg_0_}%{$reset_color%}%{${P_EXTRA}%}${NL}${P_SHELL} "
|
||||
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd theme_precmd
|
||||
@@ -2,193 +2,399 @@
|
||||
|
||||
```txt
|
||||
|
||||
n <Space>zg * :Rg<CR>
|
||||
FZF: search with rg (aka live grep).
|
||||
n <Space>zm * :Maps<CR>
|
||||
FZF: search mappings.
|
||||
n <Space>zh * :History<CR>
|
||||
FZF: search history of opened files
|
||||
n <Space>zb * :Buffers<CR>
|
||||
FZF: search open buffers.
|
||||
n <Space>zt * :Windows<CR>
|
||||
FZF: search open tabs.
|
||||
n <Space>zc * :Commands<CR>
|
||||
FZF: search commands.
|
||||
n <Space>zf * :FZF<Space>
|
||||
FZF: search for files in given path.
|
||||
n <Space>tc * <Cmd>CloakToggle<CR>
|
||||
[tc] Toggle Cloak
|
||||
n <Space>/ * <Lua 189: ~/.config/nvim/lua/plugins/telescope.lua:85>
|
||||
[/] Fuzzily search in current buffer]
|
||||
n <Space>ht * <Lua 267: ~/.config/nvim/lua/plugins/harpoon.lua:16>
|
||||
n <Space>1 * <Lua 65: ~/.config/nvim/lua/plugins/harpoon.lua:68>
|
||||
harpoon to file 1
|
||||
n <Space>xn * <Lua 64: ~/.config/nvim/lua/plugins/harpoon.lua:61>
|
||||
harpoon to next file
|
||||
n <Space>xN * <Lua 63: ~/.config/nvim/lua/plugins/harpoon.lua:54>
|
||||
harpoon to previous file
|
||||
n <Space>xa * <Lua 136: ~/.config/nvim/lua/plugins/harpoon.lua:40>
|
||||
Open harpoon window
|
||||
n <Space>5 * <Lua 61: ~/.config/nvim/lua/plugins/harpoon.lua:96>
|
||||
harpoon to file 5
|
||||
n <Space>4 * <Lua 60: ~/.config/nvim/lua/plugins/harpoon.lua:89>
|
||||
harpoon to file 4
|
||||
n <Space>3 * <Lua 59: ~/.config/nvim/lua/plugins/harpoon.lua:82>
|
||||
harpoon to file 3
|
||||
n <Space>2 * <Lua 57: ~/.config/nvim/lua/plugins/harpoon.lua:75>
|
||||
harpoon to file 2
|
||||
n <Space>gB * :G blame<CR>
|
||||
n <Space>gb * :Telescope git_branches<CR>
|
||||
n <Space>gP * :Neogit push<CR>
|
||||
n <Space>gp * :Neogit pull<CR>
|
||||
n <Space>gc * :Neogit commit<CR>
|
||||
n <Space>gs * <Lua 121: ~/.local/share/nvim/lazy/neogit/lua/neogit.lua:151>
|
||||
n <Space>e * <Lua 96: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
NeoTree reveal
|
||||
n <Space>ca * <Lua 95: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Code Action
|
||||
n <Space>wl * <Lua 94: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Workspace List Folders
|
||||
n <Space>wr * <Lua 93: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Workspace Remove Folder
|
||||
n <Space>wa * <Lua 92: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Workspace Add Folder
|
||||
n <Space>ws * <Lua 91: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Workspace Symbols
|
||||
n <Space>D * <Lua 89: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Type Definition
|
||||
n <Space>dq * <Lua 87: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Diagnostic: Set loc list
|
||||
n <Space>do * <Lua 86: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Diagnostic: Open float
|
||||
n <Space>cr * <Lua 84: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Rename
|
||||
n <Space>ds * <Lua 83: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Document Symbols
|
||||
n <Space>?s * <Lua 78: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Neoconf: Show merged config
|
||||
n <Space>?m * <Lua 77: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Neoconf: Show merged LSP config
|
||||
n <Space>?l * <Lua 76: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Neoconf: Local
|
||||
n <Space>?g * <Lua 75: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Neoconf: Global
|
||||
n <Space>?c * <Lua 73: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Neoconf: Open
|
||||
<Space>f * <Lua 37: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
[f] Format buffer
|
||||
n <Space>qq * <Cmd>wq!<CR>
|
||||
[qq] Quickly Quit
|
||||
n <Space>xe * <Cmd>GoIfErr<CR>
|
||||
Go If Error
|
||||
v <Space> * <Nop>
|
||||
n <Space> * <Nop>
|
||||
x <Space> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "<Space>"
|
||||
n <Space> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "<Space>"
|
||||
x " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after """
|
||||
n " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after """
|
||||
x ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "'"
|
||||
n ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "'"
|
||||
x ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "`"
|
||||
n ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "`"
|
||||
x g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "g"
|
||||
n g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "g"
|
||||
x z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "z"
|
||||
n z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "z"
|
||||
n <C-W> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Query keys after "<C-W>"
|
||||
n <Esc><Esc> * :nohlsearch<CR>
|
||||
Clear Search Highlighting
|
||||
n <Space>qQ * :q!<CR>
|
||||
Force quit without saving
|
||||
n <Space>qw * :wq<CR>
|
||||
Write and quit
|
||||
n <Space>qq * :wq!<CR>
|
||||
Quit with force saving
|
||||
n <Space>qf * :q<CR>
|
||||
Quicker close split
|
||||
n <Space>bw :Bwipeout<CR>
|
||||
Buffer: Wipeout
|
||||
n <Space>bd :Bdelete<CR>
|
||||
Buffer: Delete
|
||||
n <Space>bl :bnext<CR>
|
||||
Buffer: Next
|
||||
n <Space>bh :bprev<CR>
|
||||
Buffer: Prev
|
||||
n <Space>bj :bfirst<CR>
|
||||
Buffer: First
|
||||
n <Space>bk :blast<CR>
|
||||
Buffer: Last
|
||||
x # * <Lua 7: vim/_defaults.lua:0>
|
||||
n <Space>tn * :Noice dismiss<CR>
|
||||
Noice: Dismiss Notification
|
||||
n <Space>tl * :lua vim.o.bg = vim.o.bg:get() == "light" and "dark" or "light"<CR>
|
||||
Toggle Light/Dark Mode
|
||||
n <Space>te * :Neotree toggle<CR>
|
||||
Toggle Neotree
|
||||
n <Space>tc * :CloakToggle<CR>
|
||||
Cloak: Toggle
|
||||
n <Space>o * ~/.config/nvim/lua/keymaps.lua
|
||||
Open repo in browser
|
||||
n <Space>xx * :Trouble diagnostics<CR>
|
||||
Trouble: Diagnostic
|
||||
n <Space>xw * :Trouble workspace_diagnostics<CR>
|
||||
Trouble: Workspace Diagnostics
|
||||
n <Space>xq * :Trouble quickfix<CR>
|
||||
Trouble: Quickfix
|
||||
n <Space>xl * :Trouble loclist<CR>
|
||||
Trouble: Location List
|
||||
n <Space>xd * :Trouble document_diagnostics<CR>
|
||||
Trouble: Document Diagnostics
|
||||
n <Space>sx * :Telescope import<CR>
|
||||
Telescope: Import
|
||||
n <Space>sw * :Telescope grep_string<CR>
|
||||
Grep String
|
||||
n <Space>st * :TodoTelescope<CR>
|
||||
Search Todos
|
||||
n <Space>ss * :Telescope treesitter<CR>
|
||||
Treesitter
|
||||
n <Space>sq * :Telescope quickfix<CR>
|
||||
Quickfix
|
||||
n <Space>sp * :lua require("telescope").extensions.lazy_plugins.lazy_plugins()<CR>
|
||||
Lazy Plugins
|
||||
n <Space>so * :Telescope oldfiles<CR>
|
||||
Old Files
|
||||
n <Space>sl * :Telescope luasnip<CR>
|
||||
Search LuaSnip
|
||||
n <Space>sk * :Telescope keymaps<CR>
|
||||
Search Keymaps
|
||||
n <Space>sh * :Telescope highlights<CR>
|
||||
List Highlights
|
||||
n <Space>sg * :Telescope live_grep<CR>
|
||||
Search by Grep
|
||||
n <Space>sd * :Telescope diagnostics<CR>
|
||||
Search Diagnostics
|
||||
n <Space>sc * :Telescope commands<CR>
|
||||
Commands
|
||||
n <Space>/ * ~/.config/nvim/lua/keymaps.lua
|
||||
Fuzzily search in current buffer
|
||||
n <Space>, * :Telescope buffers<CR>
|
||||
Find existing buffers
|
||||
n <Space>f * :Telescope find_files<CR>
|
||||
Find Files
|
||||
n <Space>cbt * <Cmd>CBllline<CR>
|
||||
CB: Titled Line
|
||||
n <Space>cbm * <Cmd>CBllbox14<CR>
|
||||
CB: Marked
|
||||
n <Space>cbl * <Cmd>CBline<CR>
|
||||
CB: Simple Line
|
||||
n <Space>cbd * <Cmd>CBd<CR>
|
||||
CB: Remove a box
|
||||
n <Space>cbb * <Cmd>CBccbox<CR>
|
||||
CB: Box Title
|
||||
n <Space>cw * :Lspsaga diagnostic_jump_next<CR>
|
||||
Diagnostic Jump Next
|
||||
n <Space>cv * :Lspsaga diagnostic_jump_prev<CR>
|
||||
Diagnostic Jump Prev
|
||||
n <Space>cu * :Lspsaga preview_definition<CR>
|
||||
Preview Definition
|
||||
n <Space>cT * :Telescope lsp_type_definitions<CR>
|
||||
LSP Type Definitions
|
||||
n <Space>ct * :Lspsaga peek_type_definition<CR>
|
||||
Peek Type Definition
|
||||
n <Space>cs * :Telescope lsp_document_symbols<CR>
|
||||
LSP Document Symbols
|
||||
n <Space>cR * :Lspsaga rename ++project<CR>
|
||||
Rename Project wide
|
||||
n <Space>cr * :Lspsaga rename<CR>
|
||||
Rename
|
||||
n <Space>cp * :Lspsaga peek_definition<CR>
|
||||
Peek Definition
|
||||
n <Space>cl * :Lspsaga show_cursor_diagnostics<CR>
|
||||
Cursor Diagnostics
|
||||
n <Space>ci * :Lspsaga implement<CR>
|
||||
Implementations
|
||||
x <Space>cf * :lua vim.lsp.buf.format()<CR>
|
||||
Format
|
||||
n <Space>cf * :lua vim.lsp.buf.format()<CR>
|
||||
Format
|
||||
n <Space>cd * :Lspsaga show_line_diagnostics<CR>
|
||||
Line Diagnostics
|
||||
n <Space>cco * :Lspsaga outgoing_calls<CR>
|
||||
Outgoing Calls
|
||||
n <Space>cci * :Lspsaga incoming_calls<CR>
|
||||
Incoming Calls
|
||||
n <Space>ca * :Lspsaga code_action<CR>
|
||||
Code Action
|
||||
n <Space>cg * :lua require("neogen").generate()<CR>
|
||||
Generate annotations
|
||||
n <Space>bw * :lua MiniBufremove.wipeout()<CR>
|
||||
Wipeout
|
||||
n <Space>bl * :bnext<CR>
|
||||
Next
|
||||
n <Space>bk * :blast<CR>
|
||||
Last
|
||||
n <Space>bj * :bfirst<CR>
|
||||
First
|
||||
n <Space>bh * :bprev<CR>
|
||||
Prev
|
||||
n <Space>bd * :lua MiniBufremove.delete()<CR>
|
||||
Delete
|
||||
x # * vim/_defaults.lua
|
||||
:help v_#-default
|
||||
o % <Plug>(MatchitOperationForward)
|
||||
x % <Plug>(MatchitVisualForward)
|
||||
n % <Plug>(MatchitNormalForward)
|
||||
n & * :&&<CR>
|
||||
:help &-default
|
||||
x * * <Lua 3: vim/_defaults.lua:0>
|
||||
x * * vim/_defaults.lua
|
||||
:help v_star-default
|
||||
o ; * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
|
||||
Repeat jump
|
||||
x ; * <Cmd>lua MiniJump.jump()<CR>
|
||||
Repeat jump
|
||||
n ; * <Cmd>lua MiniJump.jump()<CR>
|
||||
Repeat jump
|
||||
v < * <gv
|
||||
Indent Left
|
||||
n < * <gv
|
||||
Indent Left
|
||||
v > * >gv
|
||||
Indent Right
|
||||
n > * >gv
|
||||
Indent Right
|
||||
n @ * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Execute macro without 'mini.clue' triggers
|
||||
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
|
||||
:help v_@-default
|
||||
n B ^
|
||||
n E $
|
||||
n K * <Lua 82: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Hover Documentation
|
||||
n QQ :q!<CR>
|
||||
Quickly Quit
|
||||
o F * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
|
||||
Jump backward
|
||||
x F * <Cmd>lua MiniJump.smart_jump(true, false)<CR>
|
||||
Jump backward
|
||||
n F * <Cmd>lua MiniJump.smart_jump(true, false)<CR>
|
||||
Jump backward
|
||||
n K * :Lspsaga hover_doc<CR>
|
||||
Hover Documentation
|
||||
n Q * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
|
||||
Execute macro without 'mini.clue' triggers
|
||||
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
|
||||
:help v_Q-default
|
||||
x S <Plug>VSurround
|
||||
n WW :w!<CR>
|
||||
Force write
|
||||
o T * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
|
||||
Jump backward till
|
||||
x T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
|
||||
Jump backward till
|
||||
n T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
|
||||
Jump backward till
|
||||
n Y * y$
|
||||
:help Y-default
|
||||
n Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||
Flash Treesitter
|
||||
x Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||
Flash Treesitter
|
||||
o Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||
Flash Treesitter
|
||||
o [% <Plug>(MatchitOperationMultiBackward)
|
||||
x [% <Plug>(MatchitVisualMultiBackward)
|
||||
n [% <Plug>(MatchitNormalMultiBackward)
|
||||
n [d * <Lua 15: vim/_defaults.lua:0>
|
||||
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
|
||||
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
|
||||
n [d * vim/_defaults.lua
|
||||
Jump to the previous diagnostic
|
||||
o ]% <Plug>(MatchitOperationMultiForward)
|
||||
x ]% <Plug>(MatchitVisualMultiForward)
|
||||
n ]% <Plug>(MatchitNormalMultiForward)
|
||||
n ]d * <Lua 14: vim/_defaults.lua:0>
|
||||
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
|
||||
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
|
||||
n ]d * vim/_defaults.lua
|
||||
Jump to the next diagnostic
|
||||
x a% <Plug>(MatchitVisualTextObject)
|
||||
n cS <Plug>CSurround
|
||||
n cs <Plug>Csurround
|
||||
n ds <Plug>Dsurround
|
||||
n dn * <Lua 81: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Diagnostic: Goto Next
|
||||
n dp * <Lua 80: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Diagnostic: Goto Prev
|
||||
o ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
|
||||
Object scope with border
|
||||
x ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
|
||||
Object scope with border
|
||||
o f * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
|
||||
Jump forward
|
||||
x f * <Cmd>lua MiniJump.smart_jump(false, false)<CR>
|
||||
Jump forward
|
||||
n f * <Cmd>lua MiniJump.smart_jump(false, false)<CR>
|
||||
Jump forward
|
||||
n gR * :RegexplainerToggle<CR>
|
||||
Toggle Regexplainer
|
||||
o g% <Plug>(MatchitOperationBackward)
|
||||
x g% <Plug>(MatchitVisualBackward)
|
||||
n g% <Plug>(MatchitNormalBackward)
|
||||
x gS <Plug>VgSurround
|
||||
n gP * <Lua 265: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:132>
|
||||
Close preview windows
|
||||
n gpr * <Lua 264: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:114>
|
||||
Preview references
|
||||
n gpD * <Lua 263: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:105>
|
||||
Preview declaration
|
||||
n gpi * <Lua 262: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:91>
|
||||
Preview implementation
|
||||
n gpt * <Lua 261: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:77>
|
||||
Preview type definition
|
||||
n gpd * <Lua 259: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:63>
|
||||
Preview definition
|
||||
n gR * :RegexplainerToggle<CR>
|
||||
Toggle Regexplainer
|
||||
n gd * <Lua 90: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Goto Definition
|
||||
n gr * <Lua 88: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Goto References
|
||||
n gI * <Lua 85: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Goto Implementation
|
||||
n gD * <Lua 79: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
LSP: Goto Declaration
|
||||
o gc * <Lua 13: vim/_defaults.lua:0>
|
||||
o gh * <Cmd>lua MiniDiff.textobject()<CR>
|
||||
Hunk range textobject
|
||||
x gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
|
||||
Reset hunks
|
||||
n gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
|
||||
Reset hunks
|
||||
x gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
|
||||
Apply hunks
|
||||
n gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
|
||||
Apply hunks
|
||||
x gs * <Cmd>lua MiniOperators.sort('visual')<CR>
|
||||
Sort selection
|
||||
n gss ^gsg_
|
||||
Sort line
|
||||
n gs * v:lua.MiniOperators.sort()
|
||||
Sort operator
|
||||
x gr * <Cmd>lua MiniOperators.replace('visual')<CR>
|
||||
Replace selection
|
||||
n grr gr_
|
||||
Replace line
|
||||
n gr * v:lua.MiniOperators.replace()
|
||||
Replace operator
|
||||
x gm * <Cmd>lua MiniOperators.multiply('visual')<CR>
|
||||
Multiply selection
|
||||
n gmm gm_
|
||||
Multiply line
|
||||
n gm * v:lua.MiniOperators.multiply()
|
||||
Multiply operator
|
||||
n gxx gx_
|
||||
Exchange line
|
||||
x g= * <Cmd>lua MiniOperators.evaluate('visual')<CR>
|
||||
Evaluate selection
|
||||
n g== g=_
|
||||
Evaluate line
|
||||
n g= * v:lua.MiniOperators.evaluate()
|
||||
Evaluate operator
|
||||
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 gc * <Cmd>lua MiniComment.textobject()<CR>
|
||||
Comment textobject
|
||||
n gcc * <Lua 12: vim/_defaults.lua:0>
|
||||
Toggle comment line
|
||||
x gc * <Lua 11: vim/_defaults.lua:0>
|
||||
Toggle comment
|
||||
n gc * <Lua 10: vim/_defaults.lua:0>
|
||||
Toggle comment
|
||||
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, …)
|
||||
n gcc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
|
||||
Comment line
|
||||
x gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
|
||||
Comment selection
|
||||
n gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
|
||||
Comment
|
||||
x gx * <Cmd>lua MiniOperators.exchange('visual')<CR>
|
||||
Exchange selection
|
||||
n gx * v:lua.MiniOperators.exchange()
|
||||
Exchange operator
|
||||
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'
|
||||
n n * <Lua 71: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
||||
Twilight
|
||||
n ss * :noh<CR>
|
||||
n tT * :TransparentToggle<CR>
|
||||
Toggle Transparency
|
||||
n ySS <Plug>YSsurround
|
||||
n ySs <Plug>YSsurround
|
||||
n yss <Plug>Yssurround
|
||||
n yS <Plug>YSurround
|
||||
n ys <Plug>Ysurround
|
||||
Move up
|
||||
n shn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Highlight next surrounding
|
||||
n sFn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Find next left surrounding
|
||||
n sfn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Find next right surrounding
|
||||
n srn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Replace next surrounding
|
||||
n sdn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Delete next surrounding
|
||||
n shl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Highlight previous surrounding
|
||||
n sFl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Find previous left surrounding
|
||||
n sfl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Find previous right surrounding
|
||||
n srl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Replace previous surrounding
|
||||
n sdl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Delete previous surrounding
|
||||
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
|
||||
Add surrounding to selection
|
||||
n sn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Update `MiniSurround.config.n_lines`
|
||||
n sh * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Highlight surrounding
|
||||
n sF * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Find left surrounding
|
||||
n sf * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Find right surrounding
|
||||
n sr * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Replace surrounding
|
||||
n sd * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Delete surrounding
|
||||
n sa * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
|
||||
Add surrounding
|
||||
o t * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
|
||||
Jump forward till
|
||||
x t * <Cmd>lua MiniJump.smart_jump(false, true)<CR>
|
||||
Jump forward till
|
||||
n t * <Cmd>lua MiniJump.smart_jump(false, true)<CR>
|
||||
Jump forward till
|
||||
x zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||
Flash
|
||||
n zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||
Flash
|
||||
o zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||
Flash
|
||||
n <C-W>= * <C-W>=
|
||||
Equal Size Splits
|
||||
n <C-W>+ * :resize +5<CR>
|
||||
H Resize +
|
||||
n <C-W>- * :resize -5<CR>
|
||||
H Resize -
|
||||
n <C-W>. * :vertical resize +10<CR>
|
||||
V Resize +
|
||||
n <C-W>, * :vertical resize -10<CR>
|
||||
V Resize -
|
||||
v <C-J> * :m '>+1<CR>gv=gv
|
||||
Move Block Down
|
||||
n <C-J> * :m '>+1<CR>gv=gv
|
||||
Move Block Down
|
||||
v <C-K> * :m '<-2<CR>gv=gv
|
||||
Move Block Up
|
||||
n <C-K> * :m '<-2<CR>gv=gv
|
||||
Move Block Up
|
||||
n <C-S> * :w!<CR>
|
||||
Save
|
||||
n <Down> * :echo "Use j to move!!"<CR>
|
||||
n <Up> * :echo "Use k to move!!"<CR>
|
||||
n <Right> * :echo "Use l to move!!"<CR>
|
||||
n <Left> * :echo "Use h to move!!"<CR>
|
||||
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>
|
||||
@@ -202,59 +408,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>
|
||||
n <C-Bslash> * :<C-U>TmuxNavigatePrevious<CR>
|
||||
n <C-J> * :<C-U>TmuxNavigateDown<CR>
|
||||
n <C-L> * :<C-U>TmuxNavigateRight<CR>
|
||||
n <C-H> * :<C-U>TmuxNavigateLeft<CR>
|
||||
v <Plug>VgSurround * :<C-U>call <SNR>28_opfunc(visualmode(),visualmode() ==# 'V' ? 0 : 1)<CR>
|
||||
v <Plug>VSurround * :<C-U>call <SNR>28_opfunc(visualmode(),visualmode() ==# 'V' ? 1 : 0)<CR>
|
||||
n <Plug>YSurround * <SNR>28_opfunc2('setup')
|
||||
n <Plug>Ysurround * <SNR>28_opfunc('setup')
|
||||
n <Plug>YSsurround * <SNR>28_opfunc2('setup').'_'
|
||||
n <Plug>Yssurround * '^'.v:count1.<SNR>28_opfunc('setup').'g_'
|
||||
n <Plug>CSurround * :<C-U>call <SNR>28_changesurround(1)<CR>
|
||||
n <Plug>Csurround * :<C-U>call <SNR>28_changesurround()<CR>
|
||||
n <Plug>Dsurround * :<C-U>call <SNR>28_dosurround(<SNR>28_inputtarget())<CR>
|
||||
n <Plug>SurroundRepeat * .
|
||||
n <C-P> * :Files<CR>
|
||||
FZF: search for files starting at current directory.
|
||||
o <Plug>(fzf-maps-o) * <C-C>:<C-U>call fzf#vim#maps('o', 0)<CR>
|
||||
x <Plug>(fzf-maps-x) * :<C-U>call fzf#vim#maps('x', 0)<CR>
|
||||
n <Plug>(fzf-maps-n) * :<C-U>call fzf#vim#maps('n', 0)<CR>
|
||||
n <Plug>(fzf-normal) * <Nop>
|
||||
n <Plug>(fzf-insert) * i
|
||||
s <Plug>luasnip-jump-prev * <Lua 292: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:57>
|
||||
LuaSnip: Jump to the previous node
|
||||
s <Plug>luasnip-jump-next * <Lua 291: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:54>
|
||||
LuaSnip: Jump to the next node
|
||||
s <Plug>luasnip-prev-choice * <Lua 290: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:51>
|
||||
LuaSnip: Change to the previous choice from the choiceNode
|
||||
s <Plug>luasnip-next-choice * <Lua 289: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:48>
|
||||
LuaSnip: Change to the next choice from the choiceNode
|
||||
s <Plug>luasnip-expand-snippet * <Lua 288: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:45>
|
||||
LuaSnip: Expand the current snippet
|
||||
s <Plug>luasnip-expand-or-jump * <Lua 287: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:42>
|
||||
LuaSnip: Expand or jump in the current snippet
|
||||
<Plug>luasnip-expand-repeat * <Lua 285: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:35>
|
||||
LuaSnip: Repeat last node expansion
|
||||
n <Plug>luasnip-delete-check * <Lua 283: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:28>
|
||||
LuaSnip: Removes current snippet from jumplist
|
||||
n <M-k> * <Cmd>lua MiniMove.move_line('up')<CR>
|
||||
Move line up
|
||||
n <M-j> * <Cmd>lua MiniMove.move_line('down')<CR>
|
||||
Move line down
|
||||
n <M-l> * <Cmd>lua MiniMove.move_line('right')<CR>
|
||||
Move line right
|
||||
n <M-h> * <Cmd>lua MiniMove.move_line('left')<CR>
|
||||
Move line left
|
||||
x <M-k> * <Cmd>lua MiniMove.move_selection('up')<CR>
|
||||
Move up
|
||||
x <M-j> * <Cmd>lua MiniMove.move_selection('down')<CR>
|
||||
Move down
|
||||
x <M-l> * <Cmd>lua MiniMove.move_selection('right')<CR>
|
||||
Move right
|
||||
x <M-h> * <Cmd>lua MiniMove.move_selection('left')<CR>
|
||||
Move left
|
||||
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
|
||||
n <C-S> * <Cmd>w<CR>
|
||||
Save file
|
||||
n <C-K> * :<C-U>TmuxNavigateUp<CR>
|
||||
n <Down> * <Cmd>echo "Use j to move!!"<CR>
|
||||
n <Up> * <Cmd>echo "Use k to move!!"<CR>
|
||||
n <Right> * <Cmd>echo "Use l to move!!"<CR>
|
||||
n <Left> * <Cmd>echo "Use h to move!!"<CR>
|
||||
n <C-W>. * :vertical resize +10<CR>
|
||||
V Resize +
|
||||
n <C-W>, * :vertical resize -10<CR>
|
||||
V Resize -
|
||||
n <C-W><C-D> <C-W>d
|
||||
Show diagnostics under the cursor
|
||||
n <C-W>d * <Lua 16: vim/_defaults.lua:0>
|
||||
n <C-W>d * vim/_defaults.lua
|
||||
Show diagnostics under the cursor
|
||||
n <C-L> * :lua vim.lsp.buf.signature_help()<CR>
|
||||
Signature
|
||||
```
|
||||
|
||||
- Generated on Mon 23 Sep 2024 10:24:56 EEST
|
||||
- Generated on Mon 9 Dec 2024 10:05:25 EET
|
||||
|
||||
@@ -27,13 +27,13 @@ servers = (
|
||||
family = "inet";
|
||||
},
|
||||
{ address = "irc.efnet.net"; chatnet = "EFNet"; port = "6667"; },
|
||||
{
|
||||
{
|
||||
address = "irc.undernet.org";
|
||||
chatnet = "Undernet";
|
||||
port = "6667";
|
||||
},
|
||||
{ address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
|
||||
{
|
||||
{
|
||||
address = "irc.quakenet.org";
|
||||
chatnet = "QuakeNet";
|
||||
port = "6667";
|
||||
@@ -50,7 +50,7 @@ chatnets = {
|
||||
max_whois = "4";
|
||||
max_query_chans = "5";
|
||||
};
|
||||
EFNet = {
|
||||
EFNet = {
|
||||
type = "IRC";
|
||||
max_kicks = "4";
|
||||
max_msgs = "3";
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# vim: ft=gitconfig sw=2 ts=2 et
|
||||
[include]
|
||||
path = ~/.dotfiles/config/git/shared
|
||||
|
||||
@@ -7,19 +8,19 @@
|
||||
[user]
|
||||
name = Ismo Vuorinen
|
||||
email = ismo.vuorinen@vincit.fi
|
||||
signingkey = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDLyOvkr1nRqMVv3UAizmk6C+q40H4khvw7qIXXXyOyFmzjwYx/Cuxoi4uZVjX+q4qFYJ+c312uu6YXiEtfyoCao3wub8r1cLBQ3eIvuyWp2K8Ixcd9JmFmLmoeiENpJxqyr0WPZLDkrCWUZCsQQh8zzGFnfciUdUdTiZ7s21AEhhmFRSdFlVfQSlGMFxU321psg1YilcP80bDwFd1FsL4TssSkwlbgP/twqnpZ4436TTo7kp0UnH/RZkfRdDWScKHaWgncBG0CZeQxGWnRp8fvZn/7gDnthcZhvnDALVBE7QFuZ90GxqVw3IGpHryV0mFO6EGQ9Ke9YX7pKVZPUXZjeCN4SVKsqFdVJ6AjaSJ9K7nL98rYK7qNzndT3cKqPNgPteyXWRulH68A51ecQqHrjTttZcdN9hKt9uBHpzuXsby2QObT+VB4MNjZapa+YYF/WgwJCml4lzn2xMFg1vYZD78pfoJ9e5f2cL1MMlUSDb0TNxmEXfDQ77H/pRpKDz0=
|
||||
signingkey = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDLyOvkr1nRqMVv3UAizmk6C+q40H4khvw7qIXXXyOyFmzjwYx/Cuxoi4uZVjX+q4qFYJ+c312uu6YXiEtfyoCao3wub8r1cLBQ3eIvuyWp2K8Ixcd9JmFmLmoeiENpJxqyr0WPZLDkrCWUZCsQQh8zzGFnfciUdUdTiZ7s21AEhhmFRSdFlVfQSlGMFxU321psg1YilcP80bDwFd1FsL4TssSkwlbgP/twqnpZ4436TTo7kp0UnH/RZkfRdDWScKHaWgncBG0CZeQxGWnRp8fvZn/7gDnthcZhvnDALVBE7QFuZ90GxqVw3IGpHryV0mFO6EGQ9Ke9YX7pKVZPUXZjeCN4SVKsqFdVJ6AjaSJ9K7nL98rYK7qNzndT3cKqPNgPteyXWRulH68A51ecQqHrjTttZcdN9hKt9uBHpzuXsby2QObT+VB4MNjZapa+YYF/WgwJCml4lzn2xMFg1vYZD78pfoJ9e5f2cL1MMlUSDb0TNxmEXfDQ77H/pRpKDz0=
|
||||
|
||||
[gpg "ssh"]
|
||||
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
|
||||
allowedSignersFile = ~/.ssh/allowed_signers
|
||||
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
|
||||
allowedSignersFile = ~/.ssh/allowed_signers
|
||||
|
||||
[commit]
|
||||
gpgsign = true
|
||||
gpgsign = true
|
||||
|
||||
[credential "https://github.com"]
|
||||
helper =
|
||||
helper = !/opt/homebrew/bin/gh auth git-credential
|
||||
helper =
|
||||
helper = !/opt/homebrew/bin/gh auth git-credential
|
||||
|
||||
[credential "https://gist.github.com"]
|
||||
helper =
|
||||
helper = !/opt/homebrew/bin/gh auth git-credential
|
||||
helper =
|
||||
helper = !/opt/homebrew/bin/gh auth git-credential
|
||||
|
||||
3
install
3
install
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
CONFIG="install.conf.yaml"
|
||||
@@ -16,6 +15,7 @@ git submodule update --init --recursive "${DOTBOT_DIR}"
|
||||
|
||||
"${DOTBOT_BIN_PATH}" \
|
||||
-d "${BASEDIR}" \
|
||||
--plugin-dir=tools/dotbot-asdf \
|
||||
--plugin-dir=tools/dotbot-brew \
|
||||
--plugin-dir=tools/dotbot-include \
|
||||
--plugin-dir=tools/dotbot-pip \
|
||||
@@ -29,6 +29,7 @@ if [ "${DOTBOT_HOST}" != "" ]; then
|
||||
&& echo "(!) Found $DOTBOT_HOST_CONFIG" \
|
||||
&& "$DOTBOT_BIN_PATH" \
|
||||
-d "$BASEDIR" \
|
||||
--plugin-dir=tools/dotbot-asdf \
|
||||
--plugin-dir=tools/dotbot-brew \
|
||||
--plugin-dir=tools/dotbot-include \
|
||||
--plugin-dir=tools/dotbot-pip \
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
---
|
||||
- include: 'tools/dotbot-defaults.yaml'
|
||||
|
||||
- clean:
|
||||
~/:
|
||||
~/.config:
|
||||
@@ -8,6 +9,7 @@
|
||||
recursive: true
|
||||
~/.ssh:
|
||||
recursive: true
|
||||
|
||||
- create:
|
||||
~/.cache:
|
||||
~/.cache/git:
|
||||
@@ -19,11 +21,13 @@
|
||||
~/.local/share/gnupg:
|
||||
mode: 0700
|
||||
~/.local/state:
|
||||
~/.local/state/zsh:
|
||||
~/.ssh:
|
||||
mode: 0700
|
||||
~/.ssh/local.d:
|
||||
mode: 0700
|
||||
~/Code:
|
||||
|
||||
- link:
|
||||
~/:
|
||||
force: true
|
||||
@@ -34,10 +38,14 @@
|
||||
glob: true
|
||||
relink: true
|
||||
path: config/*
|
||||
exclude: [config/nvm]
|
||||
exclude: [config/nvm, config/fzf]
|
||||
~/.local/bin:
|
||||
glob: true
|
||||
path: local/bin/*
|
||||
exclude: [local/bin/fzf]
|
||||
~/.local/fzf:
|
||||
glob: true
|
||||
path: config/fzf/*
|
||||
~/.local/man:
|
||||
glob: true
|
||||
path: local/man/**
|
||||
@@ -48,11 +56,55 @@
|
||||
glob: true
|
||||
mode: 0600
|
||||
path: ssh/*
|
||||
|
||||
- shell:
|
||||
- bash add-submodules.sh || true
|
||||
- git submodule update --init --recursive --force
|
||||
|
||||
- asdf:
|
||||
- plugin: 1password-cli
|
||||
url: https://github.com/NeoHsu/asdf-1password-cli.git
|
||||
- plugin: age
|
||||
url: https://github.com/threkk/asdf-age.git
|
||||
- plugin: direnv
|
||||
url: https://github.com/asdf-community/asdf-direnv.git
|
||||
- plugin: dotenv-linter
|
||||
url: https://github.com/wesleimp/asdf-dotenv-linter.git
|
||||
- plugin: editorconfig-checker
|
||||
url: https://github.com/gabitchov/asdf-editorconfig-checker.git
|
||||
- plugin: fd
|
||||
url: https://gitlab.com/wt0f/asdf-fd.git
|
||||
- plugin: github-cli
|
||||
url: https://github.com/bartlomiejdanek/asdf-github-cli.git
|
||||
- plugin: golang
|
||||
url: https://github.com/asdf-community/asdf-golang.git
|
||||
- plugin: hadolint
|
||||
url: https://github.com/devlincashman/asdf-hadolint.git
|
||||
- plugin: kubectl
|
||||
url: https://github.com/asdf-community/asdf-kubectl.git
|
||||
- plugin: pre-commit
|
||||
url: https://github.com/jonathanmorley/asdf-pre-commit.git
|
||||
- plugin: ripgrep
|
||||
url: https://gitlab.com/wt0f/asdf-ripgrep.git
|
||||
- plugin: rust
|
||||
url: https://github.com/code-lever/asdf-rust.git
|
||||
- plugin: shellcheck
|
||||
url: https://github.com/luizm/asdf-shellcheck.git
|
||||
- plugin: shfmt
|
||||
url: https://github.com/luizm/asdf-shfmt.git
|
||||
- plugin: terragrunt
|
||||
url: https://github.com/ohmer/asdf-terragrunt.git
|
||||
- plugin: tf-summarize
|
||||
url: https://github.com/adamcrews/asdf-tf-summarize.git
|
||||
- plugin: yamllint
|
||||
url: https://github.com/ericcornelissen/asdf-yamllint.git
|
||||
- plugin: yq
|
||||
url: https://github.com/sudermanjr/asdf-yq.git
|
||||
|
||||
- shell:
|
||||
- bash local/bin/dfm install all
|
||||
|
||||
- pipx:
|
||||
file: tools/requirements-pipx.txt
|
||||
stdout: false
|
||||
stdout: true
|
||||
stderr: true
|
||||
|
||||
191
local/bin/a
Executable file
191
local/bin/a
Executable file
@@ -0,0 +1,191 @@
|
||||
#!/usr/bin/env bash
|
||||
# A script for encrypting and decrypting files or directories with age and SSH keys
|
||||
|
||||
VERSION="1.0.0"
|
||||
|
||||
# Default ENV values
|
||||
KEYS_FILE="${AGE_KEYSFILE:-$HOME/.ssh/keys.txt}"
|
||||
KEYS_SOURCE="${AGE_KEYSSOURCE:-https://github.com/ivuorinen.keys}"
|
||||
LOG_FILE="${AGE_LOGFILE:-$HOME/.cache/a.log}"
|
||||
|
||||
VERBOSE=false
|
||||
|
||||
# Parse flags for verbosity
|
||||
for arg in "$@"; do
|
||||
if [[ "$arg" == "-v" || "$arg" == "--verbose" ]]; then
|
||||
VERBOSE=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Ensure log directory and file exist with correct permissions
|
||||
prepare_log_file()
|
||||
{
|
||||
local log_dir
|
||||
log_dir=$(dirname "$LOG_FILE")
|
||||
|
||||
# Create log directory if it does not exist
|
||||
if [[ ! -d "$log_dir" ]]; then
|
||||
mkdir -p "$log_dir"
|
||||
fi
|
||||
|
||||
# Create log file if it does not exist
|
||||
if [[ ! -f "$LOG_FILE" ]]; then
|
||||
touch "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# Set permissions to 0600
|
||||
chmod 0600 "$LOG_FILE"
|
||||
}
|
||||
|
||||
prepare_log_file
|
||||
|
||||
# Logging function
|
||||
log_message()
|
||||
{
|
||||
local message="$1"
|
||||
echo "$(date +'%Y-%m-%d %H:%M:%S') - $message" >> "$LOG_FILE"
|
||||
|
||||
# Print to user if verbose flag is set
|
||||
if [[ "$VERBOSE" == true ]]; then
|
||||
echo "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to print usage
|
||||
print_help()
|
||||
{
|
||||
cat << EOF
|
||||
Usage: a [command] [file_or_directory] [options]
|
||||
|
||||
Commands:
|
||||
e, enc, encrypt Encrypt the specified file or directory
|
||||
d, dec, decrypt Decrypt the specified file or directory
|
||||
help, --help Show this help message
|
||||
version, --version Show version information
|
||||
|
||||
Options:
|
||||
-v, --verbose Print log messages to console in addition to writing to log file
|
||||
|
||||
Environment Variables:
|
||||
AGE_KEYSFILE Path to the SSH keys file (default: $HOME/.ssh/keys.txt)
|
||||
AGE_KEYSSOURCE URL to fetch SSH keys if keys file does not exist
|
||||
AGE_LOGFILE Path to the log file (default: $HOME/.cache/a.log)
|
||||
|
||||
Examples:
|
||||
Encrypt a file:
|
||||
a e file.txt
|
||||
|
||||
Encrypt a directory:
|
||||
a e /path/to/directory
|
||||
|
||||
Decrypt a file:
|
||||
a d file.txt.age
|
||||
|
||||
Specify a custom keys file:
|
||||
AGE_KEYSFILE=/path/to/keys.txt a e file.txt
|
||||
|
||||
Specify a custom keys source and log file:
|
||||
AGE_KEYSSOURCE=https://example.com/keys.txt AGE_LOGFILE=/tmp/a.log a d file.txt.age
|
||||
EOF
|
||||
}
|
||||
|
||||
# Function to print version
|
||||
print_version()
|
||||
{
|
||||
echo "a version $VERSION"
|
||||
echo "Created by Ismo Vuorinen <https://github.com/ivuorinen>"
|
||||
}
|
||||
|
||||
# Function to fetch keys if missing
|
||||
fetch_keys_if_missing()
|
||||
{
|
||||
if [[ ! -f "$KEYS_FILE" ]]; then
|
||||
log_message "Keys file '$KEYS_FILE' not found. Attempting to fetch from $KEYS_SOURCE..."
|
||||
mkdir -p "$(dirname "$KEYS_FILE")"
|
||||
curl -s "$KEYS_SOURCE" -o "$KEYS_FILE"
|
||||
|
||||
if [[ $? -ne 0 || ! -s "$KEYS_FILE" ]]; then
|
||||
log_message "Error: Failed to fetch keys from $KEYS_SOURCE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod 0400 "$KEYS_FILE"
|
||||
log_message "Keys file fetched and permissions set to 0400."
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to encrypt files or directories
|
||||
encrypt_file_or_directory()
|
||||
{
|
||||
local file="$1"
|
||||
if [[ -d "$file" ]]; then
|
||||
for f in "$file"/*; do
|
||||
encrypt_file_or_directory "$f"
|
||||
done
|
||||
elif [[ -f "$file" ]]; then
|
||||
fetch_keys_if_missing
|
||||
local output_file="${file}.age"
|
||||
age -R "$KEYS_FILE" "$file" > "$output_file"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
log_message "File encrypted successfully: $output_file"
|
||||
else
|
||||
log_message "Error: Failed to encrypt file '$file'."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to decrypt files or directories
|
||||
decrypt_file_or_directory()
|
||||
{
|
||||
local file="$1"
|
||||
if [[ -d "$file" ]]; then
|
||||
for f in "$file"/*.age; do
|
||||
decrypt_file_or_directory "$f"
|
||||
done
|
||||
elif [[ -f "$file" ]]; then
|
||||
fetch_keys_if_missing
|
||||
local output_file="${file%.age}"
|
||||
age -d -i "$KEYS_FILE" "$file" > "$output_file"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
log_message "File decrypted successfully: $output_file"
|
||||
else
|
||||
log_message "Error: Failed to decrypt file '$file'."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Main logic
|
||||
case "$1" in
|
||||
e | enc | encrypt)
|
||||
if [[ $# -lt 2 ]]; then
|
||||
log_message "Error: No file or directory specified for encryption."
|
||||
print_help
|
||||
exit 1
|
||||
fi
|
||||
encrypt_file_or_directory "$2"
|
||||
;;
|
||||
d | dec | decrypt)
|
||||
if [[ $# -lt 2 ]]; then
|
||||
log_message "Error: No file or directory specified for decryption."
|
||||
print_help
|
||||
exit 1
|
||||
fi
|
||||
decrypt_file_or_directory "$2"
|
||||
;;
|
||||
help | --help)
|
||||
print_help
|
||||
;;
|
||||
version | --version)
|
||||
print_version
|
||||
;;
|
||||
*)
|
||||
log_message "Error: Unknown command '$1'"
|
||||
print_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# vim: ft=bash:syn=sh:ts=2:sw=2:et:ai:nowrap
|
||||
60
local/bin/ad
Executable file
60
local/bin/ad
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# age decrypt file with github keys
|
||||
|
||||
# Use ENV or default values for keys file and source
|
||||
KEYS_FILE="${AGE_KEYSFILE:-$HOME/.ssh/keys.txt}"
|
||||
KEYS_SOURCE="${AGE_KEYSSOURCE:-https://github.com/ivuorinen.keys}"
|
||||
|
||||
# Check for required commands
|
||||
if ! command -v age &> /dev/null; then
|
||||
echo "Error: age is not installed. Please install it to continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v curl &> /dev/null; then
|
||||
echo "Error: curl is not installed. Please install it to continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure a file is provided
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "Usage: $0 <file-to-decrypt>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FILE="$1"
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Error: File '$FILE' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if keys file exists, otherwise fetch it
|
||||
if [[ ! -f "$KEYS_FILE" ]]; then
|
||||
echo "Keys file '$KEYS_FILE' not found. Attempting to fetch from $KEYS_SOURCE..."
|
||||
|
||||
# Create the directory if it doesn't exist
|
||||
mkdir -p "$(dirname "$KEYS_FILE")"
|
||||
|
||||
# Fetch the keys and save to the file
|
||||
curl -s "$KEYS_SOURCE" -o "$KEYS_FILE"
|
||||
|
||||
if [[ $? -ne 0 || ! -s "$KEYS_FILE" ]]; then
|
||||
echo "Error: Failed to fetch keys from $KEYS_SOURCE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set permissions to 0400
|
||||
chmod 0400 "$KEYS_FILE"
|
||||
echo "Keys file fetched and permissions set to 0400."
|
||||
fi
|
||||
|
||||
# Decrypt the file
|
||||
OUTPUT_FILE="${FILE%.age}"
|
||||
age -d -i "$KEYS_FILE" "$FILE" > "$OUTPUT_FILE"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo "File decrypted successfully: $OUTPUT_FILE"
|
||||
else
|
||||
echo "Error: Failed to decrypt file."
|
||||
exit 1
|
||||
fi
|
||||
61
local/bin/ae
Executable file
61
local/bin/ae
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# age encrypt file with github keys
|
||||
|
||||
# Use ENV or default values for keys file and source
|
||||
KEYS_FILE="${AGE_KEYSFILE:-$HOME/.ssh/keys.txt}"
|
||||
KEYS_SOURCE="${AGE_KEYSSOURCE:-https://github.com/ivuorinen.keys}"
|
||||
|
||||
# Check for required commands
|
||||
if ! command -v age &> /dev/null; then
|
||||
echo "Error: age is not installed. Please install it to continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v curl &> /dev/null; then
|
||||
echo "Error: curl is not installed. Please install it to continue."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure a file is provided
|
||||
# shellcheck disable=SC2181
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "Usage: $0 <file-to-encrypt>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FILE="$1"
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Error: File '$FILE' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if keys file exists, otherwise fetch it
|
||||
if [[ ! -f "$KEYS_FILE" ]]; then
|
||||
echo "Keys file '$KEYS_FILE' not found. Attempting to fetch from $KEYS_SOURCE..."
|
||||
|
||||
# Create the directory if it doesn't exist
|
||||
mkdir -p "$(dirname "$KEYS_FILE")"
|
||||
|
||||
# Fetch the keys and save to the file
|
||||
curl -s "$KEYS_SOURCE" -o "$KEYS_FILE"
|
||||
|
||||
if [[ $? -ne 0 || ! -s "$KEYS_FILE" ]]; then
|
||||
echo "Error: Failed to fetch keys from $KEYS_SOURCE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set permissions to 0400
|
||||
chmod 0400 "$KEYS_FILE"
|
||||
echo "Keys file fetched and permissions set to 0400."
|
||||
fi
|
||||
|
||||
# Encrypt the file
|
||||
OUTPUT_FILE="${FILE}.age"
|
||||
age -R "$KEYS_FILE" "$FILE" > "$OUTPUT_FILE"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo "File encrypted successfully: $OUTPUT_FILE"
|
||||
else
|
||||
echo "Error: Failed to encrypt file."
|
||||
exit 1
|
||||
fi
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user