mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-02-02 20:48:03 +00:00
Compare commits
77 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0b03acebd8 | |||
| d172b86cb8 | |||
| f910dfb9ac | |||
| ee95d57ba0 | |||
| f8a317f3c7 | |||
| 3762e10932 | |||
| afda96902b | |||
| 3060b6ad66 | |||
|
|
4f154cf509 | ||
| 863d803483 | |||
| 07bb2b56d1 | |||
| 84a753100e | |||
| c8b01f3fda | |||
| 8e6a110aac | |||
| a8baa1671f | |||
| 2ccdd042f6 | |||
|
|
8cf43ed555 | ||
| e22094e0da | |||
| 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 |
@@ -11,6 +11,9 @@ trim_trailing_whitespace = true
|
|||||||
[*.md]
|
[*.md]
|
||||||
max_line_length = 100
|
max_line_length = 100
|
||||||
|
|
||||||
|
[*.lua]
|
||||||
|
max_line_length = 120
|
||||||
|
|
||||||
[*.php]
|
[*.php]
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
@@ -23,6 +26,8 @@ indent_size = 1
|
|||||||
indent_style = tab
|
indent_style = tab
|
||||||
|
|
||||||
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
|
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
|
||||||
|
indent_size = 2
|
||||||
|
tab_width = 2
|
||||||
shell_variant = bash # --language-variant
|
shell_variant = bash # --language-variant
|
||||||
binary_next_line = true
|
binary_next_line = true
|
||||||
switch_case_indent = true # --case-indent
|
switch_case_indent = true # --case-indent
|
||||||
@@ -34,5 +39,5 @@ function_next_line = true # --func-next-line
|
|||||||
# such as "shfmt -l -w .". When formatting files directly,
|
# such as "shfmt -l -w .". When formatting files directly,
|
||||||
# like "shfmt -w third_party/foo.sh" or "shfmt --filename=third_party/foo.sh",
|
# 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.
|
# 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
|
ignore = true
|
||||||
|
|||||||
3
.github/workflows/pre-commit-autoupdate.yml
vendored
3
.github/workflows/pre-commit-autoupdate.yml
vendored
@@ -2,7 +2,8 @@
|
|||||||
name: Pre-commit autoupdate
|
name: Pre-commit autoupdate
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 0 * * *"
|
# At 04:00 on Monday and Thursday.
|
||||||
|
- cron: "0 4 * * 1,4"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
jobs:
|
jobs:
|
||||||
auto-update:
|
auto-update:
|
||||||
|
|||||||
4
.github/workflows/update-submodules.yml
vendored
4
.github/workflows/update-submodules.yml
vendored
@@ -1,7 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: Update submodules
|
name: Update submodules
|
||||||
on:
|
on:
|
||||||
schedule: [{ cron: 0 3 * * * }]
|
schedule:
|
||||||
|
# At 04:00 on Monday and Thursday.
|
||||||
|
- cron: "0 4 * * 1,4"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
jobs:
|
jobs:
|
||||||
update-submodules:
|
update-submodules:
|
||||||
|
|||||||
45
.gitignore
vendored
45
.gitignore
vendored
@@ -1,32 +1,35 @@
|
|||||||
Brewfile.lock.json
|
!.gitkeep
|
||||||
lazy-lock.json
|
|
||||||
config/nvim/lazy-lock.json
|
|
||||||
*.log
|
|
||||||
*-secret
|
*-secret
|
||||||
|
*.bak
|
||||||
|
*.log
|
||||||
|
*.socket
|
||||||
*cache
|
*cache
|
||||||
|
.env
|
||||||
.idea
|
.idea
|
||||||
|
.nfs*
|
||||||
.vscode
|
.vscode
|
||||||
|
Brewfile.lock.json
|
||||||
|
antidote_plugins.zsh
|
||||||
|
config/alacritty/theme-active.toml
|
||||||
config/cheat/cheatsheets/pure-bash-bible/*
|
config/cheat/cheatsheets/pure-bash-bible/*
|
||||||
config/cheat/cheatsheets/tldr/*
|
config/cheat/cheatsheets/tldr/*
|
||||||
config/git/credentials
|
config/git/credentials
|
||||||
config/npm/npmrc
|
|
||||||
config/zsh/.zcompdump
|
|
||||||
config/alacritty/theme-active.toml
|
|
||||||
ssh/local.d/*
|
|
||||||
!ssh/local.d/.gitkeep
|
|
||||||
!.gitkeep
|
|
||||||
.env
|
|
||||||
local/share/fonts/*
|
|
||||||
node_modules
|
|
||||||
.nfs*
|
|
||||||
*.socket
|
|
||||||
iTermServer-*
|
|
||||||
lock
|
|
||||||
config/iterm2/AppSupport
|
|
||||||
config/gnupg/S.*
|
config/gnupg/S.*
|
||||||
config/gnupg/s
|
|
||||||
config/gnupg/private-keys-v1.d
|
config/gnupg/private-keys-v1.d
|
||||||
|
config/gnupg/s
|
||||||
|
config/iterm2/AppSupport
|
||||||
|
config/npm/npmrc
|
||||||
|
config/nvim/lazy-lock.json
|
||||||
config/nvim/spell/*
|
config/nvim/spell/*
|
||||||
!config/nvim/spell/.gitkeep
|
!config/nvim/spell/.gitkeep
|
||||||
antidote_plugins.zsh
|
config/zed/*
|
||||||
|
!config/zed/settings.json
|
||||||
|
config/zsh/.zcompdump
|
||||||
|
iTermServer-*
|
||||||
|
lazy-lock.json
|
||||||
|
local/share/fonts/*
|
||||||
|
local/bin/asdf/plugins/*
|
||||||
|
lock
|
||||||
|
node_modules
|
||||||
|
ssh/local.d/*
|
||||||
|
!ssh/local.d/.gitkeep
|
||||||
|
|||||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -64,3 +64,6 @@
|
|||||||
path = tools/antidote
|
path = tools/antidote
|
||||||
url = https://github.com/mattmc3/antidote.git
|
url = https://github.com/mattmc3/antidote.git
|
||||||
shallow = true
|
shallow = true
|
||||||
|
[submodule "dotbot-asdf"]
|
||||||
|
path = tools/dotbot-asdf
|
||||||
|
url = https://github.com/sobolevn/dotbot-asdf
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"diagnostics.globals": [
|
"diagnostics.globals": [
|
||||||
"vim"
|
"vim"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,14 @@ repos:
|
|||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v5.0.0
|
rev: v5.0.0
|
||||||
hooks:
|
hooks:
|
||||||
|
- id: requirements-txt-fixer
|
||||||
|
- id: detect-aws-credentials
|
||||||
|
- id: detect-private-key
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
args: [--markdown-linebreak-ext=md]
|
args: [--markdown-linebreak-ext=md]
|
||||||
- id: check-case-conflict
|
- id: check-case-conflict
|
||||||
- id: check-merge-conflict
|
- id: check-merge-conflict
|
||||||
|
- id: check-executables-have-shebangs
|
||||||
- id: check-shebang-scripts-are-executable
|
- id: check-shebang-scripts-are-executable
|
||||||
- id: check-symlinks
|
- id: check-symlinks
|
||||||
- id: check-toml
|
- id: check-toml
|
||||||
@@ -22,20 +26,15 @@ repos:
|
|||||||
rev: v0.43.0
|
rev: v0.43.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: markdownlint
|
- id: markdownlint
|
||||||
args: [-c, .markdownlint.yaml, --fix]
|
args: [-c, .markdownlint.json, --fix]
|
||||||
|
|
||||||
- repo: https://github.com/adrienverge/yamllint
|
- repo: https://github.com/adrienverge/yamllint
|
||||||
rev: v1.35.1
|
rev: v1.35.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: yamllint
|
- id: yamllint
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
- repo: https://github.com/koalaman/shellcheck-precommit
|
||||||
rev: v4.0.0-alpha.8
|
rev: v0.10.0
|
||||||
hooks:
|
|
||||||
- id: prettier
|
|
||||||
|
|
||||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
|
||||||
rev: v0.10.0.1
|
|
||||||
hooks:
|
hooks:
|
||||||
- id: shellcheck
|
- id: shellcheck
|
||||||
|
|
||||||
@@ -45,6 +44,16 @@ repos:
|
|||||||
- id: shfmt
|
- id: shfmt
|
||||||
|
|
||||||
- repo: https://github.com/rhysd/actionlint
|
- repo: https://github.com/rhysd/actionlint
|
||||||
rev: v1.7.4
|
rev: v1.7.5
|
||||||
hooks:
|
hooks:
|
||||||
- id: actionlint
|
- id: actionlint
|
||||||
|
|
||||||
|
- repo: https://github.com/renovatebot/pre-commit-hooks
|
||||||
|
rev: 39.86.3
|
||||||
|
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/*
|
.mypy_cache/*
|
||||||
Brewfile.lock.json
|
Brewfile.lock.json
|
||||||
config/cheat/cheatsheets/community
|
config/cheat/cheatsheets/community
|
||||||
config/cheat/cheatsheets/tldr
|
config/cheat/cheatsheets/tldr
|
||||||
config/fzf/*
|
config/fzf/*
|
||||||
config/nvim-kickstart/*
|
config/nvim/*
|
||||||
config/tmux/plugins/*
|
config/tmux/plugins/*
|
||||||
config/zsh/*
|
config/zsh/*
|
||||||
lazy-lock.json
|
lazy-lock.json
|
||||||
local/bin/antigen.zsh
|
local/bin/antigen.zsh
|
||||||
local/bin/asdf
|
local/bin/asdf
|
||||||
|
tools/antidote/*
|
||||||
tools/dotbot*
|
tools/dotbot*
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
3.13.0
|
3.13.1
|
||||||
|
|||||||
@@ -24,3 +24,7 @@ disable=SC1091
|
|||||||
# SC2174: When used with -p, -m only applies to the deepest directory.
|
# SC2174: When used with -p, -m only applies to the deepest directory.
|
||||||
# https://github.com/koalaman/shellcheck/wiki/SC2174
|
# https://github.com/koalaman/shellcheck/wiki/SC2174
|
||||||
disable=SC2174
|
disable=SC2174
|
||||||
|
|
||||||
|
# SC2016: Expressions don't expand in single quotes, use double quotes for that.
|
||||||
|
# https://www.shellcheck.net/wiki/SC2016
|
||||||
|
disable=SC2016
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ git submodule add --name dotbot-include \
|
|||||||
-f https://gitlab.com/gnfzdz/dotbot-include.git tools/dotbot-include
|
-f https://gitlab.com/gnfzdz/dotbot-include.git tools/dotbot-include
|
||||||
git submodule add --name dotbot-pip \
|
git submodule add --name dotbot-pip \
|
||||||
-f https://github.com/sobolevn/dotbot-pip.git tools/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
|
# other repos
|
||||||
git submodule add --name cheat-community \
|
git submodule add --name cheat-community \
|
||||||
@@ -19,8 +21,7 @@ git submodule add --name asdf \
|
|||||||
-f https://github.com/asdf-vm/asdf.git local/bin/asdf
|
-f https://github.com/asdf-vm/asdf.git local/bin/asdf
|
||||||
git submodule add --name antidote \
|
git submodule add --name antidote \
|
||||||
--depth 1 \
|
--depth 1 \
|
||||||
-f https://github.com/mattmc3/antidote.git tools/antidote \
|
-f https://github.com/mattmc3/antidote.git tools/antidote
|
||||||
|
|
||||||
|
|
||||||
# tmux plugin manager and plugins
|
# tmux plugin manager and plugins
|
||||||
git submodule add --name tmux/tmux-continuum \
|
git submodule add --name tmux/tmux-continuum \
|
||||||
@@ -44,6 +45,7 @@ git submodule add --name tmux/tmux-dark-notify \
|
|||||||
|
|
||||||
# Takes submodules and sets them to ignore all changes
|
# Takes submodules and sets them to ignore all changes
|
||||||
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do
|
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do
|
||||||
|
echo "Ignoring submodule changes for submodule.${MODULE}..."
|
||||||
git config "submodule.${MODULE}.ignore" all
|
git config "submodule.${MODULE}.ignore" all
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ export SHARED_SCRIPTS_SOURCED=0
|
|||||||
|
|
||||||
source "$DOTFILES/config/shared.sh"
|
source "$DOTFILES/config/shared.sh"
|
||||||
|
|
||||||
|
if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
|
||||||
|
builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash"
|
||||||
|
fi
|
||||||
|
|
||||||
# shellcheck source=../config/fzf/fzf.bash
|
# shellcheck source=../config/fzf/fzf.bash
|
||||||
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
|
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
|
||||||
source "${DOTFILES}/config/fzf/fzf.bash"
|
source "${DOTFILES}/config/fzf/fzf.bash"
|
||||||
|
|||||||
@@ -1,27 +1,19 @@
|
|||||||
asdf-plugin-manager 1.4.0
|
golang 1.23.4
|
||||||
golang 1.23.3
|
rust 1.83.0
|
||||||
ruby 3.3.4
|
|
||||||
rust 1.82.0
|
|
||||||
direnv 2.35.0
|
direnv 2.35.0
|
||||||
fd 10.2.0
|
fd 10.2.0
|
||||||
1password-cli 2.30.3
|
1password-cli 2.30.3
|
||||||
age 1.2.0
|
age 1.2.1
|
||||||
bottom 0.10.2
|
|
||||||
dotenv-linter 3.3.0
|
dotenv-linter 3.3.0
|
||||||
editorconfig-checker 2.8.0
|
editorconfig-checker 2.8.0
|
||||||
github-cli 2.61.0
|
github-cli 2.64.0
|
||||||
hadolint 2.12.0
|
hadolint 2.12.0
|
||||||
kubectl 1.31.2
|
kubectl 1.32.0
|
||||||
pre-commit 4.0.1
|
pre-commit 4.0.1
|
||||||
ripgrep 14.1.1
|
ripgrep 14.1.1
|
||||||
shellcheck 0.10.0
|
shellcheck 0.10.0
|
||||||
shfmt 3.10.0
|
shfmt 3.10.0
|
||||||
terragrunt 0.68.8
|
terragrunt 0.71.1
|
||||||
tf-summarize 0.3.13
|
tf-summarize 0.3.14
|
||||||
yamllint 1.35.1
|
yamllint 1.35.1
|
||||||
yq 4.44.3
|
yq 4.44.6
|
||||||
bats 1.11.0
|
|
||||||
gitleaks 8.18.4
|
|
||||||
delta 0.18.1
|
|
||||||
eza 0.20.8
|
|
||||||
sops 3.9.1
|
|
||||||
|
|||||||
@@ -45,6 +45,10 @@ setup_tmux_window_name_plugin()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if [[ -n $GHOSTTY_RESOURCES_DIR ]]; then
|
||||||
|
source "$GHOSTTY_RESOURCES_DIR"/shell-integration/zsh/ghostty-integration
|
||||||
|
fi
|
||||||
|
|
||||||
source_fzf_config
|
source_fzf_config
|
||||||
setup_tmux_window_name_plugin
|
setup_tmux_window_name_plugin
|
||||||
x-have antidot && eval "$(antidot init)"
|
x-have antidot && eval "$(antidot init)"
|
||||||
@@ -52,3 +56,7 @@ x-have antidot && eval "$(antidot init)"
|
|||||||
autoload -Uz compinit bashcompinit
|
autoload -Uz compinit bashcompinit
|
||||||
compinit -d $ZSH_COMPDUMP
|
compinit -d $ZSH_COMPDUMP
|
||||||
bashcompinit
|
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-latest=catthehacker/ubuntu:act-latest
|
||||||
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
||||||
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
||||||
|
|||||||
212
config/aerospace/aerospace.toml
Normal file
212
config/aerospace/aerospace.toml
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
# 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-name-regex-substring = 'settings' # All settings
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'org.ferdium.ferdium-app' # Ferdium, has WhatsApp etc.
|
||||||
|
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' # TIDAL
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 2'] # Float and move to workspace 2
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.TV' # Apple TV app
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.setapp.DesktopClient' # Setapp
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.electron.dockerdesktop' # Docker Desktop
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tinyspeck.slackmacgap' # Slack
|
||||||
|
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 = [{ 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-shift-f = 'layout floating'
|
||||||
|
# alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
||||||
|
|
||||||
|
# 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#workspace
|
||||||
|
alt-shift-1 = 'workspace 1' # Main
|
||||||
|
alt-shift-2 = 'workspace 2' # Media
|
||||||
|
ctrl-shift-1 = 'move-node-to-workspace 1'
|
||||||
|
ctrl-shift-2 = 'move-node-to-workspace 2'
|
||||||
|
|
||||||
|
alt-shift-tab = 'workspace-back-and-forth'
|
||||||
|
ctrl-shift-tab = 'move-workspace-to-monitor --wrap-around prev'
|
||||||
|
|
||||||
|
# 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-m = 'mode move'
|
||||||
|
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ alt-m │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
[mode.move.binding]
|
||||||
|
esc = ['reload-config', 'mode main']
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
|
||||||
|
1 = ['move-node-to-workspace 1 --focus-follows-window']
|
||||||
|
2 = ['move-node-to-workspace 2 --focus-follows-window']
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
||||||
|
h = 'move left'
|
||||||
|
j = 'move down'
|
||||||
|
k = 'move up'
|
||||||
|
l = 'move right'
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#join-with
|
||||||
|
shift-h = 'join-with left'
|
||||||
|
shift-j = 'join-with down'
|
||||||
|
shift-k = 'join-with up'
|
||||||
|
shift-l = 'join-with right'
|
||||||
|
# https://nikitabobko.github.io/AeroSpace/commands#resize
|
||||||
|
ctrl-h = 'resize smart -70'
|
||||||
|
ctrl-l = 'resize smart +70'
|
||||||
|
shift-left = 'resize smart +70'
|
||||||
|
shift-right = 'resize smart -70'
|
||||||
|
# https://nikitabobko.github.io/AeroSpace/commands#flatten-workspace-tree
|
||||||
|
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||||
|
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ alt-a │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
[mode.apps.binding]
|
||||||
|
esc = ['reload-config', 'mode main']
|
||||||
|
b = ['exec-and-forget open -a /Applications/Brave Browser.app', 'mode main'] # Browser
|
||||||
|
c = ['exec-and-forget open -a /Applications/Ferdium.app', 'mode main'] # Chat
|
||||||
|
g = ['exec-and-forget open -a /Applications/Ghostty.app', 'mode main'] # Ghostty
|
||||||
|
o = ['exec-and-forget open -a /Applications/Obsidian.app', 'mode main'] # Obsidian
|
||||||
|
s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main'] # Slack
|
||||||
|
t = ['exec-and-forget open -a /Applications/TIDAL.app', 'mode main'] # Tidal
|
||||||
|
w = ['exec-and-forget open -a /Applications/WezTerm.app', 'mode main'] # WezTerm
|
||||||
|
|
||||||
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
|
# │ alt-s │
|
||||||
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
|
[mode.service.binding]
|
||||||
|
esc = ['reload-config', 'mode main'] # reload config
|
||||||
|
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']
|
||||||
@@ -130,6 +130,6 @@ X_ALIAS_FILES=(
|
|||||||
)
|
)
|
||||||
for aliasFile in "${X_ALIAS_FILES[@]}"; do
|
for aliasFile in "${X_ALIAS_FILES[@]}"; do
|
||||||
# shellcheck source=$HOME/.config/alias-secret
|
# shellcheck source=$HOME/.config/alias-secret
|
||||||
[ -f "$aliasFile" ] && source "$aliasFile" && msg "Sourced $aliasFile"
|
[ -f "$aliasFile" ] && source "$aliasFile" && msgr ok "Sourced $aliasFile"
|
||||||
done
|
done
|
||||||
unset X_ALIAS_FILES
|
unset X_ALIAS_FILES
|
||||||
|
|||||||
@@ -1,27 +1,20 @@
|
|||||||
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
|
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
|
||||||
age https://github.com/threkk/asdf-age.git 396bdf6
|
age https://github.com/threkk/asdf-age.git 396bdf6
|
||||||
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git b5862c1
|
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git b5862c1
|
||||||
bats https://github.com/timgluz/asdf-bats.git 299551f
|
|
||||||
bottom https://github.com/carbonteq/asdf-btm.git fd8a55a
|
|
||||||
delta https://github.com/andweeb/asdf-delta.git 501318b
|
|
||||||
direnv https://github.com/asdf-community/asdf-direnv.git 6ff3dbe
|
direnv https://github.com/asdf-community/asdf-direnv.git 6ff3dbe
|
||||||
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
|
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
|
||||||
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
|
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
|
||||||
eza https://github.com/lwiechec/asdf-eza.git 11f578d
|
|
||||||
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
|
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
|
||||||
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
|
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
|
||||||
gitleaks https://github.com/jmcvetta/asdf-gitleaks.git 0cc0d7e
|
|
||||||
golang https://github.com/asdf-community/asdf-golang.git e2527a3
|
golang https://github.com/asdf-community/asdf-golang.git e2527a3
|
||||||
hadolint https://github.com/devlincashman/asdf-hadolint.git 335e230
|
hadolint https://github.com/devlincashman/asdf-hadolint.git c8eb88b
|
||||||
kubectl https://github.com/asdf-community/asdf-kubectl.git 2fb3b57
|
kubectl https://github.com/asdf-community/asdf-kubectl.git 2fb3b57
|
||||||
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
|
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
|
||||||
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
|
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
|
||||||
ruby https://github.com/asdf-vm/asdf-ruby.git 194fe45
|
|
||||||
rust https://github.com/code-lever/asdf-rust.git 95acf4f
|
rust https://github.com/code-lever/asdf-rust.git 95acf4f
|
||||||
shellcheck https://github.com/luizm/asdf-shellcheck.git 66200ff
|
shellcheck https://github.com/luizm/asdf-shellcheck.git 66200ff
|
||||||
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
|
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
|
||||||
sops https://github.com/feniix/asdf-sops.git 5c7a2fb
|
terragrunt https://github.com/ohmer/asdf-terragrunt.git 29f2935
|
||||||
terragrunt https://github.com/ohmer/asdf-terragrunt.git 4a6651a
|
|
||||||
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
|
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
|
||||||
yamllint https://github.com/ericcornelissen/asdf-yamllint.git bc2813e
|
yamllint https://github.com/ericcornelissen/asdf-yamllint.git e4cfb17
|
||||||
yq https://github.com/sudermanjr/asdf-yq.git 772992f
|
yq https://github.com/sudermanjr/asdf-yq.git 772992f
|
||||||
|
|||||||
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
|
path: ~/.config/cheat/cheatsheets/community
|
||||||
tags: [community]
|
tags: [community]
|
||||||
readonly: true
|
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
|
- name: pure-bash-bible
|
||||||
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
|
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
|
||||||
tags: [pure-bash-bible]
|
tags: [pure-bash-bible]
|
||||||
@@ -75,6 +69,13 @@ cheatpaths:
|
|||||||
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
|
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
|
||||||
tags: [tldr]
|
tags: [tldr]
|
||||||
readonly: true
|
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
|
# While it requires no configuration here, it's also worth noting that
|
||||||
# cheat will automatically append directories named '.cheat' within the
|
# cheat will automatically append directories named '.cheat' within the
|
||||||
# current working directory to the 'cheatpath'. This can be very useful if
|
# current working directory to the 'cheatpath'. This can be very useful if
|
||||||
|
|||||||
@@ -281,8 +281,8 @@ export LESSHISTFILE="$XDG_STATE_HOME"/less/history
|
|||||||
# export LESS_TERMCAP_md="$ORANGE"
|
# export LESS_TERMCAP_md="$ORANGE"
|
||||||
|
|
||||||
# zsh autoloaded terminfo
|
# zsh autoloaded terminfo
|
||||||
export TERMINFO="${XDG_DATA_HOME}/terminfo"
|
# export TERMINFO="${XDG_DATA_HOME}/terminfo"
|
||||||
export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
|
# export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
|
||||||
|
|
||||||
# Don't clear the screen after quitting a manual page
|
# Don't clear the screen after quitting a manual page
|
||||||
export MANPAGER="less -X"
|
export MANPAGER="less -X"
|
||||||
|
|||||||
15
config/ghostty/config
Normal file
15
config/ghostty/config
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# vim: ft=ghostty
|
||||||
|
theme = "light:tokyonight-day,dark:tokyonight-storm"
|
||||||
|
font-family = "JetBrainsMono Nerd Font Mono"
|
||||||
|
|
||||||
|
background-blur-radius = 15
|
||||||
|
background-opacity = 0.95
|
||||||
|
|
||||||
|
clipboard-read = allow
|
||||||
|
clipboard-write = allow
|
||||||
|
cursor-style = bar
|
||||||
|
custom-shader-animation = true
|
||||||
|
gtk-single-instance = true
|
||||||
|
mouse-hide-while-typing = true
|
||||||
|
shell-integration-features = true
|
||||||
|
window-theme = system
|
||||||
@@ -11,3 +11,5 @@
|
|||||||
[include]
|
[include]
|
||||||
path = ~/.config/git/overrides/config
|
path = ~/.config/git/overrides/config
|
||||||
|
|
||||||
|
[advice]
|
||||||
|
detachedHead = false
|
||||||
|
|||||||
6
config/glow/glow.yml
Normal file
6
config/glow/glow.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# mouse support (TUI-mode only)
|
||||||
|
mouse: false
|
||||||
|
# use pager to display markdown
|
||||||
|
pager: true
|
||||||
|
# word-wrap at width
|
||||||
|
width: 80
|
||||||
@@ -13,6 +13,7 @@ tap "jesseduffield/lazygit"
|
|||||||
tap "k8sgpt-ai/k8sgpt"
|
tap "k8sgpt-ai/k8sgpt"
|
||||||
tap "keith/formulae"
|
tap "keith/formulae"
|
||||||
tap "mongodb/brew"
|
tap "mongodb/brew"
|
||||||
|
tap "nikitabobko/tap"
|
||||||
tap "reviewdog/tap"
|
tap "reviewdog/tap"
|
||||||
tap "shivammathur/extensions"
|
tap "shivammathur/extensions"
|
||||||
tap "shivammathur/php"
|
tap "shivammathur/php"
|
||||||
@@ -21,6 +22,20 @@ tap "teamookla/speedtest"
|
|||||||
tap "xwmx/taps"
|
tap "xwmx/taps"
|
||||||
# Run your GitHub Actions locally
|
# Run your GitHub Actions locally
|
||||||
brew "act"
|
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
|
# Generic-purpose lossless compression algorithm by Google
|
||||||
brew "brotli"
|
brew "brotli"
|
||||||
# Library and utilities for processing GIFs
|
# Library and utilities for processing GIFs
|
||||||
@@ -31,6 +46,8 @@ brew "highway"
|
|||||||
brew "imath"
|
brew "imath"
|
||||||
# JPEG image codec that aids compression and decompression
|
# JPEG image codec that aids compression and decompression
|
||||||
brew "jpeg-turbo"
|
brew "jpeg-turbo"
|
||||||
|
# Library for manipulating PNG images
|
||||||
|
brew "libpng"
|
||||||
# Zstandard is a real-time compression algorithm
|
# Zstandard is a real-time compression algorithm
|
||||||
brew "zstd"
|
brew "zstd"
|
||||||
# New file format for still image compression
|
# New file format for still image compression
|
||||||
@@ -39,32 +56,38 @@ brew "jpeg-xl"
|
|||||||
brew "aom"
|
brew "aom"
|
||||||
# Apache Portable Runtime library
|
# Apache Portable Runtime library
|
||||||
brew "apr"
|
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
|
# Companion library to apr, the Apache Portable Runtime library
|
||||||
brew "apr-util"
|
brew "apr-util"
|
||||||
# Password hashing library and CLI utility
|
# Password hashing library and CLI utility
|
||||||
brew "argon2"
|
brew "argon2"
|
||||||
# Spell checker with better logic than ispell
|
|
||||||
brew "aspell"
|
|
||||||
# Automatic configure script builder
|
# Automatic configure script builder
|
||||||
brew "autoconf"
|
brew "autoconf"
|
||||||
# Collection of over 500 reusable autoconf macros
|
# Tool for generating GNU Standards-compliant Makefiles
|
||||||
brew "autoconf-archive"
|
brew "automake"
|
||||||
# Cryptographic recipes and primitives for Python
|
|
||||||
brew "cryptography"
|
|
||||||
# Official Amazon AWS command-line interface
|
|
||||||
brew "awscli"
|
|
||||||
# Bourne-Again SHell, a UNIX command interpreter
|
|
||||||
brew "bash"
|
|
||||||
# GNU multiple precision arithmetic library
|
# GNU multiple precision arithmetic library
|
||||||
brew "gmp"
|
brew "gmp"
|
||||||
# GNU File, Shell, and Text utilities
|
# GNU File, Shell, and Text utilities
|
||||||
brew "coreutils"
|
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
|
# Bash Automated Testing System
|
||||||
brew "bats-core"
|
brew "bats-core"
|
||||||
|
# Parser generator
|
||||||
|
brew "bison"
|
||||||
# Software library to render fonts
|
# Software library to render fonts
|
||||||
brew "freetype"
|
brew "freetype"
|
||||||
# XML-based font configuration API for X Windows
|
# XML-based font configuration API for X Windows
|
||||||
@@ -73,18 +96,32 @@ brew "fontconfig"
|
|||||||
brew "gettext"
|
brew "gettext"
|
||||||
# Core application library for C
|
# Core application library for C
|
||||||
brew "glib"
|
brew "glib"
|
||||||
# Mozilla CA bundle for Python
|
# Human-friendly and fast alternative to cut and (sometimes) awk
|
||||||
brew "certifi"
|
brew "choose-rust"
|
||||||
|
# Cross-platform make
|
||||||
|
brew "cmake"
|
||||||
# Get a file from an HTTP, HTTPS or FTP server
|
# Get a file from an HTTP, HTTPS or FTP server
|
||||||
brew "curl"
|
brew "curl"
|
||||||
# Lightweight DNS forwarder and DHCP server
|
# Lightweight DNS forwarder and DHCP server
|
||||||
brew "dnsmasq"
|
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
|
# Lock file during command
|
||||||
brew "flock"
|
brew "flock"
|
||||||
# Libraries to talk to Microsoft SQL Server and Sybase databases
|
# Libraries to talk to Microsoft SQL Server and Sybase databases
|
||||||
brew "freetds"
|
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
|
# Graphics library to dynamically manipulate images
|
||||||
brew "gd"
|
brew "gd"
|
||||||
|
# Disk usage analyzer with console interface written in Go
|
||||||
|
brew "gdu"
|
||||||
# GitHub command-line tool
|
# GitHub command-line tool
|
||||||
brew "gh"
|
brew "gh"
|
||||||
# OpenType text shaping engine
|
# OpenType text shaping engine
|
||||||
@@ -95,22 +132,40 @@ brew "libb2"
|
|||||||
brew "pango"
|
brew "pango"
|
||||||
# Distributed revision control system
|
# Distributed revision control system
|
||||||
brew "git"
|
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
|
# Render markdown on the CLI
|
||||||
brew "glow"
|
brew "glow"
|
||||||
|
# GNU implementation of the famous stream editor
|
||||||
|
brew "gnu-sed"
|
||||||
# Validating, recursive, caching DNS resolver
|
# Validating, recursive, caching DNS resolver
|
||||||
brew "unbound"
|
brew "unbound"
|
||||||
# GNU Transport Layer Security (TLS) Library
|
# GNU Transport Layer Security (TLS) Library
|
||||||
brew "gnutls"
|
brew "gnutls"
|
||||||
# GNU Pretty Good Privacy (PGP) package
|
# GNU Pretty Good Privacy (PGP) package
|
||||||
brew "gnupg"
|
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
|
# Image manipulation
|
||||||
brew "netpbm"
|
brew "netpbm"
|
||||||
# Library to render SVG files using Cairo
|
# Library to render SVG files using Cairo
|
||||||
brew "librsvg"
|
brew "librsvg"
|
||||||
# Graph visualization software from AT&T and Bell Labs
|
# Graph visualization software from AT&T and Bell Labs
|
||||||
brew "graphviz"
|
brew "graphviz"
|
||||||
|
# GNU grep, egrep and fgrep
|
||||||
|
brew "grep"
|
||||||
# Popular GNU data compression program
|
# Popular GNU data compression program
|
||||||
brew "gzip"
|
brew "gzip"
|
||||||
|
# Text-based UI library
|
||||||
|
brew "ncurses"
|
||||||
# Improved top (interactive process viewer)
|
# Improved top (interactive process viewer)
|
||||||
brew "htop"
|
brew "htop"
|
||||||
# Portable abstraction of the hierarchical topology of modern architectures
|
# Portable abstraction of the hierarchical topology of modern architectures
|
||||||
@@ -121,6 +176,8 @@ brew "libheif"
|
|||||||
brew "imagemagick"
|
brew "imagemagick"
|
||||||
# Modular IRC client
|
# Modular IRC client
|
||||||
brew "irssi"
|
brew "irssi"
|
||||||
|
# Image manipulation library
|
||||||
|
brew "jpeg"
|
||||||
# Lightweight and flexible command-line JSON processor
|
# Lightweight and flexible command-line JSON processor
|
||||||
brew "jq"
|
brew "jq"
|
||||||
# JSON parser for C
|
# JSON parser for C
|
||||||
@@ -129,40 +186,76 @@ brew "json-c"
|
|||||||
brew "krb5"
|
brew "krb5"
|
||||||
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
|
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
|
||||||
brew "legitify"
|
brew "legitify"
|
||||||
|
# BSD-style licensed readline alternative
|
||||||
|
brew "libedit"
|
||||||
|
# Conversion library
|
||||||
|
brew "libiconv"
|
||||||
# Postgres C API library
|
# Postgres C API library
|
||||||
brew "libpq"
|
brew "libpq"
|
||||||
|
# Version of the SSL/TLS protocol forked from OpenSSL
|
||||||
|
brew "libressl"
|
||||||
# Multi-platform support library with a focus on asynchronous I/O
|
# Multi-platform support library with a focus on asynchronous I/O
|
||||||
brew "libuv"
|
brew "libuv"
|
||||||
# YAML Parser
|
# GNOME XML library
|
||||||
brew "libyaml"
|
brew "libxml2"
|
||||||
|
# C library for reading, creating, and modifying zip archives
|
||||||
|
brew "libzip"
|
||||||
# Package manager for the Lua programming language
|
# Package manager for the Lua programming language
|
||||||
brew "luarocks"
|
brew "luarocks"
|
||||||
|
# LZMA-based compression program similar to gzip or bzip2
|
||||||
|
brew "lzip"
|
||||||
# Swiss Army Knife for macOS
|
# Swiss Army Knife for macOS
|
||||||
brew "m-cli"
|
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
|
# HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
|
||||||
brew "nginx"
|
brew "nginx"
|
||||||
# Port scanning utility for large networks
|
# Port scanning utility for large networks
|
||||||
brew "nmap"
|
brew "nmap"
|
||||||
# Libraries for security-enabled client and server applications
|
# Libraries for security-enabled client and server applications
|
||||||
brew "nss"
|
brew "nss"
|
||||||
# Open source suite of directory software
|
# Cryptography and SSL/TLS Toolkit
|
||||||
brew "openldap"
|
brew "openssl@1.1"
|
||||||
# General-purpose scripting language
|
# ISO-C API and CLI for generating UUIDs
|
||||||
brew "php"
|
brew "ossp-uuid"
|
||||||
# General-purpose scripting language
|
# General-purpose scripting language
|
||||||
brew "php@8.2"
|
brew "php@8.2"
|
||||||
# Manage compile and link flags for libraries
|
# General-purpose scripting language
|
||||||
brew "pkg-config"
|
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
|
# Send macOS User Notifications from the command-line
|
||||||
brew "terminal-notifier"
|
brew "terminal-notifier"
|
||||||
# Tool which checks for the support of TLS/SSL ciphers and flaws
|
# Tool which checks for the support of TLS/SSL ciphers and flaws
|
||||||
brew "testssl"
|
brew "testssl"
|
||||||
|
# Terraform version manager inspired by rbenv
|
||||||
|
brew "tfenv"
|
||||||
|
# Linter for Terraform files
|
||||||
|
brew "tflint"
|
||||||
# Static analysis security scanner for your terraform code
|
# Static analysis security scanner for your terraform code
|
||||||
brew "tfsec"
|
brew "tfsec"
|
||||||
# Terminal multiplexer
|
# Terminal multiplexer
|
||||||
brew "tmux"
|
brew "tmux"
|
||||||
# Display directories as trees (with optional color/HTML output)
|
# Display directories as trees (with optional color/HTML output)
|
||||||
brew "tree"
|
brew "tree"
|
||||||
|
# Tool for creating isolated virtual python environments
|
||||||
|
brew "virtualenv"
|
||||||
# Command-line interface to the WakaTime api
|
# Command-line interface to the WakaTime api
|
||||||
brew "wakatime-cli"
|
brew "wakatime-cli"
|
||||||
# Executes a program periodically, showing output fullscreen
|
# Executes a program periodically, showing output fullscreen
|
||||||
@@ -171,10 +264,16 @@ brew "watch"
|
|||||||
brew "wget"
|
brew "wget"
|
||||||
# Check your $HOME for unwanted files and directories
|
# Check your $HOME for unwanted files and directories
|
||||||
brew "xdg-ninja", args: ["HEAD"]
|
brew "xdg-ninja", args: ["HEAD"]
|
||||||
|
# General-purpose lossless data-compression library
|
||||||
|
brew "zlib"
|
||||||
# Watcher for macOS 10.14+ light/dark mode changes
|
# Watcher for macOS 10.14+ light/dark mode changes
|
||||||
brew "cormacrelf/tap/dark-notify"
|
brew "cormacrelf/tap/dark-notify"
|
||||||
# Igbinary PHP extension
|
# Cleans up your $HOME from those pesky dotfiles
|
||||||
brew "shivammathur/extensions/igbinary@8.3"
|
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
|
# Imagick PHP extension
|
||||||
brew "shivammathur/extensions/imagick@8.3"
|
brew "shivammathur/extensions/imagick@8.3"
|
||||||
# Mcrypt PHP extension
|
# Mcrypt PHP extension
|
||||||
@@ -190,9 +289,15 @@ brew "shivammathur/extensions/uuid@8.3"
|
|||||||
# Yaml PHP extension
|
# Yaml PHP extension
|
||||||
brew "shivammathur/extensions/yaml@8.3"
|
brew "shivammathur/extensions/yaml@8.3"
|
||||||
# General-purpose scripting language
|
# General-purpose scripting language
|
||||||
|
brew "shivammathur/php/php", link: false
|
||||||
|
# General-purpose scripting language
|
||||||
brew "shivammathur/php/php-debug"
|
brew "shivammathur/php/php-debug"
|
||||||
# Find & fix known vulnerabilities in open-source dependencies
|
# Find & fix known vulnerabilities in open-source dependencies
|
||||||
brew "snyk/tap/snyk"
|
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
|
# Text editor
|
||||||
cask "coda"
|
cask "coda"
|
||||||
# Universal database tool and SQL client
|
# Universal database tool and SQL client
|
||||||
@@ -206,10 +311,7 @@ cask "font-jetbrains-mono-nerd-font"
|
|||||||
cask "font-lato"
|
cask "font-lato"
|
||||||
cask "font-open-sans"
|
cask "font-open-sans"
|
||||||
cask "font-roboto"
|
cask "font-roboto"
|
||||||
cask "font-source-code-pro"
|
|
||||||
cask "font-source-code-pro-for-powerline"
|
cask "font-source-code-pro-for-powerline"
|
||||||
cask "font-source-sans-pro"
|
|
||||||
cask "font-source-serif-pro"
|
|
||||||
# GIT client
|
# GIT client
|
||||||
cask "fork"
|
cask "fork"
|
||||||
# HTTP and GraphQL Client
|
# HTTP and GraphQL Client
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
-- ── Install lazylazy ────────────────────────────────────────────────
|
-- ── Install lazylazy ────────────────────────────────────────────────
|
||||||
-- https://github.com/folke/lazy.nvim
|
-- https://github.com/folke/lazy.nvim
|
||||||
local lazypath = vim.fn.stdpath 'data' .. '/lazy/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 lazyrepo = 'https://github.com/folke/lazy.nvim.git'
|
||||||
local out = vim.fn.system {
|
local out = vim.fn.system {
|
||||||
'git',
|
'git',
|
||||||
@@ -52,10 +52,20 @@ require('lazy').setup(
|
|||||||
-- No need to notify about changes
|
-- No need to notify about changes
|
||||||
notify = false,
|
notify = false,
|
||||||
},
|
},
|
||||||
|
dev = {
|
||||||
|
path = '~/Code/nvim', -- Load wip plugins from this path
|
||||||
|
},
|
||||||
install = {
|
install = {
|
||||||
colorscheme = { vim.g.colors_theme },
|
colorscheme = { vim.g.colors_theme },
|
||||||
},
|
},
|
||||||
|
profiling = {
|
||||||
|
loader = true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require('nvm-default').setup()
|
||||||
|
|
||||||
|
require 'keymaps'
|
||||||
|
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
-- vim: ts=2 sts=2 sw=2 et
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group
|
local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group
|
||||||
local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
|
local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
|
||||||
|
|
||||||
-- ── Highlight on yank ───────────────────────────────────────────────
|
-- Highlight on yank
|
||||||
-- See `:help vim.highlight.on_yank()`
|
-- See `:help vim.highlight.on_yank()`
|
||||||
autocmd('TextYankPost', {
|
autocmd('TextYankPost', {
|
||||||
callback = function() vim.highlight.on_yank() end,
|
callback = function() vim.highlight.on_yank() end,
|
||||||
@@ -13,7 +13,21 @@ autocmd('TextYankPost', {
|
|||||||
pattern = '*',
|
pattern = '*',
|
||||||
})
|
})
|
||||||
|
|
||||||
-- ── Windows to close with "q" ───────────────────────────────────────
|
-- 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', {
|
autocmd('FileType', {
|
||||||
group = augroup('close_with_q', { clear = true }),
|
group = augroup('close_with_q', { clear = true }),
|
||||||
pattern = {
|
pattern = {
|
||||||
@@ -44,33 +58,49 @@ autocmd('FileType', {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- ── make it easier to close man-files when opened inline ────────────
|
-- make it easier to close man-files when opened inline
|
||||||
autocmd('FileType', {
|
autocmd('FileType', {
|
||||||
group = augroup('man_unlisted', { clear = true }),
|
group = augroup('man_unlisted', { clear = true }),
|
||||||
pattern = { 'man' },
|
pattern = { 'man' },
|
||||||
callback = function(event) vim.bo[event.buf].buflisted = false end,
|
callback = function(event) vim.bo[event.buf].buflisted = false end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- ── wrap and check for spell in text filetypes ──────────────────────
|
-- wrap and check for spell in text filetypes
|
||||||
vim.api.nvim_create_autocmd('FileType', {
|
autocmd('FileType', {
|
||||||
group = augroup('wrap_spell', { clear = true }),
|
group = augroup('wrap_spell', { clear = true }),
|
||||||
pattern = { 'text', 'plaintex', 'typst', 'gitcommit', 'markdown' },
|
pattern = {
|
||||||
|
'text',
|
||||||
|
'plaintex',
|
||||||
|
'typst',
|
||||||
|
'gitcommit',
|
||||||
|
'markdown',
|
||||||
|
'asciidoc',
|
||||||
|
'rst',
|
||||||
|
'tex',
|
||||||
|
},
|
||||||
callback = function()
|
callback = function()
|
||||||
vim.opt_local.wrap = true
|
vim.opt_local.wrap = true
|
||||||
vim.opt_local.spell = true
|
vim.opt_local.spell = true
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- ── Fix conceallevel for json files ─────────────────────────────────
|
-- Fix conceallevel for json files
|
||||||
vim.api.nvim_create_autocmd({ 'FileType' }, {
|
autocmd({ 'FileType' }, {
|
||||||
group = augroup('json_conceal', { clear = true }),
|
group = augroup('json_conceal', { clear = true }),
|
||||||
pattern = { 'json', 'jsonc', 'json5' },
|
pattern = { 'json', 'jsonc', 'json5' },
|
||||||
callback = function() vim.opt_local.conceallevel = 0 end,
|
callback = function() vim.opt_local.conceallevel = 0 end,
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
|
-- 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',
|
desc = 'Set filetype for SSH config directory',
|
||||||
pattern = '*/?.ssh/{config|shared}.d/*',
|
pattern = {
|
||||||
|
'*/?.ssh/{config|shared}.d/*',
|
||||||
|
'*/?.ssh/config.local',
|
||||||
|
'*/?.ssh/config.work',
|
||||||
|
},
|
||||||
command = 'set filetype=sshconfig',
|
command = 'set filetype=sshconfig',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
156
config/nvim/lua/keymaps.lua
Normal file
156
config/nvim/lua/keymaps.lua
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=120 :
|
||||||
|
|
||||||
|
require 'utils'
|
||||||
|
|
||||||
|
-- ╭─────────────────────────────────────────────────────────╮
|
||||||
|
-- │ Keymaps │
|
||||||
|
-- ╰─────────────────────────────────────────────────────────╯
|
||||||
|
|
||||||
|
-- ── 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>')
|
||||||
|
|
||||||
|
-- ── 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' })
|
||||||
|
|
||||||
|
-- ── 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 }
|
||||||
|
)
|
||||||
|
|
||||||
|
-- ── 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')
|
||||||
|
|
||||||
|
-- ── 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' })
|
||||||
|
|
||||||
|
-- ── 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')
|
||||||
|
|
||||||
|
-- ── 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')
|
||||||
|
|
||||||
|
-- ── 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')
|
||||||
|
|
||||||
|
-- ── 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,
|
||||||
|
'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
|
||||||
@@ -2,36 +2,48 @@
|
|||||||
-- │ neovim configuration options │
|
-- │ neovim configuration options │
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
-- ╰─────────────────────────────────────────────────────────╯
|
||||||
-- See `:help vim.opt`
|
-- See `:help vim.opt`
|
||||||
|
-- `:help vim.g`
|
||||||
-- For more options, you can see `:help option-list`
|
-- For more options, you can see `:help option-list`
|
||||||
|
|
||||||
-- Enables the experimental nvim 0.5 features
|
local g = vim.g -- A table to store global variables
|
||||||
vim.loader.enable()
|
local o = vim.opt -- A table to store global options
|
||||||
|
|
||||||
-- Map leader and local leader
|
-- vim.global
|
||||||
vim.g.mapleader = ' '
|
g.mapleader = ' ' -- Space as the leader key
|
||||||
vim.g.maplocalleader = ' '
|
g.maplocalleader = ' ' -- Space as the local leader key
|
||||||
|
|
||||||
-- Set the colorscheme and variants
|
g.colors_theme = 'tokyonight' -- Set the colorscheme
|
||||||
vim.g.colors_theme = 'tokyonight'
|
g.colors_variant_light = 'tokyonight-day' -- Set the light variant
|
||||||
vim.g.colors_variant_light = 'tokyonight-day'
|
g.colors_variant_dark = 'tokyonight-storm' -- Set the dark variant
|
||||||
vim.g.colors_variant_dark = 'tokyonight-storm'
|
|
||||||
|
|
||||||
-- Make sure editorconfig support is enabled
|
g.editorconfig = true -- Make sure editorconfig support is enabled
|
||||||
vim.g.editorconfig = true
|
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 =
|
||||||
|
'buffers,curdir,folds,tabpages,winsize,winpos,terminal,localoptions'
|
||||||
|
|
||||||
-- Enable the colorcolumn
|
-- Enable the colorcolumn
|
||||||
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })
|
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })
|
||||||
|
|
||||||
-- Enable line numbers and relative line numbers
|
|
||||||
vim.opt.number = true
|
|
||||||
vim.opt.relativenumber = true
|
|
||||||
|
|
||||||
-- Enable mouse mode, can be useful for resizing splits for example!
|
|
||||||
vim.opt.mouse = 'a'
|
|
||||||
|
|
||||||
-- Don't show the mode, since it's already in the status line
|
|
||||||
vim.opt.showmode = false
|
|
||||||
|
|
||||||
-- Sync clipboard between OS and Neovim.
|
-- Sync clipboard between OS and Neovim.
|
||||||
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||||||
-- See `:help 'clipboard'`
|
-- See `:help 'clipboard'`
|
||||||
@@ -40,95 +52,4 @@ vim.schedule(function()
|
|||||||
vim.opt.clipboard = c
|
vim.opt.clipboard = c
|
||||||
end)
|
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 = 250
|
|
||||||
|
|
||||||
-- 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 = 15
|
|
||||||
|
|
||||||
-- 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.o.spelllang = 'en_us'
|
|
||||||
|
|
||||||
-- Tree-sitter settings
|
|
||||||
vim.g.loaded_perl_provider = 0
|
|
||||||
vim.g.loaded_ruby_provider = 0
|
|
||||||
|
|
||||||
-- kevinhwang91/nvim-ufo settings
|
|
||||||
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
|
|
||||||
vim.o.foldcolumn = '1' -- '0' is not bad
|
|
||||||
-- Using ufo provider need a large value, feel free to decrease the value
|
|
||||||
vim.o.foldlevel = 99
|
|
||||||
vim.o.foldlevelstart = 99
|
|
||||||
vim.o.foldenable = true
|
|
||||||
|
|
||||||
-- anuvyklack/windows.nvim settings
|
|
||||||
vim.o.winwidth = 15
|
|
||||||
vim.o.winminwidth = 10
|
|
||||||
vim.o.equalalways = false
|
|
||||||
|
|
||||||
-- folke/noice.nvim settings
|
|
||||||
vim.g.noice_ignored_filetypes = {
|
|
||||||
'fugitiveblame',
|
|
||||||
'fugitive',
|
|
||||||
'gitcommit',
|
|
||||||
'noice',
|
|
||||||
}
|
|
||||||
|
|
||||||
-- ── Deal with word wrap ───────────────────────────────────────────────────────
|
|
||||||
local m = vim.api.nvim_set_keymap
|
|
||||||
m(
|
|
||||||
'n',
|
|
||||||
'k',
|
|
||||||
"v:count == 0 ? 'gk' : 'k'",
|
|
||||||
{ desc = 'Move up', noremap = true, expr = true }
|
|
||||||
)
|
|
||||||
m(
|
|
||||||
'n',
|
|
||||||
'j',
|
|
||||||
"v:count == 0 ? 'gj' : 'j'",
|
|
||||||
{ desc = 'Move down', noremap = true, expr = true }
|
|
||||||
)
|
|
||||||
|
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
-- vim: ts=2 sts=2 sw=2 et
|
||||||
|
|||||||
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,235 +0,0 @@
|
|||||||
-- Auto completion
|
|
||||||
-- https://github.com/hrsh7th/nvim-cmp
|
|
||||||
return {
|
|
||||||
{
|
|
||||||
'hrsh7th/nvim-cmp',
|
|
||||||
lazy = false,
|
|
||||||
version = false, -- Use the latest version of the plugin
|
|
||||||
event = 'InsertEnter',
|
|
||||||
dependencies = {
|
|
||||||
'hrsh7th/cmp-nvim-lsp',
|
|
||||||
|
|
||||||
-- ── LuaSnip Dependencies ────────────────────────────────────────────
|
|
||||||
-- Snippet Engine for Neovim written in Lua.
|
|
||||||
-- https://github.com/L3MON4D3/LuaSnip
|
|
||||||
{
|
|
||||||
'L3MON4D3/LuaSnip',
|
|
||||||
version = '*',
|
|
||||||
event = 'BufReadPre',
|
|
||||||
build = 'make install_jsregexp',
|
|
||||||
dependencies = {
|
|
||||||
-- luasnip completion source for nvim-cmp
|
|
||||||
-- https://github.com/saadparwaiz1/cmp_luasnip
|
|
||||||
'saadparwaiz1/cmp_luasnip',
|
|
||||||
'rafamadriz/friendly-snippets',
|
|
||||||
'molleweide/LuaSnip-snippets.nvim',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Adds other completion capabilities. ─────────────────────────────
|
|
||||||
-- ── nvim-cmp does not ship with all sources by default.
|
|
||||||
-- ── They are split into multiple repos for maintenance purposes.
|
|
||||||
{ 'hrsh7th/cmp-nvim-lsp' },
|
|
||||||
{ 'hrsh7th/cmp-buffer' },
|
|
||||||
{ 'hrsh7th/cmp-path' },
|
|
||||||
{ 'hrsh7th/cmp-nvim-lsp-signature-help' },
|
|
||||||
{ 'hrsh7th/cmp-emoji' },
|
|
||||||
{ 'hrsh7th/cmp-cmdline' },
|
|
||||||
-- cmp import and use all environment variables from .env.* and system
|
|
||||||
-- https://github.com/SergioRibera/cmp-dotenv
|
|
||||||
{ 'SergioRibera/cmp-dotenv' },
|
|
||||||
-- A dictionary completion source for nvim-cmp
|
|
||||||
-- https://github.com/uga-rosa/cmp-dictionary
|
|
||||||
{ 'uga-rosa/cmp-dictionary' },
|
|
||||||
-- An additional source for nvim-cmp to autocomplete packages and its versions
|
|
||||||
-- https://github.com/David-Kunz/cmp-npm
|
|
||||||
{
|
|
||||||
'David-Kunz/cmp-npm',
|
|
||||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
|
||||||
ft = 'json',
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
-- https://github.com/chrisgrieser/cmp-nerdfont
|
|
||||||
{ 'chrisgrieser/cmp-nerdfont' },
|
|
||||||
|
|
||||||
-- ── Other deps ──────────────────────────────────────────────────────
|
|
||||||
-- vscode-like pictograms for neovim lsp completion items
|
|
||||||
-- https://github.com/onsails/lspkind.nvim
|
|
||||||
{ 'onsails/lspkind.nvim' },
|
|
||||||
-- Lua plugin to turn github copilot into a cmp source
|
|
||||||
-- https://github.com/zbirenbaum/copilot-cmp
|
|
||||||
{
|
|
||||||
'zbirenbaum/copilot-cmp',
|
|
||||||
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,
|
|
||||||
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 {}
|
|
||||||
luasnip.snippets = require('luasnip_snippets').load_snippets()
|
|
||||||
require('luasnip.loaders.from_vscode').lazy_load()
|
|
||||||
|
|
||||||
require('copilot_cmp').setup()
|
|
||||||
|
|
||||||
require('cmp_dictionary').setup {
|
|
||||||
paths = { '/usr/share/dict/words' },
|
|
||||||
exact_length = 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
local has_words_before = function()
|
|
||||||
if vim.api.nvim_get_option_value('buftype', {}) == 'prompt' then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0
|
|
||||||
and vim.api
|
|
||||||
.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]
|
|
||||||
:match '^%s*$'
|
|
||||||
== nil
|
|
||||||
end
|
|
||||||
|
|
||||||
cmp.setup {
|
|
||||||
formatting = {
|
|
||||||
format = lspkind.cmp_format {
|
|
||||||
mode = 'symbol',
|
|
||||||
max_width = function() return math.floor(0.45 * vim.o.columns) end,
|
|
||||||
show_labelDetails = true,
|
|
||||||
symbol_map = {
|
|
||||||
Copilot = '',
|
|
||||||
Text = '',
|
|
||||||
Constructor = '',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
window = {
|
|
||||||
completion = cmp.config.window.bordered(),
|
|
||||||
documentation = cmp.config.window.bordered(),
|
|
||||||
},
|
|
||||||
view = {
|
|
||||||
width = function(_, _) return math.min(80, vim.o.columns) end,
|
|
||||||
-- entries = {
|
|
||||||
-- name = 'custom',
|
|
||||||
-- selection_order = 'near_cursor',
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
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-c>'] = cmp.mapping.complete(),
|
|
||||||
['<CR>'] = cmp.mapping.confirm {
|
|
||||||
behavior = cmp.ConfirmBehavior.Replace,
|
|
||||||
select = true,
|
|
||||||
},
|
|
||||||
['<Tab>'] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() and has_words_before() then
|
|
||||||
cmp.select_next_item { behavior = cmp.SelectBehavior.Select }
|
|
||||||
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 = {
|
|
||||||
-- function arg popups while typing
|
|
||||||
{ name = 'nvim_lsp_signature_help', group_index = 2 },
|
|
||||||
|
|
||||||
-- Copilot Source
|
|
||||||
{ name = 'copilot', group_index = 2 },
|
|
||||||
-- Other Sources
|
|
||||||
{ name = 'dictionary', keyword_length = 2, group_index = 2 },
|
|
||||||
{ name = 'npm', keyword_length = 4, group_index = 2 },
|
|
||||||
{ name = 'nvim_lsp', group_index = 2 },
|
|
||||||
{ name = 'luasnip', group_index = 2 },
|
|
||||||
{ name = 'dotenv', group_index = 2 },
|
|
||||||
{ name = 'path', group_index = 2 },
|
|
||||||
{ name = 'emoji', group_index = 2 },
|
|
||||||
{ name = 'nerdfont', group_index = 2 },
|
|
||||||
},
|
|
||||||
sorting = {
|
|
||||||
priority_weight = 2,
|
|
||||||
comparators = {
|
|
||||||
require('copilot_cmp.comparators').prioritize,
|
|
||||||
|
|
||||||
-- Below is the default comparator list and order for nvim-cmp
|
|
||||||
cmp.config.compare.offset,
|
|
||||||
cmp.config.compare.scopes, --this is commented in nvim-cmp too
|
|
||||||
cmp.config.compare.exact,
|
|
||||||
cmp.config.compare.score,
|
|
||||||
cmp.config.compare.recently_used,
|
|
||||||
cmp.config.compare.locality,
|
|
||||||
cmp.config.compare.kind,
|
|
||||||
cmp.config.compare.sort_text,
|
|
||||||
cmp.config.compare.length,
|
|
||||||
cmp.config.compare.order,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp.setup.cmdline({ '/', '?' }, {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = {
|
|
||||||
{ name = 'buffer' },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
|
|
||||||
cmp.setup.cmdline(':', {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = 'path' },
|
|
||||||
}, {
|
|
||||||
{ name = 'cmdline' },
|
|
||||||
}),
|
|
||||||
matching = { disallow_symbol_nonprefix_matching = false },
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- Luasnip choice node completion source for nvim-cmp
|
|
||||||
-- https://github.com/doxnit/cmp-luasnip-choice
|
|
||||||
{
|
|
||||||
'doxnit/cmp-luasnip-choice',
|
|
||||||
config = function()
|
|
||||||
require('cmp_luasnip_choice').setup {
|
|
||||||
auto_open = true, -- Automatically open nvim-cmp on choice node (default: true)
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
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,9 +0,0 @@
|
|||||||
-- Commenting
|
|
||||||
-- "gc" to comment visual regions/lines
|
|
||||||
-- https://github.com/numToStr/Comment.nvim
|
|
||||||
return {
|
|
||||||
'numToStr/Comment.nvim',
|
|
||||||
version = '*',
|
|
||||||
event = { 'BufRead', 'BufNewFile' },
|
|
||||||
opts = {},
|
|
||||||
}
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
-- ── Formatting ──────────────────────────────────────────────────────
|
|
||||||
-- Lightweight yet powerful formatter plugin for Neovim
|
|
||||||
-- https://github.com/stevearc/conform.nvim
|
|
||||||
|
|
||||||
return {
|
|
||||||
{
|
|
||||||
'stevearc/conform.nvim',
|
|
||||||
event = { 'BufWritePre' },
|
|
||||||
cmd = { 'ConformInfo' },
|
|
||||||
opts = {
|
|
||||||
-- Enable or disable logging
|
|
||||||
notify_on_error = false,
|
|
||||||
-- Set the default formatter for all filetypes
|
|
||||||
default_formatter = 'injected',
|
|
||||||
-- Set the default formatter for all filetypes
|
|
||||||
default_formatter_opts = {
|
|
||||||
lsp_format = 'fallback',
|
|
||||||
-- Set the default formatter for all filetypes
|
|
||||||
formatter = 'injected',
|
|
||||||
-- Set the default formatter for all filetypes
|
|
||||||
-- formatter_opts = {},
|
|
||||||
},
|
|
||||||
-- The options you set here will be merged with the builtin formatters.
|
|
||||||
-- You can also define any custom formatters here.
|
|
||||||
formatters = {
|
|
||||||
injected = { options = { ignore_errors = true } },
|
|
||||||
-- # Example of using dprint only when a dprint.json file is present
|
|
||||||
-- dprint = {
|
|
||||||
-- condition = function(ctx)
|
|
||||||
-- return vim.fs.find({ "dprint.json" }, { path = ctx.filename, upward = true })[1]
|
|
||||||
-- end,
|
|
||||||
-- },
|
|
||||||
--
|
|
||||||
-- # Example of using shfmt with extra args
|
|
||||||
-- shfmt = {
|
|
||||||
-- prepend_args = { "-i", "2", "-ci" },
|
|
||||||
-- },
|
|
||||||
},
|
|
||||||
formatters_by_ft = {
|
|
||||||
lua = { 'stylua' },
|
|
||||||
-- Conform will run multiple formatters sequentially
|
|
||||||
go = { 'goimports', 'gofmt' },
|
|
||||||
-- You can customize some of the format options for the filetype (:help conform.format)
|
|
||||||
-- rust = { 'rustfmt', lsp_format = 'fallback' },
|
|
||||||
},
|
|
||||||
format_on_save = function(bufnr)
|
|
||||||
-- Disable autoformat on certain filetypes
|
|
||||||
local ignore_filetypes = {
|
|
||||||
'c',
|
|
||||||
'cpp',
|
|
||||||
'sql',
|
|
||||||
'java',
|
|
||||||
}
|
|
||||||
if vim.tbl_contains(ignore_filetypes, vim.bo[bufnr].filetype) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
-- Disable with a global or buffer-local variable
|
|
||||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
-- Disable autoformat for files in a certain path
|
|
||||||
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
|
||||||
if bufname:match '/node_modules/' then return end
|
|
||||||
if bufname:match '/vendor/' then return end
|
|
||||||
if bufname:match '/dist/' then return end
|
|
||||||
if bufname:match '/build/' then return end
|
|
||||||
|
|
||||||
return { timeout_ms = 500, lsp_format = 'fallback' }
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
init = function()
|
|
||||||
-- If you want the formatexpr, here is the place to set it
|
|
||||||
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
-- Automatically install formatters registered with conform.nvim via mason.nvim
|
|
||||||
-- https://github.com/zapling/mason-conform.nvim
|
|
||||||
{
|
|
||||||
'zapling/mason-conform.nvim',
|
|
||||||
depends = {
|
|
||||||
'stevearc/conform.nvim',
|
|
||||||
'williamboman/mason.nvim',
|
|
||||||
},
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
-- Navigate your code with search labels, enhanced
|
|
||||||
-- character motions and Treesitter integration
|
|
||||||
-- https://github.com/folke/flash.nvim
|
|
||||||
return {
|
|
||||||
'folke/flash.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
opts = {},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
'zk',
|
|
||||||
mode = { 'n', 'x', 'o' },
|
|
||||||
function() require('flash').jump() end,
|
|
||||||
desc = 'Flash',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'Zk',
|
|
||||||
mode = { 'n', 'x', 'o' },
|
|
||||||
function() require('flash').treesitter() end,
|
|
||||||
desc = 'Flash Treesitter',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'r',
|
|
||||||
mode = 'o',
|
|
||||||
function() require('flash').remote() end,
|
|
||||||
desc = 'Remote Flash',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'R',
|
|
||||||
mode = { 'o', 'x' },
|
|
||||||
function() require('flash').treesitter_search() end,
|
|
||||||
desc = 'Treesitter Search',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<m-s>',
|
|
||||||
mode = { 'c' },
|
|
||||||
function() require('flash').toggle() end,
|
|
||||||
desc = 'Toggle Flash Search',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
|
||||||
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,31 +0,0 @@
|
|||||||
-- A small Neovim plugin for previewing definitions using floating windows.
|
|
||||||
-- https://github.com/rmagatti/goto-preview
|
|
||||||
return {
|
|
||||||
'rmagatti/goto-preview',
|
|
||||||
dependencies = {
|
|
||||||
{ 'nvim-telescope/telescope.nvim' },
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
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' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
-- Getting you where you want with the fewest keystrokes.
|
|
||||||
-- https://github.com/ThePrimeagen/harpoon
|
|
||||||
return {
|
|
||||||
'ThePrimeagen/harpoon',
|
|
||||||
branch = 'harpoon2',
|
|
||||||
dependencies = {
|
|
||||||
'nvim-lua/plenary.nvim',
|
|
||||||
'nvim-telescope/telescope.nvim',
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
local harpoon = require 'harpoon'
|
|
||||||
harpoon:setup {}
|
|
||||||
|
|
||||||
-- basic telescope configuration
|
|
||||||
local conf = require('telescope.config').values
|
|
||||||
local function toggle_telescope(harpoon_files)
|
|
||||||
local file_paths = {}
|
|
||||||
for _, item in ipairs(harpoon_files.items) do
|
|
||||||
table.insert(file_paths, item.value)
|
|
||||||
end
|
|
||||||
|
|
||||||
require('telescope.pickers')
|
|
||||||
.new({}, {
|
|
||||||
prompt_title = 'Harpoon',
|
|
||||||
finder = require('telescope.finders').new_table {
|
|
||||||
results = file_paths,
|
|
||||||
},
|
|
||||||
previewer = conf.file_previewer {},
|
|
||||||
sorter = conf.generic_sorter {},
|
|
||||||
})
|
|
||||||
:find()
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>hw',
|
|
||||||
function() toggle_telescope(harpoon:list()) end,
|
|
||||||
{ desc = 'Open harpoon window with telescope' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>ht',
|
|
||||||
function() harpoon.ui:toggle_quick_menu(harpoon:list()) end,
|
|
||||||
{ desc = 'Open Harpoon Quick menu' }
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
-- improve neovim lsp experience
|
|
||||||
-- https://github.com/nvimdev/lspsaga.nvim
|
|
||||||
-- https://nvimdev.github.io/lspsaga/
|
|
||||||
return {
|
|
||||||
'nvimdev/lspsaga.nvim',
|
|
||||||
event = 'LspAttach',
|
|
||||||
dependencies = {
|
|
||||||
'nvim-treesitter/nvim-treesitter', -- optional
|
|
||||||
'nvim-tree/nvim-web-devicons', -- optional
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
code_action = {
|
|
||||||
show_server_name = true,
|
|
||||||
},
|
|
||||||
diagnostic = {
|
|
||||||
keys = {
|
|
||||||
quit = { 'q', '<ESC>' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,239 +1,356 @@
|
|||||||
-- ── Mason and LSPConfig integration ────────────────────────────────────
|
-- ╭─────────────────────────────────────────────────────────╮
|
||||||
|
-- │ LSP Setup and configuration │
|
||||||
|
-- ╰─────────────────────────────────────────────────────────╯
|
||||||
|
|
||||||
-- ── LSP settings. ───────────────────────────────────────────────
|
-- LSP Servers are installed and configured by lsp-setup.nvim
|
||||||
-- This function gets run when an LSP connects to a particular buffer.
|
-- Mason formatters Conform uses to format files
|
||||||
|
-- These are automatically configured by zapling/mason-conform.nvim
|
||||||
|
|
||||||
-- Make runtime files discoverable to the server
|
local lsp_servers = {
|
||||||
local runtime_path = vim.split(package.path, ';')
|
bashls = {},
|
||||||
table.insert(runtime_path, 'lua/?.lua')
|
-- csharp_ls = {},
|
||||||
table.insert(runtime_path, 'lua/?/init.lua')
|
diagnosticls = {},
|
||||||
|
gopls = {
|
||||||
-- nvim-cmp supports additional completion capabilities
|
settings = {
|
||||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
gopls = {
|
||||||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
hints = {
|
||||||
-- Tell the server the capability of foldingRange,
|
rangeVariableTypes = true,
|
||||||
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
|
parameterNames = true,
|
||||||
capabilities.textDocument.foldingRange = {
|
constantValues = true,
|
||||||
dynamicRegistration = true,
|
assignVariableTypes = true,
|
||||||
lineFoldingOnly = true,
|
compositeLiteralFields = true,
|
||||||
|
compositeLiteralTypes = true,
|
||||||
|
functionTypeParameters = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
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/neoconf.nvim',
|
'folke/lazydev.nvim',
|
||||||
cmd = 'Neoconf',
|
ft = 'lua',
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
-- Portable package manager for Neovim that runs everywhere Neovim runs.
|
|
||||||
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
|
|
||||||
-- https://github.com/williamboman/mason.nvim
|
|
||||||
{
|
|
||||||
'williamboman/mason.nvim',
|
|
||||||
cmd = 'Mason',
|
|
||||||
run = ':MasonUpdate',
|
|
||||||
opts = {
|
opts = {
|
||||||
PATH = 'prepend',
|
library = {
|
||||||
-- Mason servers to install
|
-- Load luvit types when the `vim.uv` word is found
|
||||||
-- See: https://mason-registry.dev/registry/list
|
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
|
||||||
ensure_installed = {
|
|
||||||
'clang-format',
|
|
||||||
'codespell',
|
|
||||||
'commitlint',
|
|
||||||
'editorconfig-checker',
|
|
||||||
'fixjson',
|
|
||||||
'jsonlint',
|
|
||||||
'luacheck',
|
|
||||||
'phpcbf',
|
|
||||||
'phpcs',
|
|
||||||
'phpmd',
|
|
||||||
'prettier',
|
|
||||||
'shellcheck',
|
|
||||||
'shfmt',
|
|
||||||
'stylua',
|
|
||||||
'yamllint',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
|
|
||||||
-- https://github.com/williamboman/mason-lspconfig.nvim
|
|
||||||
{
|
|
||||||
'williamboman/mason-lspconfig.nvim',
|
|
||||||
opts = {
|
|
||||||
-- ── Enable the following language servers ───────────────────────────
|
|
||||||
-- :help lspconfig-all for all pre-configured LSPs
|
|
||||||
ensure_installed = {
|
|
||||||
'bashls',
|
|
||||||
-- 'csharp_ls',
|
|
||||||
'diagnosticls',
|
|
||||||
'gopls',
|
|
||||||
'html',
|
|
||||||
'intelephense',
|
|
||||||
'jsonls',
|
|
||||||
'lua_ls',
|
|
||||||
'tailwindcss',
|
|
||||||
'ts_ls',
|
|
||||||
'vimls',
|
|
||||||
'volar',
|
|
||||||
},
|
|
||||||
automatic_installation = true,
|
|
||||||
handlers = {
|
|
||||||
-- The first entry (without a key) will be the default handler
|
|
||||||
-- and will be called for each installed server that doesn't have
|
|
||||||
-- a dedicated handler.
|
|
||||||
function(server_name) -- default handler (optional)
|
|
||||||
require('lspconfig')[server_name].setup {
|
|
||||||
on_attach = function(_, bufnr)
|
|
||||||
-- Create a command `:Format` local to the LSP buffer
|
|
||||||
vim.api.nvim_buf_create_user_command(
|
|
||||||
bufnr,
|
|
||||||
'Format',
|
|
||||||
function(_)
|
|
||||||
require('conform').format {
|
|
||||||
formatters = { 'injected' },
|
|
||||||
async = true,
|
|
||||||
lsp_fallback = true,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
{ desc = 'Format current buffer with LSP' }
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
capabilities = capabilities,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
-- Next, you can provide targeted overrides for specific servers.
|
|
||||||
['lua_ls'] = function()
|
|
||||||
require('lspconfig')['lua_ls'].setup {
|
|
||||||
on_attach = function(_, bufnr)
|
|
||||||
-- Create a command `:Format` local to the LSP buffer
|
|
||||||
vim.api.nvim_buf_create_user_command(
|
|
||||||
bufnr,
|
|
||||||
'Format',
|
|
||||||
function(_)
|
|
||||||
require('conform').format {
|
|
||||||
formatters = { 'injected' },
|
|
||||||
async = true,
|
|
||||||
lsp_fallback = true,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
{ desc = 'Format current buffer with LSP' }
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
capabilities = capabilities,
|
|
||||||
settings = {
|
|
||||||
Lua = {
|
|
||||||
runtime = {
|
|
||||||
-- Tell the language server which version of Lua you're
|
|
||||||
-- using (most likely LuaJIT)
|
|
||||||
version = 'LuaJIT',
|
|
||||||
-- Setup your lua path
|
|
||||||
path = runtime_path,
|
|
||||||
},
|
|
||||||
diagnostics = {
|
|
||||||
globals = { 'vim' },
|
|
||||||
disable = {
|
|
||||||
-- Ignore lua_ls noisy `missing-fields` warnings
|
|
||||||
'missing-fields',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
workspace = {
|
|
||||||
library = vim.api.nvim_get_runtime_file('', true),
|
|
||||||
checkThirdParty = false,
|
|
||||||
},
|
|
||||||
-- Do not send telemetry data containing a randomized
|
|
||||||
-- but unique identifier
|
|
||||||
telemetry = { enable = false },
|
|
||||||
|
|
||||||
completion = {
|
|
||||||
callSnippet = 'Replace',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
['jsonls'] = function()
|
|
||||||
require('lspconfig')['jsonls'].setup {
|
|
||||||
on_attach = function(_, bufnr)
|
|
||||||
-- Create a command `:Format` local to the LSP buffer
|
|
||||||
vim.api.nvim_buf_create_user_command(
|
|
||||||
bufnr,
|
|
||||||
'Format',
|
|
||||||
function(_)
|
|
||||||
require('conform').format {
|
|
||||||
formatters = { 'injected' },
|
|
||||||
async = true,
|
|
||||||
lsp_fallback = true,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
{ desc = 'Format current buffer with LSP' }
|
|
||||||
)
|
|
||||||
end,
|
|
||||||
capabilities = capabilities,
|
|
||||||
settings = {
|
|
||||||
json = {
|
|
||||||
schemas = require('schemastore').json.schemas(),
|
|
||||||
validate = { enable = true },
|
|
||||||
},
|
|
||||||
yaml = {
|
|
||||||
schemaStore = {
|
|
||||||
-- You must disable built-in SchemaStore support if you want to use
|
|
||||||
-- this plugin and its advanced options like `ignore`.
|
|
||||||
enable = false,
|
|
||||||
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
|
|
||||||
url = '',
|
|
||||||
},
|
|
||||||
schemas = require('schemastore').yaml.schemas(),
|
|
||||||
validate = { enable = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
['ts_ls'] = function()
|
|
||||||
local mason_registry = require 'mason-registry'
|
|
||||||
local ts_plugin_location = mason_registry
|
|
||||||
.get_package('vue-language-server')
|
|
||||||
:get_install_path() .. '/node_modules/@vue/typescript-plugin'
|
|
||||||
require('lspconfig')['volar'].setup {
|
|
||||||
init_options = {
|
|
||||||
plugins = {
|
|
||||||
{
|
|
||||||
name = '@vue/typescript-plugin',
|
|
||||||
location = ts_plugin_location,
|
|
||||||
languages = { 'javascript', 'typescript', 'vue' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
filetypes = {
|
|
||||||
'typescript',
|
|
||||||
'javascript',
|
|
||||||
'javascriptreact',
|
|
||||||
'typescriptreact',
|
|
||||||
'vue',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- ── Misc ───────────────────────────────────────────────────
|
-- Meta type definitions for the Lua platform Luvit.
|
||||||
-- vscode-like pictograms for neovim lsp completion items
|
-- https://github.com/Bilal2453/luvit-meta
|
||||||
-- https://github.com/onsails/lspkind-nvim
|
{ 'Bilal2453/luvit-meta', lazy = true },
|
||||||
{ 'onsails/lspkind.nvim', opts = {} },
|
|
||||||
-- JSON schemas for Neovim
|
|
||||||
-- https://github.com/b0o/SchemaStore.nvim
|
|
||||||
{ 'b0o/schemastore.nvim' },
|
|
||||||
|
|
||||||
-- ── LSP ────────────────────────────────────────────────────
|
-- improve neovim lsp experience
|
||||||
-- Quick start configs for Nvim LSP
|
-- https://github.com/nvimdev/lspsaga.nvim
|
||||||
-- https://github.com/neovim/nvim-lspconfig
|
-- https://nvimdev.github.io/lspsaga/
|
||||||
{ 'neovim/nvim-lspconfig', dependencies = { 'folke/neoconf.nvim' } },
|
|
||||||
|
|
||||||
-- Garbage collector that stops inactive LSP clients to free RAM
|
|
||||||
-- https://github.com/Zeioth/garbage-day.nvim
|
|
||||||
{
|
{
|
||||||
'zeioth/garbage-day.nvim',
|
'nvimdev/lspsaga.nvim',
|
||||||
dependencies = 'neovim/nvim-lspconfig',
|
event = 'LspAttach',
|
||||||
event = 'VeryLazy',
|
dependencies = {
|
||||||
opts = {},
|
'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',
|
||||||
|
'phpmd',
|
||||||
|
'phpstan',
|
||||||
|
'pint',
|
||||||
|
'prettierd',
|
||||||
|
'semgrep',
|
||||||
|
'shellcheck',
|
||||||
|
'shfmt',
|
||||||
|
'staticcheck',
|
||||||
|
'stylua',
|
||||||
|
'trivy',
|
||||||
|
'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 of junnplus/lsp-setup config
|
||||||
|
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
|
||||||
|
|
||||||
|
-- Disable autoformat for files in a certain path
|
||||||
|
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
||||||
|
if bufname:match '/node_modules/' then return end
|
||||||
|
|
||||||
|
return {
|
||||||
|
timeout_ms = 500,
|
||||||
|
lsp_format = lsp_format_opt,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { 'stylua' },
|
||||||
|
sh = { 'shfmt' },
|
||||||
|
bash = { 'shfmt' },
|
||||||
|
php = { 'phpcbf' },
|
||||||
|
-- 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 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
init = function()
|
||||||
|
-- If you want the formatexpr, here is the place to set it
|
||||||
|
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
-- Automatically install formatters registered with conform.nvim via mason.nvim
|
||||||
|
-- https://github.com/zapling/mason-conform.nvim
|
||||||
|
{ 'zapling/mason-conform.nvim', opts = {} },
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,70 +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()
|
|
||||||
local function diff_source()
|
|
||||||
local gitsigns = vim.b.gitsigns_status_dict
|
|
||||||
if gitsigns then
|
|
||||||
return {
|
|
||||||
added = gitsigns.added,
|
|
||||||
modified = gitsigns.changed,
|
|
||||||
removed = gitsigns.removed,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
require('lualine').setup {
|
|
||||||
options = {
|
|
||||||
icons_enabled = true,
|
|
||||||
component_separators = '|',
|
|
||||||
section_separators = '',
|
|
||||||
},
|
|
||||||
-- Sections
|
|
||||||
-- +-------------------------------------------------+
|
|
||||||
-- | A | B | C X | Y | Z |
|
|
||||||
-- +-------------------------------------------------+
|
|
||||||
sections = {
|
|
||||||
lualine_a = {
|
|
||||||
'mode',
|
|
||||||
},
|
|
||||||
lualine_b = {
|
|
||||||
{ 'b:gitsigns_head', icon = '' },
|
|
||||||
{ 'diff', source = diff_source },
|
|
||||||
'diagnostics',
|
|
||||||
},
|
|
||||||
lualine_c = {
|
|
||||||
'filename',
|
|
||||||
},
|
|
||||||
lualine_x = {
|
|
||||||
'filetype',
|
|
||||||
},
|
|
||||||
lualine_y = {
|
|
||||||
'location',
|
|
||||||
},
|
|
||||||
lualine_z = {
|
|
||||||
{
|
|
||||||
require('noice').api.statusline.mode.get,
|
|
||||||
cond = require('noice').api.statusline.mode.has,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
require('noice').api.status.command.get,
|
|
||||||
cond = require('noice').api.status.command.has,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
inactive_sections = {
|
|
||||||
lualine_a = {},
|
|
||||||
lualine_b = {},
|
|
||||||
lualine_c = { 'filename' },
|
|
||||||
lualine_x = { 'location' },
|
|
||||||
lualine_y = {},
|
|
||||||
lualine_z = {},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,61 +1,254 @@
|
|||||||
-- https://github.com/echasnovski/mini.nvim
|
|
||||||
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
|
|
||||||
return {
|
return {
|
||||||
-- Presets for common options and mappings
|
-- Library of 40+ independent Lua modules improving overall Neovim
|
||||||
{ 'echasnovski/mini.basics', version = '*' },
|
-- (version 0.8 and higher) experience with minimal effort
|
||||||
|
--
|
||||||
-- Visualize and work with indent scope
|
-- https://github.com/echasnovski/mini.nvim
|
||||||
-- Replaced lukas-reineke/indent-blankline.nvim
|
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
|
||||||
{ 'echasnovski/mini.indentscope', version = '*', opts = {} },
|
--
|
||||||
|
-- YouTube: Text editing with 'mini.nvim' - Neovimconf 2024 - Evgeni Chasnovski
|
||||||
-- Animate common Neovim actions
|
-- https://www.youtube.com/watch?v=cNK5kYJ7mrs
|
||||||
-- Replaced anuvyklack/windows.nvim
|
|
||||||
{ 'echasnovski/mini.animate', version = '*', opts = {} },
|
|
||||||
|
|
||||||
-- Fast and feature-rich surround actions
|
|
||||||
-- Replaced kylechui/nvim-surround
|
|
||||||
{ 'echasnovski/mini.surround', version = '*', opts = {} },
|
|
||||||
|
|
||||||
-- Move lines and blocks of text
|
|
||||||
{ 'echasnovski/mini.move', version = '*', opts = {} },
|
|
||||||
|
|
||||||
-- Jump to next/previous single character
|
|
||||||
{
|
{
|
||||||
'echasnovski/mini.jump',
|
'echasnovski/mini.nvim',
|
||||||
version = '*',
|
version = '*',
|
||||||
opts = {
|
priority = 1001,
|
||||||
mappings = {
|
config = function()
|
||||||
forward = 'f',
|
-- Presets for common options and mappings
|
||||||
backward = 'F',
|
-- h: MiniBasics.config
|
||||||
forward_till = 't',
|
require('mini.basics').setup {
|
||||||
backward_till = 'T',
|
options = {
|
||||||
repeat_jump = ';',
|
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,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Icons
|
|
||||||
{
|
|
||||||
'echasnovski/mini.icons',
|
|
||||||
opts = {
|
|
||||||
file = {
|
|
||||||
['.keep'] = { glyph = '', hl = 'MiniIconsGrey' },
|
|
||||||
['devcontainer.json'] = { glyph = '', hl = 'MiniIconsAzure' },
|
|
||||||
},
|
|
||||||
filetype = {
|
|
||||||
dotenv = { glyph = '', hl = 'MiniIconsYellow' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Highlight cursor word and its matches
|
|
||||||
{ 'echasnovski/mini.cursorword', version = '*' },
|
|
||||||
|
|
||||||
-- Split and join arguments, lists, and other sequences
|
|
||||||
-- Replaced Wansmer/treesj
|
|
||||||
{ 'echasnovski/mini.splitjoin', version = '*', opts = {} },
|
|
||||||
|
|
||||||
-- Work with diff hunks
|
|
||||||
-- Replaced lewis6991/gitsigns.nvim
|
|
||||||
{ 'echasnovski/mini.diff', version = '*', opts = {} },
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
-- A better annotation generator.
|
|
||||||
-- Supports multiple languages and annotation conventions.
|
|
||||||
-- https://github.com/danymat/neogen
|
|
||||||
return {
|
|
||||||
'danymat/neogen',
|
|
||||||
version = '*',
|
|
||||||
opts = { enabled = true, snippet_engine = 'luasnip' },
|
|
||||||
}
|
|
||||||
@@ -31,18 +31,39 @@ return {
|
|||||||
cmd = 'Neotree',
|
cmd = 'Neotree',
|
||||||
opts = {
|
opts = {
|
||||||
close_if_last_window = true,
|
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 = {
|
filesystem = {
|
||||||
window = {
|
window = {
|
||||||
mappings = {
|
mappings = {
|
||||||
['<Esc>'] = 'close_window',
|
['<Esc>'] = 'close_window',
|
||||||
|
['q'] = 'close_window',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
filtered_items = {
|
filtered_items = {
|
||||||
hide_dotfiles = true,
|
hide_dotfiles = true,
|
||||||
hide_gitignored = true,
|
hide_gitignored = true,
|
||||||
hide_hidden = true, -- only works on Windows for hidden files/directories
|
hide_hidden = true, -- only works on Windows for hidden files/directories
|
||||||
hide_by_name = {
|
never_show = {
|
||||||
'.DS_Store',
|
'.DS_Store',
|
||||||
|
},
|
||||||
|
hide_by_name = {
|
||||||
'node_modules',
|
'node_modules',
|
||||||
},
|
},
|
||||||
always_show = {
|
always_show = {
|
||||||
@@ -84,6 +105,7 @@ return {
|
|||||||
'.*rc.*',
|
'.*rc.*',
|
||||||
'.env*',
|
'.env*',
|
||||||
'.prettierrc*',
|
'.prettierrc*',
|
||||||
|
'.markdownlint*',
|
||||||
'.stylua.*',
|
'.stylua.*',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
-- Highly experimental plugin that completely replaces the UI
|
|
||||||
-- for messages, cmdline and the popupmenu.
|
|
||||||
-- https://github.com/folke/noice.nvim
|
|
||||||
return {
|
|
||||||
'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',
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
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 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
filter = {
|
|
||||||
event = 'notify',
|
|
||||||
find = 'No information available',
|
|
||||||
},
|
|
||||||
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' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
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,7 +7,9 @@ return {
|
|||||||
dependencies = {
|
dependencies = {
|
||||||
{ 'nvim-lua/plenary.nvim' },
|
{ 'nvim-lua/plenary.nvim' },
|
||||||
{ 'nvim-telescope/telescope-symbols.nvim' },
|
{ 'nvim-telescope/telescope-symbols.nvim' },
|
||||||
{ 'folke/which-key.nvim' },
|
|
||||||
|
-- Telescope plugin for file browsing
|
||||||
|
{ 'nvim-telescope/telescope-file-browser.nvim' },
|
||||||
|
|
||||||
-- A Telescope picker to quickly access configurations
|
-- A Telescope picker to quickly access configurations
|
||||||
-- of plugins managed by lazy.nvim.
|
-- of plugins managed by lazy.nvim.
|
||||||
@@ -33,7 +35,6 @@ return {
|
|||||||
config = function()
|
config = function()
|
||||||
local t = require 'telescope'
|
local t = require 'telescope'
|
||||||
local a = require 'telescope.actions'
|
local a = require 'telescope.actions'
|
||||||
local themes = require 'telescope.themes'
|
|
||||||
|
|
||||||
-- [[ Configure Telescope ]]
|
-- [[ Configure Telescope ]]
|
||||||
-- See `:help telescope` and `:help telescope.setup()`
|
-- See `:help telescope` and `:help telescope.setup()`
|
||||||
@@ -80,7 +81,6 @@ return {
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- Load extensions
|
-- Load extensions
|
||||||
pcall(t.load_extension, 'harpoon')
|
|
||||||
pcall(t.load_extension, 'git_worktree')
|
pcall(t.load_extension, 'git_worktree')
|
||||||
pcall(t.load_extension, 'lazy_plugins')
|
pcall(t.load_extension, 'lazy_plugins')
|
||||||
pcall(t.load_extension, 'luasnip')
|
pcall(t.load_extension, 'luasnip')
|
||||||
@@ -92,14 +92,5 @@ return {
|
|||||||
-- [[ Telescope Keymaps ]]
|
-- [[ Telescope Keymaps ]]
|
||||||
-- See `:help telescope.builtin`
|
-- See `:help telescope.builtin`
|
||||||
-- See `:help telescope.keymap`
|
-- See `:help telescope.keymap`
|
||||||
vim.keymap.set('n', '<leader>/', function()
|
|
||||||
-- You can pass additional configuration to telescope to change theme, layout, etc.
|
|
||||||
require('telescope.builtin').current_buffer_fuzzy_find(
|
|
||||||
themes.get_dropdown {
|
|
||||||
winblend = 20,
|
|
||||||
previewer = true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
end, { desc = '[/] Fuzzily search in current buffer]' })
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
-- Highlight, list and search todo comments in your projects
|
|
||||||
-- https://github.com/folke/todo-comments.nvim
|
|
||||||
return {
|
|
||||||
'folke/todo-comments.nvim',
|
|
||||||
version = '*',
|
|
||||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
|
||||||
opts = {},
|
|
||||||
}
|
|
||||||
@@ -12,130 +12,57 @@ return {
|
|||||||
'nvim-treesitter/nvim-treesitter-context',
|
'nvim-treesitter/nvim-treesitter-context',
|
||||||
'JoosepAlviste/nvim-ts-context-commentstring',
|
'JoosepAlviste/nvim-ts-context-commentstring',
|
||||||
},
|
},
|
||||||
config = function()
|
---@type TSConfig
|
||||||
require('nvim-treesitter.configs').setup {
|
opts = {
|
||||||
auto_install = true,
|
auto_install = true, -- Auto install the parser generators
|
||||||
ignore_install = {},
|
sync_install = false, -- Sync install the parser generators, install async
|
||||||
sync_install = true,
|
|
||||||
modules = {},
|
|
||||||
|
|
||||||
-- Add languages to be installed here that you want installed for treesitter
|
-- Add languages to be installed here that you want installed for treesitter
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
'bash',
|
'bash',
|
||||||
'c',
|
'json',
|
||||||
'css',
|
'jsonc',
|
||||||
'diff',
|
'lua',
|
||||||
'go',
|
'luadoc',
|
||||||
'html',
|
'markdown',
|
||||||
'javascript',
|
'markdown_inline',
|
||||||
'jsdoc',
|
'query',
|
||||||
'json',
|
'regex',
|
||||||
'jsonc',
|
'vim',
|
||||||
'lua',
|
'vimdoc',
|
||||||
'luadoc',
|
'yaml',
|
||||||
'markdown',
|
},
|
||||||
'markdown_inline',
|
|
||||||
'python',
|
|
||||||
'query',
|
|
||||||
'regex',
|
|
||||||
'rust',
|
|
||||||
'sql',
|
|
||||||
'terraform',
|
|
||||||
'toml',
|
|
||||||
'tsx',
|
|
||||||
'typescript',
|
|
||||||
'vim',
|
|
||||||
'vimdoc',
|
|
||||||
'xml',
|
|
||||||
'yaml',
|
|
||||||
},
|
|
||||||
|
|
||||||
refactor = {
|
highlight = { enable = true },
|
||||||
navigation = {
|
indent = { enable = true },
|
||||||
enable = true,
|
textobjects = {
|
||||||
-- Assign keymaps to false to disable them, e.g. `goto_definition = false`.
|
select = {
|
||||||
keymaps = {
|
|
||||||
goto_definition = '<leader>gnd',
|
|
||||||
list_definitions = '<leader>gnD',
|
|
||||||
list_definitions_toc = '<leader>gO',
|
|
||||||
goto_next_usage = '<a-*>',
|
|
||||||
goto_previous_usage = '<a-#>',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
smart_rename = {
|
|
||||||
enable = true,
|
|
||||||
-- Assign keymaps to false to disable them, e.g. `smart_rename = false`.
|
|
||||||
keymaps = {
|
|
||||||
smart_rename = 'grr',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
highlight_definitions = {
|
|
||||||
enable = true,
|
|
||||||
-- Set to false if you have an `updatetime` of ~100.
|
|
||||||
clear_on_cursor_move = true,
|
|
||||||
},
|
|
||||||
highlight_current_scope = { enable = false },
|
|
||||||
},
|
|
||||||
highlight = { enable = true },
|
|
||||||
indent = { enable = true },
|
|
||||||
incremental_selection = {
|
|
||||||
enable = true,
|
enable = true,
|
||||||
keymaps = {
|
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
|
||||||
init_selection = '<a-space>',
|
|
||||||
node_incremental = '<a-space>',
|
|
||||||
scope_incremental = '<c-s>',
|
|
||||||
node_decremental = '<c-backspace>',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
textobjects = {
|
move = {
|
||||||
select = {
|
enable = true,
|
||||||
enable = true,
|
set_jumps = true, -- whether to set jumps in the jumplist
|
||||||
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>cn'] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
swap_previous = {
|
|
||||||
['<leader>cP'] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
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,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
-- 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
|
|
||||||
return {
|
|
||||||
'folke/trouble.nvim',
|
|
||||||
lazy = false,
|
|
||||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
|
||||||
opts = {
|
|
||||||
auto_preview = true,
|
|
||||||
auto_fold = true,
|
|
||||||
auto_close = true,
|
|
||||||
use_lsp_diagnostic_signs = true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
-- Not UFO in the sky, but an ultra fold in Neovim.
|
|
||||||
-- https://github.com/kevinhwang91/nvim-ufo/
|
|
||||||
return {
|
|
||||||
'kevinhwang91/nvim-ufo',
|
|
||||||
version = '*',
|
|
||||||
dependencies = {
|
|
||||||
{ 'kevinhwang91/promise-async' },
|
|
||||||
{ 'nvim-treesitter/nvim-treesitter' },
|
|
||||||
{
|
|
||||||
-- Status column plugin that provides a configurable
|
|
||||||
-- 'statuscolumn' and click handlers.
|
|
||||||
-- https://github.com/luukvbaal/statuscol.nvim
|
|
||||||
'luukvbaal/statuscol.nvim',
|
|
||||||
config = function()
|
|
||||||
local builtin = require 'statuscol.builtin'
|
|
||||||
require('statuscol').setup {
|
|
||||||
relculright = true,
|
|
||||||
ft_ignore = {
|
|
||||||
'dashboard',
|
|
||||||
'NvimTree',
|
|
||||||
'help',
|
|
||||||
'vim',
|
|
||||||
'alpha',
|
|
||||||
'dashboard',
|
|
||||||
'neo-tree',
|
|
||||||
'Trouble',
|
|
||||||
'lazy',
|
|
||||||
'toggleterm',
|
|
||||||
},
|
|
||||||
bt_ignore = {
|
|
||||||
'help',
|
|
||||||
'vim',
|
|
||||||
'alpha',
|
|
||||||
'dashboard',
|
|
||||||
'neo-tree',
|
|
||||||
'Trouble',
|
|
||||||
'lazy',
|
|
||||||
'toggleterm',
|
|
||||||
},
|
|
||||||
segments = {
|
|
||||||
{
|
|
||||||
text = { builtin.foldfunc },
|
|
||||||
click = 'v:lua.ScFa',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
sign = {
|
|
||||||
namespace = { 'diagnostic/signs' },
|
|
||||||
maxwidth = 2,
|
|
||||||
-- auto = true,
|
|
||||||
},
|
|
||||||
click = 'v:lua.ScSa',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = { builtin.lnumfunc, ' ' },
|
|
||||||
click = 'v:lua.ScLa',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
require('ufo').setup {
|
|
||||||
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
|
|
||||||
--
|
|
||||||
-- This handler is called when the fold text is too long to fit in the window.
|
|
||||||
-- It is expected to truncate the text and return a new list of virtual text.
|
|
||||||
--
|
|
||||||
---@param virtText table The current virtual text list.
|
|
||||||
---@param lnum number The line number of the first line in the fold.
|
|
||||||
---@param endLnum number The line number of the last line in the fold.
|
|
||||||
---@param width number The width of the window.
|
|
||||||
---@param truncate function Truncate function
|
|
||||||
---@return table
|
|
||||||
fold_virt_text_handler = function(
|
|
||||||
virtText,
|
|
||||||
lnum,
|
|
||||||
endLnum,
|
|
||||||
width,
|
|
||||||
truncate
|
|
||||||
)
|
|
||||||
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,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -27,79 +27,10 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Neovim plugin to animate the cursor with a smear effect in all terminals
|
|
||||||
-- https://github.com/sphamba/smear-cursor.nvim
|
|
||||||
{ 'sphamba/smear-cursor.nvim', opts = {} },
|
|
||||||
|
|
||||||
-- A neovim plugin that shows colorcolumn dynamically
|
-- A neovim plugin that shows colorcolumn dynamically
|
||||||
-- https://github.com/Bekaboo/deadcolumn.nvim
|
-- https://github.com/Bekaboo/deadcolumn.nvim
|
||||||
{ 'Bekaboo/deadcolumn.nvim' },
|
{ 'Bekaboo/deadcolumn.nvim' },
|
||||||
|
|
||||||
-- vim dashboard
|
|
||||||
-- https://github.com/nvimdev/dashboard-nvim
|
|
||||||
{
|
|
||||||
'nvimdev/dashboard-nvim',
|
|
||||||
event = 'VimEnter',
|
|
||||||
config = function()
|
|
||||||
require('dashboard').setup {
|
|
||||||
theme = 'doom',
|
|
||||||
config = {
|
|
||||||
disable_move = true,
|
|
||||||
week_header = {
|
|
||||||
enable = true,
|
|
||||||
},
|
|
||||||
shortcut = {},
|
|
||||||
center = {
|
|
||||||
{
|
|
||||||
icon = ' ',
|
|
||||||
icon_hl = '@variable',
|
|
||||||
desc = 'Files',
|
|
||||||
group = 'Label',
|
|
||||||
action = 'Telescope find_files',
|
|
||||||
key = 'f',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon = ' ',
|
|
||||||
desc = 'Marks',
|
|
||||||
group = 'DiagnosticHint',
|
|
||||||
action = 'Telescope harpoon marks',
|
|
||||||
key = 'a',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon = '⚑ ',
|
|
||||||
desc = 'TODO',
|
|
||||||
group = 'DiagnosticOptions',
|
|
||||||
action = 'TodoTelescope',
|
|
||||||
key = 't',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon = ' ',
|
|
||||||
desc = 'Search',
|
|
||||||
group = 'Number',
|
|
||||||
action = 'Telescope live_grep',
|
|
||||||
key = 's',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon = ' ',
|
|
||||||
desc = 'Lazy Update',
|
|
||||||
group = '@property',
|
|
||||||
action = 'Lazy update',
|
|
||||||
key = 'u',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon = '☉ ',
|
|
||||||
desc = 'Quit',
|
|
||||||
group = 'DiagnosticError',
|
|
||||||
action = 'q',
|
|
||||||
key = 'q',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
dependencies = { { 'nvim-tree/nvim-web-devicons' } },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Remove all background colors to make nvim transparent
|
-- Remove all background colors to make nvim transparent
|
||||||
-- https://github.com/xiyaowong/nvim-transparent
|
-- https://github.com/xiyaowong/nvim-transparent
|
||||||
{ 'xiyaowong/nvim-transparent', opts = {} },
|
{ 'xiyaowong/nvim-transparent', opts = {} },
|
||||||
@@ -108,86 +39,7 @@ return {
|
|||||||
-- https://github.com/lukas-reineke/virt-column.nvim
|
-- https://github.com/lukas-reineke/virt-column.nvim
|
||||||
{ 'lukas-reineke/virt-column.nvim', opts = {} },
|
{ 'lukas-reineke/virt-column.nvim', opts = {} },
|
||||||
|
|
||||||
-- ui components
|
|
||||||
{ 'MunifTanjim/nui.nvim', lazy = true },
|
|
||||||
|
|
||||||
-- Seamless navigation between tmux panes and vim splits
|
|
||||||
-- https://github.com/christoomey/vim-tmux-navigator
|
|
||||||
{
|
|
||||||
'christoomey/vim-tmux-navigator',
|
|
||||||
cmd = {
|
|
||||||
'TmuxNavigateLeft',
|
|
||||||
'TmuxNavigateDown',
|
|
||||||
'TmuxNavigateUp',
|
|
||||||
'TmuxNavigateRight',
|
|
||||||
'TmuxNavigatePrevious',
|
|
||||||
},
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- 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 = '=.+',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
-- 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
|
-- Neovim plugin for locking a buffer to a window
|
||||||
-- https://github.com/stevearc/stickybuf.nvim
|
-- https://github.com/stevearc/stickybuf.nvim
|
||||||
{ 'stevearc/stickybuf.nvim', opts = {} },
|
{ 'stevearc/stickybuf.nvim', opts = {} },
|
||||||
|
|
||||||
-- 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', opts = {} },
|
|
||||||
|
|
||||||
-- Plugin to improve viewing Markdown files in Neovim
|
|
||||||
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
|
|
||||||
{
|
|
||||||
'MeanderingProgrammer/render-markdown.nvim',
|
|
||||||
dependencies = {
|
|
||||||
'nvim-treesitter/nvim-treesitter',
|
|
||||||
'nvim-tree/nvim-web-devicons',
|
|
||||||
},
|
|
||||||
ft = 'markdown',
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
-- Detect tabstop and shiftwidth automatically
|
|
||||||
-- https://github.com/tpope/vim-sleuth
|
|
||||||
return { 'tpope/vim-sleuth' }
|
|
||||||
@@ -1,553 +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 {
|
|
||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ With leader │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
-- ── Buffer ──────────────────────────────────────────────────────────
|
|
||||||
{
|
|
||||||
'<leader>b',
|
|
||||||
group = '[b] Buffer',
|
|
||||||
-- Add the current buffers to the menu
|
|
||||||
expand = function() return require('which-key.extras').expand.buf() end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last' },
|
|
||||||
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First' },
|
|
||||||
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev' },
|
|
||||||
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next' },
|
|
||||||
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete' },
|
|
||||||
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Code ────────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>c', group = '[c] Code' },
|
|
||||||
{
|
|
||||||
'<leader>ca',
|
|
||||||
'<cmd>lua vim.lsp.buf.code_action()<CR>',
|
|
||||||
desc = 'LSP: Code Action',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cg',
|
|
||||||
'<cmd>lua require("neogen").generate()<CR>',
|
|
||||||
desc = 'Generate annotations',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Code: CommentBox ────────────────────────────────────────────────
|
|
||||||
{ '<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' },
|
|
||||||
|
|
||||||
-- ── Code: LSPSaga ───────────────────────────────────────────────────
|
|
||||||
-- See: lua/plugins/lsp.lua
|
|
||||||
{
|
|
||||||
'<C-a>',
|
|
||||||
'<cmd>Lspsaga term_toggle<cr>',
|
|
||||||
desc = 'LSPSaga: Open Floaterm',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ca',
|
|
||||||
'<cmd>Lspsaga code_action<cr>',
|
|
||||||
desc = 'LSPSaga: Code Actions',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cci',
|
|
||||||
'<cmd>Lspsaga incoming_calls<cr>',
|
|
||||||
desc = 'LSPSaga: Incoming Calls',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cco',
|
|
||||||
'<cmd>Lspsaga outgoing_calls<cr>',
|
|
||||||
desc = 'LSPSaga: Outgoing Calls',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cd',
|
|
||||||
'<cmd>Lspsaga show_line_diagnostics<cr>',
|
|
||||||
desc = 'LSPSaga: Show Line Diagnostics',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cf',
|
|
||||||
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
|
|
||||||
mode = {},
|
|
||||||
desc = 'Format buffer with Conform',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ci',
|
|
||||||
'<cmd>Lspsaga implement<cr>',
|
|
||||||
desc = 'LSPSaga: Implementations',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cl',
|
|
||||||
'<cmd>Lspsaga show_cursor_diagnostics<cr>',
|
|
||||||
desc = 'LSPSaga: Show Cursor Diagnostics',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cp',
|
|
||||||
'<cmd>Lspsaga peek_definition<cr>',
|
|
||||||
desc = 'LSPSaga: Peek Definition',
|
|
||||||
},
|
|
||||||
{ '<leader>cr', '<cmd>Lspsaga rename<cr>', desc = 'LSPSaga: Rename' },
|
|
||||||
{
|
|
||||||
'<leader>cR',
|
|
||||||
'<cmd>Lspsaga rename ++project<cr>',
|
|
||||||
desc = 'LSPSaga: Rename Project wide',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cs',
|
|
||||||
'<cmd>Lspsaga signature_help<cr>',
|
|
||||||
desc = 'LSPSaga: Signature Documentation',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ct',
|
|
||||||
'<cmd>Lspsaga peek_type_definition<cr>',
|
|
||||||
desc = 'LSPSaga: Peek Type Definition',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cu',
|
|
||||||
'<cmd>Lspsaga preview_definition<cr>',
|
|
||||||
desc = 'LSPSaga: Preview Definition',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cv',
|
|
||||||
'<cmd>Lspsaga diagnostic_jump_prev<cr>',
|
|
||||||
desc = 'LSPSaga: Diagnostic Jump Prev',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cw',
|
|
||||||
'<cmd>Lspsaga diagnostic_jump_next<cr>',
|
|
||||||
desc = 'LSPSaga: Diagnostic Jump Next',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>cx',
|
|
||||||
'<cmd>Telescope import<cr>',
|
|
||||||
desc = 'Telescope import',
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
'<leader>f',
|
|
||||||
'<cmd>Telescope find_files<cr>',
|
|
||||||
desc = 'Find files',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Harpoon ─────────────────────────────────────────────────────────
|
|
||||||
-- See: lua/plugins/telescope.lua
|
|
||||||
{ '<leader>h', group = '[h] Harpoon' },
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'<leader>ha',
|
|
||||||
'<cmd>lua require("harpoon"):list():add()<cr>',
|
|
||||||
desc = 'harpoon file',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>hn',
|
|
||||||
'<cmd>lua require("harpoon"):list():next()<cr>',
|
|
||||||
desc = 'harpoon to next file',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>hp',
|
|
||||||
'<cmd>lua require("harpoon"):list():prev()<cr>',
|
|
||||||
desc = 'harpoon to previous file',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ht',
|
|
||||||
"<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>",
|
|
||||||
desc = 'DAP: Harpoon UI',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── LSP ─────────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>l', group = '[l] LSP' },
|
|
||||||
-- See: lua/plugins/lsp.lua
|
|
||||||
|
|
||||||
-- ── Quit ────────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>q', group = '[q] Quit' },
|
|
||||||
{
|
|
||||||
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
|
|
||||||
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
|
|
||||||
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Search ──────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>s', group = '[s] Search' },
|
|
||||||
-- See: lua/plugins/telescope.lua
|
|
||||||
{
|
|
||||||
'<leader><space>',
|
|
||||||
'<cmd>Telescope buffers<cr>',
|
|
||||||
desc = 'Find existing buffers',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sc',
|
|
||||||
'<cmd>Telescope commands<CR>',
|
|
||||||
desc = 'Telescope: Commands',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sd',
|
|
||||||
'<cmd>Telescope diagnostics<cr>',
|
|
||||||
desc = 'Search Diagnostics',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sf',
|
|
||||||
'<cmd>Telescope find_files<cr>',
|
|
||||||
desc = 'Find files',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sg',
|
|
||||||
'<cmd>Telescope live_grep<cr>',
|
|
||||||
desc = 'Search by Grep',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sh',
|
|
||||||
'<cmd>Telescope highlights<cr>',
|
|
||||||
desc = 'List highlights',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sl',
|
|
||||||
'<cmd>Telescope luasnip<CR>',
|
|
||||||
desc = 'Search LuaSnip',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sm',
|
|
||||||
'<cmd>Telescope harpoon marks<CR>',
|
|
||||||
desc = 'Harpoon Marks',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sn',
|
|
||||||
"<cmd>lua require('telescope').extensions.notify.notify()<CR>",
|
|
||||||
desc = 'Show Notifications',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>so',
|
|
||||||
'<cmd>Telescope oldfiles<cr>',
|
|
||||||
desc = 'Find recently Opened files',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sp',
|
|
||||||
"<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>",
|
|
||||||
desc = 'Find neovim/lazy configs',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sq',
|
|
||||||
'<cmd>Telescope quickfix<cr>',
|
|
||||||
desc = 'Quickfix list',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sr',
|
|
||||||
group = 'References',
|
|
||||||
{
|
|
||||||
'<leader>srd',
|
|
||||||
'<cmd>Telescope lsp_definitions<CR>',
|
|
||||||
desc = 'Definitions',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>sri',
|
|
||||||
'<cmd>Telescope lsp_implementations<CR>',
|
|
||||||
desc = 'Implementations',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>srp',
|
|
||||||
'<cmd>Telescope lsp_document_symbols<CR>',
|
|
||||||
desc = 'Document Symbols',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>srr',
|
|
||||||
'<cmd>Telescope lsp_references<CR>',
|
|
||||||
desc = 'LSP References',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>srt',
|
|
||||||
'<cmd>Telescope lsp_type_definitions<CR>',
|
|
||||||
desc = 'Type Definitions',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>srw',
|
|
||||||
'<cmd>Telescope lsp_workspace_symbols<CR>',
|
|
||||||
desc = 'Workspace Symbols',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ss',
|
|
||||||
'<cmd>Telescope treesitter',
|
|
||||||
desc = 'Treesitter symbols',
|
|
||||||
},
|
|
||||||
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Show Todo' },
|
|
||||||
{
|
|
||||||
'<leader>sw',
|
|
||||||
'<cmd>Telescope grep_string<cr>',
|
|
||||||
desc = 'Search current Word',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Toggle ──────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>t', group = '[t] Toggle' },
|
|
||||||
{
|
|
||||||
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
|
|
||||||
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
|
|
||||||
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
|
|
||||||
{
|
|
||||||
'<leader>tt',
|
|
||||||
'<cmd>TransparentToggle<CR>',
|
|
||||||
desc = 'Toggle Transparency',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>tl',
|
|
||||||
'<cmd>exec &bg=="light"? "set bg=dark" : "set bg=light"<CR>',
|
|
||||||
desc = 'Toggle Light/Dark Theme',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Workspace ───────────────────────────────────────────────────────
|
|
||||||
{ '<leader>w', group = '[w] Workspace' },
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'<leader>wa',
|
|
||||||
'<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>',
|
|
||||||
desc = 'LSP: Workspace Add Folder',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>wl',
|
|
||||||
'<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>',
|
|
||||||
desc = 'LSP: Workspace List Folders',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>wr',
|
|
||||||
'<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>',
|
|
||||||
desc = 'LSP: Workspace Remove Folder',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ws',
|
|
||||||
'<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>',
|
|
||||||
desc = 'LSP: Workspace Symbols',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Trouble ─────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>x', group = '[x] Trouble' },
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'<leader>xx',
|
|
||||||
'<cmd>Trouble diagnostics<cr>',
|
|
||||||
desc = 'Toggle Trouble Diagnostics',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>xw',
|
|
||||||
'<cmd>Trouble workspace_diagnostics<cr>',
|
|
||||||
desc = 'Toggle Workspace Diagnostics',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>xd',
|
|
||||||
'<cmd>Trouble document_diagnostics<cr>',
|
|
||||||
desc = 'Toggle Document Diagnostics',
|
|
||||||
},
|
|
||||||
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
|
|
||||||
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Help ────────────────────────────────────────────────────────────
|
|
||||||
{ '<leader>?', group = '[?] Help & Cheat sheets' },
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'<leader>?h',
|
|
||||||
'<cmd>Telescope help_tags<cr>',
|
|
||||||
desc = 'Help tags',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>?m',
|
|
||||||
'<cmd>Telescope man_pages<cr>',
|
|
||||||
desc = 'Man pages',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>?w',
|
|
||||||
'<cmd>lua require("which-key").show({global = true})<cr>',
|
|
||||||
desc = 'Buffer Local Keymaps (which-key)',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Misc ────────────────────────────────────────────────────────────
|
|
||||||
{
|
|
||||||
'<leader>D',
|
|
||||||
'<cmd>lua vim.lsp.buf.type_definition()<CR>',
|
|
||||||
desc = 'LSP: Type Definition',
|
|
||||||
},
|
|
||||||
{ '<leader>e', '<cmd>Neotree reveal<CR>', desc = 'NeoTree reveal' },
|
|
||||||
|
|
||||||
-- ╭─────────────────────────────────────────────────────────╮
|
|
||||||
-- │ Without leader │
|
|
||||||
-- ╰─────────────────────────────────────────────────────────╯
|
|
||||||
{ 'y', group = 'Yank & Surround' },
|
|
||||||
|
|
||||||
{ 'gp', group = 'Goto Preview' },
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'gpd',
|
|
||||||
'<cmd>lua require("goto-preview").goto_preview_definition()<CR>',
|
|
||||||
desc = 'Goto: Preview Definition',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gpi',
|
|
||||||
'<cmd>lua require("goto-preview").goto_preview_implementation()<CR>',
|
|
||||||
desc = 'Goto: Preview Implementation',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gpP',
|
|
||||||
'<cmd>lua require("goto-preview").close_all_windows()<CR>',
|
|
||||||
desc = 'Goto: Close All Preview Windows',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── tmux navigation ─────────────────────────────────────────────────
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'<c-h>',
|
|
||||||
'<cmd><C-U>TmuxNavigateLeft<cr>',
|
|
||||||
desc = 'tmux: Navigate Left',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<c-j>',
|
|
||||||
'<cmd><C-U>TmuxNavigateDown<cr>',
|
|
||||||
desc = 'tmux: Navigate Down',
|
|
||||||
},
|
|
||||||
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
|
|
||||||
{
|
|
||||||
'<c-l>',
|
|
||||||
'<cmd><C-U>TmuxNavigateRight<cr>',
|
|
||||||
desc = 'tmux: Navigate Right',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<c-\\>',
|
|
||||||
'<cmd><C-U>TmuxNavigatePrevious<cr>',
|
|
||||||
desc = 'tmux: Navigate Previous',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Old habits ──────────────────────────────────────────────────────
|
|
||||||
{ '<C-s>', '<cmd>w!<CR>', desc = 'Save file' },
|
|
||||||
|
|
||||||
-- ── Text manipulation in visual mode ────────────────────────────────
|
|
||||||
{
|
|
||||||
mode = { 'v', 'n' },
|
|
||||||
{ '>', '>gv', desc = 'Indent Right' },
|
|
||||||
{ '<', '<gv', desc = 'Indent Left' },
|
|
||||||
{ 'J', "<cmd>m '>+1<CR>gv=gv", desc = 'Move Block Down' },
|
|
||||||
{ 'K', "<cmd>m '<-2<CR>gv=gv", desc = 'Move Block Up' },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── LSP ─────────────────────────────────────────────────────────────
|
|
||||||
{
|
|
||||||
'<C-k>',
|
|
||||||
'<cmd>lua vim.lsp.buf.signature_help()<CR>',
|
|
||||||
desc = 'LSP: Signature Documentation',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'K',
|
|
||||||
'<cmd>Lspsaga hover_doc<cr>',
|
|
||||||
desc = 'LSPSaga: Hover Documentation',
|
|
||||||
},
|
|
||||||
|
|
||||||
{ 'd', group = 'Diagnostics' },
|
|
||||||
{
|
|
||||||
{
|
|
||||||
'dn',
|
|
||||||
'<cmd>lua vim.diagnostic.goto_next()<CR>',
|
|
||||||
desc = 'Diagnostic: Goto Next',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'dp',
|
|
||||||
'<cmd>lua vim.diagnostic.goto_prev()<CR>',
|
|
||||||
desc = 'Diagnostic: Goto Prev',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ 'g', group = 'Goto' },
|
|
||||||
{
|
|
||||||
'gD',
|
|
||||||
'<cmd>lua vim.lsp.buf.declaration()<CR>',
|
|
||||||
desc = 'LSP: Goto Declaration',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gI',
|
|
||||||
'<cmd>lua vim.lsp.buf.implementation()<CR>',
|
|
||||||
desc = 'LSP: Goto Implementation',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gR',
|
|
||||||
'<cmd>Trouble lsp_references<cr>',
|
|
||||||
desc = 'Toggle LSP References',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gd',
|
|
||||||
'<cmd>lua vim.lsp.buf.definition()<CR>',
|
|
||||||
desc = 'LSP: Goto Definition',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gr',
|
|
||||||
'<cmd>lua require("telescope.builtin").lsp_references()<CR>',
|
|
||||||
desc = 'LSP: Goto References',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Misc keybinds ───────────────────────────────────────────────────
|
|
||||||
-- Sublime-like shortcut 'go to file' ctrl+p.
|
|
||||||
{
|
|
||||||
'<C-p>',
|
|
||||||
'<cmd>Telescope find_files<CR>',
|
|
||||||
desc = 'Search for files starting at current directory.',
|
|
||||||
},
|
|
||||||
{ 'QQ', '<cmd>q!<CR>', desc = 'Quit without saving' },
|
|
||||||
{ 'WW', '<cmd>w!<CR>', desc = 'Force write to file' },
|
|
||||||
{ 'ss', '<cmd>noh<CR>', desc = 'Clear Search Highlighting' },
|
|
||||||
{
|
|
||||||
'jj',
|
|
||||||
'<Esc>',
|
|
||||||
desc = 'Esc without touching esc in insert mode',
|
|
||||||
mode = 'i',
|
|
||||||
},
|
|
||||||
|
|
||||||
-- ── Splits ──────────────────────────────────────────────────────────
|
|
||||||
-- Use CTRL+<hjkl> to switch between windows in normal mode
|
|
||||||
-- See `:help wincmd` for a list of all window commands
|
|
||||||
{ '<C-h>', '<C-w><C-h>', desc = 'Move focus to the left window' },
|
|
||||||
{ '<C-l>', '<C-w><C-l>', desc = 'Move focus to the right window' },
|
|
||||||
{ '<C-j>', '<C-w><C-j>', desc = 'Move focus to the lower window' },
|
|
||||||
{ '<C-k>', '<C-w><C-k>', desc = 'Move focus to the upper window' },
|
|
||||||
-- Split resizing
|
|
||||||
{ '<C-w>,', '<cmd>vertical resize -10<CR>', desc = 'V Resize -' },
|
|
||||||
{ '<C-w>.', '<cmd>vertical resize +10<CR>', desc = 'V Resize +' },
|
|
||||||
|
|
||||||
-- ── Disable arrow keys in normal mode ───────────────────────────────
|
|
||||||
{ '<left>', '<cmd>echo "Use h to move!!"<CR>' },
|
|
||||||
{ '<right>', '<cmd>echo "Use l to move!!"<CR>' },
|
|
||||||
{ '<up>', '<cmd>echo "Use k to move!!"<CR>' },
|
|
||||||
{ '<down>', '<cmd>echo "Use j to move!!"<CR>' },
|
|
||||||
|
|
||||||
-- ── Terminal ────────────────────────────────────────────────────────
|
|
||||||
-- Exit terminal mode in the builtin terminal with a shortcut that is
|
|
||||||
-- a bit easier for people to discover. Otherwise, you normally need
|
|
||||||
-- to press <C-\><C-n>, which is not what someone will guess without
|
|
||||||
-- a bit more experience.
|
|
||||||
--
|
|
||||||
-- NOTE: This won't work in all terminal emulators/tmux/etc.
|
|
||||||
-- Try your own mapping or just use <C-\><C-n> to exit terminal mode.
|
|
||||||
{ '<Esc><Esc>', '<C-\\><C-n>', desc = 'Exit terminal mode', mode = 't' },
|
|
||||||
|
|
||||||
-- ── Search ──────────────────────────────────────────────────────────
|
|
||||||
-- :noh if you have search highlights
|
|
||||||
{ '<Esc><Esc>', '<cmd>noh<CR>', desc = 'Clear search highlights' },
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
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
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
{
|
{
|
||||||
"type": "session",
|
"type": "session",
|
||||||
"style": "plain",
|
"style": "plain",
|
||||||
"template": " {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}"
|
"template": " {{ if .SSHSession }}\ueba9 {{ .UserName }}@{{ end }}{{ .HostName }}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"foreground": "cyan",
|
"foreground": "cyan",
|
||||||
@@ -27,14 +27,14 @@
|
|||||||
"template": " {{ .Path }} ",
|
"template": " {{ .Path }} ",
|
||||||
"type": "path",
|
"type": "path",
|
||||||
"mapped_locations": {
|
"mapped_locations": {
|
||||||
"~/Code/*": "\uF09B"
|
"~/Code/*": "\uf09b"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"style": "plain",
|
"style": "plain",
|
||||||
"foreground": "lightGreen",
|
"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": {
|
"properties": {
|
||||||
"fetch_status": true,
|
"fetch_status": true,
|
||||||
"fetch_upstream_icon": true,
|
"fetch_upstream_icon": true,
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
{
|
{
|
||||||
"type": "php",
|
"type": "php",
|
||||||
"style": "plain",
|
"style": "plain",
|
||||||
"template": " {{ .Full }} "
|
"template": " \ue73d {{ .Full }} "
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "prompt"
|
"type": "prompt"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ if ! declare -f msg > /dev/null; then
|
|||||||
# $1 - message (string)
|
# $1 - message (string)
|
||||||
msg()
|
msg()
|
||||||
{
|
{
|
||||||
[ "$VERBOSE" -eq 1 ] && echo "$1"
|
[ "$VERBOSE" -eq 1 ] && msgr msg "$1"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
msg "msg was not defined, defined it now"
|
msg "msg was not defined, defined it now"
|
||||||
@@ -54,7 +54,7 @@ if ! declare -f msg_err > /dev/null; then
|
|||||||
# $1 - error message (string)
|
# $1 - error message (string)
|
||||||
msg_err()
|
msg_err()
|
||||||
{
|
{
|
||||||
echo "(!) ERROR: $1" >&2
|
msgr err "$1" >&2
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
@@ -65,7 +65,7 @@ if ! declare -f msg_done > /dev/null; then
|
|||||||
# $1 - message (string)
|
# $1 - message (string)
|
||||||
msg_done()
|
msg_done()
|
||||||
{
|
{
|
||||||
echo "✓ $1"
|
msgr done "$1"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
@@ -76,7 +76,7 @@ if ! declare -f msg_run > /dev/null; then
|
|||||||
# $1 - message (string)
|
# $1 - message (string)
|
||||||
msg_run()
|
msg_run()
|
||||||
{
|
{
|
||||||
echo "→ $1"
|
msgr run "$1"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
@@ -87,10 +87,29 @@ if ! declare -f msg_ok > /dev/null; then
|
|||||||
# $1 - message (string)
|
# $1 - message (string)
|
||||||
msg_ok()
|
msg_ok()
|
||||||
{
|
{
|
||||||
echo "✓ $1"
|
msgr ok "$1"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
fi
|
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/exports"
|
||||||
source "$DOTFILES/config/alias"
|
source "$DOTFILES/config/alias"
|
||||||
|
|||||||
1
config/tmux/plugins/tmux-fzf-url/LICENSE.txt
Normal file
1
config/tmux/plugins/tmux-fzf-url/LICENSE.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
https://wfxr.mit-license.org/2018
|
||||||
64
config/tmux/plugins/tmux-fzf-url/fzf-url.sh
Executable file
64
config/tmux/plugins/tmux-fzf-url/fzf-url.sh
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#===============================================================================
|
||||||
|
# Author: Wenxuan
|
||||||
|
# Email: wenxuangm@gmail.com
|
||||||
|
# Created: 2018-04-06 12:12
|
||||||
|
#===============================================================================
|
||||||
|
get_fzf_options()
|
||||||
|
{
|
||||||
|
local fzf_options
|
||||||
|
local fzf_default_options='-w 100% -h 50% --multi -0 --no-preview'
|
||||||
|
fzf_options="$(tmux show -gqv '@fzf-url-fzf-options')"
|
||||||
|
[ -n "$fzf_options" ] && echo "$fzf_options" || echo "$fzf_default_options"
|
||||||
|
}
|
||||||
|
|
||||||
|
fzf_filter()
|
||||||
|
{
|
||||||
|
eval "fzf-tmux $(get_fzf_options)"
|
||||||
|
}
|
||||||
|
|
||||||
|
custom_open=$3
|
||||||
|
open_url()
|
||||||
|
{
|
||||||
|
if [[ -n $custom_open ]]; then
|
||||||
|
$custom_open "$@"
|
||||||
|
elif hash xdg-open &> /dev/null; then
|
||||||
|
nohup xdg-open "$@"
|
||||||
|
elif hash open &> /dev/null; then
|
||||||
|
nohup open "$@"
|
||||||
|
elif [[ -n $BROWSER ]]; then
|
||||||
|
nohup "$BROWSER" "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
limit='screen'
|
||||||
|
[[ $# -ge 2 ]] && limit=$2
|
||||||
|
|
||||||
|
if [[ $limit == 'screen' ]]; then
|
||||||
|
content="$(tmux capture-pane -J -p -e | sed -r 's/\x1B\[[0-9;]*[mK]//g'))"
|
||||||
|
else
|
||||||
|
content="$(tmux capture-pane -J -p -e -S -"$limit" | sed -r 's/\x1B\[[0-9;]*[mK]//g'))"
|
||||||
|
fi
|
||||||
|
|
||||||
|
urls=$(echo "$content" | grep -oE '(https?|ftp|file):/?//[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]')
|
||||||
|
wwws=$(echo "$content" | grep -oE '(http?s://)?www\.[a-zA-Z](-?[a-zA-Z0-9])+\.[a-zA-Z]{2,}(/\S+)*' | grep -vE '^https?://' | sed 's/^\(.*\)$/http:\/\/\1/')
|
||||||
|
ips=$(echo "$content" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(:[0-9]{1,5})?(/\S+)*' | sed 's/^\(.*\)$/http:\/\/\1/')
|
||||||
|
gits=$(echo "$content" | grep -oE '(ssh://)?git@\S*' | sed 's/:/\//g' | sed 's/^\(ssh\/\/\/\)\{0,1\}git@\(.*\)$/https:\/\/\2/')
|
||||||
|
gh=$(echo "$content" | grep -oE "['\"]([_A-Za-z0-9-]*/[_.A-Za-z0-9-]*)['\"]" | sed "s/['\"]//g" | sed 's#.#https://github.com/&#')
|
||||||
|
|
||||||
|
if [[ $# -ge 1 && $1 != '' ]]; then
|
||||||
|
extras=$(echo "$content" | eval "$1")
|
||||||
|
fi
|
||||||
|
|
||||||
|
items=$(
|
||||||
|
printf '%s\n' "${urls[@]}" "${wwws[@]}" "${gh[@]}" "${ips[@]}" "${gits[@]}" "${extras[@]}" \
|
||||||
|
| grep -v '^$' \
|
||||||
|
| sort -u \
|
||||||
|
| nl -w3 -s ' '
|
||||||
|
)
|
||||||
|
[ -z "$items" ] && tmux display 'tmux-fzf-url: no URLs found' && exit
|
||||||
|
|
||||||
|
fzf_filter <<< "$items" | awk '{print $2}' \
|
||||||
|
| while read -r chosen; do
|
||||||
|
open_url "$chosen" &> "/tmp/tmux-$(id -u)-fzf-url.log"
|
||||||
|
done
|
||||||
23
config/tmux/plugins/tmux-fzf-url/fzf-url.tmux
Executable file
23
config/tmux/plugins/tmux-fzf-url/fzf-url.tmux
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#===============================================================================
|
||||||
|
# Author: Wenxuan
|
||||||
|
# Email: wenxuangm@gmail.com
|
||||||
|
# Created: 2018-04-06 09:30
|
||||||
|
#===============================================================================
|
||||||
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||||
|
|
||||||
|
# $1: option
|
||||||
|
# $2: default value
|
||||||
|
tmux_get() {
|
||||||
|
local value
|
||||||
|
value="$(tmux show -gqv "$1")"
|
||||||
|
[ -n "$value" ] && echo "$value" || echo "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
key="$(tmux_get '@fzf-url-bind' 'u')"
|
||||||
|
history_limit="$(tmux_get '@fzf-url-history-limit' 'screen')"
|
||||||
|
extra_filter="$(tmux_get '@fzf-url-extra-filter' '')"
|
||||||
|
custom_open="$(tmux_get '@fzf-url-open' '')"
|
||||||
|
echo "$extra_filter" >/tmp/filter
|
||||||
|
|
||||||
|
tmux bind-key "$key" run -b "$SCRIPT_DIR/fzf-url.sh '$extra_filter' $history_limit '$custom_open'"
|
||||||
@@ -147,7 +147,7 @@ set -g @tmux_window_name_max_name_len "20"
|
|||||||
set -g @tmux_window_name_use_tilde "True"
|
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_name_shells "['bash', 'fish', 'sh', 'zsh', 'oh-my-posh']"
|
||||||
set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']"
|
set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']"
|
||||||
set -g @tmux_window_name_ignored_programs "['sqlite3', 'oh-my-posh', 'antidot', 'antidote', 'direnv']" # Default is []
|
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')]"
|
set -g @tmux_window_name_substitute_sets "[('.+ipython2', 'ipython2'), ('.+ipython3', 'ipython3'), ('.+\.local', '.local'), ('.+asdf', 'asdf')]"
|
||||||
|
|
||||||
## https://github.com/tmux-plugins/tmux-continuum
|
## https://github.com/tmux-plugins/tmux-continuum
|
||||||
@@ -159,6 +159,10 @@ set -g @mode_indicator_copy_mode_style 'bg=default,fg=yellow'
|
|||||||
set -g @mode_indicator_empty_mode_style 'bg=default,fg=#7aa2f7'
|
set -g @mode_indicator_empty_mode_style 'bg=default,fg=#7aa2f7'
|
||||||
set -g @mode_indicator_sync_mode_style 'bg=default,fg=red'
|
set -g @mode_indicator_sync_mode_style 'bg=default,fg=red'
|
||||||
|
|
||||||
|
# https://github.com/wfxr/tmux-fzf-url
|
||||||
|
set -g @fzf-url-bind 'u'
|
||||||
|
set -g @fzf-url-history-limit '2000'
|
||||||
|
|
||||||
# ╭──────────────────────────────────────────────────────────╮
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
# │ Plugins │
|
# │ Plugins │
|
||||||
# ╰──────────────────────────────────────────────────────────╯
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
@@ -172,7 +176,7 @@ run-shell ~/.dotfiles/config/tmux/plugins/tmux-suspend/suspend.tmux
|
|||||||
run-shell ~/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux
|
run-shell ~/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux
|
||||||
run-shell ~/.dotfiles/config/tmux/plugins/tmux-current-pane-hostname/current_pane_hostname.tmux
|
run-shell ~/.dotfiles/config/tmux/plugins/tmux-current-pane-hostname/current_pane_hostname.tmux
|
||||||
run-shell ~/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux
|
run-shell ~/.dotfiles/config/tmux/plugins/tmux-dark-notify/main.tmux
|
||||||
|
run-shell ~/.dotfiles/config/tmux/plugins/tmux-fzf-url/fzf-url.tmux
|
||||||
|
|
||||||
if-shell "test -e $HOME/.local/state/tmux/tmux-dark-notify-theme.conf" \
|
if-shell "test -e $HOME/.local/state/tmux/tmux-dark-notify-theme.conf" \
|
||||||
"source-file $HOME/.local/state/tmux/tmux-dark-notify-theme.conf"
|
"source-file $HOME/.local/state/tmux/tmux-dark-notify-theme.conf"
|
||||||
|
|
||||||
|
|||||||
57
config/zed/settings.json
Normal file
57
config/zed/settings.json
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"formatter": {
|
||||||
|
"external": {
|
||||||
|
"command": "node_modules/.bin/prettier",
|
||||||
|
"arguments": [
|
||||||
|
"--stdin-filepath",
|
||||||
|
"{buffer_path}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"languages": {
|
||||||
|
"Lua": {
|
||||||
|
"enable_language_server": true,
|
||||||
|
"tab_size": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lsp": {
|
||||||
|
"gopls": {
|
||||||
|
"initialization_options": {
|
||||||
|
"hints": {
|
||||||
|
"assignVariableTypes": true,
|
||||||
|
"compositeLiteralFields": true,
|
||||||
|
"compositeLiteralTypes": true,
|
||||||
|
"constantValues": true,
|
||||||
|
"functionTypeParameters": true,
|
||||||
|
"parameterNames": true,
|
||||||
|
"rangeVariableTypes": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"preferred_line_length": 100,
|
||||||
|
"format_on_save": "on",
|
||||||
|
"vim_mode": true,
|
||||||
|
"theme": {
|
||||||
|
"mode": "system",
|
||||||
|
"light": "Tokyo Night Light",
|
||||||
|
"dark": "Tokyo Night Storm"
|
||||||
|
},
|
||||||
|
"inlay_hints": {
|
||||||
|
"enabled": true,
|
||||||
|
"show_type_hints": true,
|
||||||
|
"show_parameter_hints": true,
|
||||||
|
"show_other_hints": true
|
||||||
|
},
|
||||||
|
"ui_font_size": 16,
|
||||||
|
"buffer_font_size": 16,
|
||||||
|
"buffer_font_fallbacks": [
|
||||||
|
"JetBrainsMono Nerd Font"
|
||||||
|
],
|
||||||
|
"inline_completions": {
|
||||||
|
"disabled_globs": [
|
||||||
|
".env"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hour_format": "hour24"
|
||||||
|
}
|
||||||
@@ -23,6 +23,7 @@ zstyle ':omz:plugins:nvm' autoload yes
|
|||||||
# Pure prompt settings
|
# Pure prompt settings
|
||||||
export PURE_PROMPT_SYMBOL='➜'
|
export PURE_PROMPT_SYMBOL='➜'
|
||||||
export PURE_GIT_UNTRACKED_DIRTY=0
|
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:git:stash' show yes
|
||||||
zstyle ':prompt:pure:execution_time' show no
|
zstyle ':prompt:pure:execution_time' show no
|
||||||
zstyle ':prompt:pure:user' color magenta
|
zstyle ':prompt:pure:user' color magenta
|
||||||
|
|||||||
@@ -10,9 +10,11 @@ zsh-users/zsh-completions kind:fpath path:src
|
|||||||
getantidote/use-omz # handle OMZ dependencies
|
getantidote/use-omz # handle OMZ dependencies
|
||||||
ohmyzsh/ohmyzsh path:lib # load OMZ's library
|
ohmyzsh/ohmyzsh path:lib # load OMZ's library
|
||||||
|
|
||||||
# Use pure prompt
|
# Theme
|
||||||
mafredri/zsh-async
|
# mafredri/zsh-async # for pure
|
||||||
sindresorhus/pure
|
# sindresorhus/pure # pure itself
|
||||||
|
|
||||||
|
romkatv/powerlevel10k
|
||||||
|
|
||||||
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
|
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
|
||||||
ohmyzsh/ohmyzsh path:plugins/brew
|
ohmyzsh/ohmyzsh path:plugins/brew
|
||||||
|
|||||||
170
config/zsh/completion/_dfm
Normal file
170
config/zsh/completion/_dfm
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
#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'
|
||||||
|
'fonts:Install programming fonts'
|
||||||
|
'gh:Install GitHub CLI Extensions'
|
||||||
|
'go:Install Go Packages'
|
||||||
|
'imagick:Install ImageMagick CLI'
|
||||||
|
'macos:Setup nice macOS defaults'
|
||||||
|
'nvm:Install Node Version Manager'
|
||||||
|
'nvm-latest:Install latest LTS node'
|
||||||
|
'npm-packages:Install NPM Packages'
|
||||||
|
'ntfy:Install ntfy'
|
||||||
|
'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 "$@"
|
||||||
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'
|
||||||
@@ -2,40 +2,236 @@
|
|||||||
|
|
||||||
```txt
|
```txt
|
||||||
|
|
||||||
n <Space>/ * <Lua 398: ~/.config/nvim/lua/plugins/telescope.lua:95>
|
x <Space> *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
[/] Fuzzily search in current buffer]
|
Query keys after "<Space>"
|
||||||
n <Space>ht * <Lua 393: ~/.config/nvim/lua/plugins/harpoon.lua:43>
|
n <Space> *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
Open Harpoon Quick menu
|
Query keys after "<Space>"
|
||||||
n <Space>hw * <Lua 390: ~/.config/nvim/lua/plugins/harpoon.lua:37>
|
x " *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
Open harpoon window with telescope
|
Query keys after """
|
||||||
x # * <Lua 7: vim/_defaults.lua:0>
|
n " *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after """
|
||||||
|
x ' *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "'"
|
||||||
|
n ' *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "'"
|
||||||
|
x ` *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "`"
|
||||||
|
n ` *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "`"
|
||||||
|
x g *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "g"
|
||||||
|
n g *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "g"
|
||||||
|
x z *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "z"
|
||||||
|
n z *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "z"
|
||||||
|
n <C-W> *@~/.local/share/nvim/lazy/mini.nvim/lua/mini/clue.lua
|
||||||
|
Query keys after "<C-W>"
|
||||||
|
n <Esc><Esc> * :nohlsearch<CR>
|
||||||
|
Clear Search Highlighting
|
||||||
|
n <Space>qQ * ~/.config/nvim/lua/keymaps.lua
|
||||||
|
Force quit without saving
|
||||||
|
n <Space>qw * :wq<CR>
|
||||||
|
Write and quit
|
||||||
|
n <Space>qq * ~/.config/nvim/lua/keymaps.lua
|
||||||
|
Quit with force saving
|
||||||
|
n <Space>qf * :q<CR>
|
||||||
|
Quicker close split
|
||||||
|
n <Space>tn * :Noice dismiss<CR>
|
||||||
|
Noice: Dismiss Notification
|
||||||
|
n <Space>tl * ~/.config/nvim/lua/utils.lua
|
||||||
|
Toggle Light/Dark Mode
|
||||||
|
n <Space>te * :Neotree toggle<CR>
|
||||||
|
Toggle Neotree
|
||||||
|
n <Space>tc * :CloakToggle<CR>
|
||||||
|
Cloak: Toggle
|
||||||
|
n <Space>xx * :Trouble diagnostics<CR>
|
||||||
|
Diagnostic
|
||||||
|
n <Space>xw * :Trouble workspace_diagnostics<CR>
|
||||||
|
Workspace Diagnostics
|
||||||
|
n <Space>xq * :Trouble quickfix<CR>
|
||||||
|
Quickfix
|
||||||
|
n <Space>xl * :Trouble loclist<CR>
|
||||||
|
Location List
|
||||||
|
n <Space>xd * :Trouble document_diagnostics<CR>
|
||||||
|
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 help_tags<CR>
|
||||||
|
Help tags
|
||||||
|
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
|
||||||
|
n <Space>cg * :lua require("neogen").generate()<CR>
|
||||||
|
Generate annotations
|
||||||
|
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>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
|
||||||
|
n <Space>ba * :%bd|e#|bd#<CR>
|
||||||
|
Close all except current
|
||||||
|
n <Space>o * ~/.config/nvim/lua/keymaps.lua
|
||||||
|
Open repo in browser
|
||||||
|
n <Space>tmw * <Cmd>setlocal wrap! wrap?<CR>
|
||||||
|
Toggle 'wrap'
|
||||||
|
n <Space>tms * <Cmd>setlocal spell! spell?<CR>
|
||||||
|
Toggle 'spell'
|
||||||
|
n <Space>tmr * <Cmd>setlocal relativenumber! relativenumber?<CR>
|
||||||
|
Toggle 'relativenumber'
|
||||||
|
n <Space>tmn * <Cmd>setlocal number! number?<CR>
|
||||||
|
Toggle 'number'
|
||||||
|
n <Space>tml * <Cmd>setlocal list! list?<CR>
|
||||||
|
Toggle 'list'
|
||||||
|
n <Space>tmi * <Cmd>setlocal ignorecase! ignorecase?<CR>
|
||||||
|
Toggle 'ignorecase'
|
||||||
|
n <Space>tmh * <Cmd>let v:hlsearch = 1 - v:hlsearch | echo (v:hlsearch ? " " : "no") . "hlsearch"<CR>
|
||||||
|
Toggle search highlight
|
||||||
|
n <Space>tmd * <Cmd>lua print(MiniBasics.toggle_diagnostic())<CR>
|
||||||
|
Toggle diagnostic
|
||||||
|
n <Space>tmC * <Cmd>setlocal cursorcolumn! cursorcolumn?<CR>
|
||||||
|
Toggle 'cursorcolumn'
|
||||||
|
n <Space>tmc * <Cmd>setlocal cursorline! cursorline?<CR>
|
||||||
|
Toggle 'cursorline'
|
||||||
|
n <Space>tmb * <Cmd>lua vim.o.bg = vim.o.bg == "dark" and "light" or "dark"; print(vim.o.bg)<CR>
|
||||||
|
Toggle 'background'
|
||||||
|
<Space>cf * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||||
|
Format buffer
|
||||||
|
x # * vim/_defaults.lua
|
||||||
:help v_#-default
|
:help v_#-default
|
||||||
o % <Plug>(MatchitOperationForward)
|
o % <Plug>(MatchitOperationForward)
|
||||||
x % <Plug>(MatchitVisualForward)
|
x % <Plug>(MatchitVisualForward)
|
||||||
n % <Plug>(MatchitNormalForward)
|
n % <Plug>(MatchitNormalForward)
|
||||||
n & * :&&<CR>
|
n & * :&&<CR>
|
||||||
:help &-default
|
:help &-default
|
||||||
x * * <Lua 3: vim/_defaults.lua:0>
|
x * * vim/_defaults.lua
|
||||||
:help v_star-default
|
:help v_star-default
|
||||||
|
o ; * ~/.local/share/nvim/lazy/mini.nvim/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.nvim/lua/mini/clue.lua
|
||||||
|
Execute macro without 'mini.clue' triggers
|
||||||
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
|
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
|
||||||
:help v_@-default
|
:help v_@-default
|
||||||
|
o F * ~/.local/share/nvim/lazy/mini.nvim/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.nvim/lua/mini/clue.lua
|
||||||
|
Execute macro without 'mini.clue' triggers
|
||||||
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
|
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
|
||||||
:help v_Q-default
|
:help v_Q-default
|
||||||
o R * <Lua 102: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
o T * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/jump.lua
|
||||||
Treesitter Search
|
Jump backward till
|
||||||
x R * <Lua 99: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
x T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
|
||||||
Treesitter Search
|
Jump backward till
|
||||||
|
n T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
|
||||||
|
Jump backward till
|
||||||
n Y * y$
|
n Y * y$
|
||||||
:help Y-default
|
:help Y-default
|
||||||
n Zk * <Lua 98: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
n Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||||
Flash Treesitter
|
Flash Treesitter
|
||||||
o Zk * <Lua 96: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
o Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||||
Flash Treesitter
|
Flash Treesitter
|
||||||
x Zk * <Lua 95: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
x Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||||
Flash Treesitter
|
Flash Treesitter
|
||||||
o [% <Plug>(MatchitOperationMultiBackward)
|
o [% <Plug>(MatchitOperationMultiBackward)
|
||||||
x [% <Plug>(MatchitVisualMultiBackward)
|
x [% <Plug>(MatchitVisualMultiBackward)
|
||||||
n [% <Plug>(MatchitNormalMultiBackward)
|
n [% <Plug>(MatchitNormalMultiBackward)
|
||||||
|
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>
|
o [h * V<Cmd>lua MiniDiff.goto_hunk('prev')<CR>
|
||||||
Previous hunk
|
Previous hunk
|
||||||
x [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
|
x [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
|
||||||
@@ -48,17 +244,17 @@ x [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
|
|||||||
First hunk
|
First hunk
|
||||||
n [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
|
n [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
|
||||||
First hunk
|
First hunk
|
||||||
o [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
|
n [d * vim/_defaults.lua
|
||||||
Go to indent scope top
|
|
||||||
x [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
|
|
||||||
Go to indent scope top
|
|
||||||
n [i * <Cmd>lua MiniIndentscope.operator('top', true)<CR>
|
|
||||||
Go to indent scope top
|
|
||||||
n [d * <Lua 15: vim/_defaults.lua:0>
|
|
||||||
Jump to the previous diagnostic
|
Jump to the previous diagnostic
|
||||||
o ]% <Plug>(MatchitOperationMultiForward)
|
o ]% <Plug>(MatchitOperationMultiForward)
|
||||||
x ]% <Plug>(MatchitVisualMultiForward)
|
x ]% <Plug>(MatchitVisualMultiForward)
|
||||||
n ]% <Plug>(MatchitNormalMultiForward)
|
n ]% <Plug>(MatchitNormalMultiForward)
|
||||||
|
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>
|
o ]H * V<Cmd>lua MiniDiff.goto_hunk('last')<CR>
|
||||||
Last hunk
|
Last hunk
|
||||||
x ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
|
x ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
|
||||||
@@ -71,114 +267,176 @@ x ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
|
|||||||
Next hunk
|
Next hunk
|
||||||
n ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
|
n ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
|
||||||
Next hunk
|
Next hunk
|
||||||
o ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
|
n ]d * vim/_defaults.lua
|
||||||
Go to indent scope bottom
|
|
||||||
x ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
|
|
||||||
Go to indent scope bottom
|
|
||||||
n ]i * <Cmd>lua MiniIndentscope.operator('bottom', true)<CR>
|
|
||||||
Go to indent scope bottom
|
|
||||||
n ]d * <Lua 14: vim/_defaults.lua:0>
|
|
||||||
Jump to the next diagnostic
|
Jump to the next diagnostic
|
||||||
x a% <Plug>(MatchitVisualTextObject)
|
x a% <Plug>(MatchitVisualTextObject)
|
||||||
o ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
|
o ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
|
||||||
Object scope with border
|
Object scope with border
|
||||||
x ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
|
x ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
|
||||||
Object scope with border
|
Object scope with border
|
||||||
|
o f * ~/.local/share/nvim/lazy/mini.nvim/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>
|
n gR * :RegexplainerToggle<CR>
|
||||||
Toggle Regexplainer
|
Toggle Regexplainer
|
||||||
o g% <Plug>(MatchitOperationBackward)
|
o g% <Plug>(MatchitOperationBackward)
|
||||||
x g% <Plug>(MatchitVisualBackward)
|
x g% <Plug>(MatchitVisualBackward)
|
||||||
n g% <Plug>(MatchitNormalBackward)
|
n g% <Plug>(MatchitNormalBackward)
|
||||||
n gP * <Lua 454: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:132>
|
|
||||||
Close preview windows
|
|
||||||
n gpr * <Lua 453: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:114>
|
|
||||||
Preview references
|
|
||||||
n gpD * <Lua 452: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:105>
|
|
||||||
Preview declaration
|
|
||||||
n gpi * <Lua 451: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:91>
|
|
||||||
Preview implementation
|
|
||||||
n gpt * <Lua 450: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:77>
|
|
||||||
Preview type definition
|
|
||||||
n gpd * <Lua 449: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:63>
|
|
||||||
Preview definition
|
|
||||||
x gS * :<C-U>lua MiniSplitjoin.toggle({ region = MiniSplitjoin.get_visual_region() })<CR>
|
x gS * :<C-U>lua MiniSplitjoin.toggle({ region = MiniSplitjoin.get_visual_region() })<CR>
|
||||||
Toggle arguments
|
Toggle arguments
|
||||||
n gS * v:lua.MiniSplitjoin.operator("toggle") . " "
|
n gS * v:lua.MiniSplitjoin.operator("toggle") . " "
|
||||||
Toggle arguments
|
Toggle arguments
|
||||||
|
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
|
||||||
o gh * <Cmd>lua MiniDiff.textobject()<CR>
|
o gh * <Cmd>lua MiniDiff.textobject()<CR>
|
||||||
Hunk range textobject
|
Hunk range textobject
|
||||||
x gH * <Lua 417: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:960>
|
x gH * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/diff.lua
|
||||||
Reset hunks
|
Reset hunks
|
||||||
n gH * <Lua 416: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:960>
|
n gH * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/diff.lua
|
||||||
Reset hunks
|
Reset hunks
|
||||||
x gh * <Lua 415: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:958>
|
x gh * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/diff.lua
|
||||||
Apply hunks
|
Apply hunks
|
||||||
n gh * <Lua 414: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:958>
|
n gh * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/diff.lua
|
||||||
Apply hunks
|
Apply hunks
|
||||||
o gc * <Lua 13: vim/_defaults.lua:0>
|
x g/ * <Esc>/\%V
|
||||||
|
Search inside visual selection
|
||||||
|
n gV * "`[" . strpart(getregtype(), 0, 1) . "`]"
|
||||||
|
Visually select changed text
|
||||||
|
x gp * "+P
|
||||||
|
Paste from system clipboard
|
||||||
|
n gp * "+p
|
||||||
|
Paste from system clipboard
|
||||||
|
x gy * "+y
|
||||||
|
Copy to system clipboard
|
||||||
|
n gy * "+y
|
||||||
|
Copy to system clipboard
|
||||||
|
n go * v:lua.MiniBasics.put_empty_line(v:false)
|
||||||
|
Put empty line below
|
||||||
|
n gO * v:lua.MiniBasics.put_empty_line(v:true)
|
||||||
|
Put empty line above
|
||||||
|
o gc * <Cmd>lua MiniComment.textobject()<CR>
|
||||||
Comment textobject
|
Comment textobject
|
||||||
n gcc * <Lua 12: vim/_defaults.lua:0>
|
n gcc * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/comment.lua
|
||||||
Toggle comment line
|
Comment line
|
||||||
x gc * <Lua 11: vim/_defaults.lua:0>
|
x gc * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/comment.lua
|
||||||
Toggle comment
|
Comment selection
|
||||||
n gc * <Lua 10: vim/_defaults.lua:0>
|
n gc * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/comment.lua
|
||||||
Toggle comment
|
Comment
|
||||||
x gx * <Lua 9: vim/_defaults.lua:0>
|
x gx * <Cmd>lua MiniOperators.exchange('visual')<CR>
|
||||||
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
|
Exchange selection
|
||||||
n gx * <Lua 8: vim/_defaults.lua:0>
|
n gx * v:lua.MiniOperators.exchange()
|
||||||
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
|
Exchange operator
|
||||||
o ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
|
o ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
|
||||||
Object scope
|
Object scope
|
||||||
x ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
|
x ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
|
||||||
Object scope
|
Object scope
|
||||||
|
x j * v:count == 0 ? 'gj' : 'j'
|
||||||
n j * v:count == 0 ? 'gj' : 'j'
|
n j * v:count == 0 ? 'gj' : 'j'
|
||||||
Move down
|
Move down
|
||||||
|
x k * v:count == 0 ? 'gk' : 'k'
|
||||||
n k * v:count == 0 ? 'gk' : 'k'
|
n k * v:count == 0 ? 'gk' : 'k'
|
||||||
Move up
|
Move up
|
||||||
o r * <Lua 97: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
n shn * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Remote Flash
|
|
||||||
n shn * <Lua 547: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
|
||||||
Highlight next surrounding
|
Highlight next surrounding
|
||||||
n sFn * <Lua 546: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sFn * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Find next left surrounding
|
Find next left surrounding
|
||||||
n sfn * <Lua 545: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sfn * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Find next right surrounding
|
Find next right surrounding
|
||||||
n srn * <Lua 544: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n srn * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Replace next surrounding
|
Replace next surrounding
|
||||||
n sdn * <Lua 543: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sdn * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Delete next surrounding
|
Delete next surrounding
|
||||||
n shl * <Lua 542: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n shl * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Highlight previous surrounding
|
Highlight previous surrounding
|
||||||
n sFl * <Lua 541: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sFl * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Find previous left surrounding
|
Find previous left surrounding
|
||||||
n sfl * <Lua 540: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sfl * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Find previous right surrounding
|
Find previous right surrounding
|
||||||
n srl * <Lua 539: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n srl * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Replace previous surrounding
|
Replace previous surrounding
|
||||||
n sdl * <Lua 538: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sdl * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Delete previous surrounding
|
Delete previous surrounding
|
||||||
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
|
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
|
||||||
Add surrounding to selection
|
Add surrounding to selection
|
||||||
n sn * <Lua 537: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:895>
|
n sn * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Update `MiniSurround.config.n_lines`
|
Update `MiniSurround.config.n_lines`
|
||||||
n sh * <Lua 536: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sh * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Highlight surrounding
|
Highlight surrounding
|
||||||
n sF * <Lua 535: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sF * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Find left surrounding
|
Find left surrounding
|
||||||
n sf * <Lua 534: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sf * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Find right surrounding
|
Find right surrounding
|
||||||
n sr * <Lua 533: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sr * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Replace surrounding
|
Replace surrounding
|
||||||
n sd * <Lua 532: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sd * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Delete surrounding
|
Delete surrounding
|
||||||
n sa * <Lua 531: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
|
n sa * ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua
|
||||||
Add surrounding
|
Add surrounding
|
||||||
n zk * <Lua 100: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
o t * ~/.local/share/nvim/lazy/mini.nvim/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
|
Flash
|
||||||
o zk * <Lua 94: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
o zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||||
Flash
|
Flash
|
||||||
x zk * <Lua 92: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
|
n zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
|
||||||
Flash
|
Flash
|
||||||
|
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-W>= * <C-W>=
|
||||||
|
Equal Size Splits
|
||||||
|
n <C-W>+ * :resize +10<CR>
|
||||||
|
H Resize +
|
||||||
|
n <C-W>- * :resize -10<CR>
|
||||||
|
H Resize -
|
||||||
|
n <C-W>. * :vertical resize +10<CR>
|
||||||
|
V Resize +
|
||||||
|
n <C-W>, * :vertical resize -10<CR>
|
||||||
|
V Resize -
|
||||||
|
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)
|
x <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward)
|
||||||
o <Plug>(MatchitOperationMultiForward) * :<C-U>call matchit#MultiMatch("W", "o")<CR>
|
o <Plug>(MatchitOperationMultiForward) * :<C-U>call matchit#MultiMatch("W", "o")<CR>
|
||||||
o <Plug>(MatchitOperationMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "o")<CR>
|
o <Plug>(MatchitOperationMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "o")<CR>
|
||||||
@@ -192,29 +450,33 @@ 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``
|
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>(MatchitNormalBackward) * :<C-U>call matchit#Match_wrapper('',0,'n')<CR>
|
||||||
n <Plug>(MatchitNormalForward) * :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
|
n <Plug>(MatchitNormalForward) * :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
|
||||||
s <Plug>luasnip-jump-prev * <Lua 345: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:57>
|
|
||||||
LuaSnip: Jump to the previous node
|
|
||||||
s <Plug>luasnip-jump-next * <Lua 344: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:54>
|
|
||||||
LuaSnip: Jump to the next node
|
|
||||||
s <Plug>luasnip-prev-choice * <Lua 343: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:51>
|
|
||||||
LuaSnip: Change to the previous choice from the choiceNode
|
|
||||||
s <Plug>luasnip-next-choice * <Lua 342: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:48>
|
|
||||||
LuaSnip: Change to the next choice from the choiceNode
|
|
||||||
s <Plug>luasnip-expand-snippet * <Lua 341: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:45>
|
|
||||||
LuaSnip: Expand the current snippet
|
|
||||||
s <Plug>luasnip-expand-or-jump * <Lua 340: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:42>
|
|
||||||
LuaSnip: Expand or jump in the current snippet
|
|
||||||
<Plug>luasnip-expand-repeat * <Lua 338: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:35>
|
|
||||||
LuaSnip: Repeat last node expansion
|
|
||||||
n <Plug>luasnip-delete-check * <Lua 336: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:28>
|
|
||||||
LuaSnip: Removes current snippet from jumplist
|
|
||||||
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
|
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
|
||||||
|
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
|
||||||
|
x <C-S> * <Esc><Cmd>silent! update | redraw<CR>
|
||||||
|
Save and go to Normal mode
|
||||||
|
n <C-S> * :w!<CR>
|
||||||
|
Save
|
||||||
n <C-W><C-D> <C-W>d
|
n <C-W><C-D> <C-W>d
|
||||||
Show diagnostics under the cursor
|
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
|
Show diagnostics under the cursor
|
||||||
n <C-L> * <Cmd>nohlsearch|diffupdate|normal! <C-L><CR>
|
n <C-L> * :lua vim.lsp.buf.signature_help()<CR>
|
||||||
:help CTRL-L-default
|
Signature
|
||||||
```
|
```
|
||||||
|
|
||||||
- Generated on Fri 22 Nov 2024 15:30:39 EET
|
- Generated on Thu 2 Jan 2025 17:41:13 EET
|
||||||
|
|||||||
@@ -2,17 +2,13 @@
|
|||||||
|
|
||||||
Leader: `<ctrl><space>`
|
Leader: `<ctrl><space>`
|
||||||
|
|
||||||
```
|
```txt
|
||||||
C-o Rotate through the panes
|
|
||||||
C-z Suspend the current client
|
|
||||||
Space Select next layout
|
Space Select next layout
|
||||||
# List all paste buffers
|
# List all paste buffers
|
||||||
$ Rename current session
|
$ Rename current session
|
||||||
% Split window horizontally
|
% Split window horizontally
|
||||||
& Kill current window
|
& Kill current window
|
||||||
' Prompt for window index to select
|
' Prompt for window index to select
|
||||||
( Switch to previous client
|
|
||||||
) Switch to next client
|
|
||||||
, Rename current window
|
, Rename current window
|
||||||
- Delete the most recent paste buffer
|
- Delete the most recent paste buffer
|
||||||
. Move the current window
|
. Move the current window
|
||||||
@@ -63,6 +59,8 @@ Leader: `<ctrl><space>`
|
|||||||
M-3 Set the main-horizontal layout
|
M-3 Set the main-horizontal layout
|
||||||
M-4 Set the main-vertical layout
|
M-4 Set the main-vertical layout
|
||||||
M-5 Select the tiled layout
|
M-5 Select the tiled layout
|
||||||
|
M-6 Set the main-horizontal-mirrored layout
|
||||||
|
M-7 Set the main-vertical-mirrored layout
|
||||||
M-n Select the next window with an alert
|
M-n Select the next window with an alert
|
||||||
M-o Rotate through the panes in reverse
|
M-o Rotate through the panes in reverse
|
||||||
M-p Select the previous window with an alert
|
M-p Select the previous window with an alert
|
||||||
@@ -70,6 +68,8 @@ Leader: `<ctrl><space>`
|
|||||||
M-Down Resize the pane down by 5
|
M-Down Resize the pane down by 5
|
||||||
M-Left Resize the pane left by 5
|
M-Left Resize the pane left by 5
|
||||||
M-Right Resize the pane right by 5
|
M-Right Resize the pane right by 5
|
||||||
|
C-o Rotate through the panes
|
||||||
|
C-z Suspend the current client
|
||||||
C-Up Resize the pane up
|
C-Up Resize the pane up
|
||||||
C-Down Resize the pane down
|
C-Down Resize the pane down
|
||||||
C-Left Resize the pane left
|
C-Left Resize the pane left
|
||||||
|
|||||||
@@ -277,4 +277,4 @@ Mouse: alt_screen
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
- Generated on Sat 10 Aug 2024 13:01:59 EEST
|
- Generated on Thu 2 Jan 2025 17:41:13 EET
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ servers = (
|
|||||||
family = "inet";
|
family = "inet";
|
||||||
},
|
},
|
||||||
{ address = "irc.efnet.net"; chatnet = "EFNet"; port = "6667"; },
|
{ address = "irc.efnet.net"; chatnet = "EFNet"; port = "6667"; },
|
||||||
{
|
{
|
||||||
address = "irc.undernet.org";
|
address = "irc.undernet.org";
|
||||||
chatnet = "Undernet";
|
chatnet = "Undernet";
|
||||||
port = "6667";
|
port = "6667";
|
||||||
},
|
},
|
||||||
{ address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
|
{ address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
|
||||||
{
|
{
|
||||||
address = "irc.quakenet.org";
|
address = "irc.quakenet.org";
|
||||||
chatnet = "QuakeNet";
|
chatnet = "QuakeNet";
|
||||||
port = "6667";
|
port = "6667";
|
||||||
@@ -50,7 +50,7 @@ chatnets = {
|
|||||||
max_whois = "4";
|
max_whois = "4";
|
||||||
max_query_chans = "5";
|
max_query_chans = "5";
|
||||||
};
|
};
|
||||||
EFNet = {
|
EFNet = {
|
||||||
type = "IRC";
|
type = "IRC";
|
||||||
max_kicks = "4";
|
max_kicks = "4";
|
||||||
max_msgs = "3";
|
max_msgs = "3";
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# vim: ft=gitconfig sw=2 ts=2 et
|
||||||
[include]
|
[include]
|
||||||
path = ~/.dotfiles/config/git/shared
|
path = ~/.dotfiles/config/git/shared
|
||||||
|
|
||||||
@@ -7,19 +8,19 @@
|
|||||||
[user]
|
[user]
|
||||||
name = Ismo Vuorinen
|
name = Ismo Vuorinen
|
||||||
email = ismo.vuorinen@vincit.fi
|
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"]
|
[gpg "ssh"]
|
||||||
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
|
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
|
||||||
allowedSignersFile = ~/.ssh/allowed_signers
|
allowedSignersFile = ~/.ssh/allowed_signers
|
||||||
|
|
||||||
[commit]
|
[commit]
|
||||||
gpgsign = true
|
gpgsign = true
|
||||||
|
|
||||||
[credential "https://github.com"]
|
[credential "https://github.com"]
|
||||||
helper =
|
helper =
|
||||||
helper = !/opt/homebrew/bin/gh auth git-credential
|
helper = !/opt/homebrew/bin/gh auth git-credential
|
||||||
|
|
||||||
[credential "https://gist.github.com"]
|
[credential "https://gist.github.com"]
|
||||||
helper =
|
helper =
|
||||||
helper = !/opt/homebrew/bin/gh auth git-credential
|
helper = !/opt/homebrew/bin/gh auth git-credential
|
||||||
|
|||||||
3
install
3
install
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
CONFIG="install.conf.yaml"
|
CONFIG="install.conf.yaml"
|
||||||
@@ -16,6 +15,7 @@ git submodule update --init --recursive "${DOTBOT_DIR}"
|
|||||||
|
|
||||||
"${DOTBOT_BIN_PATH}" \
|
"${DOTBOT_BIN_PATH}" \
|
||||||
-d "${BASEDIR}" \
|
-d "${BASEDIR}" \
|
||||||
|
--plugin-dir=tools/dotbot-asdf \
|
||||||
--plugin-dir=tools/dotbot-brew \
|
--plugin-dir=tools/dotbot-brew \
|
||||||
--plugin-dir=tools/dotbot-include \
|
--plugin-dir=tools/dotbot-include \
|
||||||
--plugin-dir=tools/dotbot-pip \
|
--plugin-dir=tools/dotbot-pip \
|
||||||
@@ -29,6 +29,7 @@ if [ "${DOTBOT_HOST}" != "" ]; then
|
|||||||
&& echo "(!) Found $DOTBOT_HOST_CONFIG" \
|
&& echo "(!) Found $DOTBOT_HOST_CONFIG" \
|
||||||
&& "$DOTBOT_BIN_PATH" \
|
&& "$DOTBOT_BIN_PATH" \
|
||||||
-d "$BASEDIR" \
|
-d "$BASEDIR" \
|
||||||
|
--plugin-dir=tools/dotbot-asdf \
|
||||||
--plugin-dir=tools/dotbot-brew \
|
--plugin-dir=tools/dotbot-brew \
|
||||||
--plugin-dir=tools/dotbot-include \
|
--plugin-dir=tools/dotbot-include \
|
||||||
--plugin-dir=tools/dotbot-pip \
|
--plugin-dir=tools/dotbot-pip \
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
- include: 'tools/dotbot-defaults.yaml'
|
- include: 'tools/dotbot-defaults.yaml'
|
||||||
|
|
||||||
- clean:
|
- clean:
|
||||||
~/:
|
~/:
|
||||||
~/.config:
|
~/.config:
|
||||||
@@ -8,6 +9,7 @@
|
|||||||
recursive: true
|
recursive: true
|
||||||
~/.ssh:
|
~/.ssh:
|
||||||
recursive: true
|
recursive: true
|
||||||
|
|
||||||
- create:
|
- create:
|
||||||
~/.cache:
|
~/.cache:
|
||||||
~/.cache/git:
|
~/.cache/git:
|
||||||
@@ -25,6 +27,7 @@
|
|||||||
~/.ssh/local.d:
|
~/.ssh/local.d:
|
||||||
mode: 0700
|
mode: 0700
|
||||||
~/Code:
|
~/Code:
|
||||||
|
|
||||||
- link:
|
- link:
|
||||||
~/:
|
~/:
|
||||||
force: true
|
force: true
|
||||||
@@ -35,10 +38,14 @@
|
|||||||
glob: true
|
glob: true
|
||||||
relink: true
|
relink: true
|
||||||
path: config/*
|
path: config/*
|
||||||
exclude: [config/nvm]
|
exclude: [config/nvm, config/fzf]
|
||||||
~/.local/bin:
|
~/.local/bin:
|
||||||
glob: true
|
glob: true
|
||||||
path: local/bin/*
|
path: local/bin/*
|
||||||
|
exclude: [local/bin/fzf]
|
||||||
|
~/.local/fzf:
|
||||||
|
glob: true
|
||||||
|
path: config/fzf/*
|
||||||
~/.local/man:
|
~/.local/man:
|
||||||
glob: true
|
glob: true
|
||||||
path: local/man/**
|
path: local/man/**
|
||||||
@@ -49,11 +56,55 @@
|
|||||||
glob: true
|
glob: true
|
||||||
mode: 0600
|
mode: 0600
|
||||||
path: ssh/*
|
path: ssh/*
|
||||||
|
|
||||||
- shell:
|
- shell:
|
||||||
- bash add-submodules.sh || true
|
- bash add-submodules.sh || true
|
||||||
- git submodule update --init --recursive --force
|
- 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
|
- bash local/bin/dfm install all
|
||||||
|
|
||||||
- pipx:
|
- pipx:
|
||||||
file: tools/requirements-pipx.txt
|
file: tools/requirements-pipx.txt
|
||||||
stdout: false
|
stdout: true
|
||||||
stderr: 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
|
||||||
Submodule local/bin/asdf updated: f00f759f3d...54d15e3fa6
557
local/bin/dfm
557
local/bin/dfm
@@ -14,61 +14,30 @@
|
|||||||
|
|
||||||
SCRIPT=$(basename "$0")
|
SCRIPT=$(basename "$0")
|
||||||
|
|
||||||
if ! declare -f msg > /dev/null; then
|
|
||||||
# Function to print messages if VERBOSE is enabled
|
|
||||||
# $1 - message (string)
|
|
||||||
msg()
|
|
||||||
{
|
|
||||||
[ "$VERBOSE" -eq 1 ] && echo "$1"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! declare -f msg_err > /dev/null; then
|
|
||||||
# Function to print error messages and exit
|
|
||||||
# $1 - error message (string)
|
|
||||||
msg_err()
|
|
||||||
{
|
|
||||||
echo "(!) ERROR: $1" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! declare -f msg_done > /dev/null; then
|
|
||||||
# Function to print done message
|
|
||||||
# $1 - message (string)
|
|
||||||
msg_done()
|
|
||||||
{
|
|
||||||
echo "✓ $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()
|
|
||||||
{
|
|
||||||
eval local ARR1=\(\"\${$2[@]}\"\)
|
|
||||||
eval local ARR2=\(\"\${$3[@]}\"\)
|
|
||||||
local IFS=$'\n'
|
|
||||||
mapfile -t "$1" < <(comm -23 <(echo "${ARR1[*]}" | sort) <(echo "${ARR2[*]}" | sort))
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
VERSION_NVM="v0.39.5"
|
|
||||||
|
|
||||||
# Loads configs for better installation experience
|
# Loads configs for better installation experience
|
||||||
source "$DOTFILES/config/shared.sh"
|
source "$DOTFILES/config/shared.sh"
|
||||||
|
|
||||||
source "${DOTFILES}/local/bin/msgr"
|
source "${DOTFILES}/local/bin/msgr"
|
||||||
|
|
||||||
# -- Menu builder -- #
|
# -- Menu builder -- #
|
||||||
|
|
||||||
|
menu_builder()
|
||||||
|
{
|
||||||
|
local title=$1
|
||||||
|
local commands=("${@:2}")
|
||||||
|
local width=60
|
||||||
|
|
||||||
|
printf "\n%s\n" "$(printf '%.s─' $(seq 1 $width))"
|
||||||
|
printf "%-${width}s\n" " $title"
|
||||||
|
printf "%s\n" "$(printf '%.s─' $(seq 1 $width))"
|
||||||
|
|
||||||
|
for cmd in "${commands[@]}"; do
|
||||||
|
local name=${cmd%%:*}
|
||||||
|
local desc=${cmd#*:}
|
||||||
|
printf " %-20s %s\n" "$name" "$desc"
|
||||||
|
done
|
||||||
|
# printf "\n"
|
||||||
|
}
|
||||||
|
|
||||||
menu_section()
|
menu_section()
|
||||||
{
|
{
|
||||||
LINE=$(printf '%-18s [ %-15s ]\n' "$1" "$2")
|
LINE=$(printf '%-18s [ %-15s ]\n' "$1" "$2")
|
||||||
@@ -122,23 +91,19 @@ section_install()
|
|||||||
|
|
||||||
MENU=(
|
MENU=(
|
||||||
"all:Installs everything in the correct order"
|
"all:Installs everything in the correct order"
|
||||||
|
"asdf:Install asdf plugins"
|
||||||
"cargo:Install rust/cargo packages"
|
"cargo:Install rust/cargo packages"
|
||||||
"cheat-databases:Install cheat external cheatsheet databases"
|
"cheat-databases:Install cheat external cheatsheet databases"
|
||||||
"composer:Install composer"
|
"composer:Install composer"
|
||||||
"dotenv:Install dotenv-linter"
|
|
||||||
"fonts:Install programming fonts"
|
"fonts:Install programming fonts"
|
||||||
"gh:Install GitHub CLI Extensions"
|
"gh:Install GitHub CLI Extensions"
|
||||||
"go:Install Go Packages"
|
"go:Install Go Packages"
|
||||||
"imagick:Install ImageMagick CLI"
|
"imagick:Install ImageMagick CLI"
|
||||||
"starship:Install starship.rs"
|
|
||||||
"macos:Setup nice macOS defaults"
|
"macos:Setup nice macOS defaults"
|
||||||
"neofetch:Install neofetch"
|
"npm-packages:Install NPM Packages"
|
||||||
"nvm:Install Node Version Manager (nvm)"
|
|
||||||
"nvm-latest:Install latest lts node using nvm"
|
|
||||||
"npm:Install NPM Packages"
|
|
||||||
"ntfy:Install ntfy"
|
"ntfy:Install ntfy"
|
||||||
"ohmybash:Install oh-my-bash"
|
"nvm-latest:Install latest lts node using nvm"
|
||||||
"pip:Install pip/python packages"
|
"nvm:Install Node Version Manager (nvm)"
|
||||||
"z:Install z"
|
"z:Install z"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -148,124 +113,111 @@ section_install()
|
|||||||
$0 install macos
|
$0 install macos
|
||||||
$0 install fonts
|
$0 install fonts
|
||||||
$0 brew install
|
$0 brew install
|
||||||
$0 install ohmyposh
|
|
||||||
$0 install asdf
|
$0 install asdf
|
||||||
$0 install composer
|
$0 install composer
|
||||||
$0 install fzf
|
$0 install fzf
|
||||||
$0 install go
|
|
||||||
$0 install cheat-databases
|
$0 install cheat-databases
|
||||||
$0 install imagick
|
|
||||||
$0 install nvm
|
$0 install nvm
|
||||||
$0 install npm
|
$0 install npm-packages
|
||||||
# $0 install ntfy
|
|
||||||
$0 install z
|
$0 install z
|
||||||
msgr msg "Reloading configurations again..."
|
msgr msg "Reloading configurations again..."
|
||||||
source "$DOTFILES/config/shared.sh"
|
source "$DOTFILES/config/shared.sh"
|
||||||
msgr yay "All done!"
|
msgr yay "All done!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
asdf)
|
asdf)
|
||||||
msg "Installing asdf..."
|
msgr run "Installing asdf..."
|
||||||
bash "$DOTFILES/scripts/install-asdf.sh both" \
|
$0 asdf plugins-install \
|
||||||
&& msg_yay "asdf installed!"
|
&& msgr yay "asdf plugins installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
cargo)
|
cargo)
|
||||||
msg "Installing cargo packages..."
|
msgr run "Installing cargo packages..."
|
||||||
bash "$DOTFILES/scripts/install-cargo-packages.sh" \
|
bash "$DOTFILES/scripts/install-cargo-packages.sh" \
|
||||||
&& msg_yay "cargo packages installed!"
|
&& msgr yay "cargo packages installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
cheat-databases)
|
cheat-databases)
|
||||||
msg "Installing cheat databases..."
|
msgr run "Installing cheat databases..."
|
||||||
for database in "$DOTFILES"/scripts/install-cheat-*; do
|
for database in "$DOTFILES"/scripts/install-cheat-*; do
|
||||||
bash "$database" \
|
bash "$database" \
|
||||||
&& msg_yay "Cheat: $database run"
|
&& msgr run_done "Cheat: $database run"
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
|
|
||||||
composer)
|
composer)
|
||||||
msg "Installing composer..."
|
msgr run "Installing composer..."
|
||||||
bash "$DOTFILES/scripts/install-composer.sh" \
|
bash "$DOTFILES/scripts/install-composer.sh" \
|
||||||
&& msg_yay "composer installed!"
|
&& msgr run_done "composer installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
fonts)
|
fonts)
|
||||||
msg "Installing fonts..."
|
msgr run "Installing fonts..."
|
||||||
bash "$DOTFILES/scripts/install-fonts.sh" \
|
bash "$DOTFILES/scripts/install-fonts.sh" \
|
||||||
&& msg_yay "Installed fonts!"
|
&& msgr yay "Installed fonts!"
|
||||||
;;
|
|
||||||
fzf)
|
|
||||||
msg "Installing fzf..."
|
|
||||||
bash "$DOTFILES/scripts/install-fzf.sh" \
|
|
||||||
&& msg_yay "fzf installed!"
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
gh)
|
gh)
|
||||||
msg "Installing GitHub CLI Extensions..."
|
msgr run "Installing GitHub CLI Extensions..."
|
||||||
bash "$DOTFILES/scripts/install-gh-extensions.sh" \
|
bash "$DOTFILES/scripts/install-gh-extensions.sh" \
|
||||||
&& msg_yay "github cli extensions installed!"
|
&& msgr yay "github cli extensions installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
go)
|
go)
|
||||||
msg "Installing Go Packages..."
|
msgr run "Installing Go Packages..."
|
||||||
bash "$DOTFILES/scripts/install-go-packages.sh" \
|
bash "$DOTFILES/scripts/install-go-packages.sh" \
|
||||||
&& msg_yay "go packages installed!"
|
&& msgr yay "go packages installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
imagick)
|
imagick)
|
||||||
msg "Installing ImageMagick CLI..."
|
msgr run "Downloading and installing ImageMagick CLI..."
|
||||||
curl -L https://imagemagick.org/archive/binaries/magick > "$XDG_BIN_HOME/magick" \
|
curl -L https://imagemagick.org/archive/binaries/magick > "$XDG_BIN_HOME/magick" \
|
||||||
&& chmod +x "$XDG_BIN_HOME/magick" \
|
&& chmod +x "$XDG_BIN_HOME/magick" \
|
||||||
&& msg_yay "imagick installed!"
|
&& msgr yay "imagick downloaded and installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
macos)
|
macos)
|
||||||
msg "Setting up macOS defaults..."
|
msgr run "Setting up macOS defaults..."
|
||||||
bash "$DOTFILES/scripts/set-macos-defaults.sh" \
|
bash "$DOTFILES/scripts/install-macos-defaults.sh" \
|
||||||
&& msg_yay "Brewfile defined apps has been installed!"
|
&& msgr yay "macOS defaults set!"
|
||||||
;;
|
|
||||||
neofetch)
|
|
||||||
msg "Installing neofetch..."
|
|
||||||
bash "$DOTFILES/scripts/install-neofetch.sh" \
|
|
||||||
&& msg_yay "neofetch installed!"
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
nvm)
|
nvm)
|
||||||
msg "Installing nvm..."
|
msgr run "Installing nvm..."
|
||||||
|
local NVM_VERSION
|
||||||
NVM_VERSION=$(x-gh-get-latest-version nvm-sh/nvm)
|
NVM_VERSION=$(x-gh-get-latest-version nvm-sh/nvm)
|
||||||
msg "Latest nvm version: $NVM_VERSION"
|
msgr ok "Latest nvm version: $NVM_VERSION"
|
||||||
NVM_INSTALL="https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh"
|
local NVM_INSTALL="https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh"
|
||||||
NVM_CURL="curl -o- \"$NVM_INSTALL\" | bash"
|
local NVM_CURL="curl -o- \"$NVM_INSTALL\" | bash"
|
||||||
PROFILE=/dev/null bash -c "$NVM_CURL"
|
PROFILE=/dev/null bash -c "$NVM_CURL"
|
||||||
$0 install nvm-latest
|
$0 install nvm-latest
|
||||||
msg_yay "nvm installed!"
|
msgr yay "nvm installed!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
nvm-latest)
|
nvm-latest)
|
||||||
msg "Installing latest lts node..."
|
msgr run "Installing latest lts node..."
|
||||||
if [ -n "$NVM_DIR" ]; then
|
if [ -n "$NVM_DIR" ]; then
|
||||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
||||||
fi
|
fi
|
||||||
nvm install --lts --latest-npm --default
|
nvm install --lts --latest-npm --default
|
||||||
git checkout "$DOTFILES/base/zshrc"
|
git checkout "$DOTFILES/base/zshrc"
|
||||||
git checkout "$DOTFILES/base/bashrc"
|
git checkout "$DOTFILES/base/bashrc"
|
||||||
msg_yay "latest lts node installed!"
|
msgr yay "latest lts node installed!"
|
||||||
;;
|
;;
|
||||||
npm)
|
|
||||||
msg "NPM Packages install started..."
|
npm-packages)
|
||||||
|
msgr run "NPM Packages install started..."
|
||||||
bash "$DOTFILES/scripts/install-npm-packages.sh" \
|
bash "$DOTFILES/scripts/install-npm-packages.sh" \
|
||||||
&& msg_yay "NPM Packages have been installed!"
|
&& msgr yay "NPM Packages have been installed!"
|
||||||
;;
|
|
||||||
ntfy)
|
|
||||||
msg "ntfy install started..."
|
|
||||||
bash "$DOTFILES/scripts/install-ntfy.sh" \
|
|
||||||
&& msg_yay "ntfy installed!"
|
|
||||||
;;
|
|
||||||
ohmyposh)
|
|
||||||
msg "oh-my-posh install started..."
|
|
||||||
bash "$DOTFILES/scripts/install-ohmyposh.sh" \
|
|
||||||
&& msg_yay "oh-my-posh installed!"
|
|
||||||
;;
|
|
||||||
pip)
|
|
||||||
msg "pip install started..."
|
|
||||||
bash "$DOTFILES/scripts/install-pip-packages.sh"
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
z)
|
z)
|
||||||
msg "Installing z..."
|
msgr run "Installing z..."
|
||||||
bash "$DOTFILES/scripts/install-z.sh" \
|
bash "$DOTFILES/scripts/install-z.sh" \
|
||||||
&& msg_yay "z has been installed!"
|
&& msgr yay "z has been installed!"
|
||||||
;;
|
;;
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
|
||||||
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,12 +238,14 @@ section_brew()
|
|||||||
x-have brew && {
|
x-have brew && {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
install)
|
install)
|
||||||
brew bundle install --file="$BREWFILE" --force --quiet && msg_yay "Done!"
|
brew bundle install --file="$BREWFILE" --force --quiet && msgr yay "Done!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
update)
|
update)
|
||||||
brew update && brew outdated && brew upgrade && brew cleanup
|
brew update && brew outdated && brew upgrade && brew cleanup
|
||||||
msg_yay "Done!"
|
msgr yay "Done!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
updatebundle)
|
updatebundle)
|
||||||
# Updates .dotfiles/homebrew/Brewfile with descriptions
|
# Updates .dotfiles/homebrew/Brewfile with descriptions
|
||||||
brew bundle dump \
|
brew bundle dump \
|
||||||
@@ -301,11 +255,13 @@ section_brew()
|
|||||||
--tap \
|
--tap \
|
||||||
--formula \
|
--formula \
|
||||||
--cask \
|
--cask \
|
||||||
--describe && msg_yay "Done!"
|
--describe && msgr yay "Done!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
leaves)
|
leaves)
|
||||||
brew leaves --installed-on-request
|
brew leaves --installed-on-request
|
||||||
;;
|
;;
|
||||||
|
|
||||||
untracked)
|
untracked)
|
||||||
declare -a BREW_LIST_ALL
|
declare -a BREW_LIST_ALL
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
@@ -328,7 +284,8 @@ section_brew()
|
|||||||
|
|
||||||
declare -a BREW_LIST_TRACKED_WITHOUT_DEPS
|
declare -a BREW_LIST_TRACKED_WITHOUT_DEPS
|
||||||
for f in "${BREW_LIST_ALL[@]}"; do
|
for f in "${BREW_LIST_ALL[@]}"; do
|
||||||
if [[ ! " ${BREW_LIST_DEPENDENCIES[@]} " =~ " ${f} " ]]; then
|
# shellcheck disable=SC2199
|
||||||
|
if [[ " ${BREW_LIST_DEPENDENCIES[@]} " != *" ${f} "* ]]; then
|
||||||
BREW_LIST_TRACKED_WITHOUT_DEPS+=("$f")
|
BREW_LIST_TRACKED_WITHOUT_DEPS+=("$f")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -337,7 +294,7 @@ section_brew()
|
|||||||
|
|
||||||
# If there are no untracked packages, exit
|
# If there are no untracked packages, exit
|
||||||
if [ ${#BREW_LIST_UNTRACKED[@]} -eq 0 ]; then
|
if [ ${#BREW_LIST_UNTRACKED[@]} -eq 0 ]; then
|
||||||
msg_yay "No untracked packages found!"
|
msgr yay "No untracked packages found!"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -346,64 +303,176 @@ section_brew()
|
|||||||
echo " $f"
|
echo " $f"
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
clean)
|
|
||||||
brew bundle cleanup --file="$BREWFILE" && msg_yay "Done!"
|
|
||||||
;;
|
|
||||||
autoupdate)
|
autoupdate)
|
||||||
brew autoupdate delete
|
brew autoupdate delete
|
||||||
brew autoupdate start 43200 --upgrade --cleanup --immediate
|
brew autoupdate start 43200 --upgrade --cleanup --immediate
|
||||||
;;
|
;;
|
||||||
*)
|
|
||||||
menu_usage "$USAGE_PREFIX" "${MENU[@]}"
|
clean) brew bundle cleanup --file="$BREWFILE" && msgr yay "Done!" ;;
|
||||||
;;
|
|
||||||
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
! x-have brew && menu_section "$USAGE_PREFIX" "brew not available on this system"
|
! x-have brew && menu_builder "$USAGE_PREFIX" "brew not available on this system"
|
||||||
}
|
}
|
||||||
|
|
||||||
section_asdf()
|
section_asdf()
|
||||||
{
|
{
|
||||||
USAGE_PREFIX="$SCRIPT asdf <command>"
|
USAGE_PREFIX="$SCRIPT asdf <command>"
|
||||||
MENU=(
|
MENU=(
|
||||||
"install:Install asdf"
|
|
||||||
"current:Show asdf current versions"
|
"current:Show asdf current versions"
|
||||||
"global:Show asdf global versions"
|
"global:Show asdf global versions"
|
||||||
"installed:Show asdf installed versions"
|
"installed:Show asdf installed versions"
|
||||||
"local:Show asdf local versions"
|
"plugins-update:Update all asdf plugins"
|
||||||
|
"plugins-install:Install plugins from configuration"
|
||||||
|
"plugins-remove:Remove installed plugins"
|
||||||
|
"reset:Reset asdf plugins"
|
||||||
|
"fix-tool-versions:Remove uninstalled plugins from .tool-versions"
|
||||||
"versions:Show asdf versions"
|
"versions:Show asdf versions"
|
||||||
"where:Show asdf where"
|
"where:Show asdf where"
|
||||||
"which:Show asdf which"
|
"which:Show asdf which"
|
||||||
)
|
)
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
install)
|
plugins-update)
|
||||||
msg "Installing asdf..."
|
msgr run "Updating all asdf plugins"
|
||||||
bash "$DOTFILES/scripts/install-asdf.sh both" \
|
asdf plugin update --all
|
||||||
&& msg_yay "asdf installed!"
|
msgr run_done "Updated all plugins"
|
||||||
;;
|
;;
|
||||||
current)
|
|
||||||
asdf current
|
plugins-install)
|
||||||
|
msgr run "Installing plugins from configuration"
|
||||||
|
|
||||||
|
# First install direnv if it's not installed
|
||||||
|
if ! asdf plugin list | grep -q "^direnv$"; then
|
||||||
|
msgr nested "Installing direnv plugin"
|
||||||
|
asdf plugin add direnv https://github.com/asdf-community/asdf-direnv.git
|
||||||
|
|
||||||
|
# Install latest direnv
|
||||||
|
local latest_direnv
|
||||||
|
latest_direnv=$(asdf latest direnv)
|
||||||
|
asdf install direnv "$latest_direnv"
|
||||||
|
asdf global direnv "$latest_direnv"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check that all plugins are installed
|
||||||
|
local installed_plugins
|
||||||
|
installed_plugins=$(asdf plugin list)
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
# Skip empty lines and comments
|
||||||
|
[[ -z $line || $line =~ ^# ]] && continue
|
||||||
|
|
||||||
|
local plugin
|
||||||
|
plugin=$(echo "$line" | awk '{print $1}')
|
||||||
|
|
||||||
|
# Skip direnv, it's already installed
|
||||||
|
[[ $plugin == "direnv" ]] && continue
|
||||||
|
|
||||||
|
if ! echo "$installed_plugins" | grep -q "^${plugin}$"; then
|
||||||
|
msgr nested "Installing $plugin plugin"
|
||||||
|
asdf plugin add "$plugin"
|
||||||
|
fi
|
||||||
|
done < "$DOTFILES/base/tool-versions"
|
||||||
|
|
||||||
|
msgr run_done "All plugins installed"
|
||||||
;;
|
;;
|
||||||
global)
|
|
||||||
asdf global
|
plugins-remove)
|
||||||
|
msgr run "Remove installed plugins"
|
||||||
|
local installed_plugins
|
||||||
|
installed_plugins=$(asdf plugin list | grep -v "^direnv$")
|
||||||
|
|
||||||
|
for plugin in $installed_plugins; do
|
||||||
|
msgr nested "Removing $plugin"
|
||||||
|
asdf plugin remove "$plugin"
|
||||||
|
done
|
||||||
|
|
||||||
|
msgr run_done "Remove plugins done!"
|
||||||
;;
|
;;
|
||||||
installed)
|
|
||||||
asdf list
|
reset)
|
||||||
|
msgr run "Resetting asdf environment"
|
||||||
|
$0 asdf plugins-remove
|
||||||
|
$0 asdf plugins-install
|
||||||
|
asdf reshim
|
||||||
|
msgr yay "Reset asdf plugins done!"
|
||||||
;;
|
;;
|
||||||
local)
|
|
||||||
asdf local
|
fix-tool-versions)
|
||||||
|
local tool_versions_file="$DOTFILES/base/tool-versions"
|
||||||
|
local temp_file
|
||||||
|
temp_file=$(mktemp)
|
||||||
|
|
||||||
|
msgr run "Fixing tool-versions file"
|
||||||
|
|
||||||
|
# Check that .tool-versions file exists
|
||||||
|
if [[ ! -f $tool_versions_file ]]; then
|
||||||
|
msgr error "tool-versions file not found: $tool_versions_file"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check that asdf can be found in the path
|
||||||
|
if ! command -v asdf > /dev/null; then
|
||||||
|
msgr error "asdf not found"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Read installed plugins
|
||||||
|
msgr nested "Reading installed plugins"
|
||||||
|
local installed_plugins
|
||||||
|
installed_plugins=$(asdf plugin list | sort)
|
||||||
|
|
||||||
|
# Compare .tool-versions and installed plugins,
|
||||||
|
# remove unknown plugins from .tool-versions
|
||||||
|
msgr nested "Updating tool-versions file"
|
||||||
|
while IFS= read -r line; do
|
||||||
|
# Keep comments and empty lines
|
||||||
|
if [[ -z $line || $line =~ ^[[:space:]]*# ]]; then
|
||||||
|
echo "$line" >> "$temp_file"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
local plugin
|
||||||
|
plugin=$(echo "$line" | awk '{print $1}')
|
||||||
|
|
||||||
|
if echo "$installed_plugins" | grep -q "^${plugin}$"; then
|
||||||
|
echo "$line" >> "$temp_file"
|
||||||
|
else
|
||||||
|
msgr nested "Removing $plugin - not installed"
|
||||||
|
fi
|
||||||
|
done < "$tool_versions_file"
|
||||||
|
|
||||||
|
# Check that the temp file is valid
|
||||||
|
if [[ ! -s $temp_file ]] || ! grep -v '^[[:space:]]*#' "$temp_file" | grep -q .; then
|
||||||
|
msgr error "Generated file is empty or contains only comments, keeping original"
|
||||||
|
rm -f "$temp_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Backup the original .tool-versions
|
||||||
|
cp "$tool_versions_file" "${tool_versions_file}.bak"
|
||||||
|
|
||||||
|
# Overwrite .tool-versions with the generated file
|
||||||
|
mv "$temp_file" "$tool_versions_file"
|
||||||
|
|
||||||
|
msgr run_done "Updated $tool_versions_file"
|
||||||
|
msgr nested "Backup saved as ${tool_versions_file}.bak"
|
||||||
|
|
||||||
|
return 0
|
||||||
;;
|
;;
|
||||||
versions)
|
|
||||||
asdf list all
|
current) asdf current ;;
|
||||||
;;
|
global) asdf global ;;
|
||||||
where)
|
installed) asdf list ;;
|
||||||
asdf where
|
versions) asdf list all ;;
|
||||||
;;
|
where) asdf where ;;
|
||||||
which)
|
which) asdf which ;;
|
||||||
asdf which
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
;;
|
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,7 +485,7 @@ section_helpers()
|
|||||||
"env:Show environment variables"
|
"env:Show environment variables"
|
||||||
"functions:Show functions"
|
"functions:Show functions"
|
||||||
"nvim:Show nvim keybindings"
|
"nvim:Show nvim keybindings"
|
||||||
"path:Show \$PATH dir by dir"
|
'path:Show $PATH dir by dir'
|
||||||
"tmux:Show tmux keybindings"
|
"tmux:Show tmux keybindings"
|
||||||
"wezterm:Show wezterm keybindings"
|
"wezterm:Show wezterm keybindings"
|
||||||
)
|
)
|
||||||
@@ -431,6 +500,7 @@ section_helpers()
|
|||||||
# shellcheck disable=2001
|
# shellcheck disable=2001
|
||||||
for i in $(echo "$PATH" | sed 's/:/ /g'); do echo "$i"; done
|
for i in $(echo "$PATH" | sed 's/:/ /g'); do echo "$i"; done
|
||||||
;;
|
;;
|
||||||
|
|
||||||
aliases)
|
aliases)
|
||||||
case "$SECTION" in
|
case "$SECTION" in
|
||||||
"zsh")
|
"zsh")
|
||||||
@@ -444,25 +514,38 @@ section_helpers()
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"colors")
|
"colors")
|
||||||
for i in {0..255}; do echo -en "\e[38;5;${i}m${i} "; done
|
max=255
|
||||||
|
start=0
|
||||||
|
|
||||||
|
while [ "$start" -le "$max" ]; do
|
||||||
|
for i in $(seq "$start" $((start + 9))); do
|
||||||
|
if [ "$i" -le "$max" ]; then
|
||||||
|
# Outputs colored number
|
||||||
|
# printf " \e[38;5;%sm%4s\e[0m" "$i" "$i"
|
||||||
|
|
||||||
|
# Outputs colored block with number inside
|
||||||
|
# printf " \e[48;5;%sm\e[38;5;15m%5s \e[0m" "$i" "$i"
|
||||||
|
|
||||||
|
# Outputs colored block and color number
|
||||||
|
# printf " \e[48;5;%sm \e[0m %3d" "$i" "$i"
|
||||||
|
|
||||||
|
# Outputs color number and colored block
|
||||||
|
printf "%3d \e[48;5;%sm \e[0m " "$i" "$i"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
printf "\n"
|
||||||
|
start=$((start + 10))
|
||||||
|
done
|
||||||
;;
|
;;
|
||||||
"env")
|
|
||||||
env | sort
|
"env") env | sort ;;
|
||||||
;;
|
"functions") declare -F ;;
|
||||||
"functions")
|
"nvim") cat "$DOTFILES/docs/nvim-keybindings.md" ;;
|
||||||
declare -F
|
"tmux") cat "$DOTFILES/docs/tmux-keybindings.md" ;;
|
||||||
;;
|
"wezterm") cat "$DOTFILES/docs/wezterm-keybindings.md" ;;
|
||||||
"nvim")
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
cat "$DOTFILES/docs/nvim-keybindings.md"
|
|
||||||
;;
|
|
||||||
"tmux")
|
|
||||||
cat "$DOTFILES/docs/tmux-keybindings.md"
|
|
||||||
;;
|
|
||||||
"wezterm")
|
|
||||||
cat "$DOTFILES/docs/wezterm-keybindings.md"
|
|
||||||
;;
|
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,7 +569,7 @@ section_docs()
|
|||||||
tmux) bash "$DOTFILES/local/bin/x-dfm-docs-xterm-keybindings" ;;
|
tmux) bash "$DOTFILES/local/bin/x-dfm-docs-xterm-keybindings" ;;
|
||||||
nvim) bash "$DOTFILES/scripts/create-nvim-keymaps.sh" ;;
|
nvim) bash "$DOTFILES/scripts/create-nvim-keymaps.sh" ;;
|
||||||
wezterm) bash "$DOTFILES/scripts/create-wezterm-keymaps.sh" ;;
|
wezterm) bash "$DOTFILES/scripts/create-wezterm-keymaps.sh" ;;
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,37 +587,42 @@ section_dotfiles()
|
|||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
fmt)
|
fmt)
|
||||||
msg_ok "Running all formatters"
|
msgr run "Running all formatters"
|
||||||
$0 dotfiles yamlfmt
|
$0 dotfiles yamlfmt
|
||||||
$0 dotfiles shfmt
|
$0 dotfiles shfmt
|
||||||
msg_done "...done!"
|
msgr run_done "...done!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
reset_all)
|
reset_all)
|
||||||
msg_ok "Running all reset commands"
|
msgr ok "Running all reset commands"
|
||||||
$0 dotfiles reset_nvim
|
$0 dotfiles reset_nvim
|
||||||
;;
|
;;
|
||||||
|
|
||||||
reset_nvim)
|
reset_nvim)
|
||||||
|
msgr run "Cleaning nvim state, cache and config"
|
||||||
rm -rf \
|
rm -rf \
|
||||||
~/.local/share/nvim \
|
~/.local/share/nvim \
|
||||||
~/.local/state/nvim \
|
~/.local/state/nvim \
|
||||||
~/.cache/nvim \
|
~/.cache/nvim \
|
||||||
~/.config/nvim
|
~/.config/nvim
|
||||||
msg_ok "Deleted old nvim files (share, state and cache + config)"
|
msgr ok "Deleted old nvim files (share, state and cache + config)"
|
||||||
ln -s "$DOTFILES/config/nvim" ~/.config/nvim
|
ln -s "$DOTFILES/config/nvim" ~/.config/nvim
|
||||||
msg_ok "Linked nvim and astronvim"
|
msgr ok "Linked nvim and astronvim"
|
||||||
x-have npm && $0 install npm
|
x-have npm && $0 install npm
|
||||||
msg_ok "Installed packages"
|
msgr ok "Installed packages"
|
||||||
msg_done "nvim reset!"
|
msgr run_done "nvim reset!"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
yamlfmt)
|
yamlfmt)
|
||||||
# format yaml files
|
# format yaml files
|
||||||
x-have yamlfmt && yamlfmt -conf "$DOTFILES/.yamlfmt"
|
x-have yamlfmt && yamlfmt -conf "$DOTFILES/.yamlfmt"
|
||||||
! x-have yamlfmt && msg_err "yamlfmt not found"
|
! x-have yamlfmt && msgr err "yamlfmt not found"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
shfmt)
|
shfmt)
|
||||||
# If system doesn't have fd or shfmt installed, exit
|
# If system doesn't have fd or shfmt installed, exit
|
||||||
! x-have fd && msg_err "fd not found, install with asdf"
|
! x-have fd && msgr err "fd not found, install it to continue"
|
||||||
! x-have shfmt && msg_err "shfmt not found, install with asdf"
|
! x-have shfmt && msgr err "shfmt not found, install it to continue"
|
||||||
# Format shell scripts according to following rules.
|
# Format shell scripts according to following rules.
|
||||||
fd --full-path "$DOTFILES" -tx \
|
fd --full-path "$DOTFILES" -tx \
|
||||||
--hidden \
|
--hidden \
|
||||||
@@ -545,9 +633,10 @@ section_dotfiles()
|
|||||||
--func-next-line --list --write \
|
--func-next-line --list --write \
|
||||||
--indent 2 --case-indent --space-redirects \
|
--indent 2 --case-indent --space-redirects \
|
||||||
--binary-next-line {} \;
|
--binary-next-line {} \;
|
||||||
msg_yay "dotfiles have been shfmt formatted!"
|
msgr yay "dotfiles have been shfmt formatted!"
|
||||||
;;
|
;;
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
|
||||||
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -564,14 +653,61 @@ section_check()
|
|||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
a | arch)
|
a | arch)
|
||||||
[[ "$2" = "" ]] && echo "$X_ARCH" && exit 0
|
[[ $2 == "" ]] && echo "$X_ARCH" && exit 0
|
||||||
[[ $X_ARCH = "$2" ]] && exit 0 || exit 1
|
[[ $X_ARCH == "$2" ]] && exit 0 || exit 1
|
||||||
;;
|
;;
|
||||||
|
|
||||||
h | host | hostname)
|
h | host | hostname)
|
||||||
[[ "$2" = "" ]] && echo "$X_HOSTNAME" && exit 0
|
[[ $2 == "" ]] && echo "$X_HOSTNAME" && exit 0
|
||||||
[[ $X_HOSTNAME = "$2" ]] && exit 0 || exit 1
|
[[ $X_HOSTNAME == "$2" ]] && exit 0 || exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
section_scripts()
|
||||||
|
{
|
||||||
|
USAGE_PREFIX="$SCRIPT scripts <command>"
|
||||||
|
|
||||||
|
# Get description from a file
|
||||||
|
get_script_description()
|
||||||
|
{
|
||||||
|
local file
|
||||||
|
local desc
|
||||||
|
file="$1"
|
||||||
|
desc=$(sed -n '/@description/s/.*@description *\(.*\)/\1/p' "$file" | head -1)
|
||||||
|
echo "${desc:-No description available}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Collect scripts and their descriptions
|
||||||
|
declare -A SCRIPT_MENU
|
||||||
|
for script in "$DOTFILES/scripts/install-"*.sh; do
|
||||||
|
if [ -f "$script" ]; then
|
||||||
|
name=$(basename "$script" .sh | sed 's/install-//')
|
||||||
|
desc=$(get_script_description "$script")
|
||||||
|
SCRIPT_MENU[$name]="$desc"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
"")
|
||||||
|
# Show the menu
|
||||||
|
local menu_items=()
|
||||||
|
for name in "${!SCRIPT_MENU[@]}"; do
|
||||||
|
menu_items+=("$name:${SCRIPT_MENU[$name]}")
|
||||||
|
done
|
||||||
|
menu_builder "$USAGE_PREFIX" "${menu_items[@]}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Run the chosen script
|
||||||
|
script_path="$DOTFILES/scripts/install-$1.sh"
|
||||||
|
if [ -f "$script_path" ]; then
|
||||||
|
bash "$script_path"
|
||||||
|
else
|
||||||
|
msgr err "Script not found: $1"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,7 +717,7 @@ section_tests()
|
|||||||
USAGE_PREFIX="$SCRIPT tests <command>"
|
USAGE_PREFIX="$SCRIPT tests <command>"
|
||||||
|
|
||||||
MENU=(
|
MENU=(
|
||||||
"msg:List all log functions from shared.sh"
|
"msgr:List all available msgr message types"
|
||||||
"params:List all parameters"
|
"params:List all parameters"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -593,29 +729,29 @@ section_tests()
|
|||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
msg)
|
msg)
|
||||||
msg "msg"
|
# shellcheck disable=SC1010
|
||||||
msg_done "msg_done"
|
msgr done "msgr done"
|
||||||
msg_done_suffix "msg_done_suffix"
|
msgr done_suffix "msgr done_suffix"
|
||||||
msg_err "msg_err"
|
msgr err "msgr err"
|
||||||
msg_nested "msg_nested"
|
msgr nested "msgr nested"
|
||||||
msg_nested_done "msg_nested_done"
|
msgr nested_done "msgr nested_done"
|
||||||
msg_ok "msg_ok"
|
msgr ok "msgr ok"
|
||||||
msg_prompt "msg_prompt"
|
msgr prompt "msgr prompt"
|
||||||
msg_prompt_done "msg_prompt_done"
|
msgr prompt_done "msgr prompt_done"
|
||||||
msg_run "msg_run" "second_param"
|
msgr run "msgr run" "second_param"
|
||||||
msg_run_done "msg_run_done" "second_param"
|
msgr run_done "msgr run_done" "second_param"
|
||||||
msg_warn "msg_warn"
|
msgr warn "msgr warn"
|
||||||
msg_yay "msg_yay"
|
msgr yay "msgr yay"
|
||||||
msg_yay_done "msg_yay_done"
|
msgr yay_done "msgr yay_done"
|
||||||
;;
|
;;
|
||||||
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
|
*) menu_builder "$USAGE_PREFIX" "${MENU[@]}" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
echo ""
|
echo ""
|
||||||
msg_prompt "Usage: $SCRIPT <section> <command>"
|
msgr prompt "Usage: $SCRIPT <section> <command>"
|
||||||
echo $" Empty <command> prints <section> help."
|
echo $" Empty <command> prints <section> help."
|
||||||
echo ""
|
echo ""
|
||||||
section_install
|
section_install
|
||||||
@@ -630,6 +766,8 @@ usage()
|
|||||||
echo ""
|
echo ""
|
||||||
section_docs
|
section_docs
|
||||||
echo ""
|
echo ""
|
||||||
|
section_scripts
|
||||||
|
echo ""
|
||||||
section_helpers
|
section_helpers
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -646,6 +784,7 @@ main()
|
|||||||
dotfiles) section_dotfiles "$@" ;;
|
dotfiles) section_dotfiles "$@" ;;
|
||||||
helpers) section_helpers "$@" ;;
|
helpers) section_helpers "$@" ;;
|
||||||
docs) section_docs "$@" ;;
|
docs) section_docs "$@" ;;
|
||||||
|
scripts) section_scripts "$@" ;;
|
||||||
tests) section_tests "$@" ;;
|
tests) section_tests "$@" ;;
|
||||||
*) usage && exit 0 ;;
|
*) usage && exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ generate_tmux_keybindings()
|
|||||||
{
|
{
|
||||||
local tmux_keybindings_docs="$1"
|
local tmux_keybindings_docs="$1"
|
||||||
|
|
||||||
local cb="\n\`\`\`\n"
|
local cb="\n\`\`\`txt\n"
|
||||||
|
local cbe="\n\`\`\`\n"
|
||||||
local kb
|
local kb
|
||||||
kb=$(tmux lsk -Tprefix -N | sed -e 's/^/ /;')
|
kb=$(tmux lsk -Tprefix -N | sed -e 's/^/ /;')
|
||||||
local h="# tmux keybindings\n"
|
local h="# tmux keybindings\n"
|
||||||
@@ -33,7 +34,7 @@ generate_tmux_keybindings()
|
|||||||
kb="${kb//$HOME/\$HOME}"
|
kb="${kb//$HOME/\$HOME}"
|
||||||
|
|
||||||
msg "Outputting tmux keybindings to $tmux_keybindings_docs"
|
msg "Outputting tmux keybindings to $tmux_keybindings_docs"
|
||||||
echo -e "${h}${l}${cb}${kb}${cb}" > "$tmux_keybindings_docs"
|
echo -e "${h}${l}${cb}${kb}${cbe}" > "$tmux_keybindings_docs"
|
||||||
msg "Done!"
|
msg "Done!"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Create file containing key mappings for Neovim
|
# @description Create file containing key mappings for Neovim
|
||||||
# Usage: ./create-nvim-keymaps.sh
|
# Usage: ./create-nvim-keymaps.sh
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
@@ -19,8 +19,12 @@ main()
|
|||||||
|
|
||||||
printf "\n\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST"
|
printf "\n\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST"
|
||||||
|
|
||||||
# Remove lines with "Last set from" from the file
|
# Remove unnecessary information from the output and the last line
|
||||||
sed -e '/^ Last set from/d' "$DEST" > "${DEST}.tmp" && mv "${DEST}.tmp" "$DEST"
|
sed -E \
|
||||||
|
-e 's/<Lua [^:]+: ([^:>]+):[0-9]+>/\1/' \
|
||||||
|
-e '/^ Last set from/d' "$DEST" \
|
||||||
|
> "${DEST}.tmp" \
|
||||||
|
&& mv "${DEST}.tmp" "$DEST"
|
||||||
|
|
||||||
msg "Neovim keybindings documentation generated at $DEST"
|
msg "Neovim keybindings documentation generated at $DEST"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Export oh-my-posh configuration as an image
|
|
||||||
#
|
|
||||||
# shellcheck source=shared.sh
|
|
||||||
source "${DOTFILES}/config/shared.sh"
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
cd "$DOTFILES" || msg_err "Failed to change directory to $DOTFILES"
|
|
||||||
|
|
||||||
oh-my-posh config export image \
|
|
||||||
--config "$OHMYPOSH_CFG" \
|
|
||||||
--output "$HOME/.dotfiles/.github/screenshots/oh-my-posh.png" \
|
|
||||||
--author "Ismo Vuorinen"
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Create file containing key mappings for wezterm
|
# @description Create file containing key mappings for wezterm
|
||||||
# Usage: ./create-wezterm-keymaps.sh
|
# Usage: ./create-wezterm-keymaps.sh
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
|
|||||||
@@ -1,129 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Install asdf and plugins I use
|
|
||||||
#
|
|
||||||
# It also updates asdf and the plugins, and then reshim asdf.
|
|
||||||
#
|
|
||||||
# Usage: ./install-asdf.sh [both|install|update|add_plugins]
|
|
||||||
# Author: Ismo Vuorinen <https://github.com/ivuorinen>
|
|
||||||
# License: MIT
|
|
||||||
#
|
|
||||||
source "${DOTFILES}/config/shared.sh"
|
|
||||||
|
|
||||||
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
|
|
||||||
export PATH="${ASDF_DIR}/bin:$PATH"
|
|
||||||
|
|
||||||
# If ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME is not set, set it
|
|
||||||
if [ -z "${ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME}" ]; then
|
|
||||||
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg "Sourcing asdf in your shell"
|
|
||||||
. "$ASDF_DIR/asdf.sh"
|
|
||||||
|
|
||||||
ASDF_INSTALLABLES=(
|
|
||||||
"1password-cli:github.com/NeoHsu/asdf-1password-cli.git"
|
|
||||||
"age:github.com/threkk/asdf-age.git"
|
|
||||||
"bottom:github.com/carbonteq/asdf-btm.git"
|
|
||||||
"direnv:github.com/asdf-community/asdf-direnv.git"
|
|
||||||
"dotenv-linter:github.com/wesleimp/asdf-dotenv-linter.git"
|
|
||||||
"editorconfig-checker:github.com/gabitchov/asdf-editorconfig-checker.git"
|
|
||||||
"fd:gitlab.com/wt0f/asdf-fd.git"
|
|
||||||
"github-cli:github.com/bartlomiejdanek/asdf-github-cli.git"
|
|
||||||
"golang:github.com/asdf-community/asdf-golang.git"
|
|
||||||
"hadolint:github.com/devlincashman/asdf-hadolint.git"
|
|
||||||
"kubectl:github.com/asdf-community/asdf-kubectl.git"
|
|
||||||
"pre-commit:github.com/jonathanmorley/asdf-pre-commit.git"
|
|
||||||
"ripgrep:gitlab.com/wt0f/asdf-ripgrep.git"
|
|
||||||
"rust:github.com/code-lever/asdf-rust.git"
|
|
||||||
"shellcheck:github.com/luizm/asdf-shellcheck.git"
|
|
||||||
"shfmt:github.com/luizm/asdf-shfmt.git"
|
|
||||||
"terragrunt:github.com/ohmer/asdf-terragrunt.git"
|
|
||||||
"tf-summarize:github.com/adamcrews/asdf-tf-summarize.git"
|
|
||||||
"yamllint:github.com/ericcornelissen/asdf-yamllint.git"
|
|
||||||
"yq:github.com/sudermanjr/asdf-yq.git"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Function to update asdf and plugins
|
|
||||||
update_asdf()
|
|
||||||
{
|
|
||||||
asdf plugin add asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git
|
|
||||||
asdf install asdf-plugin-manager latest
|
|
||||||
asdf global asdf-plugin-manager "$(asdf latest asdf-plugin-manager)"
|
|
||||||
asdf-plugin-manager version
|
|
||||||
asdf-plugin-manager add-all
|
|
||||||
asdf-plugin-manager update-all
|
|
||||||
asdf-plugin-manager export > "${ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME}"
|
|
||||||
|
|
||||||
asdf install
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
update_asdf_commands()
|
|
||||||
{
|
|
||||||
msg "Updating asdf commands using asdf-plugin-manager"
|
|
||||||
asdf-plugin-manager update-all
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install asdf plugins
|
|
||||||
install_asdf_plugins()
|
|
||||||
{
|
|
||||||
msg "Installing asdf plugins"
|
|
||||||
for item in "${ASDF_INSTALLABLES[@]}"; do
|
|
||||||
CMD=$(echo "${item}" | awk -F ":" '{print $1}')
|
|
||||||
URL=$(echo "${item}" | awk -F ":" '{print $2}')
|
|
||||||
|
|
||||||
asdf plugin add "${CMD}" "https://${URL}"
|
|
||||||
asdf install "${CMD}" latest
|
|
||||||
asdf global "${CMD}" "$(asdf latest "${CMD}")"
|
|
||||||
done
|
|
||||||
|
|
||||||
msg "Exporting asdf plugin versions"
|
|
||||||
asdf-plugin-manager export > "${ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME}"
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
reshim()
|
|
||||||
{
|
|
||||||
msg "Reshim asdf"
|
|
||||||
asdf reshim
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# create usage function
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
echo "Usage: $0 [both|install|add_plugins|update]"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
case $1 in
|
|
||||||
"both")
|
|
||||||
install_asdf_plugins
|
|
||||||
update_asdf
|
|
||||||
reshim
|
|
||||||
;;
|
|
||||||
"update")
|
|
||||||
update_asdf_commands
|
|
||||||
reshim
|
|
||||||
;;
|
|
||||||
"install")
|
|
||||||
update_asdf
|
|
||||||
reshim
|
|
||||||
;;
|
|
||||||
"add_plugins")
|
|
||||||
install_asdf_plugins
|
|
||||||
reshim
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,22 +1,18 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install cargo/rust packages.
|
# @description Install cargo/rust packages.
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
|
source "$HOME/.dotfiles/config/shared.sh"
|
||||||
|
|
||||||
echo "This file ($0) has been deprecated in favor of asdf. Please use asdf instead."
|
msgr run "Starting to install rust/cargo packages"
|
||||||
exit 0
|
|
||||||
|
|
||||||
eval "$HOME/.dotfiles/config/shared.sh"
|
|
||||||
|
|
||||||
msg "Starting to install rust/cargo packages"
|
|
||||||
|
|
||||||
source "$CARGO_HOME/env"
|
source "$CARGO_HOME/env"
|
||||||
|
|
||||||
# If we have cargo install-update, use it first
|
# If we have cargo install-update, use it first
|
||||||
if command -v cargo-install-update &> /dev/null; then
|
if command -v cargo-install-update &> /dev/null; then
|
||||||
msg_run "Updating cargo packages with cargo install-update"
|
msgr run "Updating cargo packages with cargo install-update"
|
||||||
cargo install-update -a
|
cargo install-update -a
|
||||||
msg_done "Done with cargo install-update"
|
msgr run_done "Done with cargo install-update"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
packages=(
|
packages=(
|
||||||
@@ -55,8 +51,9 @@ install_packages()
|
|||||||
# Skip comments
|
# Skip comments
|
||||||
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
|
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
|
||||||
|
|
||||||
msg_run "Installing cargo package $pkg"
|
msgr run "Installing cargo package $pkg"
|
||||||
cargo install --jobs $BUILD_JOBS "$pkg"
|
cargo install --jobs $BUILD_JOBS "$pkg"
|
||||||
|
msgr run_done "Done installing $pkg"
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -64,14 +61,14 @@ install_packages()
|
|||||||
# Function to perform additional steps for installed cargo packages
|
# Function to perform additional steps for installed cargo packages
|
||||||
post_install_steps()
|
post_install_steps()
|
||||||
{
|
{
|
||||||
msg_run "Now doing the next steps for cargo packages"
|
msgr run "Now doing the next steps for cargo packages"
|
||||||
|
|
||||||
# use bob to install latest stable nvim
|
# use bob to install latest stable nvim
|
||||||
if command -v bob &> /dev/null; then
|
if command -v bob &> /dev/null; then
|
||||||
bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
|
bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_run "Removing cargo cache"
|
msgr run "Removing cargo cache"
|
||||||
cargo cache --autoclean
|
cargo cache --autoclean
|
||||||
msg_done "Done removing cargo cache"
|
msg_done "Done removing cargo cache"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# @description Update pure-bash-bible cheatsheets
|
||||||
# shellcheck disable=SC2231,SC2034,SC2181,SC2068
|
# shellcheck disable=SC2231,SC2034,SC2181,SC2068
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
source "${DOTFILES}/config/shared.sh"
|
source "${DOTFILES}/config/shared.sh"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install PHP Package Manager Composer
|
# @description Install PHP Package Manager Composer
|
||||||
#
|
#
|
||||||
# shellcheck source="shared.sh"
|
# shellcheck source="shared.sh"
|
||||||
eval "$HOME/.dotfiles/config/shared.sh"
|
source "$HOME/.dotfiles/config/shared.sh"
|
||||||
|
|
||||||
if ! command -v php &> /dev/null; then
|
if ! command -v php &> /dev/null; then
|
||||||
msg_err "PHP Not Available, cannot install composer"
|
msg_err "PHP Not Available, cannot install composer"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install NerdFonts
|
# @description Install NerdFonts
|
||||||
#
|
#
|
||||||
# shellcheck source="shared.sh"
|
# shellcheck source="shared.sh"
|
||||||
source "$DOTFILES/config/shared.sh"
|
source "$DOTFILES/config/shared.sh"
|
||||||
@@ -7,24 +7,21 @@ source "$DOTFILES/config/shared.sh"
|
|||||||
GIT_REPO="https://github.com/ryanoasis/nerd-fonts.git"
|
GIT_REPO="https://github.com/ryanoasis/nerd-fonts.git"
|
||||||
TMP_PATH="$XDG_CACHE_HOME/nerd-fonts"
|
TMP_PATH="$XDG_CACHE_HOME/nerd-fonts"
|
||||||
|
|
||||||
msg "-- NerdFonts --"
|
msgr run "Starting to install NerdFonts"
|
||||||
|
|
||||||
fonts=(
|
fonts=(
|
||||||
Hack
|
|
||||||
IntelOneMono
|
|
||||||
JetBrainsMono
|
JetBrainsMono
|
||||||
OpenDyslexic
|
OpenDyslexic
|
||||||
SpaceMono
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Function to clone or update the NerdFonts repository
|
# Function to clone or update the NerdFonts repository
|
||||||
clone_or_update_repo()
|
clone_or_update_repo()
|
||||||
{
|
{
|
||||||
if [ ! -d "$TMP_PATH" ]; then
|
if [ ! -d "$TMP_PATH" ]; then
|
||||||
git clone --quiet --filter=blob:none --sparse "$GIT_REPO" "$TMP_PATH"
|
git clone --quiet --filter=blob:none --sparse --depth=1 "$GIT_REPO" "$TMP_PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$TMP_PATH" || msg_err "No such folder $TMP_PATH"
|
cd "$TMP_PATH" || msgr err "No such folder $TMP_PATH"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add fonts to sparse-checkout
|
# Function to add fonts to sparse-checkout
|
||||||
@@ -36,7 +33,7 @@ add_fonts_to_sparse_checkout()
|
|||||||
# Skip comments
|
# Skip comments
|
||||||
if [[ ${font:0:1} == "#" ]]; then continue; fi
|
if [[ ${font:0:1} == "#" ]]; then continue; fi
|
||||||
|
|
||||||
msg_run "Adding $font to sparse-checkout"
|
msgr run "Adding $font to sparse-checkout"
|
||||||
git sparse-checkout add "patched-fonts/$font"
|
git sparse-checkout add "patched-fonts/$font"
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
@@ -45,9 +42,9 @@ add_fonts_to_sparse_checkout()
|
|||||||
# Function to install NerdFonts
|
# Function to install NerdFonts
|
||||||
install_fonts()
|
install_fonts()
|
||||||
{
|
{
|
||||||
msg "Starting to install NerdFonts..."
|
msgr run "Starting to install NerdFonts..."
|
||||||
./install.sh -q -s ${fonts[*]}
|
./install.sh -q -s ${fonts[*]}
|
||||||
msg_ok "Done"
|
msgr run_done "Done"
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_tmp_path()
|
remove_tmp_path()
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Install fzf
|
|
||||||
#
|
|
||||||
|
|
||||||
echo "This file ($0) has been deprecated in favor of asdf. Please use asdf instead."
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
# shellcheck source=shared.sh
|
|
||||||
eval "$DOTFILES/config/shared.sh"
|
|
||||||
|
|
||||||
FZF_GIT="https://github.com/junegunn/fzf.git"
|
|
||||||
FZF_PATH="${XDG_CONFIG_HOME}/fzf"
|
|
||||||
FZF_BUILD="/tmp/fzf"
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
if [ ! -d "$FZF_BUILD" ]; then
|
|
||||||
git clone --depth 1 "$FZF_GIT" "$FZF_BUILD"
|
|
||||||
"$FZF_BUILD/install" \
|
|
||||||
--xdg \
|
|
||||||
--bin
|
|
||||||
msg_done "fzf installed"
|
|
||||||
else
|
|
||||||
msg_done "fzf ($FZF_PATH/) already installed"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install GitHub CLI extensions
|
# @description Install GitHub CLI extensions
|
||||||
#
|
#
|
||||||
# shellcheck source="shared.sh"
|
# shellcheck source="shared.sh"
|
||||||
source "${DOTFILES}/config/shared.sh"
|
source "${DOTFILES}/config/shared.sh"
|
||||||
@@ -7,10 +7,10 @@ source "${DOTFILES}/config/shared.sh"
|
|||||||
# Enable verbosity with VERBOSE=1
|
# Enable verbosity with VERBOSE=1
|
||||||
VERBOSE="${VERBOSE:-0}"
|
VERBOSE="${VERBOSE:-0}"
|
||||||
|
|
||||||
msg_run "Installing gh (GitHub Client) extensions"
|
msgr run "Installing gh (GitHub Client) extensions"
|
||||||
|
|
||||||
if ! command -v gh &> /dev/null; then
|
if ! command -v gh &> /dev/null; then
|
||||||
msg_err "gh (GitHub Client) could not be found, please install it first"
|
msgr err "gh (GitHub Client) could not be found, please install it first"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ install_extensions()
|
|||||||
# Skip comments
|
# Skip comments
|
||||||
if [[ ${ext:0:1} == "#" ]]; then continue; fi
|
if [[ ${ext:0:1} == "#" ]]; then continue; fi
|
||||||
|
|
||||||
msg_nested "Installing $ext"
|
msgr nested "Installing $ext"
|
||||||
gh extension install "$ext"
|
gh extension install "$ext"
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
@@ -52,7 +52,7 @@ install_extensions()
|
|||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
install_extensions
|
install_extensions
|
||||||
msg_ok "Done"
|
msgr run_done "Done"
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# @description Install git-crypt
|
||||||
#
|
#
|
||||||
# Install git-crypt
|
|
||||||
# NOTE: Experimental, wip
|
# NOTE: Experimental, wip
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
@@ -9,7 +9,7 @@ source "${DOTFILES}/config/shared.sh"
|
|||||||
# Enable verbosity with VERBOSE=1
|
# Enable verbosity with VERBOSE=1
|
||||||
VERBOSE="${VERBOSE:-0}"
|
VERBOSE="${VERBOSE:-0}"
|
||||||
|
|
||||||
msg_run "Installing git-crypt"
|
msgr run "Installing git-crypt"
|
||||||
|
|
||||||
if ! command -v git-crypt &> /dev/null; then
|
if ! command -v git-crypt &> /dev/null; then
|
||||||
REPO_URL="https://github.com/AGWA/git-crypt.git"
|
REPO_URL="https://github.com/AGWA/git-crypt.git"
|
||||||
@@ -23,8 +23,8 @@ if ! command -v git-crypt &> /dev/null; then
|
|||||||
cd "$BUILD_PATH" || msg_err "$BUILD_PATH not found"
|
cd "$BUILD_PATH" || msg_err "$BUILD_PATH not found"
|
||||||
make && make install PREFIX="$HOME/.local"
|
make && make install PREFIX="$HOME/.local"
|
||||||
else
|
else
|
||||||
msg_done "git-crypt ($CHECK_PATH) already installed"
|
msgr run_done "git-crypt ($CHECK_PATH) already installed"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_done "Done installing git-crypt"
|
msgr run_done "Done installing git-crypt"
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install Go packages
|
# @description Install Go packages
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
|
source "$DOTFILES/config/shared.sh"
|
||||||
echo "This file ($0) has been deprecated in favor of asdf. Please use asdf instead."
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
eval "$DOTFILES/config/shared.sh"
|
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
# Enable verbosity with VERBOSE=1
|
||||||
VERBOSE="${VERBOSE:-0}"
|
VERBOSE="${VERBOSE:-0}"
|
||||||
|
|
||||||
msg_run "Installing go packages"
|
msgr run "Installing go packages"
|
||||||
|
|
||||||
! x-have "go" && msg "go hasn't been installed yet." && exit 0
|
! x-have "go" && msgr err "go hasn't been installed yet." && exit 0
|
||||||
|
|
||||||
packages=(
|
packages=(
|
||||||
# A shell parser, formatter, and interpreter with bash support; includes shfmt
|
# A shell parser, formatter, and interpreter with bash support; includes shfmt
|
||||||
@@ -49,7 +45,7 @@ install_packages()
|
|||||||
# Skip comments
|
# Skip comments
|
||||||
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
|
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
|
||||||
|
|
||||||
msg_nested "Installing go package: $pkg"
|
msgr nested "Installing go package: $pkg"
|
||||||
go install "$pkg"
|
go install "$pkg"
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
@@ -58,23 +54,23 @@ install_packages()
|
|||||||
# Function to install completions and run actions for selected packages
|
# Function to install completions and run actions for selected packages
|
||||||
post_install()
|
post_install()
|
||||||
{
|
{
|
||||||
msg_run "Installing completions for selected packages"
|
msgr run "Installing completions for selected packages"
|
||||||
|
|
||||||
if command -v git-profile &> /dev/null; then
|
if command -v git-profile &> /dev/null; then
|
||||||
git-profile completion zsh > "$ZSH_CUSTOM_COMPLETION_PATH/_git-profile" \
|
git-profile completion zsh > "$ZSH_CUSTOM_COMPLETION_PATH/_git-profile" \
|
||||||
&& msg_ok "Installed completions for git-profile"
|
&& msgr run_done "Installed completions for git-profile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if command -v antidot &> /dev/null; then
|
if command -v antidot &> /dev/null; then
|
||||||
antidot update \
|
antidot update \
|
||||||
&& msg_ok "Updated antidot database"
|
&& msgr run_done "Updated antidot database"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to clear go cache
|
# Function to clear go cache
|
||||||
clear_go_cache()
|
clear_go_cache()
|
||||||
{
|
{
|
||||||
msg_run "Clearing go cache"
|
msgr run "Clearing go cache"
|
||||||
go clean -cache -modcache
|
go clean -cache -modcache
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +79,7 @@ main()
|
|||||||
install_packages
|
install_packages
|
||||||
post_install
|
post_install
|
||||||
clear_go_cache
|
clear_go_cache
|
||||||
msg_ok "Done"
|
msgr run_done "Done"
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
# @description Sets macOS Defaults that I like
|
||||||
# set-macos-defaults.sh - Sets macOS Defaults that I like
|
|
||||||
#
|
#
|
||||||
# This script contains large portions from following scripts:
|
# This script contains large portions from following scripts:
|
||||||
# - https://github.com/freekmurze/dotfiles/blob/main/macos/set-defaults.sh
|
# - https://github.com/freekmurze/dotfiles/blob/main/macos/set-defaults.sh
|
||||||
#
|
|
||||||
|
|
||||||
[ "$(uname)" != "Darwin" ] && echo "Not a macOS system" && exit 0
|
[ "$(uname)" != "Darwin" ] && echo "Not a macOS system" && exit 0
|
||||||
|
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
eval "$HOME/.dotfiles/config/shared.sh"
|
source "$HOME/.dotfiles/config/shared.sh"
|
||||||
|
|
||||||
msg_run "Starting to set macOS defaults, these require sudo privileges:"
|
msgr run "Starting to set macOS defaults, these require sudo privileges:"
|
||||||
|
|
||||||
# Ask for the administrator password upfront
|
# Ask for the administrator password upfront
|
||||||
sudo -v
|
sudo -v
|
||||||
@@ -24,7 +22,7 @@ while true; do
|
|||||||
kill -0 "$$" || exit
|
kill -0 "$$" || exit
|
||||||
done 2> /dev/null &
|
done 2> /dev/null &
|
||||||
|
|
||||||
msg_nested "Change user shell to zsh if it is available and not the current"
|
msgr nested "Change user shell to zsh if it is available and not the current"
|
||||||
|
|
||||||
# Change user shell to zsh if not that already.
|
# Change user shell to zsh if not that already.
|
||||||
if hash zsh 2> /dev/null; then
|
if hash zsh 2> /dev/null; then
|
||||||
@@ -35,7 +33,7 @@ fi
|
|||||||
# General UI/UX #
|
# General UI/UX #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Setting General UI/UX settings"
|
msgr nested "Setting General UI/UX settings"
|
||||||
|
|
||||||
# Disable the sound effects on boot
|
# Disable the sound effects on boot
|
||||||
sudo nvram SystemAudioVolume=" "
|
sudo nvram SystemAudioVolume=" "
|
||||||
@@ -89,7 +87,7 @@ defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
|
|||||||
# SSD-specific tweaks #
|
# SSD-specific tweaks #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Setting SSD-specific tweaks"
|
msgr nested "Setting SSD-specific tweaks"
|
||||||
|
|
||||||
# Disable hibernation (speeds up entering sleep mode)
|
# Disable hibernation (speeds up entering sleep mode)
|
||||||
sudo pmset -a hibernatemode 0
|
sudo pmset -a hibernatemode 0
|
||||||
@@ -101,7 +99,7 @@ sudo pmset -a sms 0
|
|||||||
# Trackpad, mouse, keyboard, Bluetooth accessories, and input #
|
# Trackpad, mouse, keyboard, Bluetooth accessories, and input #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Trackpad, mouse, keyboard, Bluetooth accessories, and input"
|
msgr nested "Settings for Trackpad, mouse, keyboard, Bluetooth accessories, and input"
|
||||||
|
|
||||||
# Increase sound quality for Bluetooth headphones/headsets
|
# Increase sound quality for Bluetooth headphones/headsets
|
||||||
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Max (editable)" 80
|
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Max (editable)" 80
|
||||||
@@ -137,7 +135,7 @@ launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist 2> /dev/nul
|
|||||||
# Screen #
|
# Screen #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Screen"
|
msgr nested "Settings for Screen"
|
||||||
|
|
||||||
# Require password immediately after sleep or screen saver begins
|
# Require password immediately after sleep or screen saver begins
|
||||||
defaults write com.apple.screensaver askForPassword -int 1
|
defaults write com.apple.screensaver askForPassword -int 1
|
||||||
@@ -147,7 +145,7 @@ defaults write com.apple.screensaver askForPasswordDelay -int 0
|
|||||||
# Finder #
|
# Finder #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Finder"
|
msgr nested "Settings for Finder"
|
||||||
|
|
||||||
# Set Desktop as the default location for new Finder windows
|
# Set Desktop as the default location for new Finder windows
|
||||||
# For other paths, use `PfLo` and `file:///full/path/here/`
|
# For other paths, use `PfLo` and `file:///full/path/here/`
|
||||||
@@ -207,7 +205,7 @@ defaults write com.apple.finder FXInfoPanesExpanded -dict \
|
|||||||
# Screenshots #
|
# Screenshots #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Screenshots"
|
msgr nested "Settings for Screenshots"
|
||||||
|
|
||||||
# Set default screenshot location
|
# Set default screenshot location
|
||||||
mkdir -p "$HOME/Documents/Screenshots"
|
mkdir -p "$HOME/Documents/Screenshots"
|
||||||
@@ -223,7 +221,7 @@ defaults write com.apple.screencapture "name" -string "screenshot"
|
|||||||
# Dock, Dashboard, and hot corners #
|
# Dock, Dashboard, and hot corners #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Dock, Dashboard, and hot corners"
|
msgr nested "Settings for Dock, Dashboard, and hot corners"
|
||||||
|
|
||||||
# Prevent applications from bouncing in Dock
|
# Prevent applications from bouncing in Dock
|
||||||
defaults write com.apple.dock no-bouncing -bool true
|
defaults write com.apple.dock no-bouncing -bool true
|
||||||
@@ -255,7 +253,7 @@ defaults write com.apple.dock showhidden -bool true
|
|||||||
# Safari & WebKit #
|
# Safari & WebKit #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Safari & WebKit"
|
msgr nested "Settings for Safari & WebKit"
|
||||||
|
|
||||||
# Enable Safari's debug menu
|
# Enable Safari's debug menu
|
||||||
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
|
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
|
||||||
@@ -281,7 +279,7 @@ defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
|
|||||||
# Activity Monitor #
|
# Activity Monitor #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for ActivityMonitor"
|
msgr nested "Settings for ActivityMonitor"
|
||||||
|
|
||||||
# Show the main window when launching Activity Monitor
|
# Show the main window when launching Activity Monitor
|
||||||
defaults write com.apple.ActivityMonitor OpenMainWindow -bool true
|
defaults write com.apple.ActivityMonitor OpenMainWindow -bool true
|
||||||
@@ -300,7 +298,7 @@ defaults write com.apple.ActivityMonitor SortDirection -int 0
|
|||||||
# Address Book, Dashboard, iCal, TextEdit, and Disk Utility #
|
# Address Book, Dashboard, iCal, TextEdit, and Disk Utility #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Address Book, Dashboard, iCal, TextEdit, and Disk Utility"
|
msgr nested "Settings for Address Book, Dashboard, iCal, TextEdit, and Disk Utility"
|
||||||
|
|
||||||
# Use plain text mode for new TextEdit documents
|
# Use plain text mode for new TextEdit documents
|
||||||
defaults write com.apple.TextEdit RichText -int 0
|
defaults write com.apple.TextEdit RichText -int 0
|
||||||
@@ -313,7 +311,7 @@ defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4
|
|||||||
# Messages #
|
# Messages #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
msg_nested "Settings for Messages"
|
msgr nested "Settings for Messages"
|
||||||
|
|
||||||
# Disable smart quotes as it's annoying for messages that contain code
|
# Disable smart quotes as it's annoying for messages that contain code
|
||||||
defaults write com.apple.messageshelper.MessageController \
|
defaults write com.apple.messageshelper.MessageController \
|
||||||
@@ -327,7 +325,7 @@ defaults write com.apple.messageshelper.MessageController \
|
|||||||
-dict-add "continuousSpellCheckingEnabled" \
|
-dict-add "continuousSpellCheckingEnabled" \
|
||||||
-bool false
|
-bool false
|
||||||
|
|
||||||
msg_nested "Restarting applications to apply changes"
|
msgr nested "Restarting applications to apply changes"
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Kill affected applications #
|
# Kill affected applications #
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Install neofetch from source
|
|
||||||
#
|
|
||||||
# shellcheck source=shared.sh
|
|
||||||
source "$DOTFILES/config/shared.sh"
|
|
||||||
|
|
||||||
if ! declare -f msg > /dev/null; then
|
|
||||||
# Function to print messages if VERBOSE is enabled
|
|
||||||
# $1 - message (string)
|
|
||||||
msg()
|
|
||||||
{
|
|
||||||
[ "$VERBOSE" -eq 1 ] && echo "$1"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! declare -f msg_err > /dev/null; then
|
|
||||||
# Function to print error messages and exit
|
|
||||||
# $1 - error message (string)
|
|
||||||
msg_err()
|
|
||||||
{
|
|
||||||
echo "(!) ERROR: $1" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! declare -f msg_done > /dev/null; then
|
|
||||||
# Function to print done message
|
|
||||||
# $1 - message (string)
|
|
||||||
msg_done()
|
|
||||||
{
|
|
||||||
echo "✓ $1"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
|
|
||||||
NEOFETCH_VERSION="$(x-gh-get-latest-version dylanaraps/neofetch)"
|
|
||||||
NEOFETCH_REPO="https://github.com/dylanaraps/neofetch"
|
|
||||||
NEOFETCH_URL="${NEOFETCH_REPO}/archive/refs/tags/${NEOFETCH_VERSION}.tar.gz"
|
|
||||||
NEOFETCH_TEMP="/tmp/neofetch"
|
|
||||||
NEOFETCH_INSTALL_PREFIX="$HOME/.local"
|
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
|
||||||
VERBOSE="${VERBOSE:-0}"
|
|
||||||
|
|
||||||
# Function to install neofetch from source
|
|
||||||
install_neofetch()
|
|
||||||
{
|
|
||||||
LC_ALL=C
|
|
||||||
|
|
||||||
mkdir -p "$NEOFETCH_TEMP" "$NEOFETCH_INSTALL_PREFIX"
|
|
||||||
|
|
||||||
curl -L "$NEOFETCH_URL" -o "$NEOFETCH_TEMP.tar.gz"
|
|
||||||
tar zxvf "$NEOFETCH_TEMP.tar.gz" --directory="$NEOFETCH_TEMP"
|
|
||||||
cd "$NEOFETCH_TEMP/neofetch-$NEOFETCH_VERSION" \
|
|
||||||
&& make PREFIX="${NEOFETCH_INSTALL_PREFIX}" install \
|
|
||||||
&& rm -rf "$NEOFETCH_TEMP*" \
|
|
||||||
&& msg_yay "neofetch installed!"
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
if ! command -v neofetch &> /dev/null; then
|
|
||||||
install_neofetch
|
|
||||||
elif [ "$NEOFETCH_VERSION" != "$(neofetch --version | awk '{print $2}')" ]; then
|
|
||||||
install_neofetch
|
|
||||||
else
|
|
||||||
msg_done "neofetch v.${NEOFETCH_VERSION} already installed"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install npm packages globally.
|
# @description Install npm packages globally.
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
|
source "$DOTFILES/config/shared.sh"
|
||||||
eval "$DOTFILES/config/shared.sh"
|
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
# Enable verbosity with VERBOSE=1
|
||||||
VERBOSE="${VERBOSE:-0}"
|
VERBOSE="${VERBOSE:-0}"
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
# @description Install ntfy
|
||||||
# Install ntfy
|
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
eval "$DOTFILES/config/shared.sh"
|
source "$DOTFILES/config/shared.sh"
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
# Enable verbosity with VERBOSE=1
|
||||||
VERBOSE="${VERBOSE:-0}"
|
VERBOSE="${VERBOSE:-0}"
|
||||||
|
|
||||||
# Check if ntfy is already installed
|
# Check if ntfy is already installed
|
||||||
if x-have "ntfy"; then
|
if x-have "ntfy"; then
|
||||||
msg "ntfy already installed"
|
msgr done "ntfy already installed"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -23,7 +22,7 @@ case $(dfm check arch) in
|
|||||||
NTFY_ARCH="macOS_all"
|
NTFY_ARCH="macOS_all"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
msg_err "Unsupported OS"
|
msgr err "Unsupported OS"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -51,7 +50,7 @@ install_ntfy()
|
|||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
install_ntfy
|
install_ntfy
|
||||||
msg "ntfy installation complete"
|
msgr done "ntfy installation complete"
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Install oh-my-bash
|
|
||||||
#
|
|
||||||
# shellcheck source=shared.sh
|
|
||||||
source "${DOTFILES}/config/shared.sh"
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
|
||||||
VERBOSE="${VERBOSE:-0}"
|
|
||||||
|
|
||||||
OSH="$HOME/.local/share/oh-my-bash"
|
|
||||||
|
|
||||||
# Function to install oh-my-bash
|
|
||||||
install_oh_my_bash()
|
|
||||||
{
|
|
||||||
if [ ! -d "$OSH" ]; then
|
|
||||||
[ -f "$HOME/.bashrc" ] && mv "$HOME/.bashrc" "$HOME/.bashrc.temp"
|
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)" --unattended
|
|
||||||
[ -f "$HOME/.bashrc.temp" ] && mv "$HOME/.bashrc.temp" "$HOME/.bashrc"
|
|
||||||
msg "oh-my-bash installed to $OSH"
|
|
||||||
else
|
|
||||||
msg_done "oh-my-bash ($OSH) already installed"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
install_oh_my_bash
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env zsh
|
|
||||||
#
|
|
||||||
# Install oh-my-posh
|
|
||||||
#
|
|
||||||
# shellcheck source=shared.sh
|
|
||||||
source "${DOTFILES}/config/shared.sh"
|
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
|
||||||
VERBOSE="${VERBOSE:-0}"
|
|
||||||
|
|
||||||
msg "Starting to install oh-my-posh"
|
|
||||||
|
|
||||||
# Install oh-my-posh
|
|
||||||
install_oh_my_posh()
|
|
||||||
{
|
|
||||||
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/.local/bin
|
|
||||||
msg "oh-my-posh installed to ~/.local/bin"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Initialize oh-my-posh
|
|
||||||
init_oh_my_posh()
|
|
||||||
{
|
|
||||||
eval "$(oh-my-posh init zsh --config $OHMYPOSH_CFG)"
|
|
||||||
msg "oh-my-posh initialized with config $OHMYPOSH_CFG"
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
install_oh_my_posh
|
|
||||||
init_oh_my_posh
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
@@ -1,21 +1,20 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Install python/pip packages.
|
# @description Install python/pip packages.
|
||||||
#
|
#
|
||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
|
|
||||||
source "${DOTFILES}/config/shared.sh"
|
source "${DOTFILES}/config/shared.sh"
|
||||||
|
|
||||||
# Enable verbosity with VERBOSE=1
|
# Enable verbosity with VERBOSE=1
|
||||||
VERBOSE="${VERBOSE:-0}"
|
VERBOSE="${VERBOSE:-0}"
|
||||||
|
|
||||||
msg "Starting to install pip packages"
|
msgr run "Starting to install pip packages"
|
||||||
|
|
||||||
if ! command -v python3 &> /dev/null; then
|
if ! command -v python3 &> /dev/null; then
|
||||||
msg_err "Could not find python3, something really weird is going on."
|
msgr err "Could not find python3, something really weird is going on."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_nested "Upgrading pip"
|
msgr nested "Upgrading pip"
|
||||||
python3 -m pip install --user --upgrade pip
|
python3 -m pip install --user --upgrade pip
|
||||||
|
|
||||||
packages=(
|
packages=(
|
||||||
@@ -32,11 +31,11 @@ install_packages()
|
|||||||
# Skip comments
|
# Skip comments
|
||||||
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
|
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
|
||||||
|
|
||||||
msg_nested "Installing pip package: $pkg"
|
msgr nested "Installing pip package: $pkg"
|
||||||
python3 -m pip install --user --upgrade "$pkg"
|
python3 -m pip install --user --upgrade "$pkg"
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
install_packages
|
install_packages
|
||||||
msg_yay "Run pip package installations"
|
msgr run_done "Run pip package installations"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user