Compare commits

...

162 Commits

Author SHA1 Message Date
1ffd6e1569 feat(nvim): update blink config 2024-12-20 22:54:17 +02:00
a76033a48a chore(deps): update Brewfile 2024-12-20 18:55:14 +02:00
34dc18883e chore(config): aerospace tweaks 2024-12-20 18:14:57 +02:00
832d8b94f3 chore(nvim): add the awesome youtube video to mini 2024-12-20 12:37:00 +02:00
c40eb765f8 chore(config): tweak aerospace config 2024-12-20 12:06:37 +02:00
github-actions[bot]
1bb7e9076b chore: update pre-commit hooks (#53)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-12-20 10:11:10 +02:00
ivuorinen
17821dfefa chore(git): Update submodules (automated)
asdf 54d15e3
antidote
dotbot v1.20.4
2024-12-20 03:09:26 +00:00
19327947ed chore(config): tweak aerospace config 2024-12-19 12:48:41 +02:00
2356fc4c61 chore(deps): update asdf submodule 2024-12-19 12:48:26 +02:00
45219deccb fix(nvim): nvmdef - fix log levels for now 2024-12-19 12:46:53 +02:00
5471aba1a4 chore(nvim): autosession, configs, tweaks 2024-12-19 12:42:20 +02:00
github-actions[bot]
6f6ee3611c chore: update pre-commit hooks (#52)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-12-19 12:24:10 +02:00
ivuorinen
d8f9cdf265 chore(git): Update submodules (automated)
asdf 9c12b79
antidote
2024-12-19 03:14:30 +00:00
abb6de05be feat(config): AeroSpace config 2024-12-18 17:22:26 +02:00
60ef48e918 feat(nvim): consolidate code related plugins 2024-12-18 17:12:30 +02:00
e58c79a3c3 fix(dotbot): fix installer config 2024-12-18 17:11:50 +02:00
d47f21286d feat(nvim): drop opts defined in mini.basics 2024-12-18 14:27:03 +02:00
3f108c9353 feat(nvim): use full mini.nvim instead of subrepos 2024-12-18 14:16:19 +02:00
github-actions[bot]
4a68146786 chore: update pre-commit hooks (#51)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-12-18 09:56:47 +02:00
github-actions[bot]
cf79e61943 chore: update pre-commit hooks (#50)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-12-17 09:16:33 +02:00
43dcb303a0 chore(dfm): improved colors helper 2024-12-16 08:25:29 +02:00
1b03f0bbd6 chore(config): add container arch to actrc 2024-12-16 05:04:38 +02:00
8a52c9a97e chore(nvim): fixed mason formatters, config 2024-12-16 05:04:01 +02:00
8e84c3aef7 chore(lint): fixed stylua and linted nvim configs 2024-12-16 05:02:25 +02:00
acd2f7fc6d chore(config): move personal cheat db to last 2024-12-16 03:55:26 +02:00
1e4aa1558a chore(ci): add renovate-config-validator 2024-12-16 03:54:41 +02:00
b314c0ba76 feat(nvim): nvm-default package (#49) 2024-12-12 10:21:25 +02:00
ece46561c4 chore(nvim): configs, keymaps, utils.lua, docs 2024-12-12 02:13:00 +02:00
196d217c34 feat(shell): switch zsh to use p10k 2024-12-11 14:14:05 +02:00
7d2fc55791 chore(nvim): <leader>ba (close all except current) 2024-12-10 09:11:42 +02:00
74fb12f093 chore(lint): tweaks, few pre-commit hook fixes 2024-12-10 09:11:12 +02:00
ivuorinen
d7988bcad7 chore(git): Update submodules (automated)
antidote
dotbot v1.20.3
2024-12-10 03:20:15 +00:00
320ae35dcd feat(nvim): sessions & tweaks to configs 2024-12-10 01:13:52 +02:00
0964253be5 chore(nvim): tweaks and fixes 2024-12-09 13:00:45 +02:00
Ismo Vuorinen
f3f7ecc522 feat(nvim): reworked cmp, lsp and bunch of stuff (#48)
* feat(nvim): reworked cmp, lsp and bunch of stuff

* chore: del disabled plugins, do coderabbit fixes

* chore: tweak settings, remove duplication

* chore: next round of refactoring

* feat: replaced lualine w/ mini.statusline, tweaks

* chore: cleanup, options and keymap stuff
2024-12-09 10:30:15 +02:00
ivuorinen
b88de0c3ae chore(git): Update submodules (automated)
antidote
dotbot v1.20.2
2024-12-09 03:20:33 +00:00
c5e6860595 chore(deps): updated yarn packages 2024-12-05 21:24:05 +02:00
b5a3c34fc3 chore(lint): dfm lints 2024-12-05 21:23:48 +02:00
87c89cf828 chore(config): "disable" pure exec time counter 2024-12-05 09:19:33 +02:00
renovate[bot]
8d57c9425e fix(container): update image python (3.13.0 → 3.13.1) (#47)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 09:15:53 +02:00
renovate[bot]
cfe97d81a7 chore(deps): update node.js to v22.12.0 (#46) 2024-12-04 00:12:09 +02:00
2f13ad324a fix(scripts): add_plugins shouldn't change versions 2024-12-03 20:30:59 +02:00
github-actions[bot]
d203fc9d51 chore: update pre-commit hooks (#45) 2024-12-02 07:55:44 +02:00
bf279b6def chore(shell): tweak pure colors 2024-11-28 03:13:46 +02:00
87926f8d9b chore(lint): config/exports linting 2024-11-28 02:54:42 +02:00
6b056f6072 chore(nvim): plugin changes, new keymaps, augroup 2024-11-28 02:50:07 +02:00
823cdbc07f chore(ssh): add baal to demons 2024-11-28 02:48:55 +02:00
0f6157eb04 feat(shell): cleanup and switched to pure prompt 2024-11-28 02:48:09 +02:00
721fe614a7 feat: drop oh-my-posh 2024-11-26 03:08:54 +02:00
5ea16d4653 chore(nvim): add leader sf for file finder 2024-11-25 17:22:22 +02:00
900e6a8f85 chore(shell): cleanup and antidote plugins 2024-11-25 13:54:14 +02:00
16673de789 chore(config): add antidote to tmux ignored list 2024-11-25 13:10:46 +02:00
c732a75184 fix(config): antidote plugins, configs 2024-11-25 13:10:11 +02:00
github-actions[bot]
96280e6e9b chore: update pre-commit hooks (#44)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-11-24 12:15:24 +02:00
5ab0f89765 feat(nvim): mini.nvim plugins + cleanup 2024-11-22 17:58:52 +02:00
d585d61537 chore(config): tweaks to configs and scripts 2024-11-22 17:54:37 +02:00
746646ae55 feat(shell): switched to antidote, asdf changes 2024-11-22 17:53:46 +02:00
dependabot[bot]
6e69ec6410 chore(deps): bump cross-spawn from 7.0.3 to 7.0.6 (#43)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-21 10:16:24 +02:00
af123e5138 chore(deps): update brewfile 2024-11-19 11:20:24 +02:00
3879289559 feat(tmux): removal of tmux-resurrect 2024-11-18 11:42:58 +02:00
392628e733 fix(shell): fixes to zsh and bash configs 2024-11-16 16:30:57 +02:00
aa70eab5fb fix(nvim): disable statuscol on certain ft and bt 2024-11-12 05:22:01 +02:00
e5311ca285 fix(nvim): finally a working colorcolumn 2024-11-12 05:21:26 +02:00
d5618c9b5f chore(config): tweaks to nvim config, autogroups 2024-11-09 19:49:21 +02:00
d091f5a88f feat(base): add tms bundle to antigen 2024-11-09 19:48:12 +02:00
cb9195e3ad chore(config): asdf, add libtmux to python 2024-11-09 19:47:42 +02:00
c91cc387b6 chore(docs): update working on readme 2024-11-09 19:47:02 +02:00
083091ea46 chore(deps): update asdf tool-versions, plugins 2024-11-08 15:59:54 +02:00
7ff74f0e15 feat(dfm): add asdf helpers 2024-11-08 15:36:47 +02:00
9d1f62fcca feat(dfm): more helpers, enable multiple commands 2024-11-08 15:35:56 +02:00
a563e82e33 chore(base): add lando, eza fix if missing 2024-11-08 15:33:43 +02:00
62ff7836e7 chore(config): wezterm config formatting, fonts 2024-11-08 15:32:04 +02:00
88cb573027 chore(config): update oh-my-posh cfg, completions 2024-11-08 15:31:29 +02:00
82772d8208 feat(config): tms configs 2024-11-07 10:04:33 +02:00
github-actions[bot]
240035569c chore: update pre-commit hooks (#42)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-11-06 13:56:19 +02:00
renovate[bot]
9697c200f9 chore(deps): update node to v22.11.0 (#41) 2024-11-01 13:04:20 +02:00
fd11f9966b chore(config): tmux-sessionizer bindings 2024-10-25 13:03:53 +03:00
722b3c0cde chore(scripts): tweak install-asdf, add update 2024-10-25 12:42:38 +03:00
4fcb9d9741 chore(config): fzf default opts 2024-10-25 12:42:38 +03:00
fc232f26f7 chore(config): update tmux config 2024-10-25 12:42:38 +03:00
8b078309cf chore(nvim): dashboard tweaks, add q for fast quit 2024-10-25 12:42:38 +03:00
5a8f990e52 chore(nvim): which-key tweaks 2024-10-25 12:42:38 +03:00
c76c5d08b0 chore(nvim): treesitter config tweaks 2024-10-25 12:42:38 +03:00
b2857e226c chore(nvim): telescope config tweaks 2024-10-25 12:42:38 +03:00
dfbac0c736 chore(nvim): lsp config tweaks, add neoconf, ts_ls 2024-10-25 12:42:38 +03:00
fdd713908c chore(nvim): cmp tweaks, add luasnip snippets 2024-10-25 12:42:37 +03:00
60210c9bec chore(deps): cleanup oh-my-posh config 2024-10-25 12:42:37 +03:00
eaf8d2bdca chore(config): update direnv config 2024-10-25 12:42:37 +03:00
cc00055626 chore(deps): update tool-versions & cargo-package
# Conflicts:
#	base/tool-versions
2024-10-25 12:42:34 +03:00
renovate[bot]
567de68844 feat(github-action): update actions/setup-python ( v5.2.0 → v5.3.0 )
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-24 23:17:20 +00:00
github-actions[bot]
ed0b229757 chore: update pre-commit hooks (#40)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-10-22 09:09:53 +03:00
c8b6243c0b chore(deps): update asdf dependencies 2024-10-17 23:47:05 +03:00
renovate[bot]
21a92eb145 chore(deps): update node to v22.10.0 (#39)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 23:38:09 +03:00
8ec317f582 chore: tweaks and cleanup 2024-10-17 23:29:40 +03:00
renovate[bot]
42201d8b68 feat(github-release): update python ( 3.12.7 → 3.13.0 ) (#38)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 10:36:55 +03:00
github-actions[bot]
0c003ae5b9 chore: update pre-commit hooks (#37)
Co-authored-by: ivuorinen <11024+ivuorinen@users.noreply.github.com>
2024-10-06 15:53:15 +03:00
d383031ec8 chore(docs): update nvim keybindings 2024-10-04 14:50:09 +03:00
renovate[bot]
fa5e5f16da feat(github-action)!: Update peter-evans/create-pull-request ( v6 → v7 ) (#36)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 10:43:47 +03:00
f82396236e chore(asdf): removed eza, lazygit. updated deps. 2024-10-03 01:52:46 +03:00
b127c2514d feat(nvim): another configuration tweak round
added snippets!
2024-10-03 01:51:39 +03:00
renovate[bot]
b06ac3bc0f feat(github-action)!: Update peter-evans/create-pull-request ( v5 → v6 ) (#35)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 01:21:03 +03:00
renovate[bot]
7e4ea90a05 fix(github-release): update python ( 3.12.6 → 3.12.7 ) (#34)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 23:35:20 +03:00
github-actions[bot]
d264a33d21 chore: update pre-commit hooks (#33)
Co-authored-by: ivuorinen <ivuorinen@users.noreply.github.com>
2024-10-01 09:26:30 +03:00
224ee56461 fix(workflow): pre-commit, run in the cloud 2024-10-01 08:51:27 +03:00
renovate[bot]
8147490c65 feat(github-action)!: Update peter-evans/create-pull-request ( v4 → v5 ) (#32)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:28:44 +03:00
renovate[bot]
c6d501347a feat(github-action)!: Update actions/setup-python ( v4.8.0 → v5.2.0 ) (#31)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:20:22 +03:00
renovate[bot]
d8044f2b6a feat(github-action)!: Update actions/checkout ( v3 → v4 ) (#30)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 08:12:02 +03:00
renovate[bot]
1b3fe6d12e feat(github-action): update actions/setup-python ( v4.5.0 → v4.8.0 )
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 21:05:17 +00:00
76b66d8c61 feat(workflow): pre-commit autoupdate 2024-09-30 21:41:56 +03:00
9c8644de17 feat(nvim): cleanup, fixes and helpers 2024-09-30 21:41:35 +03:00
120345b562 chore(nvim): ignore spell file changes 2024-09-30 02:49:16 +03:00
8accd4a60b chore(nvim): clear spell file 2024-09-30 02:42:19 +03:00
8fb03660ad chore(asdf): use system eza 2024-09-30 02:41:53 +03:00
8b2dc74f2a chore(brew): remove upstream removed font casks 2024-09-30 02:41:35 +03:00
8fa63e63bb chore(nvim): cleanup, formatting, fixes 2024-09-30 02:40:01 +03:00
4ca5b63b75 chore(nvim): more tweaks, cleanup and docs 2024-09-26 22:47:12 +03:00
5a59872377 chore(nvim): prefer telescope over fzf, cleanup 2024-09-26 14:16:28 +03:00
38419eda28 feat(nvim): refactoring, docs, keybinds, others 2024-09-26 13:38:31 +03:00
fc85dbaa6c chore(deps): pre-commit hooks update 2024-09-25 15:02:21 +03:00
250e7f5666 feat(nvim): keymaps tweaks, cleanup, docs 2024-09-25 14:52:56 +03:00
8f96922033 chore(asdf): add fzf to go packages 2024-09-25 14:49:26 +03:00
4c4de2dc26 chore(config): tweaks to path, show script name 2024-09-25 14:48:59 +03:00
b8c163e028 chore(deps): update tool-versions 2024-09-25 14:43:29 +03:00
0a974c2a17 chore(asdf): move eza to cargo packages 2024-09-25 14:43:11 +03:00
fd8d72ab38 chore(nvim): cleanup and keybindings 2024-09-23 16:25:54 +03:00
0908a23231 chore(asdf): add sops global version 2024-09-23 10:27:04 +03:00
2e070eed83 chore(docs): update nvim keybindings 2024-09-23 10:26:40 +03:00
e22762255d feat(nvim): configuration, refactoring, fixes 2024-09-23 09:52:11 +03:00
093f58f129 feat: removed nvim-lazy, nvim-kickstart 2024-09-22 04:31:44 +03:00
9b6e39b4af feat(nvim): plugins, cleanup, ign lazy-lock.json 2024-09-22 04:26:02 +03:00
Ismo Vuorinen
6f1e1a0416 feat(nvim): new nvim config (#28)
* feat(nvim): clean config, work in progress
* feat: refactored plugins and configs
* feat: stylua config, ufo, lsp refactor, cleanup
* feat: renamed nvim to nvim-lazy, added alias
* feat: renamed nvim-clean to be nvim, updated alias
2024-09-22 03:52:02 +03:00
36e0f36e06 chore: move to .tool-versions 2024-09-19 17:02:14 +03:00
e2c37d29e8 chore: more cleanup, linting and fixes 2024-09-19 12:40:16 +03:00
78716fa8ce feat(config): few handy date aliases 2024-09-19 09:49:59 +03:00
81e9b20eb6 chore(config): cleanup and removal of duplicates 2024-09-19 09:49:35 +03:00
renovate[bot]
94e58b307b chore(deps): update node to v22.9.0 (#27)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 02:43:47 +03:00
98aca096a9 feat(lint): add pre-commit config, yamlignore 2024-09-18 02:29:59 +03:00
121e31c7d4 chore(config): add-submodules.sh to dotbot config 2024-09-18 02:28:58 +03:00
f6bcd10ac5 chore(config): update exports 2024-09-18 02:27:30 +03:00
619c772fcc chore(config): tweak direnv config, hide output 2024-09-18 02:26:34 +03:00
746d44151c chore(workflow): cleanup new-release, tweak cron 2024-09-18 02:24:31 +03:00
b9585209be chore(deps): update yarn packages, fix prettier 2024-09-18 02:23:44 +03:00
930dcf00c4 Revert "chore(config): remove tmux dark-notify"
This reverts commit bb8e3bba56.
2024-09-17 00:17:08 +03:00
bb8e3bba56 chore(config): remove tmux dark-notify 2024-09-17 00:15:47 +03:00
6431c2e6dc chore(nvim): update nvim-kickstart 2024-09-17 00:15:03 +03:00
248eca1ae6 chore(config): tweak rector function 2024-09-17 00:14:46 +03:00
4b1ab2e1b8 chore(nvim): update lazyvim 2024-09-17 00:14:11 +03:00
c0f537439b chore(config): tweak tmux aliases 2024-09-17 00:13:50 +03:00
9ab132d37c chore(config): disable alacritty dark-notify 2024-09-17 00:13:20 +03:00
2b9ddc232b chore(config): tweak oh-my-posh config 2024-09-16 16:42:34 +03:00
1a244ce0b1 chore(deps): asdf update 2024-09-16 09:12:46 +03:00
fdc0f45b23 chore(workflows): tweak gh workflows 2024-09-16 09:12:30 +03:00
3fa90eef3b chore(bin): dfm, update install-* scripts 2024-09-15 17:46:42 +03:00
7ea7c12f0b chore(nvim): update lazyvim 2024-09-15 17:46:13 +03:00
f76492b942 chore(deps): update asdf deps, rearrange order 2024-09-15 17:45:58 +03:00
7947340663 chore(config): alias and shared git config 2024-09-15 17:00:04 +03:00
300c48b1e9 feat(bin): x-term-colors to test term colors 2024-09-15 16:59:38 +03:00
772527cc66 chore(asdf): update versions, clean plugins 2024-09-15 16:58:51 +03:00
renovate[bot]
370fdcbcbe fix(container): update image python ( 3.12.5 → 3.12.6 ) (#26)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-10 09:21:57 +03:00
b32c86bac2 chore(deps): update nvim-kickstart submodule 2024-09-05 10:44:25 +03:00
8d85809b1c fix(dfm): asdf install parameter + asdf updates 2024-09-05 10:36:10 +03:00
7fc40e3eab chore(nvim): update keymaps, update lazyvim 2024-09-04 13:20:59 +03:00
123 changed files with 7326 additions and 4922 deletions

View File

@@ -8,6 +8,12 @@ indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = 100
[*.lua]
max_line_length = 120
[*.php]
indent_size = 4
@@ -19,7 +25,7 @@ indent_size = 1
indent_size = 1
indent_style = tab
[{local/bin/*,**/*.sh,**/zshrc,config/*}]
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
shell_variant = bash # --language-variant
binary_next_line = true
switch_case_indent = true # --case-indent

5
.gitattributes vendored
View File

@@ -220,8 +220,3 @@ git/* text
**/alias text
ssh/* text
# Git Crypt special files
*-secret filter=git-crypt diff=git-crypt
*.key filter=git-crypt diff=git-crypt
secrets/** filter=git-crypt diff=git-crypt

10
.github/README.md vendored
View File

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

View File

@@ -1,3 +1,4 @@
---
name: Debug Changelog # Workflow name displayed on GitHub
on:
workflow_dispatch: # Trigger manually

View File

@@ -1,3 +1,4 @@
---
name: reviewdog
on: [push]
jobs:

View File

@@ -1,21 +1,24 @@
name: Release Daily State # Workflow name displayed on GitHub
---
name: Release Daily State
on:
workflow_dispatch: # Trigger manually
workflow_dispatch:
schedule:
- cron: '30 20 * * *' # UTC is 2-3 hours behind Europe/Helsinki, my timezone
permissions:
contents: write
- cron: '0 21 * * *' # 00:00 at Europe/Helsinki
jobs:
new-daily-release:
runs-on: self-hosted
permissions:
contents: write
outputs:
created: ${{ steps.daily-version.outputs.created }}
version: ${{ steps.daily-version.outputs.version }}
steps:
- uses: actions/checkout@v4 # Checkout our working repository
- uses: actions/checkout@v4
- name: Create tag if necessary
uses: fregante/daily-version-action@v2
id: daily-version
- name: Create changelog text
if: steps.daily-version.outputs.created
id: changelog
@@ -23,6 +26,7 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
config_file: .github/tag-changelog-config.js
- name: Create release
if: steps.daily-version.outputs.created
uses: actions/create-release@latest

View File

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

View File

@@ -1,3 +1,4 @@
---
name: Semantic PR
on:

View File

@@ -1,13 +1,14 @@
---
name: Update submodules
on:
schedule: [{ cron: 0 3 * * * }]
workflow_dispatch:
permissions:
contents: write
issues: write
pull-requests: write
jobs:
update-submodules:
permissions:
contents: write
issues: write
pull-requests: write
runs-on: self-hosted
steps:
- name: Checkout repository

4
.gitignore vendored
View File

@@ -1,4 +1,5 @@
Brewfile.lock.json
lazy-lock.json
config/nvim/lazy-lock.json
*.log
*-secret
@@ -25,4 +26,7 @@ config/iterm2/AppSupport
config/gnupg/S.*
config/gnupg/s
config/gnupg/private-keys-v1.d
config/nvim/spell/*
!config/nvim/spell/.gitkeep
antidote_plugins.zsh

11
.gitmodules vendored
View File

@@ -23,10 +23,6 @@
path = config/tmux/plugins/tmux-continuum
url = https://github.com/tmux-plugins/tmux-continuum
ignore = dirty
[submodule "tmux/tmux-resurrect"]
path = config/tmux/plugins/tmux-resurrect
url = https://github.com/tmux-plugins/tmux-resurrect
ignore = dirty
[submodule "tmux/tmux-sensible"]
path = config/tmux/plugins/tmux-sensible
url = https://github.com/tmux-plugins/tmux-sensible.git
@@ -58,12 +54,13 @@
[submodule "cheat-tldr"]
path = config/cheat/cheatsheets/tldr
url = https://github.com/ivuorinen/cheatsheet-tldr.git
[submodule "nvim-kickstart"]
path = config/nvim-kickstart
url = https://github.com/ivuorinen/kickstart.nvim
[submodule "tmux/tmux-dark-notify"]
path = config/tmux/plugins/tmux-dark-notify
url = https://github.com/erikw/tmux-dark-notify.git
[submodule "asdf"]
path = local/bin/asdf
url = https://github.com/asdf-vm/asdf.git
[submodule "antidote"]
path = tools/antidote
url = https://github.com/mattmc3/antidote.git
shallow = true

View File

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

View File

@@ -1,5 +1,5 @@
{
"diagnostics.globals": [
"vim"
]
}
"diagnostics.globals": [
"vim"
]
}

2
.nvmrc
View File

@@ -1 +1 @@
22.8.0
22.12.0

58
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,58 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: requirements-txt-fixer
- id: detect-private-key
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]
- id: check-case-conflict
- id: check-merge-conflict
- id: check-executables-have-shebangs
- id: check-shebang-scripts-are-executable
- id: check-symlinks
- id: check-toml
- id: check-xml
- id: check-yaml
args: [--allow-multiple-documents]
- id: end-of-file-fixer
- id: mixed-line-ending
args: [--fix=auto]
- id: pretty-format-json
args: [--autofix, --no-sort-keys]
- repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.43.0
hooks:
- id: markdownlint
args: [-c, .markdownlint.yaml, --fix]
- repo: https://github.com/adrienverge/yamllint
rev: v1.35.1
hooks:
- id: yamllint
- repo: https://github.com/koalaman/shellcheck-precommit
rev: v0.10.0
hooks:
- id: shellcheck
- repo: https://github.com/scop/pre-commit-shfmt
rev: v3.10.0-2
hooks:
- id: shfmt
- repo: https://github.com/rhysd/actionlint
rev: v1.7.4
hooks:
- id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 39.75.1
hooks:
- id: renovate-config-validator
- repo: https://github.com/JohnnyMorganz/StyLua
rev: v2.0.2
hooks:
- id: stylua # or stylua-system / stylua-github

View File

@@ -1,12 +1,14 @@
# vim: ft=gitignore
.mypy_cache/*
Brewfile.lock.json
config/cheat/cheatsheets/community
config/cheat/cheatsheets/tldr
config/fzf/*
config/nvim-kickstart/*
config/nvim/*
config/tmux/plugins/*
config/zsh/*
lazy-lock.json
local/bin/antigen.zsh
local/bin/asdf
tools/antidote/*
tools/dotbot*

View File

@@ -1,5 +1,4 @@
module.exports = {
plugins: ['prettier-plugin-sh'],
...require('@ivuorinen/prettier-config'),
trailingComma: 'all',
// Add custom options below:

View File

@@ -1 +1 @@
3.12.5
3.13.1

0
.yamlignore Normal file
View File

View File

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

View File

@@ -14,10 +14,10 @@ source "$DOTFILES/config/shared.sh"
# Import ssh keys in keychain
ssh-add -A 2>/dev/null
x-have oh-my-posh && {
eval "$(oh-my-posh init bash --config "$DOTFILES/config/omp/own.toml")"
}
x-have antidot && {
eval "$(antidot init)"
}
PROMPT_DIRTRIM=3
PROMPT_COMMAND='PS1_CMD1=$(git branch --show-current 2>/dev/null)'
PS1='\[\e[95m\]\u\[\e[0m\]@\[\e[38;5;22;2m\]\h\[\e[0m\] \[\e[38;5;33m\]\w\[\e[0m\] \[\e[92;2m\]${PS1_CMD1}\n\[\e[39m\]➜\[\e[0m\] '

View File

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

1
base/nvmrc Normal file
View File

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

View File

@@ -1,30 +1,27 @@
1password-cli 2.30.0
asdf-plugin-manager 1.4.0
golang 1.23.3
ruby 3.3.4
rust 1.82.0
direnv 2.35.0
fd 10.2.0
1password-cli 2.30.3
age 1.2.0
asdf-plugin-manager 1.3.1
bottom 0.10.2
direnv 2.34.0
dotenv-linter 3.3.0
editorconfig-checker 2.8.0
eza 0.19.0
fd 10.2.0
github-cli 2.55.0
golang 1.23.0
github-cli 2.61.0
hadolint 2.12.0
kubectl 1.31.0
lazygit 0.43.1
markdownlint-cli2 0.13.0
nodejs 22.7.0
pipx 1.7.1
pre-commit 3.8.0
python 3.12.5
ripgrep 14.1.0
ruby 3.3.4
rust 1.80.1
semgrep system
kubectl 1.31.2
pre-commit 4.0.1
ripgrep 14.1.1
shellcheck 0.10.0
shfmt 3.9.0
terragrunt 0.67.0
tf-summarize 0.3.10
vault 1.17.4+ent
shfmt 3.10.0
terragrunt 0.68.8
tf-summarize 0.3.13
yamllint 1.35.1
yq 4.44.3
bats 1.11.0
gitleaks 8.18.4
delta 0.18.1
eza 0.20.8
sops 3.9.1

85
base/zshrc Executable file → Normal file
View File

@@ -1,71 +1,23 @@
# this is my zsh config. there are many like it, but this one is mine.
# https://zsh.sourceforge.io/Intro/intro_3.html
# shellcheck shell=bash
# export VERBOSE=1
# export DEBUG=1
autoload -U promptinit; promptinit
export DOTFILES="$HOME/.dotfiles"
LOCAL_SHARE="$HOME/.local/share"
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/bob/nvim-bin:$LOCAL_SHARE/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
export PATH="$HOME/.local/bin:$DOTFILES/local/bin:$LOCAL_SHARE/nvim/mason/bin:$LOCAL_SHARE/bob/nvim-bin:$LOCAL_SHARE/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
export SHARED_SCRIPTS_SOURCED=0
source "$DOTFILES/config/shared.sh"
source "${XDG_CONFIG_HOME:-$HOME/.config}/asdf-direnv/zshrc"
eval "$(oh-my-posh init zsh --config "$DOTFILES/config/omp/own.toml")"
ZSH_COMPDUMP="$XDG_CACHE_HOME/zsh/zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
# Function to load antigen if available
load_antigen()
{
local antigen_zsh_path="$XDG_BIN_HOME/antigen.zsh"
# shellcheck source=../../.local/bin/antigen.zsh
if [[ -f "$antigen_zsh_path" ]]; then
source "$antigen_zsh_path"
antigen use oh-my-zsh
# Disable ls colors to avoid issues with eza
export DISABLE_LS_COLORS=true
export ZSH_TMUX_AUTOSTART=false
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
export ZSH_TMUX_UNICODE=true
export ZSH_TMUX_AUTOQUIT=false
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
zstyle ':omz:plugins:eza' 'dirs-first' yes
zstyle ':omz:plugins:eza' 'git-status' yes
zstyle ':omz:plugins:eza' 'icons' yes
zstyle ':omz:plugins:eza' 'ls' yes
zstyle ':omz:plugins:eza' 'prompt' yes
if [[ "$OSTYPE" == darwin* ]]; then
zstyle :omz:plugins:ssh-agent keychain yes
fi
zstyle :omz:plugins:ssh-agent lazy yes
zstyle :omz:plugins:ssh-agent quiet yes
# z, the zsh version
export ZSHZ_DATA="$XDG_STATE_HOME/z"
antigen bundle z
x-have python && antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# these should be always available
antigen bundle jreese/zsh-titles
antigen bundle gnu-utils
antigen bundle ssh-agent
antigen bundle gpg-agent
antigen bundle brew
# antigen bundle tmux
antigen bundle colored-man-pages
antigen bundle zsh-users/zsh-completions
antigen bundle eza
# this needs to be the last item
antigen bundle zsh-users/zsh-syntax-highlighting
antigen apply
fi
}
source "$DOTFILES/config/zsh/antidote.zsh"
# source "$DOTFILES/config/zsh/prompt.zsh"
# Function to source FZF configuration
source_fzf_config()
@@ -81,7 +33,7 @@ source_fzf_config()
setup_tmux_window_name_plugin()
{
if [[ -n "$TMUX" ]]; then
local tmux_window_name_plugin="$DOTFILES/config/tmux/plugins/tmux-window-name/scripts/rename_session_windows.py"
local tmux_window_name_plugin="$TMUX_PLUGINS/tmux-window-name/scripts/rename_session_windows.py"
if [[ -f "$tmux_window_name_plugin" ]]; then
tmux_window_name()
{
@@ -93,15 +45,14 @@ setup_tmux_window_name_plugin()
fi
}
main()
{
load_antigen
source_fzf_config
setup_tmux_window_name_plugin
if x-have antidot; then
eval "$(antidot init)"
fi
source "${XDG_CONFIG_HOME:-$HOME/.config}/asdf-direnv/zshrc"
}
source_fzf_config
setup_tmux_window_name_plugin
x-have antidot && eval "$(antidot init)"
main "$@"
autoload -Uz compinit bashcompinit
compinit -d $ZSH_COMPDUMP
bashcompinit
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
export P10K_CONFIG="$DOTFILES/config/zsh/p10k.zsh"
[[ ! -f "$P10K_CONFIG" ]] || source "$P10K_CONFIG"

View File

@@ -1,3 +1,4 @@
--container-architecture linux/amd64
-P ubuntu-latest=catthehacker/ubuntu:act-latest
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04

View File

@@ -0,0 +1,183 @@
# Start AeroSpace at login
start-at-login = false
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
enable-normalization-flatten-containers = true
enable-normalization-opposite-orientation-for-nested-containers = true
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
# The 'accordion-padding' specifies the size of accordion padding
# You can set 0 to disable the padding feature
accordion-padding = 10
# Possible values: tiles|accordion
default-root-container-layout = 'tiles'
# Possible values: horizontal|vertical|auto
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
# tall monitor (anything higher than wide) gets vertical orientation
default-root-container-orientation = 'auto'
# Mouse follows focus when focused monitor changes
# Drop it from your config, if you don't like this behavior
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
# Fallback value (if you omit the key): on-focused-monitor-changed = []
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
# Also see: https://nikitabobko.github.io/AeroSpace/goodness#disable-hide-app
automatically-unhide-macos-hidden-apps = true
# [[on-window-detected]]
# if.app-id = 'com.apple.systempreferences'
# if.app-name-regex-substring = 'settings'
# if.window-title-regex-substring = 'substring'
# if.workspace = 'workspace-name'
# if.during-aerospace-startup = true
# check-further-callbacks = true
# run = ['layout floating', 'move-node-to-workspace S'] # The callback itself
[[on-window-detected]]
if.app-id = 'org.ferdium.ferdium-app' # Ferdium, has WhatsApp etc.
run = ['layout floating']
[[on-window-detected]]
if.app-name-regex-substring = 'finder'
run = 'layout floating'
[[on-window-detected]]
if.app-id = 'com.apple.finder' # Finder
run = 'layout floating'
[[on-window-detected]]
if.app-id = 'com.apple.mail' # Mail
run = 'layout floating'
[[on-window-detected]]
if.app-id = 'com.DanPristupov.Fork' # Fork
run = 'layout floating'
[[on-window-detected]]
if.app-id = 'com.flexibits.fantastical2.mac' # Fantastical
run = 'layout floating'
[[on-window-detected]]
if.app-id = 'org.whispersystems.signal-desktop' # Signal
run = 'layout floating'
[[on-window-detected]]
if.app-id = 'com.tidal.desktop'
run = ['layout floating', 'move-node-to-workspace 2']
# Possible values: (qwerty|dvorak)
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
[key-mapping]
preset = 'qwerty'
# Gaps between windows (inner-*) and between monitor edges (outer-*).
# Possible values:
# - Constant: gaps.outer.top = 8
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
# In this example, 24 is a default value when there is no match.
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
[gaps]
inner.horizontal = 5
inner.vertical = 5
# outer.top = 0
outer.top = [{ monitor.'^built-in retina display$' = 20 }, 0]
outer.right = 0
outer.bottom = 0
outer.left = 0
# 'main' binding mode declaration
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
# 'main' binding mode must be always presented
# Fallback value (if you omit the key): mode.main.binding = {}
[mode.main.binding]
# All possible keys:
# - Letters. a, b, c, ..., z
# - Numbers. 0, 1, 2, ..., 9
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
# - F-keys. f1, f2, ..., f20
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
# keypadMinus, keypadMultiply, keypadPlus
# - Arrows. left, down, up, right
# All possible modifiers: cmd, alt, ctrl, shift
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3)
# alt-enter = '''exec-and-forget osascript -e '
# tell application "Terminal"
# do script
# activate
# end tell'
# '''
alt-cmd-shift-f = 'fullscreen'
alt-cmd-f = 'layout floating'
alt-cmd-left = 'join-with left'
alt-cmd-down = 'join-with down'
alt-cmd-up = 'join-with up'
alt-cmd-right = 'join-with right'
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
alt-h = 'focus left'
alt-j = 'focus down'
alt-k = 'focus up'
alt-l = 'focus right'
# See: https://nikitabobko.github.io/AeroSpace/commands#move
alt-shift-h = 'move left'
alt-shift-j = 'move down'
alt-shift-k = 'move up'
alt-shift-l = 'move right'
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
cmd-shift-1 = 'workspace 1' # Main
cmd-shift-2 = 'workspace 2' # Music
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
alt-cmd-1 = 'move-node-to-workspace 1 --focus-follows-window'
alt-cmd-2 = 'move-node-to-workspace 2 --focus-follows-window'
shift-tab = 'workspace-back-and-forth'
# alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
alt-a = 'mode apps'
alt-s = 'mode service'
alt-d = 'mode resize'
[mode.apps.binding]
esc = ['reload-config', 'mode main']
alt-b = ['exec-and-forget open -a /Applications/Brave Browser.app', 'mode main']
alt-c = ['exec-and-forget open -a /Applications/Ferdium.app', 'mode main']
alt-o = ['exec-and-forget open -a /Applications/Obsidian.app', 'mode main']
alt-s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main']
alt-t = ['exec-and-forget open -a /Applications/TIDAL.app', 'mode main']
alt-w = ['exec-and-forget open -a /Applications/WezTerm.app', 'mode main']
[mode.service.binding]
esc = ['reload-config', 'mode main']
r = ['flatten-workspace-tree', 'mode main'] # reset layout
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
backspace = ['close-all-windows-but-current', 'mode main']
[mode.resize.binding]
# See: https://nikitabobko.github.io/AeroSpace/commands#resize
r = ['flatten-workspace-tree', 'mode main'] # reset layout
h = 'resize smart -70'
l = 'resize smart +70'
esc = ['reload-config', 'mode main']

View File

@@ -52,14 +52,21 @@ alias flush="dscacheutil -flushcache"
# Update locatedb
alias updatedb="sudo /usr/libexec/locate.updatedb"
# Date helpers
alias isodate="date +'%Y-%m-%d'"
alias x-datetime="date +'%Y-%m-%d %H:%M:%S'"
alias x-timestamp="date +'%s'"
# tmux: automatically attach or create session with name 'main'
alias tmux='tmux new-session -A -s main'
alias tm='command tmux new-session -A -s main'
# tmux: attach or create new session
alias ta='tmux attach || tmux'
alias ta='command tmux attach || command tmux'
# nvim
alias nvim-ks='NVIM_APPNAME="nvim-kickstart" nvim'
alias ks='NVIM_APPNAME="nvim-kickstart" nvim'
alias c='nvim'
alias ks='nvim'
alias vi='nvim'
alias vim='nvim'
# xdg-ninja aliases for better experience
alias xdg='xdg-ninja --skip-ok --skip-unsupported'
@@ -122,6 +129,7 @@ X_ALIAS_FILES=(
"$HOME/.config/alias-$(hostname)-secret"
)
for aliasFile in "${X_ALIAS_FILES[@]}"; do
# shellcheck source=$HOME/.config/alias-secret
[ -f "$aliasFile" ] && source "$aliasFile" && msg "Sourced $aliasFile"
done
unset X_ALIAS_FILES

3
config/asdf-direnv/zshrc Normal file
View File

@@ -0,0 +1,3 @@
### Do not edit. This was autogenerated by 'asdf direnv setup' ###
export ASDF_DIRENV_BIN="$(asdf where direnv)/bin/direnv"
eval "$($ASDF_DIRENV_BIN hook zsh)"

View File

@@ -19,3 +19,7 @@ bob-nvim
// bottom, btm - A cross-platform graphical process/system monitor with
// a customizable interface and a multitude of features.
bottom
// A modern alternative to ls
eza
// Tmux Sessionizer: A tool for opening git repositories as tmux sessions
tmux-sessionizer

View File

@@ -1,8 +1,6 @@
// These are golang packages I use,
// so they should be available with all versions
// sysadmin/scripting utilities, distributed as a single binary
github.com/skx/sysbox@release-0.18.0
// Git Profile allows you to switch between user profiles in git repos
github.com/dotzero/git-profile@v1.4.0
// An extensible command line tool or library to format yaml files.
@@ -19,3 +17,5 @@ github.com/charmbracelet/glow@v1.5.1
github.com/rhysd/actionlint/cmd/actionlint@v1.7.1
// Cleans up your $HOME from those pesky dotfiles
github.com/doron-cohen/antidot@v0.6.3
// FZF is a general-purpose command-line fuzzy finder.
github.com/junegunn/fzf@latest

View File

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

View File

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

View 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.

View File

@@ -61,12 +61,6 @@ cheatpaths:
path: ~/.config/cheat/cheatsheets/community
tags: [community]
readonly: true
# If you have personalized cheatsheets, list them last. They will take
# precedence over the more global cheatsheets.
- name: personal
path: ~/.dotfiles/config/cheat/cheatsheets/personal
tags: [personal]
readonly: false
- name: pure-bash-bible
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
tags: [pure-bash-bible]
@@ -75,6 +69,13 @@ cheatpaths:
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
tags: [tldr]
readonly: true
# If you have personalized cheatsheets, list them last. They will take
# precedence over the more global cheatsheets.
- name: personal
path: ~/.dotfiles/config/cheat/cheatsheets/personal
tags: [personal]
readonly: false
# While it requires no configuration here, it's also worth noting that
# cheat will automatically append directories named '.cheat' within the
# current working directory to the 'cheatpath'. This can be very useful if

View File

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

View File

@@ -9,34 +9,25 @@
[ -z "$XDG_CACHE_HOME" ] && export XDG_CACHE_HOME="$HOME/.cache"
[ -z "$XDG_STATE_HOME" ] && export XDG_STATE_HOME="$HOME/.local/state"
[ -z "$XDG_BIN_HOME" ] && export XDG_BIN_HOME="$HOME/.local/bin"
[ -z "$XDG_RUNTIME_DIR" ] && export XDG_RUNTIME_DIR="$HOME/.local/run"
# if DOTFILES is not set, set it to the default location
[ -z "$DOTFILES" ] && export DOTFILES="$HOME/.dotfiles"
# zsh completions directory
[ -z "$ZSH_COMPLETIONS" ] && export ZSH_COMPLETIONS="$XDG_CONFIG_HOME/zsh/completion"
export PATH="$XDG_BIN_HOME:$DOTFILES/local/bin:$XDG_DATA_HOME/bob/nvim-bin:$XDG_DATA_HOME/cargo/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
# Load bash completions if available for zsh
if [[ -n "$ZSH_VERSION" ]]; then
autoload bashcompinit
bashcompinit
fi
# Load asdf
export ASDF_DIR="$XDG_BIN_HOME/asdf"
if [[ -d $ASDF_DIR ]]; then
[[ -d $ASDF_DIR/bin ]] && x-path-prepend "$ASDF_DIR/bin"
[[ -d $ASDF_DIR/shims ]] && x-path-prepend "$ASDF_DIR/shims"
[[ -d $ASDF_DIR/completions ]] && fpath=("$ASDF_DIR/completions" $fpath)
[[ -d $ASDF_DIR/plugins ]] && fpath=("$ASDF_DIR/plugins" $fpath)
source "$ASDF_DIR/asdf.sh"
fi
# Add zsh completions to FPATH, compinit will be called later
FPATH="$ZSH_COMPLETIONS:$FPATH"
if ! command -v msg &> /dev/null; then
# Function to print messages if VERBOSE is enabled
# $1 - message (string)
msg()
{
[[ "$VERBOSE" -eq 1 ]] && echo "-> $1"
[[ $VERBOSE -eq 1 ]] && msgr msg "-> $1"
return 0
}
fi
@@ -52,7 +43,7 @@ else
# Optionally write a msg to stderr suggesting users install bkt.
bkt()
{
while [[ "$1" == --* ]]; do shift; done
while [[ $1 == --* ]]; do shift; done
"$@"
}
fi
@@ -93,7 +84,7 @@ darknotify_alacritty()
}
return 0
}
darknotify_alacritty
# darknotify_alacritty
# Function to list installed Homebrew packages using bkt caching
brew_installed()
@@ -124,7 +115,7 @@ preexec()
dfu()
{
(
cd "$DOTFILES" && git pull --ff-only && ./install
cd "$DOTFILES" && git rebase --ff --autostash && ./install
)
}
@@ -147,7 +138,7 @@ rector()
{
local php="${1:-82}"
docker run -v "$(pwd)":/project rector/rector:latest process \
"/project/$1" \
"/project/" \
--set "php${php}" \
--autoload-file /project/vendor/autoload.php
}
@@ -191,6 +182,7 @@ nonascii()
# Usage: strip_nonascii "string"
strip_nonascii()
{
# shellcheck disable=SC2001
echo "$1" | LC_ALL=C sed 's/[^[:print:][:space:]]//g'
}
@@ -198,7 +190,7 @@ strip_nonascii()
# Usage: slugify "string"
slugify()
{
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr A-Z a-z
echo "$1" | iconv -t ascii//TRANSLIT | sed -r s/[^a-zA-Z0-9]+/-/g | sed -r s/^-+\|-+$//g | tr '[:upper:]' '[:lower:]'
}
# https://stackoverflow.com/a/85932
@@ -232,33 +224,33 @@ replacable()
FILE1="$1"
FILE2="$2"
[[ ! -r "$FILE1" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 1 ($FILE1) does not exist"
[[ ! -r $FILE1 ]] && {
[[ $VERBOSE -eq 1 ]] && msgr err "File 1 ($FILE1) does not exist"
return 0
}
[[ ! -r "$FILE2" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "File 2 ($FILE2) does not exist, replaceable"
[[ ! -r $FILE2 ]] && {
[[ $VERBOSE -eq 1 ]] && msgr err "File 2 ($FILE2) does not exist, replaceable"
return 1
}
FILE1_HASH=$(get_sha256sum "$FILE1")
FILE2_HASH=$(get_sha256sum "$FILE2")
[[ $FILE1_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 1 ($FILE1)"
[[ $FILE1_HASH == "" ]] && {
[[ $VERBOSE -eq 1 ]] && msgr err "Could not get hash for file 1 ($FILE1)"
return 0
}
[[ $FILE2_HASH = "" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_err "Could not get hash for file 2 ($FILE2), replaceable"
[[ $FILE2_HASH == "" ]] && {
[[ $VERBOSE -eq 1 ]] && msgr err "Could not get hash for file 2 ($FILE2), replaceable"
return 1
}
[[ "$FILE1_HASH" == "$FILE2_HASH" ]] && {
[[ $VERBOSE -eq 1 ]] && msg_ok "Files match, not replaceable: $FILE1"
[[ $FILE1_HASH == "$FILE2_HASH" ]] && {
[[ $VERBOSE -eq 1 ]] && msgr ok "Files match, not replaceable: $FILE1"
return 0
}
[[ $VERBOSE -eq 1 ]] && msg_warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
[[ $VERBOSE -eq 1 ]] && msgr warn "Files do not match ($FILE1_HASH != $FILE2_HASH), replaceable"
return 1
}
@@ -270,6 +262,7 @@ export BASH_COMPLETION_USER_FILE="${XDG_CONFIG_HOME}/bash-completion/bash_comple
# History env variables
export HIST_STAMPS="yyyy-mm-dd"
export HISTFILE="${XDG_STATE_HOME}/zsh/history"
# Larger bash history (allow 32³ entries; default is 500)
export HISTSIZE=32768
export HISTFILESIZE=$HISTSIZE
@@ -301,8 +294,45 @@ export GREP_OPTIONS="--color=auto"
# update the values of LINES and COLUMNS.
hash shopt 2> /dev/null && shopt -s checkwinsize
# shellcheck disable=SC2155
export SHORT_HOST=$(hostname -s)
# asdf
# https://github.com/asdf-vm/asdf
msg "Setting up asdf configuration"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
if [[ -d $ASDF_DIR ]]; then
[[ -d $ASDF_DIR/completions ]] && FPATH="$ASDF_DIR/completions:$FPATH"
[[ -d $ASDF_DIR/plugins ]] && FPATH="$ASDF_DIR/plugins:$FPATH"
export ASDF_CONFIG_FILE="${XDG_CONFIG_HOME}/asdf/asdfrc"
export ASDF_DATA_DIR="${ASDF_DIR}"
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
export ASDF_LOG_FILE="${XDG_CACHE_HOME}/asdf/asdf.log"
export ASDF_FORCE_PREPEND=yes
## Default package files
export ASDF_CRATE_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/cargo-packages"
export ASDF_GEM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/gem-packages"
export ASDF_GOLANG_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/golang-packages"
export ASDF_NPM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/npm-packages"
export ASDF_PYTHON_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/python-packages"
## Plugin configuration
export ASDF_DIRENV_IGNORE_MISSING_PLUGINS=1
export ASDF_GOLANG_MOD_VERSION_ENABLED=true
export ASDF_NODEJS_LEGACY_FILE_DYNAMIC_STRATEGY="latest_available"
## Add asdf to path
export PATH="${ASDF_DIR}/bin:${PATH}"
source "$ASDF_DIR/asdf.sh"
fi
# Antidote configuration
# https://getantidote.github.io/
msg "Setting up Antidote configuration"
export ANTIDOTE_DIR="$DOTFILES/tools/antidote"
export ANTIDOTE_HOME="$XDG_CACHE_HOME/antidote"
export ANTIDOTE_PLUGINS="$XDG_CONFIG_HOME/zsh/antidote_plugins"
# Antigen configuration
# https://github.com/zsh-users/antigen/wiki/Configuration
msg "Setting up Antigen configuration"
@@ -320,26 +350,22 @@ export ANSIBLE_GALAXY_CACHE_DIR="$XDG_CACHE_HOME/ansible/galaxy_cache"
x-dc "$ANSIBLE_HOME"
x-dc "$ANSIBLE_GALAXY_CACHE_DIR"
# asdf
# https://github.com/asdf-vm/asdf
msg "Setting up asdf configuration"
export ASDF_DIR="${XDG_BIN_HOME}/asdf"
export ASDF_CONFIG_FILE="${XDG_CONFIG_HOME}/asdf/asdfrc"
export ASDF_DATA_DIR="${ASDF_DIR}"
export ASDF_PLUGIN_MANAGER_PLUGIN_VERSIONS_FILENAME="${XDG_CONFIG_HOME}/asdf/plugin-versions"
export ASDF_LOG_FILE="${XDG_CACHE_HOME}/asdf/asdf.log"
## Default package files
export ASDF_CRATE_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/cargo-packages"
export ASDF_GEM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/gem-packages"
export ASDF_GOLANG_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/golang-packages"
export ASDF_NPM_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/npm-packages"
export ASDF_PYTHON_DEFAULT_PACKAGES_FILE="${XDG_CONFIG_HOME}/asdf/python-packages"
## Plugin configuration
export ASDF_DIRENV_IGNORE_MISSING_PLUGINS=1
export ASDF_GOLANG_MOD_VERSION_ENABLED=true
export ASDF_NODEJS_LEGACY_FILE_DYNAMIC_STRATEGY="latest_available"
## Add asdf to path
export PATH="${ASDF_DIR}/bin:${PATH}"
# aws
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html
# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html
msg "Setting up AWS configuration"
export AWS_CONFIG_FILE="${XDG_STATE_HOME}/aws/config"
export AWS_SHARED_CREDENTIALS_FILE="${XDG_STATE_HOME}/aws/credentials"
export AWS_DATA_PATH="${XDG_DATA_HOME}/aws"
export AWS_DEFAULT_REGION="eu-west-1"
export AWS_DEFAULT_OUTPUT="table"
export AWS_CONFIGURE_KEYS=true
export AWS_CONFIGURE_REGION=true
export AWS_CONFIGURE_OUTPUT=true
export AWS_CONFIGURE_PROFILE=true
export AWS_CONFIGURE_PROMPT=true
export AWS_CONFIGURE_PROMPT_DEFAULT="default"
# bob manages nvim versions
msg "Setting up bob configuration"
@@ -370,25 +396,24 @@ export PATH="$COMPOSER_BIN:$PATH"
# direnv, https://direnv.net/
# https://direnv.net/docs/hook.html
# Set the hook to show the direnv message in a different color
export DIRENV_LOG_FORMAT=$'\033[2mdirenv: %s\033[0m'
# export DIRENV_LOG_FORMAT=$'\033[2mdirenv: %s\033[0m'
export DIRENV_LOG_FORMAT=
# docker, https://docs.docker.com/engine/reference/commandline/cli/
msg "Setting up Docker configuration"
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
export DOCKER_CONFIG="${XDG_CONFIG_HOME}/docker"
x-dc "$DOCKER_CONFIG"
# Docker: Disable snyk ad
export DOCKER_SCAN_SUGGEST=false
# ffmpeg
# https://ffmpeg.org/ffmpeg.html
msg "Setting up FFmpeg configuration"
export FFMPEG_DATADIR="$XDG_CONFIG_HOME/ffmpeg"
x-have ffmpeg && x-dc "$FFMPEG_DATADIR"
# fzf
export FZF_BASE="${XDG_CONFIG_HOME}/fzf"
export FZF_DEFAULT_OPTS='--height 40% --tmux bottom,40% --layout reverse --border top'
# GnuPG
# https://gnupg.org/documentation/manuals/gnupg/Invoking-GPG.html
msg "Setting up GnuPG configuration"
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
export GNUPGHOME="${XDG_DATA_HOME}/gnupg"
# Go
# https://golang.org/doc/code.html
@@ -396,10 +421,8 @@ msg "Setting up Go configuration"
export GOPATH="$XDG_DATA_HOME/go"
export GOBIN="$XDG_BIN_HOME"
# nb, https://xwmx.github.io/nb/
msg "Setting up nb configuration"
export NBRC_PATH="$XDG_CONFIG_HOME/nbrc"
export NB_DIR="$XDG_STATE_HOME/nb"
# Lando
export PATH="$HOME/.lando/bin${PATH+:$PATH}" #landopath
# NPM: Add npm packages to path
msg "Setting up NPM configuration"
@@ -425,29 +448,12 @@ export PYENV_ROOT="$XDG_STATE_HOME/pyenv"
## for MichaelAquilina/zsh-autoswitch-virtualenv
export AUTOSWITCH_VIRTUAL_ENV_DIR="$WORKON_HOME"
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH"
x-have pyenv && {
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
}
# Ruby
#
# including: bundler, rbenv
msg "Setting up Ruby configuration"
export GEM_HOME="${XDG_DATA_HOME}"/gem
export GEM_SPEC_CACHE="${XDG_CACHE_HOME}"/gem
export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle
export BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle
export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle
export RBENV_ROOT="$XDG_STATE_HOME/rbenv"
x-dc "$RBENV_ROOT"
x-have gem && export PATH="${GEM_HOME}/bin:$PATH"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
x-have pyenv && eval "$(pyenv init -)"
# Rust / cargo
msg "Setting up Rust/Cargo configuration"
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export PATH="$CARGO_HOME/bin:$PATH"
export RUST_WITHOUT=rust-docs
# screen
# https://www.gnu.org/software/screen/manual/screen.html
@@ -467,14 +473,20 @@ export TF_DATA_DIR="$XDG_STATE_HOME/terraform"
export TF_CLI_CONFIG_FILE="$XDG_CONFIG_HOME/terraform/terraformrc"
export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache"
# tldr / tealdeer
msg "Setting up tldr configuration"
export TEALDEER_CONFIG_DIR="$XDG_CONFIG_HOME/tealdeer/"
# tmux
# https://tmux.github.io/
msg "Setting up tmux configuration"
export TMUX_PLUGINS="$XDG_CONFIG_HOME/tmux/plugins"
export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
## These settings are for zsh-tmux
export ZSH_TMUX_AUTOSTART=false
export ZSH_TMUX_CONFIG="$DOTFILES/config/tmux/tmux.conf"
export ZSH_TMUX_UNICODE=true
export ZSH_TMUX_AUTOQUIT=false
export ZSH_TMUX_DEFAULT_SESSION_NAME=main
# tms, https://github.com/jrmoulton/tmux-sessionizer
export TMS_CONFIG_FILE="${XDG_CONFIG_HOME}/tms/config.toml"
# wakatime, https://github.com/wakatime/wakatime-cli
msg "Setting up Wakatime configuration"
@@ -483,6 +495,7 @@ x-dc "$WAKATIME_HOME"
# Misc
msg "Setting up miscellaneous configuration"
export ZSHZ_DATA="$XDG_STATE_HOME/z"
export CHEAT_USE_FZF=true
export SQLITE_HISTORY="${XDG_CACHE_HOME}/sqlite_history"
@@ -492,6 +505,7 @@ X_EXPORTS_FILES=(
"$HOME/.config/exports-$(hostname)-secret"
)
for exportFile in "${X_EXPORTS_FILES[@]}"; do
# shellcheck source=$HOME/.config/exports-secret
[ -f "$exportFile" ] && source "$exportFile" && msg "Sourced $exportFile"
done
unset X_EXPORTS_FILES

View File

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

View File

@@ -17,11 +17,12 @@
llog = log --pretty=fuller
logs = log --graph --pretty=format:'%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) %C(cyan)<%an>%Creset' --abbrev-commit
nah = !git reset --hard && git clean -df
recent = "!r() { count=$1; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -ts'|';}; r"
reset-origin = !git fetch origin && git reset --hard origin/master && git clean -f -d
reset-upstream = !git fetch upstream && git reset --hard upstream/master && git clean -f -d
recent = "!r() { count=$1; git for-each-ref --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:=10} | column -ts'|';}; r"
rl = reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'
tagdate = log --date-order --graph --tags --simplify-by-decoration --pretty=format:\"%ai %h %d\"
undo = reset --soft HEAD^
undo-commit = reset HEAD~ --soft
[filter "lfs"]
@@ -30,15 +31,6 @@
process = git-lfs filter-process
required = true
[diff]
tool = difftastic
[difftool]
prompt = false
[difftool "difftastic"]
cmd = difft "$LOCAL" "$REMOTE"
[color]
ui = true
diff = auto

View File

@@ -13,9 +13,11 @@ tap "jesseduffield/lazygit"
tap "k8sgpt-ai/k8sgpt"
tap "keith/formulae"
tap "mongodb/brew"
tap "nikitabobko/tap"
tap "reviewdog/tap"
tap "shivammathur/extensions"
tap "shivammathur/php"
tap "snyk/tap"
tap "teamookla/speedtest"
tap "xwmx/taps"
# Run your GitHub Actions locally
@@ -44,6 +46,8 @@ brew "highway"
brew "imath"
# JPEG image codec that aids compression and decompression
brew "jpeg-turbo"
# Library for manipulating PNG images
brew "libpng"
# Zstandard is a real-time compression algorithm
brew "zstd"
# New file format for still image compression
@@ -70,14 +74,20 @@ brew "asdf"
brew "aspell"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# Manage compile and link flags for libraries
brew "pkg-config"
# Package compiler and linker metadata toolkit
brew "pkgconf"
# Automated text file generator
brew "autogen"
# Official Amazon AWS command-line interface
brew "awscli"
# Bourne-Again SHell, a UNIX command interpreter
brew "bash"
# Clone of cat(1) with syntax highlighting and Git integration
brew "bat"
# Bash Automated Testing System
brew "bats-core"
# Parser generator
brew "bison"
# Software library to render fonts
brew "freetype"
# XML-based font configuration API for X Windows
@@ -112,6 +122,14 @@ brew "fzf"
brew "gd"
# Disk usage analyzer with console interface written in Go
brew "gdu"
# GitHub command-line tool
brew "gh"
# OpenType text shaping engine
brew "harfbuzz"
# Secure hashing function
brew "libb2"
# Framework for layout and rendering of i18n text
brew "pango"
# Distributed revision control system
brew "git"
# Enable transparent encryption/decryption of files in a git repo
@@ -138,12 +156,6 @@ brew "openldap"
brew "gpg-tui"
# Image manipulation
brew "netpbm"
# C/C++ and Java libraries for Unicode and globalization
brew "icu4c"
# OpenType text shaping engine
brew "harfbuzz"
# Framework for layout and rendering of i18n text
brew "pango"
# Library to render SVG files using Cairo
brew "librsvg"
# Graph visualization software from AT&T and Bell Labs
@@ -152,6 +164,8 @@ brew "graphviz"
brew "grep"
# Popular GNU data compression program
brew "gzip"
# Text-based UI library
brew "ncurses"
# Improved top (interactive process viewer)
brew "htop"
# Portable abstraction of the hierarchical topology of modern architectures
@@ -162,20 +176,30 @@ brew "libheif"
brew "imagemagick"
# Modular IRC client
brew "irssi"
# Image manipulation library
brew "jpeg"
# Lightweight and flexible command-line JSON processor
brew "jq"
# JSON parser for C
brew "json-c"
# Scanning your k8s clusters, diagnosing, and triaging issues in simple English
brew "k8sgpt"
# Network authentication protocol
brew "krb5"
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
brew "legitify"
# Secure hashing function
brew "libb2"
# BSD-style licensed readline alternative
brew "libedit"
# Conversion library
brew "libiconv"
# Postgres C API library
brew "libpq"
# Version of the SSL/TLS protocol forked from OpenSSL
brew "libressl"
# Multi-platform support library with a focus on asynchronous I/O
brew "libuv"
# GNOME XML library
brew "libxml2"
# C library for reading, creating, and modifying zip archives
brew "libzip"
# Package manager for the Lua programming language
brew "luarocks"
# LZMA-based compression program similar to gzip or bzip2
@@ -184,18 +208,22 @@ brew "lzip"
brew "m-cli"
# Collection of tools that nobody wrote when UNIX was young
brew "moreutils"
# Mongrel of mail user agents (part elm, pine, mush, mh, etc.)
brew "mutt"
# NCurses Disk Usage
brew "ncdu"
# HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
brew "nginx"
# Port scanning utility for large networks
brew "nmap"
# Libraries for security-enabled client and server applications
brew "nss"
# Cryptography and SSL/TLS Toolkit
brew "openssl@1.1"
# ISO-C API and CLI for generating UUIDs
brew "ossp-uuid"
# Coreutils progress viewer
brew "progress"
# General-purpose scripting language
brew "php@8.2"
# General-purpose scripting language
brew "php@8.3", link: true
# Python version management
brew "pyenv"
# Migrate pip packages from one Python version to another
@@ -208,10 +236,10 @@ brew "python@3.11"
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"
# Feature-rich console based todo list manager
brew "task"
# Send macOS User Notifications from the command-line
brew "terminal-notifier"
# Tool which checks for the support of TLS/SSL ciphers and flaws
@@ -236,6 +264,8 @@ brew "watch"
brew "wget"
# Check your $HOME for unwanted files and directories
brew "xdg-ninja", args: ["HEAD"]
# General-purpose lossless data-compression library
brew "zlib"
# Watcher for macOS 10.14+ light/dark mode changes
brew "cormacrelf/tap/dark-notify"
# Cleans up your $HOME from those pesky dotfiles
@@ -259,13 +289,15 @@ brew "shivammathur/extensions/uuid@8.3"
# Yaml PHP extension
brew "shivammathur/extensions/yaml@8.3"
# General-purpose scripting language
brew "shivammathur/php/php"
brew "shivammathur/php/php", link: false
# General-purpose scripting language
brew "shivammathur/php/php-debug"
# Find & fix known vulnerabilities in open-source dependencies
brew "snyk/tap/snyk"
# Command-line interface for 1Password
cask "1password-cli"
# GPU-accelerated terminal emulator
cask "alacritty"
# AeroSpace is an i3-like tiling window manager for macOS
cask "aerospace"
# Text editor
cask "coda"
# Universal database tool and SQL client
@@ -274,6 +306,12 @@ cask "dbeaver-community"
cask "dbngin"
# App to build and share containerised applications and microservices
cask "docker"
cask "font-jetbrains-mono"
cask "font-jetbrains-mono-nerd-font"
cask "font-lato"
cask "font-open-sans"
cask "font-roboto"
cask "font-source-code-pro-for-powerline"
# GIT client
cask "fork"
# HTTP and GraphQL Client
@@ -284,18 +322,12 @@ cask "jetbrains-toolbox"
cask "keybase"
# Kubernetes IDE
cask "lens"
# Keep all tasks from your todo apps on your menu bar
cask "monofocus"
# Reverse proxy, secure introspectable tunnels to localhost
cask "ngrok"
# Simple application that will prevent iTunes or Apple Music from launching
cask "notunes"
# Knowledge base that works on top of a local folder of plain text Markdown files
cask "obsidian"
# Scheduling application focusing on organisation
cask "omnifocus"
# Collaboration platform for API development
cask "postman"
# Display image info and preview unsupported formats in QuickLook
cask "qlimagesize"
# Quick Look generator for Markdown files
@@ -326,6 +358,8 @@ cask "suspicious-package"
cask "syntax-highlight"
# Python IDE for beginners
cask "thonny"
# To-do list
cask "todoist"
# Configuration application for the Ultimate Hacking Keyboard
cask "uhk-agent"
# Open-source code editor
@@ -334,6 +368,8 @@ cask "visual-studio-code"
cask "vlc"
# Spell-checking service for Finnish
cask "voikkospellservice"
# GPU-accelerated cross-platform terminal emulator and multiplexer
cask "wezterm"
# Application for generating TOTP and HOTP codes
cask "yubico-authenticator"
# Multiplayer code editor

53
config/htop/htoprc Normal file
View File

@@ -0,0 +1,53 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
htop_version=3.3.0
config_reader_min_version=3
fields=0 48 17 18 38 39 2 46 47 49 1
hide_kernel_threads=1
hide_userland_threads=0
hide_running_in_container=0
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
highlight_deleted_exe=1
shadow_distribution_path_prefix=0
highlight_megabytes=1
highlight_threads=1
highlight_changes=0
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=0
header_margin=1
screen_tabs=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
enable_mouse=1
delay=15
hide_function_bar=0
header_layout=two_50_50
column_meters_0=LeftCPUs2 Memory Swap
column_meter_modes_0=1 1 1
column_meters_1=RightCPUs2 Tasks LoadAverage Uptime
column_meter_modes_1=1 2 2 2
tree_view=0
sort_key=46
tree_sort_key=0
sort_direction=-1
tree_sort_direction=1
tree_view_always_by_pid=0
all_branches_collapsed=0
screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT STATE PERCENT_CPU PERCENT_MEM TIME Command
.sort_key=PERCENT_CPU
.tree_sort_key=PID
.tree_view_always_by_pid=0
.tree_view=0
.sort_direction=-1
.tree_sort_direction=1
.all_branches_collapsed=0

73
config/ideavim/ideavimrc Normal file
View File

@@ -0,0 +1,73 @@
"" Source your .vimrc
"source ~/.vimrc
"" -- Suggested options --
" Show a few lines of context around the cursor. Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5
" Don't use Ex mode, use Q for formatting.
map Q gq
"" -- Map IDE actions to IdeaVim -- https://jb.gg/abva4t
"" Map \r to the Reformat Code action
"map \r <Action>(ReformatCode)
"" Map <leader>d to start debug
"map <leader>d <Action>(Debug)
"" Map \b to toggle the breakpoint on the current line
"map \b <Action>(ToggleLineBreakpoint)
" Find more examples here: https://jb.gg/share-ideavimrc
" https://github.com/ville6000/dotfiles/blob/main/vimrc
set nocompatible " disable compatibility mode with vi
filetype off " disable filetype detection (but re-enable later, see below)
set encoding=utf-8 " UTF-8
set number " Show line numbers
set laststatus=2 " Always show statusline (even with only single window)
set showmatch " Highlight matching brace
set visualbell " Use visual bell (no beeping)
set hlsearch " Highlight all search results
set smartcase " Enable smart-case search
set ignorecase " Always case-insensitive
set incsearch " Searches for strings incrementally
set cindent " Use 'C' style program indenting
set expandtab " Use spaces instead of tabs
set shiftwidth=4 " Number of auto-indent spaces
set smartindent " Enable smart-indent
set smarttab " Enable smart-tabs
set softtabstop=4 " Number of spaces per Tab
set ruler " Show row and column ruler information
set cursorline " Highlight current line
set undolevels=1000 " Number of undo levels
set backspace=indent,eol,start " Backspace behaviour
set so=5
" move vertically by visual line (don't skip wrapped lines)
nmap j gj
nmap k gk
syntax enable
filetype plugin indent on
call plug#begin('~/.vim/plugged')
Plug 'ayu-theme/ayu-vim'
Plug 'ctrlpvim/ctrlp.vim'
call plug#end()
set termguicolors
set background=dark
let ayucolor="dark"
colorscheme ayu
if has('gui_running')
set macligatures
set guifont=JetBrainsMono:h14
endif

20
config/nvim/.editorconfig Normal file
View File

@@ -0,0 +1,20 @@
# EditorConfig is awesome: https://editorconfig.org
# top-most EditorConfig file
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 2
max_line_length = 120
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
[*.json]
max_line_length = off

View File

@@ -1,8 +1,3 @@
tt.*
.tests
doc/tags
debug
.repro
foo.*
*.log
data
spell/*
!spell/.gitkeep

View File

@@ -1,3 +0,0 @@
{
"diagnostics.globals": ["vim"]
}

View File

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

View File

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

View File

@@ -1,4 +0,0 @@
# 💤 LazyVim
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.

View File

@@ -1,2 +1,65 @@
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")
-- ╭─────────────────────────────────────────────────────────╮
-- │ ivuorinen's Neovim configuration │
-- ╰─────────────────────────────────────────────────────────╯
-- ── Install lazylazy ────────────────────────────────────────────────
-- https://github.com/folke/lazy.nvim
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
local out = vim.fn.system {
'git',
'clone',
'--filter=blob:none',
'--branch=stable',
lazyrepo,
lazypath,
}
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ 'Failed to clone lazy.nvim:\n', 'ErrorMsg' },
{ out, 'WarningMsg' },
{ '\nPress any key to exit...' },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- ── Add ~/.local/bin to the PATH ────────────────────────────────────
vim.fn.setenv(
'PATH',
vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH'
)
require 'options'
require 'autogroups'
-- ── Load plugins ────────────────────────────────────────────────────
require('lazy').setup(
-- Automatically load plugins from lua/plugins
'plugins',
-- Lazy Configuration
{
checker = {
-- Automatically check for updates
enabled = true,
-- We don't want to be notified about updates
notify = false,
},
change_detection = {
-- No need to notify about changes
notify = false,
},
install = {
colorscheme = { vim.g.colors_theme },
},
}
)
require('nvm-default').setup()
require 'keymaps'
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -1,35 +0,0 @@
{
"extras": [
"lazyvim.plugins.extras.coding.copilot",
"lazyvim.plugins.extras.coding.yanky",
"lazyvim.plugins.extras.editor.aerial",
"lazyvim.plugins.extras.editor.aerial",
"lazyvim.plugins.extras.editor.harpoon2",
"lazyvim.plugins.extras.editor.leap",
"lazyvim.plugins.extras.editor.outline",
"lazyvim.plugins.extras.editor.refactoring",
"lazyvim.plugins.extras.formatting.black",
"lazyvim.plugins.extras.formatting.prettier",
"lazyvim.plugins.extras.lang.ansible",
"lazyvim.plugins.extras.lang.docker",
"lazyvim.plugins.extras.lang.go",
"lazyvim.plugins.extras.lang.json",
"lazyvim.plugins.extras.lang.markdown",
"lazyvim.plugins.extras.lang.php",
"lazyvim.plugins.extras.lang.python",
"lazyvim.plugins.extras.lang.tailwind",
"lazyvim.plugins.extras.lang.terraform",
"lazyvim.plugins.extras.lang.typescript",
"lazyvim.plugins.extras.lang.vue",
"lazyvim.plugins.extras.lang.yaml",
"lazyvim.plugins.extras.linting.eslint",
"lazyvim.plugins.extras.ui.edgy",
"lazyvim.plugins.extras.ui.mini-animate",
"lazyvim.plugins.extras.util.dot",
"lazyvim.plugins.extras.util.mini-hipatterns"
],
"news": {
"NEWS.md": "6077"
},
"version": 6
}

View File

@@ -0,0 +1,107 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ Autogroups │
-- ╰─────────────────────────────────────────────────────────╯
local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group
local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
-- Highlight on yank
-- See `:help vim.highlight.on_yank()`
autocmd('TextYankPost', {
callback = function() vim.highlight.on_yank() end,
group = augroup('YankHighlight', { clear = true }),
pattern = '*',
})
-- Set the numberwidth to the maximum line number.
--
-- This fixes the issue where the line numbers jump
-- around when moving between lines relative line numbers enabled.
autocmd({ 'BufEnter', 'BufWinEnter', 'TabEnter' }, {
callback = function()
local max_line_count = vim.fn.line '$'
-- Only adjust if the file is large enough to matter
if max_line_count > 99 then
vim.opt.numberwidth = #tostring(max_line_count) + 1
end
end,
})
-- Windows to close with "q"
autocmd('FileType', {
group = augroup('close_with_q', { clear = true }),
pattern = {
'PlenaryTestPopup',
'checkhealth',
'dbout',
'gitsigns.blame',
'grug-far',
'help',
'lspinfo',
'man',
'neotest-output',
'neotest-output-panel',
'neotest-summary',
'notify',
'qf',
'spectre_panel',
'startuptime',
'tsplayground',
},
callback = function(event)
vim.bo[event.buf].buflisted = false
vim.keymap.set('n', 'q', '<cmd>close<cr>', {
buffer = event.buf,
silent = true,
desc = 'Quit buffer',
})
end,
})
-- make it easier to close man-files when opened inline
autocmd('FileType', {
group = augroup('man_unlisted', { clear = true }),
pattern = { 'man' },
callback = function(event) vim.bo[event.buf].buflisted = false end,
})
-- wrap and check for spell in text filetypes
autocmd('FileType', {
group = augroup('wrap_spell', { clear = true }),
pattern = {
'text',
'plaintex',
'typst',
'gitcommit',
'markdown',
'asciidoc',
'rst',
'tex',
},
callback = function()
vim.opt_local.wrap = true
vim.opt_local.spell = true
end,
})
-- Fix conceallevel for json files
autocmd({ 'FileType' }, {
group = augroup('json_conceal', { clear = true }),
pattern = { 'json', 'jsonc', 'json5' },
callback = function() vim.opt_local.conceallevel = 0 end,
})
-- Set filetype for SSH config directory
-- Pattern handles directories with files like:
-- .dotfiles/ssh/config.d/*, .ssh/config.local, .ssh/config.work
autocmd({ 'BufRead', 'BufNewFile' }, {
desc = 'Set filetype for SSH config directory',
pattern = {
'*/?.ssh/{config|shared}.d/*',
'*/?.ssh/config.local',
'*/?.ssh/config.work',
},
command = 'set filetype=sshconfig',
})
-- vim: ts=2 sts=2 sw=2 et

View File

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

View File

@@ -1,22 +0,0 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
local wk = require("which-key")
-- ╭──────────────────────────────────────────────────────────╮
-- │ Comment box │
-- ╰──────────────────────────────────────────────────────────╯
wk.register({
["<Leader>"] = {
b = {
c = {
name = "□ Comment boxes",
b = { "<Cmd>CBccbox<CR>", "Box Title" },
t = { "<Cmd>CBllline<CR>", "Titled Line" },
l = { "<Cmd>CBline<CR>", "Simple Line" },
m = { "<Cmd>CBllbox14<CR>", "Marked" },
d = { "<Cmd>CBd<CR>", "Remove a box" },
},
},
},
})

View File

@@ -1,63 +0,0 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
-- bootstrap lazy.nvim
-- stylua: ignore
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{
"LazyVim/LazyVim",
import = "lazyvim.plugins",
opts = {
colorscheme = "tokyonight",
},
},
{
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
opts = {
style = "night",
transparent = true,
sidebars = { "qf", "vista_kind", "terminal", "packer" },
styles = {
sidebars = "transparent",
floats = "transparent",
},
dim_inactive = true,
lualine_bold = true,
},
},
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
-- version = false, -- always use the latest git commit
version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "tokyonight" } },
checker = { enabled = true }, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View File

@@ -1,13 +0,0 @@
-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here
local opt = vim.opt
opt.number = true
opt.relativenumber = true
opt.modeline = true
vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
-- The line beneath this is called `modeline`. See `:help modeline`
-- vim: ts=2 sts=2 sw=2 et

156
config/nvim/lua/keymaps.lua Normal file
View 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.

View 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

View File

@@ -0,0 +1,55 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ neovim configuration options │
-- ╰─────────────────────────────────────────────────────────╯
-- See `:help vim.opt`
-- `:help vim.g`
-- For more options, you can see `:help option-list`
local g = vim.g -- A table to store global variables
local o = vim.opt -- A table to store global options
-- vim.global
g.mapleader = ' ' -- Space as the leader key
g.maplocalleader = ' ' -- Space as the local leader key
g.colors_theme = 'tokyonight' -- Set the colorscheme
g.colors_variant_light = 'tokyonight-day' -- Set the light variant
g.colors_variant_dark = 'tokyonight-storm' -- Set the dark variant
g.editorconfig = true -- Make sure editorconfig support is enabled
g.loaded_perl_provider = 0 -- Disable perl provider
g.loaded_ruby_provider = 0 -- Disable ruby provider
g.loaded_java_provider = 0 -- Disable java provider
-- vim.options
-- Most of the good defaults are provided by `mini.basics`
-- See: lua/plugins/mini.lua
o.ignorecase = true -- Ignore case in search patterns
o.inccommand = 'split' -- Preview substitutions live, as you type!
o.number = true -- Show line numbers
o.numberwidth = 3 -- Set the width of the number column
o.relativenumber = true -- Show relative line numbers
o.scrolloff = 15 -- Show context around cursor
o.signcolumn = 'yes:3' -- Keep signcolumn on by default
o.spell = true -- Enable spell checking
o.spelllang = 'en_us' -- Set the spell checking language
o.splitbelow = true -- split to the bottom
o.splitright = true -- vsplit to the right
o.termguicolors = true -- Enable GUI colors
o.timeoutlen = 250 -- Decrease mapped sequence wait time
o.updatetime = 250 -- 250 ms = 2,5 seconds
o.sessionoptions =
'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions'
-- Enable the colorcolumn
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })
-- Sync clipboard between OS and Neovim.
-- Schedule the setting after `UiEnter` because it can increase startup-time.
-- See `:help 'clipboard'`
vim.schedule(function()
local c = vim.env.SSH_TTY and '' or 'unnamedplus'
vim.opt.clipboard = c
end)
-- vim: ts=2 sts=2 sw=2 et

View 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' },
},
}

View 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
},
}

View File

@@ -1,126 +0,0 @@
return {
-- A better annotation generator. Supports multiple languages and annotation conventions.
-- https://github.com/danymat/neogen
{
"danymat/neogen",
dependencies = "nvim-treesitter/nvim-treesitter",
version = "*",
cmd = "Neogen",
opts = {
snippet_engine = "luasnip",
languages = {
lua = { template = { annotation_convention = "ldoc" } },
typescript = { template = { annotation_convention = "tsdoc" } },
typescriptreact = { template = { annotation_convention = "tsdoc" } },
},
},
keys = {
{
"<leader>ba",
desc = "Annotations / Comments",
},
{
"<leader>baa",
function()
require("neogen").generate({ type = "current" })
end,
desc = "Current",
},
{
"<leader>bac",
function()
require("neogen").generate({ type = "class" })
end,
desc = "Class",
},
{
"<leader>baf",
function()
require("neogen").generate({ type = "func" })
end,
desc = "Function",
},
{
"<leader>bat",
function()
require("neogen").generate({ type = "type" })
end,
desc = "Type",
},
{
"<leader>baF",
function()
require("neogen").generate({ type = "file" })
end,
desc = "File",
},
},
},
{
"laytan/tailwind-sorter.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-lua/plenary.nvim" },
build = "cd formatter && npm i && npm run build",
config = true,
opts = {
on_save_enabled = true,
},
},
-- Describe the regexp under the cursor
-- https://github.com/bennypowers/nvim-regexplainer
{
"bennypowers/nvim-regexplainer",
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 = {} },
-- Mason
-- https://github.com/williamboman/mason.nvim
{
"williamboman/mason.nvim",
opts = function(_, opts)
vim.list_extend(opts.ensure_installed, {
"actionlint",
"ansible-language-server",
"ansible-lint",
"bash-language-server",
"blade-formatter",
"cfn-lint",
"codeql",
"codespell",
"commitlint",
"diagnostic-languageserver",
"docker-compose-language-service",
"dockerfile-language-server",
"editorconfig-checker",
"fixjson",
"flake8",
"html-lsp",
"jq",
"jsonlint",
"luacheck",
"nginx-language-server",
"php-cs-fixer",
"phpcs",
"phpmd",
"semgrep",
"shellcheck",
"shfmt",
"sonarlint-language-server",
"stylelint",
"stylua",
"yamllint",
})
end,
},
-- Vim plugin for automatic time tracking and metrics generated from your programming activity.
-- https://github.com/wakatime/vim-wakatime
{ "wakatime/vim-wakatime", lazy = false, enabled = true },
}

View File

@@ -1,266 +0,0 @@
-- since this is just an example spec, don't actually load anything here and return an empty spec
-- stylua: ignore
if true then return {} end
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
--
-- In your plugin files, you can:
-- * add extra plugins
-- * disable/enabled LazyVim plugins
-- * override the configuration of LazyVim plugins
return {
-- add gruvbox
{ "ellisonleao/gruvbox.nvim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "gruvbox",
},
},
-- change trouble config
{
"folke/trouble.nvim",
-- opts will be merged with the parent spec
opts = { use_diagnostic_signs = true },
},
-- disable trouble
{ "folke/trouble.nvim", enabled = false },
-- add symbols-outline
{
"simrat39/symbols-outline.nvim",
cmd = "SymbolsOutline",
keys = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", desc = "Symbols Outline" } },
config = true,
},
-- override nvim-cmp and add cmp-emoji
{
"hrsh7th/nvim-cmp",
dependencies = { "hrsh7th/cmp-emoji" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local cmp = require("cmp")
opts.sources = cmp.config.sources(vim.list_extend(opts.sources, { { name = "emoji" } }))
end,
},
-- change some telescope options and a keymap to browse plugin files
{
"nvim-telescope/telescope.nvim",
keys = {
-- add a keymap to browse plugin files
-- stylua: ignore
{
"<leader>fp",
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
desc = "Find Plugin File",
},
},
-- change some options
opts = {
defaults = {
layout_strategy = "horizontal",
layout_config = { prompt_position = "top" },
sorting_strategy = "ascending",
winblend = 0,
},
},
},
-- add telescope-fzf-native
{
"telescope.nvim",
dependencies = {
"nvim-telescope/telescope-fzf-native.nvim",
build = "make",
config = function()
require("telescope").load_extension("fzf")
end,
},
},
-- add pyright to lspconfig
{
"neovim/nvim-lspconfig",
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- pyright will be automatically installed with mason and loaded with lspconfig
pyright = {},
},
},
},
-- add tsserver and setup with typescript.nvim instead of lspconfig
{
"neovim/nvim-lspconfig",
dependencies = {
"jose-elias-alvarez/typescript.nvim",
init = function()
require("lazyvim.util.lsp").on_attach(function(_, buffer)
-- stylua: ignore
vim.keymap.set("n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
end)
end,
},
---@class PluginLspOpts
opts = {
---@type lspconfig.options
servers = {
-- tsserver will be automatically installed with mason and loaded with lspconfig
tsserver = {},
},
-- you can do any additional lsp server setup here
-- return true if you don't want this server to be setup with lspconfig
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
setup = {
-- example to setup with typescript.nvim
tsserver = function(_, opts)
require("typescript").setup({ server = opts })
return true
end,
-- Specify * to use this function as a fallback for any server
-- ["*"] = function(server, opts) end,
},
},
},
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
{ import = "lazyvim.plugins.extras.lang.typescript" },
-- add more treesitter parsers
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
},
},
},
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
-- would overwrite `ensure_installed` with the new value.
-- If you'd rather extend the default config, use the code below instead:
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
-- add tsx and treesitter
vim.list_extend(opts.ensure_installed, {
"tsx",
"typescript",
})
end,
},
-- the opts function can also be used to change the default opts:
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, "😄")
end,
},
-- or you can return new options to override all the defaults
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
opts = function()
return {
--[[add your custom lualine config here]]
}
end,
},
-- use mini.starter instead of alpha
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
{ import = "lazyvim.plugins.extras.lang.json" },
-- add any tools you want to have installed below
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {
"stylua",
"shellcheck",
"shfmt",
"flake8",
},
},
},
-- Use <tab> for completion and snippets (supertab)
-- first: disable default <tab> and <s-tab> behavior in LuaSnip
{
"L3MON4D3/LuaSnip",
keys = function()
return {}
end,
},
-- then: setup supertab in cmp
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-emoji",
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
local cmp = require("cmp")
opts.mapping = vim.tbl_extend("force", opts.mapping, {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-- this way you will only jump inside the snippet region
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
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" }),
})
end,
},
}

View 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',
},
},
},
}

View File

@@ -1,48 +0,0 @@
return {
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
vim.list_extend(opts.ensure_installed, {
"php",
})
end,
},
{
"williamboman/mason.nvim",
opts = function(_, opts)
vim.list_extend(opts.ensure_installed, {
"phpactor",
"intelephense",
})
end,
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
phpactor = {},
},
},
},
{
"mfussenegger/nvim-dap",
optional = true,
dependencies = {
"williamboman/mason.nvim",
opts = function(_, opts)
if type(opts.ensure_installed) == "table" then
table.insert(opts.ensure_installed, "php-debug-adapter")
end
end,
},
opts = function()
local dap = require("dap")
local path = require("mason-registry").get_package("php-debug-adapter"):get_install_path()
dap.adapters.php = {
type = "executable",
command = "node",
args = { path .. "/extension/out/phpDebug.js" },
}
end,
},
}

View File

@@ -0,0 +1,338 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ LSP Setup and configuration │
-- ╰─────────────────────────────────────────────────────────╯
-- LSP Servers are installed and configured by lsp-setup.nvim
-- Mason formatters Conform uses to format files
-- These are automatically configured by zapling/mason-conform.nvim
local lsp_servers = {
bashls = {},
-- csharp_ls = {},
diagnosticls = {},
gopls = {
settings = {
gopls = {
hints = {
rangeVariableTypes = true,
parameterNames = true,
constantValues = true,
assignVariableTypes = true,
compositeLiteralFields = true,
compositeLiteralTypes = true,
functionTypeParameters = true,
},
},
},
},
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 {
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
-- https://github.com/folke/lazydev.nvim
{
'folke/lazydev.nvim',
ft = 'lua',
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
},
},
},
-- Meta type definitions for the Lua platform Luvit.
-- https://github.com/Bilal2453/luvit-meta
{ 'Bilal2453/luvit-meta', lazy = true },
-- improve neovim lsp experience
-- https://github.com/nvimdev/lspsaga.nvim
-- https://nvimdev.github.io/lspsaga/
{
'nvimdev/lspsaga.nvim',
event = 'LspAttach',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons',
},
opts = {
code_action = {
show_server_name = true,
keys = {
quit = { 'q', '<ESC>' },
},
},
diagnostic = {
keys = {
quit = { 'q', '<ESC>' },
},
},
},
},
-- A simple wrapper for nvim-lspconfig and mason-lspconfig
-- to easily setup LSP servers.
-- https://github.com/junnplus/lsp-setup.nvim
{
'junnplus/lsp-setup.nvim',
dependencies = {
-- Quickstart configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
{ 'neovim/nvim-lspconfig' },
-- Portable package manager for Neovim that runs everywhere Neovim runs.
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
-- https://github.com/williamboman/mason.nvim
{
'williamboman/mason.nvim',
version = '*',
cmd = 'Mason',
run = ':MasonUpdate',
opts = {},
},
-- Extensible UI for Neovim notifications and LSP progress messages.
-- https://github.com/j-hui/fidget.nvim
{
'j-hui/fidget.nvim',
version = '*',
opts = {},
},
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
-- https://github.com/williamboman/mason-lspconfig.nvim
{ 'williamboman/mason-lspconfig.nvim' },
-- Install and upgrade third party tools automatically
-- https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim
{
'WhoIsSethDaniel/mason-tool-installer.nvim',
version = '*',
opts = {
auto_install = true,
auto_update = true,
ensure_installed = {
'actionlint',
'editorconfig-checker',
'goimports',
'gotests',
'phpcbf',
'pint',
'prettierd',
'shellcheck',
'shfmt',
'staticcheck',
'stylua',
'vint',
'yamlfmt',
},
},
},
-- JSON schemas for Neovim
-- https://github.com/b0o/SchemaStore.nvim
{ 'b0o/schemastore.nvim' },
-- Performant, batteries-included completion plugin for Neovim
-- https://github.com/saghen/blink.cmp
-- See lua/plugins/blink.lua for configs
{ 'saghen/blink.cmp' },
},
opts = {
default_mappings = false,
mappings = {
gd = 'lua require"telescope.builtin".lsp_definitions()',
gi = 'lua require"telescope.builtin".lsp_implementations()',
gr = 'lua require"telescope.builtin".lsp_references()',
},
inlay_hints = {
enabled = true,
},
servers = lsp_servers,
},
config = function(_, opts)
require('lazydev').setup()
require('lsp-setup').setup(opts)
local lspconfig = require 'lspconfig'
for server, config in pairs(opts.servers) do
-- passing config.capabilities to blink.cmp merges with the capabilities in your
-- `opts[server].capabilities, if you've defined it
config.capabilities =
require('blink.cmp').get_lsp_capabilities(config.capabilities)
lspconfig[server].setup(config)
end
lspconfig.lua_ls.on_init = function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
vim.loop.fs_stat(path .. '/.luarc.json')
or vim.loop.fs_stat(path .. '/.luarc.jsonc')
then
return
end
end
client.config.settings.Lua =
vim.tbl_deep_extend('force', client.config.settings.Lua, {
runtime = {
-- Tell the language server which version of Lua you're using
-- (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
},
-- Make the server aware of Neovim runtime files
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
},
},
})
end
lspconfig.jsonls.settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
yaml = {
schemaStore = {
-- You must disable built-in SchemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.
enable = false,
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
url = '',
},
schemas = require('schemastore').yaml.schemas(),
validate = { enable = true },
},
}
end,
},
-- Lightweight yet powerful formatter plugin for Neovim
-- https://github.com/stevearc/conform.nvim
{
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
keys = {
{
'<leader>cf',
function()
require('conform').format { async = true, lsp_format = 'fallback' }
end,
mode = '',
desc = 'Format buffer',
},
},
opts = {
notify_on_error = false,
---@type nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts
format_on_save = function(bufnr)
-- Disable "format_on_save lsp_fallback" for languages that don't
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
local lsp_format_opt
if disable_filetypes[vim.bo[bufnr].filetype] then
lsp_format_opt = 'never'
else
lsp_format_opt = 'fallback'
end
return {
timeout_ms = 500,
lsp_format = lsp_format_opt,
}
end,
formatters_by_ft = {
lua = { 'stylua' },
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
},
},
},
-- Automatically install formatters registered with conform.nvim via mason.nvim
-- https://github.com/zapling/mason-conform.nvim
{ 'zapling/mason-conform.nvim', opts = {} },
}

View File

@@ -0,0 +1,254 @@
return {
-- Library of 40+ independent Lua modules improving overall Neovim
-- (version 0.8 and higher) experience with minimal effort
--
-- https://github.com/echasnovski/mini.nvim
-- https://github.com/echasnovski/mini.nvim/tree/main?tab=readme-ov-file#modules
--
-- YouTube: Text editing with 'mini.nvim' - Neovimconf 2024 - Evgeni Chasnovski
-- https://www.youtube.com/watch?v=cNK5kYJ7mrs
{
'echasnovski/mini.nvim',
version = '*',
priority = 1001,
config = function()
-- Presets for common options and mappings
-- h: MiniBasics.config
require('mini.basics').setup {
options = {
basics = true,
extra_ui = true,
},
mappings = {
basic = true,
option_toggle_prefix = [[<leader>tm]],
},
}
-- Animate common Neovim actions
-- Replaced anuvyklack/windows.nvim
require('mini.animate').setup()
-- Buffer removing (unshow, delete, wipeout), which saves window layout
-- Replaced famiu/bufdelete.nvim
require('mini.bufremove').setup()
-- Show next key clues
-- Replaced folke/which-key.nvim
local miniclue = require 'mini.clue'
miniclue.setup {
window = {
config = {
width = 'auto',
},
},
triggers = {
-- Leader triggers
{ mode = 'n', keys = '<Leader>' },
{ mode = 'x', keys = '<Leader>' },
-- Built-in completion
{ mode = 'i', keys = '<C-x>' },
-- `g` key
{ mode = 'n', keys = 'g' },
{ mode = 'x', keys = 'g' },
-- Marks
{ mode = 'n', keys = "'" },
{ mode = 'n', keys = '`' },
{ mode = 'x', keys = "'" },
{ mode = 'x', keys = '`' },
-- Registers
{ mode = 'n', keys = '"' },
{ mode = 'x', keys = '"' },
{ mode = 'i', keys = '<C-r>' },
{ mode = 'c', keys = '<C-r>' },
-- Window commands
{ mode = 'n', keys = '<C-w>' },
-- `z` key
{ mode = 'n', keys = 'z' },
{ mode = 'x', keys = 'z' },
},
-- These mark the sections in the popup
clues = {
miniclue.gen_clues.builtin_completion(),
miniclue.gen_clues.g(),
miniclue.gen_clues.marks(),
miniclue.gen_clues.registers(),
miniclue.gen_clues.windows(),
miniclue.gen_clues.z(),
{ mode = 'n', keys = '<Leader>b', desc = '+Buffers' },
{ mode = 'n', keys = '<Leader>c', desc = '+Code' },
{ mode = 'n', keys = '<Leader>cb', desc = '+CommentBox' },
{ mode = 'n', keys = '<Leader>cc', desc = '+Calls' },
{ mode = 'n', keys = '<Leader>q', desc = '+Quit' },
{ mode = 'n', keys = '<Leader>s', desc = '+Telescope' },
{ mode = 'n', keys = '<Leader>t', desc = '+Toggle' },
{ mode = 'n', keys = '<Leader>tm', desc = '+Mini' },
{ mode = 'n', keys = '<Leader>x', desc = '+Trouble' },
{ mode = 'n', keys = '<leader>z', desc = '+TreeSitter' },
{ mode = 'n', keys = '<leader>zg', desc = '+Goto' },
{ mode = 'n', keys = '<Leader>?', desc = '+Help' },
{ mode = 'n', keys = 'd', desc = '+Diagnostics' },
{ mode = 'n', keys = 'y', desc = '+Yank' },
},
}
-- Comment lines
-- Replaced numToStr/Comment.nvim
require('mini.comment').setup()
-- Highlight cursor word and its matches
require('mini.cursorword').setup()
-- Work with diff hunks
-- Replaced lewis6991/gitsigns.nvim
require('mini.diff').setup()
-- Git integration
require('mini.git').setup()
-- Highlight patterns in text
-- Replaced folke/todo-comments.nvim
local hp = require 'mini.hipatterns'
hp.setup {
highlighters = {
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE', 'BUG', 'PERF' words
fixme = {
pattern = '%f[%w]()FIXME:?%s*()%f[%W]',
group = 'MiniHipatternsFixme',
},
hack = {
pattern = '%f[%w]()HACK:?%s*()%f[%W]',
group = 'MiniHipatternsHack',
},
todo = {
pattern = '%f[%w]()TODO:?%s*()%f[%W]',
group = 'MiniHipatternsNote',
},
note = {
pattern = '%f[%w]()NOTE()%f[%W]',
group = 'MiniHipatternsNote',
},
bug = {
pattern = '%f[%w]()BUG:?%s*()%f[%W]',
group = 'MiniHipatternsHack',
},
perf = {
pattern = '%f[%w]()PERF:?%s*()%f[%W]',
group = 'MiniHipatternsNote',
},
},
-- Highlight hex color strings (`#rrggbb`) using that color
hex_color = hp.gen_highlighter.hex_color(),
}
-- Icons
require('mini.icons').setup {
file = {
['.keep'] = { glyph = '󰊢', hl = 'MiniIconsGrey' },
['devcontainer.json'] = { glyph = '', hl = 'MiniIconsAzure' },
},
filetype = {
dotenv = { glyph = '', hl = 'MiniIconsYellow' },
},
}
-- Visualize and work with indent scope
-- Replaced lukas-reineke/indent-blankline.nvim
require('mini.indentscope').setup()
-- Jump to next/previous single character
require('mini.jump').setup {
mappings = {
forward = 'f',
backward = 'F',
forward_till = 't',
backward_till = 'T',
repeat_jump = ';',
},
}
-- Move lines and blocks of text
require('mini.move').setup()
-- Text edit operators
-- g= - Evaluate text and replace with output
-- gx - Exchange text regions
-- gm - Multiply (duplicate) text
-- gr - Replace text with register
-- gs - Sort text
require('mini.operators').setup()
-- Session management (read, write, delete)
require('mini.sessions').setup {
autowrite = true,
directory = vim.g.sessions_dir or vim.fn.stdpath 'data' .. '/sessions',
file = '',
}
-- Split and join arguments, lists, and other sequences
-- Replaced Wansmer/treesj
require('mini.splitjoin').setup()
-- Fast and flexible start screen
-- Replaced glepnir/dashboard-nvim
local starter = require 'mini.starter'
starter.setup {
items = {
starter.sections.telescope(),
starter.sections.builtin_actions(),
starter.sections.sessions(5, true),
},
content_hooks = {
starter.gen_hook.adding_bullet(),
starter.gen_hook.indexing('all', { 'Builtin actions' }),
starter.gen_hook.aligning('center', 'center'),
},
}
-- Minimal and fast statusline module with opinionated default look
-- Replaced nvim-lualine/lualine.nvim
local sl = require 'mini.statusline'
sl.setup {
use_icons = true,
set_vim_settings = true,
content = {
active = function()
local mode, mode_hl = sl.section_mode { trunc_width = 120 }
local git = sl.section_git { trunc_width = 75 }
local diagnostics = sl.section_diagnostics { trunc_width = 75 }
local filename = sl.section_filename { trunc_width = 999 }
-- local fileinfo = statusline.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,
},
}

View File

@@ -0,0 +1,114 @@
-- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim
return {
'nvim-neo-tree/neo-tree.nvim',
version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
'MunifTanjim/nui.nvim',
{
-- This plugins prompts the user to pick a window and returns
-- the window id of the picked window
-- https://github.com/s1n7ax/nvim-window-picker
's1n7ax/nvim-window-picker',
version = '2.*',
opts = {
filter_rules = {
include_current_win = false,
autoselect_one = true,
-- filter using buffer options
bo = {
-- if the file type is one of following, the window will be ignored
filetype = { 'neo-tree', 'neo-tree-popup', 'notify' },
-- if the buffer type is one of following, the window will be ignored
buftype = { 'terminal', 'quickfix' },
},
},
},
},
},
cmd = 'Neotree',
opts = {
close_if_last_window = true,
popup_border_style = 'rounded',
enable_git_status = true,
enable_diagnostics = true,
git_status = {
symbols = {
-- Change type
added = '',
modified = '',
deleted = '',
renamed = '󰁕',
-- Status type
untracked = '',
ignored = '',
unstaged = '󰄱',
staged = '',
conflict = '',
},
},
filesystem = {
window = {
mappings = {
['<Esc>'] = 'close_window',
['q'] = 'close_window',
},
},
filtered_items = {
hide_dotfiles = true,
hide_gitignored = true,
hide_hidden = true, -- only works on Windows for hidden files/directories
never_show = {
'.DS_Store',
},
hide_by_name = {
'node_modules',
},
always_show = {
'.actrc',
'.browserslistrc',
'.commitlintrc.json',
'.editorconfig',
'.env',
'.env.example',
'.envrc',
'.eslintrc.json',
'.github',
'.gitignore',
'.gitkeep',
'.ignore',
'.markdownlint.json',
'.markdownlint.yaml',
'.markdownlintignore',
'.nvmrc',
'.prettierignore',
'.prettierrc.js',
'.prettierrc.json',
'.prettierrc.yaml',
'.python-version',
'.releaserc.json',
'.shellcheckrc',
'.simple-git-hooks.json',
'.stylelintrc.json',
'.stylua.toml',
'.yamlignore',
'.yamllint.yaml',
},
always_show_by_pattern = {
'.*.json',
'.*.toml',
'.*.yaml',
'.*.yml',
'.*rc',
'.*rc.*',
'.env*',
'.prettierrc*',
'.markdownlint*',
'.stylua.*',
},
},
},
},
}

View File

@@ -1,20 +0,0 @@
return {
"neovim/nvim-lspconfig",
opts = {
servers = {
eslint = {},
tflint = {},
},
setup = {
eslint = function()
require("lazyvim.util.lsp").on_attach(function(client)
if client.name == "eslint" then
client.server_capabilities.documentFormattingProvider = true
elseif client.name == "tsserver" then
client.server_capabilities.documentFormattingProvider = false
end
end)
end,
},
},
}

View 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,
},
}

View File

@@ -1,53 +0,0 @@
return {
-- Use <tab> for completion and snippets (supertab)
-- first: disable default <tab> and <s-tab> behavior in LuaSnip
{
"L3MON4D3/LuaSnip",
keys = function()
return {}
end,
},
-- then: setup supertab in cmp
{
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-emoji",
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
local cmp = require("cmp")
opts.mapping = vim.tbl_extend("force", opts.mapping, {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-- this way you will only jump inside the snippet region
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
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" }),
})
end,
},
}

View File

@@ -0,0 +1,96 @@
return {
-- Fuzzy Finder (files, lsp, etc)
-- https://github.com/nvim-telescope/telescope.nvim
'nvim-telescope/telescope.nvim',
version = '*',
lazy = false,
dependencies = {
{ 'nvim-lua/plenary.nvim' },
{ 'nvim-telescope/telescope-symbols.nvim' },
-- Telescope plugin for file browsing
{ 'nvim-telescope/telescope-file-browser.nvim' },
-- A Telescope picker to quickly access configurations
-- of plugins managed by lazy.nvim.
-- https://github.com/polirritmico/telescope-lazy-plugins.nvim
{ 'polirritmico/telescope-lazy-plugins.nvim' },
-- Neovim plugin. Telescope.nvim extension that adds LuaSnip integration.
-- https://github.com/benfowler/telescope-luasnip.nvim
{ 'benfowler/telescope-luasnip.nvim' },
-- Fuzzy Finder Algorithm which requires local dependencies to be built.
-- Only load if `make` is available
{
'nvim-telescope/telescope-fzf-native.nvim',
build = 'make',
cond = vim.fn.executable 'make' == 1,
},
-- Import modules with ease
-- https://github.com/piersolenski/telescope-import.nvim
{ 'piersolenski/telescope-import.nvim' },
},
config = function()
local t = require 'telescope'
local a = require 'telescope.actions'
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
t.setup {
defaults = {
layout_strategy = 'horizontal',
pickers = {
find_files = {
theme = 'dropdown',
},
},
mappings = {
i = {
['<C-u>'] = false,
['<C-j>'] = a.move_selection_next,
['<C-k>'] = a.move_selection_previous,
['<C-d>'] = a.move_selection_previous,
},
},
},
extensions = {
lazy_plugins = {
-- Must be a valid path to the file containing the lazy spec and setup() call.
lazy_config = vim.fn.stdpath 'config' .. '/init.lua',
},
import = {
-- Imports can be added at a specified line whilst keeping the cursor in place
insert_at_top = true,
-- Optionally support additional languages or modify existing languages...
custom_languages = {
{
-- The filetypes that ripgrep supports (find these via `rg --type-list`)
extensions = { 'js', 'ts' },
-- The Vim filetypes
filetypes = { 'vue' },
-- Optionally set a line other than 1
insert_at_line = 2, ---@type function|number
-- The regex pattern for the import statement
regex = [[^(?:import(?:[\"'\s]*([\w*{}\n, ]+)from\s*)?[\"'\s](.*?)[\"'\s].*)]],
},
},
},
},
}
-- Load extensions
pcall(t.load_extension, 'git_worktree')
pcall(t.load_extension, 'lazy_plugins')
pcall(t.load_extension, 'luasnip')
pcall(t.load_extension, 'import')
-- Enable telescope fzf native, if installed
pcall(t.load_extension, 'fzf')
-- [[ Telescope Keymaps ]]
-- See `:help telescope.builtin`
-- See `:help telescope.keymap`
end,
}

View File

@@ -1,23 +1,68 @@
-- Highlight, edit, and navigate code
-- https://github.com/nvim-treesitter/nvim-treesitter
return {
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
vim.list_extend(opts.ensure_installed, {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
})
end,
'nvim-treesitter/nvim-treesitter',
version = false, -- last release is way too old and doesn't work on Windows
build = function()
pcall(require('nvim-treesitter.install').update { with_sync = true })
end,
dependencies = {
'nvim-treesitter/nvim-treesitter-textobjects',
'nvim-treesitter/nvim-treesitter-refactor',
'nvim-treesitter/nvim-treesitter-context',
'JoosepAlviste/nvim-ts-context-commentstring',
},
---@type TSConfig
opts = {
auto_install = true, -- Auto install the parser generators
sync_install = false, -- Sync install the parser generators, install async
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = {
'bash',
'json',
'jsonc',
'lua',
'luadoc',
'markdown',
'markdown_inline',
'query',
'regex',
'vim',
'vimdoc',
'yaml',
},
highlight = { enable = true },
indent = { enable = true },
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
},
},
},
config = function(_, opts)
require('nvim-treesitter.configs').setup(opts)
vim.api.nvim_create_autocmd({ 'FileType' }, {
callback = function()
-- Set foldmethod to treesitter if available
if require('nvim-treesitter.parsers').has_parser() then
vim.opt.foldmethod = 'expr'
vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
else
-- Otherwise, set foldmethod to syntax
vim.opt.foldmethod = 'syntax'
end
vim.opt.foldlevel = 9 -- Open all folds by default
vim.opt.foldnestmax = 99 -- Maximum fold nesting
end,
})
end,
}

View File

@@ -1,135 +1,45 @@
-- luacheck: globals vim
return {
-- Neotree configuration
-- Theme of choice, tokyonight
-- https://github.com/folke/tokyonight.nvim
{
"nvim-neo-tree/neo-tree.nvim",
'folke/tokyonight.nvim',
priority = 1000, -- Make sure to load this before all the other start plugins.
init = function() vim.cmd.colorscheme(vim.g.colors_theme) end,
opts = {
filesystem = {
filtered_items = {
always_show = {
".github",
".gitignore",
".editorconfig",
".python-version",
".nvmrc",
".env",
".env.example",
},
},
},
transparent = true,
},
},
-- Cloak allows you to overlay *'s over defined patterns in defined files.
-- https://github.com/laytan/cloak.nvim
{ "laytan/cloak.nvim" },
-- Not UFO in the sky, but an ultra fold in Neovim.
-- https://github.com/kevinhwang91/nvim-ufo/
-- Automatic dark mode
-- https://github.com/f-person/auto-dark-mode.nvim
{
"kevinhwang91/nvim-ufo",
lazy = false,
enabled = true,
dependencies = {
"kevinhwang91/promise-async",
{ "nvim-treesitter/nvim-treesitter", run = ":TSUpdate" },
{
"luukvbaal/statuscol.nvim",
config = function()
local builtin = require("statuscol.builtin")
require("statuscol").setup({
relculright = true,
segments = {
{ text = { builtin.foldfunc }, click = "v:lua.ScFa" },
{ text = { "%s" }, click = "v:lua.ScSa" },
{ text = { builtin.lnumfunc, " " }, click = "v:lua.ScLa" },
},
})
end,
},
},
init = function()
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
vim.o.foldcolumn = "1" -- '0' is not bad
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevelstart = 99
vim.o.foldenable = true
end,
'f-person/auto-dark-mode.nvim',
opts = {
open_fold_hl_timeout = 150,
close_fold_kinds_for_ft = { "imports", "comment" },
preview = {
win_config = {
border = { "", "", "", "", "", "", "", "" },
winhighlight = "Normal:Folded",
winblend = 0,
},
mappings = {
scrollU = "<C-u>",
scrollD = "<C-d>",
jumpTop = "[",
jumpBot = "]",
},
},
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
return { "treesitter", "indent" }
update_interval = 1000,
set_dark_mode = function()
vim.api.nvim_set_option_value('background', 'dark', {})
vim.cmd.colorscheme(vim.g.colors_variant_dark)
end,
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
set_light_mode = function()
vim.api.nvim_set_option_value('background', 'light', {})
vim.cmd.colorscheme(vim.g.colors_variant_light)
end,
},
},
-- Indent guides for Neovim
-- https://github.com/lukas-reineke/indent-blankline.nvim
{ "lukas-reineke/indent-blankline.nvim" },
-- Git integration for buffers
-- https://github.com/lewis6991/gitsigns.nvim
{ "lewis6991/gitsigns.nvim" },
-- Close buffer without messing up with the window.
-- https://github.com/famiu/bufdelete.nvim
{ "famiu/bufdelete.nvim" },
-- A neovim plugin that shows colorcolumn dynamically
-- https://github.com/Bekaboo/deadcolumn.nvim
{ 'Bekaboo/deadcolumn.nvim' },
-- Remove all background colors to make nvim transparent
-- https://github.com/xiyaowong/nvim-transparent
{ 'xiyaowong/nvim-transparent', opts = {} },
-- Display a character as the colorcolumn
-- https://github.com/lukas-reineke/virt-column.nvim
{ 'lukas-reineke/virt-column.nvim', opts = {} },
-- Neovim plugin for locking a buffer to a window
-- https://github.com/stevearc/stickybuf.nvim
{ "stevearc/stickybuf.nvim", opts = {} },
-- A pretty window for previewing, navigating and editing your LSP locations
-- https://github.com/DNLHC/glance.nvim
{ "dnlhc/glance.nvim" },
-- Automatically expand width of the current window.
-- Maximizes and restore it. And all this with nice animations!
-- https://github.com/anuvyklack/windows.nvim
{
"anuvyklack/windows.nvim",
dependencies = {
"anuvyklack/middleclass",
"anuvyklack/animation.nvim",
},
config = function()
vim.o.winwidth = 15
vim.o.winminwidth = 10
vim.o.equalalways = false
require("windows").setup()
end,
},
{ 'stevearc/stickybuf.nvim', opts = {} },
}

View File

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

82
config/nvim/lua/utils.lua Normal file
View 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

View File

@@ -1,3 +0,0 @@
Plugins
lua
plugins

View File

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

View File

@@ -1,7 +1,5 @@
blade-formatter
corepack
editorconfig-checker
github-release-notes
neovim
stylelint-lsp
# $NVM_DIR/default-packages
yarn
neovim
corepack

View File

@@ -16,7 +16,7 @@
{
"type": "session",
"style": "plain",
"template": " {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}"
"template": " {{ if .SSHSession }}\ueba9 {{ .UserName }}@{{ end }}{{ .HostName }}"
},
{
"foreground": "cyan",
@@ -27,14 +27,14 @@
"template": " {{ .Path }} ",
"type": "path",
"mapped_locations": {
"~/Code/*": "\uF09B"
"~/Code/*": "\uf09b"
}
},
{
"type": "git",
"style": "plain",
"foreground": "lightGreen",
"template": "{{ .UpstreamIcon }}{{ if or (.Staging.Changed) (.Working.Changed) }}({{if .Behind }}\u2193 {{ .Behind }} {{ end }}{{if .Staging.Changed }}\uF046 {{ .Staging.String }} {{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }}| {{ end }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}){{ end }}",
"template": "{{ .UpstreamIcon }}{{ if or (.Staging.Changed) (.Working.Changed) }}({{if .Behind }}\u2193 {{ .Behind }} {{ end }}{{if .Staging.Changed }}\uf046 {{ .Staging.String }} {{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }}| {{ end }}{{ if .Working.Changed }}\uf044 {{ .Working.String }}{{ end }}){{ end }}",
"properties": {
"fetch_status": true,
"fetch_upstream_icon": true,
@@ -100,7 +100,7 @@
{
"type": "php",
"style": "plain",
"template": " {{ .Full }} "
"template": " \ue73d {{ .Full }} "
}
],
"type": "prompt"

View File

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

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

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

View File

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

View File

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

8
config/yamlfmt/.yamlfmt Normal file
View File

@@ -0,0 +1,8 @@
formatter:
type: basic
indent: 2
retain_line_breaks: false
disallow_anchors: false
max_line_length: 0
scan_folded_as_literal: false
indentless_arrays: false

53
config/zsh/antidote.zsh Executable file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/env bash
# Setup antidote for Oh My Zsh
# vim: ft=zsh et sw=2 ts=2
[[ -z "$DOTFILES" ]] && DOTFILES="$HOME/.dotfiles"
[[ -z "$ANTIDOTE_DIR" ]] && ANTIDOTE_DIR="$DOTFILES/tools/antidote"
[[ -z "$ANTIDOTE_HOME" ]] && ANTIDOTE_HOME="$XDG_CACHE_HOME/antidote"
[[ -z "$ANTIDOTE_PLUGINS" ]] && ANTIDOTE_PLUGINS="$XDG_CONFIG_HOME/zsh/antidote_plugins"
[[ ! -d "$ANTIDOTE_DIR" ]] && {
git submodule add \
--name antidote \
--depth=1 \
-f https://github.com/mattmc3/antidote.git "${ANTIDOTE_DIR}"
git config -f .gitmodules submodule.antidote.shallow true
}
# Plugin configurations
zstyle ':antidote:bundle' use-friendly-names 'yes'
zstyle ':omz:update' mode reminder
zstyle ':omz:plugins:nvm' autoload yes
# Pure prompt settings
export PURE_PROMPT_SYMBOL='➜'
export PURE_GIT_UNTRACKED_DIRTY=0
export PURE_CMD_MAX_EXEC_TIME=86400 # 24 hours
zstyle ':prompt:pure:git:stash' show yes
zstyle ':prompt:pure:execution_time' show no
zstyle ':prompt:pure:user' color magenta
zstyle ':prompt:pure:user:root' color red
zstyle ':prompt:pure:host' color green
zstyle ':prompt:pure:path' color white
zstyle ':prompt:pure:prompt:success' color green
zstyle ':prompt:pure:prompt:error' color red
# Disable ls colors to avoid issues with eza
export DISABLE_LS_COLORS=true
zstyle ':omz:plugins:eza' 'dirs-first' yes
zstyle ':omz:plugins:eza' 'git-status' yes
zstyle ':omz:plugins:eza' 'icons' yes
zstyle ':omz:plugins:eza' 'ls' yes
zstyle ':omz:plugins:eza' 'prompt' yes
[[ -f "${ANTIDOTE_PLUGINS}.txt" ]] || touch "${ANTIDOTE_PLUGINS}.txt"
FPATH="$ANTIDOTE_DIR/functions:$FPATH"
autoload -Uz antidote
if [[ ! "${ANTIDOTE_PLUGINS}.zsh" -nt "${ANTIDOTE_PLUGINS}.txt" ]]; then
antidote bundle <"${ANTIDOTE_PLUGINS}.txt" >|"${ANTIDOTE_PLUGINS}.zsh"
fi
# Source your static plugins file.
# shellcheck source=$HOME/.dotfiles/config/zsh/antidote_plugins.zsh
source "${ANTIDOTE_PLUGINS}.zsh"

View File

@@ -0,0 +1,43 @@
# This file is for Antidote plugins
# https://getantidote.github.io/usage
# vim: ft=ini
# set up Zsh completions with plugins
mattmc3/ez-compinit
zsh-users/zsh-completions kind:fpath path:src
# frameworks like oh-my-zsh are supported
getantidote/use-omz # handle OMZ dependencies
ohmyzsh/ohmyzsh path:lib # load OMZ's library
# Theme
# mafredri/zsh-async # for pure
# sindresorhus/pure # pure itself
romkatv/powerlevel10k
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
ohmyzsh/ohmyzsh path:plugins/brew
ohmyzsh/ohmyzsh path:plugins/extract
ohmyzsh/ohmyzsh path:plugins/eza
ohmyzsh/ohmyzsh path:plugins/fzf
ohmyzsh/ohmyzsh path:plugins/git
ohmyzsh/ohmyzsh path:plugins/golang
ohmyzsh/ohmyzsh path:plugins/gpg-agent
ohmyzsh/ohmyzsh path:plugins/nvm
ohmyzsh/ohmyzsh path:plugins/python
ohmyzsh/ohmyzsh path:plugins/tmux
ohmyzsh/ohmyzsh path:plugins/z
# Automatically activate nvm if .nvmrc file is present
ivuorinen/nvm-auto-use
# Add core plugins that make Zsh a bit more like Fish
zdharma-continuum/fast-syntax-highlighting
# Add some plugins that are not in OMZ
jreese/zsh-titles
yuki-ycino/tms
# This needs to be last bundle
# zsh-users/zsh-syntax-highlighting

View File

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

205
config/zsh/p10k.zsh Normal file
View File

@@ -0,0 +1,205 @@
# shellcheck disable=SC1073,SC1072
#
# Generated by Powerlevel10k configuration wizard on 2024-12-10 at 10:05 EET.
# Based on romkatv/powerlevel10k/config/p10k-pure.zsh, checksum 7533.
# Wizard options: nerdfont-v3 + powerline, small icons, pure, original, 2 lines, sparse,
# transient_prompt, instant_prompt=verbose.
# Type `p10k configure` to generate another config.
#
# Config file for Powerlevel10k with the style of Pure (https://github.com/sindresorhus/pure).
#
# Differences from Pure:
#
# - Git:
# - `@c4d3ec2c` instead of something like `v1.4.0~11` when in detached HEAD state.
# - No automatic `git fetch` (the same as in Pure with `PURE_GIT_PULL=0`).
#
# Apart from the differences listed above, the replication of Pure prompt is exact. This includes
# even the questionable parts. For example, just like in Pure, there is no indication of Git status
# being stale; prompt symbol is the same in command, visual and overwrite vi modes; when prompt
# doesn't fit on one line, it wraps around with no attempt to shorten it.
#
# If you like the general style of Pure but not particularly attached to all its quirks, type
# `p10k configure` and pick "Lean" style. This will give you slick minimalist prompt while taking
# advantage of Powerlevel10k features that aren't present in Pure.
# Temporarily change options.
'builtin' 'local' '-a' 'p10k_config_opts'
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
() {
emulate -L zsh -o extended_glob
# Unset all configuration options.
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
# Zsh >= 5.1 is required.
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
# Prompt colors.
local grey='242'
local red='1'
local yellow='3'
local blue='33'
local magenta='5'
local cyan='6'
local white='7'
local green='2'
# Left prompt segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]=========================
context # user@host
dir # current directory
vcs # git status
# command_execution_time # previous command duration
go
nvm
aws
# =========================[ Line #2 ]=========================
newline # \n
virtualenv # python virtual environment
prompt_char # prompt symbol
)
# Right prompt segments.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]=========================
# command_execution_time # previous command duration
# virtualenv # python virtual environment
# context # user@host
# time # current time
# =========================[ Line #2 ]=========================
newline # \n
)
# Basic style options that define the overall prompt look.
typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION= # no segment icons
# Add an empty line before each prompt except the first. This doesn't emulate the bug
# in Pure that makes prompt drift down whenever you use the Alt-C binding from fzf or similar.
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
# Magenta prompt symbol if the last command succeeded.
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS}_FOREGROUND=$green
# Red prompt symbol if the last command failed.
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS}_FOREGROUND=$red
# Default prompt symbol.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='➜'
# Prompt symbol in command vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='←'
# Prompt symbol in visual vi mode is the same as in command mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='←'
# Prompt symbol in overwrite vi mode is the same as in command mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
# Grey Python Virtual Environment.
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey
# Don't show Python version.
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
# Blue current directory.
typeset -g POWERLEVEL9K_DIR_FOREGROUND=$blue
# Context format when root: user@host. The first part red, the rest green.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE="%F{$red}%n%f%F{$green}@%m%f"
# Context format when not root: host. The host is green.
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE="%F{$green}%m%f"
# Don't show context unless root or in SSH.
# typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION=
# Show previous command duration only if it's >= 86400s = 24h.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=86400
# Don't show fractional seconds. Thus, 7s rather than 7.3s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
# Duration format: 1d 2h 3m 4s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
# Yellow previous command duration.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=$yellow
# Grey Git prompt. This makes stale prompts indistinguishable from up-to-date ones.
typeset -g POWERLEVEL9K_VCS_FOREGROUND=$grey
# Disable async loading indicator to make directories that aren't Git repositories
# indistinguishable from large Git repositories without known state.
typeset -g POWERLEVEL9K_VCS_LOADING_TEXT=
# Don't wait for Git status even for a millisecond, so that prompt always updates
# asynchronously when Git state changes.
typeset -g POWERLEVEL9K_VCS_MAX_SYNC_LATENCY_SECONDS=0
# Cyan ahead/behind arrows.
typeset -g POWERLEVEL9K_VCS_{INCOMING,OUTGOING}_CHANGESFORMAT_FOREGROUND=$cyan
# Don't show remote branch, current tag or stashes.
typeset -g POWERLEVEL9K_VCS_GIT_HOOKS=(vcs-detect-changes git-untracked git-aheadbehind)
# Don't show the branch icon.
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
# When in detached HEAD state, show @commit where branch normally goes.
typeset -g POWERLEVEL9K_VCS_COMMIT_ICON='@'
# Don't show staged, unstaged, untracked indicators.
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED}_ICON=
# Show '*' when there are staged, unstaged or untracked files.
typeset -g POWERLEVEL9K_VCS_DIRTY_ICON=':'
# Show '⇣' if local branch is behind remote.
typeset -g POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=':⇣'
# Show '⇡' if local branch is ahead of remote.
typeset -g POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=':⇡'
# Don't show the number of commits next to the ahead/behind arrows.
typeset -g POWERLEVEL9K_VCS_{COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=1
# Remove space between '⇣' and '⇡' and all trailing spaces.
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${${${P9K_CONTENT/⇣* :⇡/⇣⇡}// }//:/ }'
# Grey current time.
typeset -g POWERLEVEL9K_TIME_FOREGROUND=$grey
# Format for the current time: 09:51:02. See `man 3 strftime`.
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
# If set to true, time will update when you hit enter. This way prompts for the past
# commands will contain the start times of their commands rather than the end times of
# their preceding commands.
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
# when accepting a command line. Supported values:
#
# - off: Don't change prompt when accepting a command line.
# - always: Trim down prompt when accepting a command line.
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
# typed after changing current working directory.
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always
# Instant prompt mode.
#
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=off
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
# really need it.
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
# If p10k is already loaded, reload configuration.
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
(( ! $+functions[p10k] )) || p10k reload
}
# Tell `p10k configure` which file it should overwrite.
typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
'builtin' 'unset' 'p10k_config_opts'

57
config/zsh/prompt.zsh Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
# Setup prompt
# vim: ft=zsh:
setopt PROMPT_SUBST
# Setup vcs_info
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' max-exports 2
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' check-for-staged-changes true
zstyle ':vcs_info:*' use-simple true
zstyle ':vcs_info:*' unstagedstr '%F{red}*' # display this when there are unstaged changes
zstyle ':vcs_info:*' stagedstr '%F{yellow}+' # display this when there are staged changes
zstyle ':vcs_info:*' formats '%F{5}%F{2}%b%c%u%F{5}%f '
zstyle ':vcs_info:*' actionformats '%F{5}%F{2}%b%F{3}|%F{1}%a%c%u%F{5}%f '
theme_precmd () {
vcs_info
}
export NL=$'\n'
# Set defaults for display.
# We want the host always, but only the user if we are in an SSH session or root.
P_HOST="%F{green}%m%f"
P_USER=''
# If we are in an SSH session, we want to show the username
[[ "$SSH_CONNECTION" != '' ]] && P_USER="%{${fg}[magenta]%}%n%f"
# If we are root, color the user name differently
[[ $UID -eq 0 ]] && P_USER="%{${fg}[red]%}%n%f"
# If P_USER is set, suffix user with @ giving us user@host
[[ -n "$P_USER" ]] && P_USER="$P_USER@"
# Combine the prompt parts. Could be just the host, or user@host.
P_PREFIX="$P_USER$P_HOST"
# Set the color of the current directory
P_DIR="%F{blue}%~%f"
# Change the color of the prompt if the last command failed
P_SHELL="%(?.%F{green}.%F{red})➜%f"
# Any extras we want to display
P_EXTRA=""
# Set the prompt
# user@host /path/to/current/dir (branch) ➜
export PROMPT="${P_PREFIX} ${P_DIR} %{$reset_color%}${vcs_info_msg_0_}%{$reset_color%}%{${P_EXTRA}%}${NL}${P_SHELL} "
autoload -U add-zsh-hook
add-zsh-hook precmd theme_precmd

View File

@@ -2,171 +2,399 @@
```txt
n <Esc> * <Cmd>nohlsearch<CR>
n <Space>zg * :Rg<CR>
FZF: search with rg (aka live grep).
n <Space>zm * :Maps<CR>
FZF: search mappings.
n <Space>zh * :History<CR>
FZF: search history of opened files
n <Space>zb * :Buffers<CR>
FZF: search open buffers.
n <Space>zt * :Windows<CR>
FZF: search open tabs.
n <Space>zc * :Commands<CR>
FZF: search commands.
n <Space>zf * :FZF<Space>
FZF: search for files in given path.
n <Space>tc * <Cmd>CloakToggle<CR>
[tc] Toggle Cloak
n <Space>4 * <Lua 84: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 4
n <Space>3 * <Lua 83: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 3
n <Space>2 * <Lua 82: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 2
n <Space>1 * <Lua 81: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 1
n <Space>xn * <Lua 80: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to next file
n <Space>xa * <Lua 79: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon quick menu
n <Space>xN * <Lua 78: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to previous file
n <Space>xA * <Lua 77: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon file
n <Space>5 * <Lua 76: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
harpoon to file 5
n <Space>tz * <Lua 51: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
[tz] Toggle ZenMode
n <Space>e * <Lua 47: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
<Space>f * <Lua 40: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
[f] Format buffer
n <Space>qq * <Cmd>wq!<CR>
Quickly Quit
n <Space>bq * <Lua 28: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1984>
Open diagnostic [Q]uickfix list
n <Space>be * <Lua 27: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1694>
Show diagnostic [E]rror messages
x # * <Lua 7: vim/_defaults.lua:0>
x <Space> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "<Space>"
n <Space> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "<Space>"
x " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after """
n " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after """
x ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "'"
n ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "'"
x ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "`"
n ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "`"
x g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "g"
n g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "g"
x z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "z"
n z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "z"
n <C-W> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "<C-W>"
n <Esc><Esc> * :nohlsearch<CR>
Clear Search Highlighting
n <Space>qQ * :q!<CR>
Force quit without saving
n <Space>qw * :wq<CR>
Write and quit
n <Space>qq * :wq!<CR>
Quit with force saving
n <Space>qf * :q<CR>
Quicker close split
n <Space>tn * :Noice dismiss<CR>
Noice: Dismiss Notification
n <Space>tl * :lua vim.o.bg = vim.o.bg:get() == "light" and "dark" or "light"<CR>
Toggle Light/Dark Mode
n <Space>te * :Neotree toggle<CR>
Toggle Neotree
n <Space>tc * :CloakToggle<CR>
Cloak: Toggle
n <Space>o * ~/.config/nvim/lua/keymaps.lua
Open repo in browser
n <Space>xx * :Trouble diagnostics<CR>
Trouble: Diagnostic
n <Space>xw * :Trouble workspace_diagnostics<CR>
Trouble: Workspace Diagnostics
n <Space>xq * :Trouble quickfix<CR>
Trouble: Quickfix
n <Space>xl * :Trouble loclist<CR>
Trouble: Location List
n <Space>xd * :Trouble document_diagnostics<CR>
Trouble: Document Diagnostics
n <Space>sx * :Telescope import<CR>
Telescope: Import
n <Space>sw * :Telescope grep_string<CR>
Grep String
n <Space>st * :TodoTelescope<CR>
Search Todos
n <Space>ss * :Telescope treesitter<CR>
Treesitter
n <Space>sq * :Telescope quickfix<CR>
Quickfix
n <Space>sp * :lua require("telescope").extensions.lazy_plugins.lazy_plugins()<CR>
Lazy Plugins
n <Space>so * :Telescope oldfiles<CR>
Old Files
n <Space>sl * :Telescope luasnip<CR>
Search LuaSnip
n <Space>sk * :Telescope keymaps<CR>
Search Keymaps
n <Space>sh * :Telescope highlights<CR>
List Highlights
n <Space>sg * :Telescope live_grep<CR>
Search by Grep
n <Space>sd * :Telescope diagnostics<CR>
Search Diagnostics
n <Space>sc * :Telescope commands<CR>
Commands
n <Space>/ * ~/.config/nvim/lua/keymaps.lua
Fuzzily search in current buffer
n <Space>, * :Telescope buffers<CR>
Find existing buffers
n <Space>f * :Telescope find_files<CR>
Find Files
n <Space>cbt * <Cmd>CBllline<CR>
CB: Titled Line
n <Space>cbm * <Cmd>CBllbox14<CR>
CB: Marked
n <Space>cbl * <Cmd>CBline<CR>
CB: Simple Line
n <Space>cbd * <Cmd>CBd<CR>
CB: Remove a box
n <Space>cbb * <Cmd>CBccbox<CR>
CB: Box Title
n <Space>cw * :Lspsaga diagnostic_jump_next<CR>
Diagnostic Jump Next
n <Space>cv * :Lspsaga diagnostic_jump_prev<CR>
Diagnostic Jump Prev
n <Space>cu * :Lspsaga preview_definition<CR>
Preview Definition
n <Space>cT * :Telescope lsp_type_definitions<CR>
LSP Type Definitions
n <Space>ct * :Lspsaga peek_type_definition<CR>
Peek Type Definition
n <Space>cs * :Telescope lsp_document_symbols<CR>
LSP Document Symbols
n <Space>cR * :Lspsaga rename ++project<CR>
Rename Project wide
n <Space>cr * :Lspsaga rename<CR>
Rename
n <Space>cp * :Lspsaga peek_definition<CR>
Peek Definition
n <Space>cl * :Lspsaga show_cursor_diagnostics<CR>
Cursor Diagnostics
n <Space>ci * :Lspsaga implement<CR>
Implementations
x <Space>cf * :lua vim.lsp.buf.format()<CR>
Format
n <Space>cf * :lua vim.lsp.buf.format()<CR>
Format
n <Space>cd * :Lspsaga show_line_diagnostics<CR>
Line Diagnostics
n <Space>cco * :Lspsaga outgoing_calls<CR>
Outgoing Calls
n <Space>cci * :Lspsaga incoming_calls<CR>
Incoming Calls
n <Space>ca * :Lspsaga code_action<CR>
Code Action
n <Space>cg * :lua require("neogen").generate()<CR>
Generate annotations
n <Space>bw * :lua MiniBufremove.wipeout()<CR>
Wipeout
n <Space>bl * :bnext<CR>
Next
n <Space>bk * :blast<CR>
Last
n <Space>bj * :bfirst<CR>
First
n <Space>bh * :bprev<CR>
Prev
n <Space>bd * :lua MiniBufremove.delete()<CR>
Delete
x # * vim/_defaults.lua
:help v_#-default
o % <Plug>(MatchitOperationForward)
x % <Plug>(MatchitVisualForward)
n % <Plug>(MatchitNormalForward)
n & * :&&<CR>
:help &-default
x * * <Lua 3: vim/_defaults.lua:0>
x * * vim/_defaults.lua
:help v_star-default
o ; * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Repeat jump
x ; * <Cmd>lua MiniJump.jump()<CR>
Repeat jump
n ; * <Cmd>lua MiniJump.jump()<CR>
Repeat jump
v < * <gv
Indent Left
n < * <gv
Indent Left
v > * >gv
Indent Right
n > * >gv
Indent Right
n @ * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Execute macro without 'mini.clue' triggers
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
:help v_@-default
o F * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump backward
x F * <Cmd>lua MiniJump.smart_jump(true, false)<CR>
Jump backward
n F * <Cmd>lua MiniJump.smart_jump(true, false)<CR>
Jump backward
n K * :Lspsaga hover_doc<CR>
Hover Documentation
n Q * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Execute macro without 'mini.clue' triggers
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
:help v_Q-default
o T * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump backward till
x T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
Jump backward till
n T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
Jump backward till
n Y * y$
:help Y-default
n Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash Treesitter
x Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash Treesitter
o Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash Treesitter
o [% <Plug>(MatchitOperationMultiBackward)
x [% <Plug>(MatchitVisualMultiBackward)
n [% <Plug>(MatchitNormalMultiBackward)
n [d * <Lua 15: vim/_defaults.lua:0>
o [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
x [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
n [i * <Cmd>lua MiniIndentscope.operator('top', true)<CR>
Go to indent scope top
o [h * V<Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
x [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
n [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
o [H * V<Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
x [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
n [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
n [d * vim/_defaults.lua
Jump to the previous diagnostic
o ]% <Plug>(MatchitOperationMultiForward)
x ]% <Plug>(MatchitVisualMultiForward)
n ]% <Plug>(MatchitNormalMultiForward)
n ]d * <Lua 14: vim/_defaults.lua:0>
o ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
x ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
n ]i * <Cmd>lua MiniIndentscope.operator('bottom', true)<CR>
Go to indent scope bottom
o ]H * V<Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
x ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
n ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
o ]h * V<Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
x ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
n ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
n ]d * vim/_defaults.lua
Jump to the next diagnostic
x a% <Plug>(MatchitVisualTextObject)
o al <Lua 247: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around last textobject
o an <Lua 246: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around next textobject
x al <Lua 243: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around last textobject
x an <Lua 242: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around next textobject
o a <Lua 240: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around textobject
x a <Lua 238: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Around textobject
n dj * <Lua 26: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1222>
Go to next [D]iagnostic message
n dk * <Lua 25: ~/.local/share/bob/v0.10.0/nvim-macos-arm64/share/nvim/runtime/lua/vim/diagnostic.lua:1145>
Go to previous [D]iagnostic message
o ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
Object scope with border
x ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
Object scope with border
o f * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump forward
x f * <Cmd>lua MiniJump.smart_jump(false, false)<CR>
Jump forward
n f * <Cmd>lua MiniJump.smart_jump(false, false)<CR>
Jump forward
n gR * :RegexplainerToggle<CR>
Toggle Regexplainer
o g% <Plug>(MatchitOperationBackward)
x g% <Plug>(MatchitVisualBackward)
n g% <Plug>(MatchitNormalBackward)
n gR * :RegexplainerToggle<CR>
Toggle Regexplainer
o g] <Lua 237: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
x g] <Lua 236: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
n g] <Lua 235: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1169>
Move to right "around"
o g[ <Lua 234: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
x g[ <Lua 233: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
n g[ <Lua 232: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1168>
Move to left "around"
o gc * <Lua 13: vim/_defaults.lua:0>
o gh * <Cmd>lua MiniDiff.textobject()<CR>
Hunk range textobject
x gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Reset hunks
n gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Reset hunks
x gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Apply hunks
n gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Apply hunks
x gs * <Cmd>lua MiniOperators.sort('visual')<CR>
Sort selection
n gss ^gsg_
Sort line
n gs * v:lua.MiniOperators.sort()
Sort operator
x gr * <Cmd>lua MiniOperators.replace('visual')<CR>
Replace selection
n grr gr_
Replace line
n gr * v:lua.MiniOperators.replace()
Replace operator
x gm * <Cmd>lua MiniOperators.multiply('visual')<CR>
Multiply selection
n gmm gm_
Multiply line
n gm * v:lua.MiniOperators.multiply()
Multiply operator
n gxx gx_
Exchange line
x g= * <Cmd>lua MiniOperators.evaluate('visual')<CR>
Evaluate selection
n g== g=_
Evaluate line
n g= * v:lua.MiniOperators.evaluate()
Evaluate operator
x gS * :<C-U>lua MiniSplitjoin.toggle({ region = MiniSplitjoin.get_visual_region() })<CR>
Toggle arguments
n gS * v:lua.MiniSplitjoin.operator("toggle") . " "
Toggle arguments
o gc * <Cmd>lua MiniComment.textobject()<CR>
Comment textobject
n gcc * <Lua 12: vim/_defaults.lua:0>
Toggle comment line
x gc * <Lua 11: vim/_defaults.lua:0>
Toggle comment
n gc * <Lua 10: vim/_defaults.lua:0>
Toggle comment
x gx * <Lua 9: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
n gx * <Lua 8: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
o il <Lua 249: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside last textobject
o in <Lua 248: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside next textobject
x il <Lua 245: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside last textobject
x in <Lua 244: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside next textobject
o i <Lua 241: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside textobject
x i <Lua 239: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/ai.lua:1172>
Inside textobject
n shn * <Lua 266: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n gcc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
Comment line
x gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
Comment selection
n gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
Comment
x gx * <Cmd>lua MiniOperators.exchange('visual')<CR>
Exchange selection
n gx * v:lua.MiniOperators.exchange()
Exchange operator
o ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
Object scope
x ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
Object scope
n j * v:count == 0 ? 'gj' : 'j'
Move down
n k * v:count == 0 ? 'gk' : 'k'
Move up
n shn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Highlight next surrounding
n sFn * <Lua 265: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sFn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find next left surrounding
n sfn * <Lua 264: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sfn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find next right surrounding
n srn * <Lua 263: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n srn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Replace next surrounding
n sdn * <Lua 262: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sdn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Delete next surrounding
n shl * <Lua 261: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n shl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Highlight previous surrounding
n sFl * <Lua 260: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sFl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find previous left surrounding
n sfl * <Lua 259: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sfl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find previous right surrounding
n srl * <Lua 258: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n srl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Replace previous surrounding
n sdl * <Lua 257: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sdl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Delete previous surrounding
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
Add surrounding to selection
n sn * <Lua 256: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:892>
n sn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Update `MiniSurround.config.n_lines`
n sh * <Lua 255: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sh * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Highlight surrounding
n sF * <Lua 254: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sF * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find left surrounding
n sf * <Lua 253: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sf * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find right surrounding
n sr * <Lua 252: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sr * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Replace surrounding
n sd * <Lua 251: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sd * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Delete surrounding
n sa * <Lua 250: ~/.local/share/nvim-kickstart/lazy/mini.nvim/lua/mini/surround.lua:1252>
n sa * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Add surrounding
o t * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump forward till
x t * <Cmd>lua MiniJump.smart_jump(false, true)<CR>
Jump forward till
n t * <Cmd>lua MiniJump.smart_jump(false, true)<CR>
Jump forward till
x zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash
n zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash
o zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash
n <C-W>= * <C-W>=
Equal Size Splits
n <C-W>+ * :resize +5<CR>
H Resize +
n <C-W>- * :resize -5<CR>
H Resize -
n <C-W>. * :vertical resize +10<CR>
V Resize +
n <C-W>, * :vertical resize -10<CR>
V Resize -
v <C-J> * :m '>+1<CR>gv=gv
Move Block Down
n <C-J> * :m '>+1<CR>gv=gv
Move Block Down
v <C-K> * :m '<-2<CR>gv=gv
Move Block Up
n <C-K> * :m '<-2<CR>gv=gv
Move Block Up
n <C-S> * :w!<CR>
Save
n <Down> * :echo "Use j to move!!"<CR>
n <Up> * :echo "Use k to move!!"<CR>
n <Right> * :echo "Use l to move!!"<CR>
n <Left> * :echo "Use h to move!!"<CR>
x <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward)
o <Plug>(MatchitOperationMultiForward) * :<C-U>call matchit#MultiMatch("W", "o")<CR>
o <Plug>(MatchitOperationMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "o")<CR>
@@ -180,28 +408,29 @@ x <Plug>(MatchitVisualBackward) * :<C-U>call matchit#Match_wrapper('',0,'v')<CR
x <Plug>(MatchitVisualForward) * :<C-U>call matchit#Match_wrapper('',1,'v')<CR>:if col("''") != col("$") | exe ":normal! m'" | endif<CR>gv``
n <Plug>(MatchitNormalBackward) * :<C-U>call matchit#Match_wrapper('',0,'n')<CR>
n <Plug>(MatchitNormalForward) * :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
n <C-P> * :Files<CR>
FZF: search for files starting at current directory.
o <Plug>(fzf-maps-o) * <C-C>:<C-U>call fzf#vim#maps('o', 0)<CR>
x <Plug>(fzf-maps-x) * :<C-U>call fzf#vim#maps('x', 0)<CR>
n <Plug>(fzf-maps-n) * :<C-U>call fzf#vim#maps('n', 0)<CR>
n <Plug>(fzf-normal) * <Nop>
n <Plug>(fzf-insert) * i
n <C-Bslash> * <Lua 60: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-S> * <Cmd>w<CR>
Save file
n <C-K> * <Lua 57: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-J> * <Lua 56: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-H> * <Lua 58: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <Down> * <Cmd>echo "Use j to move!!"<CR>
n <Up> * <Cmd>echo "Use k to move!!"<CR>
n <Right> * <Cmd>echo "Use l to move!!"<CR>
n <Left> * <Cmd>echo "Use h to move!!"<CR>
n <M-k> * <Cmd>lua MiniMove.move_line('up')<CR>
Move line up
n <M-j> * <Cmd>lua MiniMove.move_line('down')<CR>
Move line down
n <M-l> * <Cmd>lua MiniMove.move_line('right')<CR>
Move line right
n <M-h> * <Cmd>lua MiniMove.move_line('left')<CR>
Move line left
x <M-k> * <Cmd>lua MiniMove.move_selection('up')<CR>
Move up
x <M-j> * <Cmd>lua MiniMove.move_selection('down')<CR>
Move down
x <M-l> * <Cmd>lua MiniMove.move_selection('right')<CR>
Move right
x <M-h> * <Cmd>lua MiniMove.move_selection('left')<CR>
Move left
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
n <C-W><C-D> <C-W>d
Show diagnostics under the cursor
n <C-W>d * <Lua 16: vim/_defaults.lua:0>
n <C-W>d * vim/_defaults.lua
Show diagnostics under the cursor
n <C-L> * <Lua 59: ~/.local/share/nvim-kickstart/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n <C-L> * :lua vim.lsp.buf.signature_help()<CR>
Signature
```
- Generated on Sat 10 Aug 2024 13:01:59 EEST
- Generated on Mon 9 Dec 2024 10:05:25 EET

View File

@@ -27,13 +27,13 @@ servers = (
family = "inet";
},
{ address = "irc.efnet.net"; chatnet = "EFNet"; port = "6667"; },
{
{
address = "irc.undernet.org";
chatnet = "Undernet";
port = "6667";
},
{ address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
{
{
address = "irc.quakenet.org";
chatnet = "QuakeNet";
port = "6667";
@@ -50,7 +50,7 @@ chatnets = {
max_whois = "4";
max_query_chans = "5";
};
EFNet = {
EFNet = {
type = "IRC";
max_kicks = "4";
max_msgs = "3";

Some files were not shown because too many files have changed in this diff Show More