mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-27 22:45:27 +00:00
Compare commits
269 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c09a7ff74 | ||
| 88efedf26b | |||
|
|
cdd68748e0 | ||
|
|
f8ff2699e6 | ||
| c5e06888b8 | |||
|
|
4f138eee73 | ||
|
|
90258e5105 | ||
| efc53fc9bf | |||
|
|
f62c17d940 | ||
|
|
fb15b93887 | ||
|
|
222276486a | ||
|
|
4446d59e73 | ||
| a22709a0f0 | |||
| 76598ad33b | |||
| 56ccb7c136 | |||
|
|
b6d933d018 | ||
| f9856a27b9 | |||
| b36b52ad57 | |||
| 1e60ccf49b | |||
|
|
9ca9439b9a | ||
| 6d30ae7e84 | |||
| 031e124663 | |||
| bb50c9fe18 | |||
| 8e608de501 | |||
|
|
8917b7736b | ||
| 18ff879f1d | |||
| c5a258d7be | |||
| 7525f1f71d | |||
| 3b665bdba0 | |||
| 99477364bd | |||
|
|
629fdf6d4c | ||
| 1288599b1f | |||
| be3a68fecb | |||
| 101e4da1d6 | |||
| 23430a609a | |||
| bb0d56e403 | |||
| d3b08bdf4f | |||
| e1ec501c55 | |||
| f92c3407f0 | |||
| b5971439b6 | |||
| 8ea8a2797a | |||
| b0f9222482 | |||
| 825ccc1031 | |||
| dab7a8a38a | |||
| 1dbc7ae5cd | |||
| 7038da568e | |||
| bfcaa26070 | |||
| f6488aecce | |||
| ad166e8012 | |||
| 2a76a414a0 | |||
| bb8ddf0bba | |||
| bf3e746010 | |||
|
|
b9957e4f0e | ||
| e1deba4ccf | |||
| 36e4de3035 | |||
| 3eab1faeab | |||
| 1eb4098646 | |||
| f7db8cae15 | |||
| 97dd3dc21d | |||
| 6da6797f1b | |||
|
|
88356f1392 | ||
| 174bb842e9 | |||
| f6e7590118 | |||
| 498996a6e2 | |||
| 0961985fb4 | |||
| 293452604d | |||
|
|
9582f18c7d | ||
| 051e3604ee | |||
| 09d62dd159 | |||
| 8a3763e168 | |||
| c37793f649 | |||
| 7bc7230990 | |||
| 067df4e34b | |||
| 4d28499423 | |||
| b685af82fb | |||
|
|
b8a4b82431 | ||
| 0b03acebd8 | |||
| d172b86cb8 | |||
| f910dfb9ac | |||
| ee95d57ba0 | |||
| f8a317f3c7 | |||
| 3762e10932 | |||
| afda96902b | |||
| 3060b6ad66 | |||
|
|
4f154cf509 | ||
| 863d803483 | |||
| 07bb2b56d1 | |||
| 84a753100e | |||
| c8b01f3fda | |||
| 8e6a110aac | |||
| a8baa1671f | |||
| 2ccdd042f6 | |||
|
|
8cf43ed555 | ||
| e22094e0da | |||
| 6186c5cba4 | |||
| c453dcbf84 | |||
| 4daaa62aed | |||
| f56d5682d1 | |||
| 439638b686 | |||
| a8a473a46d | |||
| eb91a43bbd | |||
|
|
193fae662e | ||
|
|
117ca1a944 | ||
| 1f1a6d42ad | |||
| cca265cd99 | |||
| cc6abb53ba | |||
| ab34c148a6 | |||
|
|
910b29ed9f | ||
| 3fb0a75a62 | |||
|
|
f73abb508b | ||
|
|
1dd3d952cf | ||
| 1ffd6e1569 | |||
| a76033a48a | |||
| 34dc18883e | |||
| 832d8b94f3 | |||
| c40eb765f8 | |||
|
|
1bb7e9076b | ||
|
|
17821dfefa | ||
| 19327947ed | |||
| 2356fc4c61 | |||
| 45219deccb | |||
| 5471aba1a4 | |||
|
|
6f6ee3611c | ||
|
|
d8f9cdf265 | ||
| abb6de05be | |||
| 60ef48e918 | |||
| e58c79a3c3 | |||
| d47f21286d | |||
| 3f108c9353 | |||
|
|
4a68146786 | ||
|
|
cf79e61943 | ||
| 43dcb303a0 | |||
| 1b03f0bbd6 | |||
| 8a52c9a97e | |||
| 8e84c3aef7 | |||
| acd2f7fc6d | |||
| 1e4aa1558a | |||
| b314c0ba76 | |||
| ece46561c4 | |||
| 196d217c34 | |||
| 7d2fc55791 | |||
| 74fb12f093 | |||
|
|
d7988bcad7 | ||
| 320ae35dcd | |||
| 0964253be5 | |||
|
|
f3f7ecc522 | ||
|
|
b88de0c3ae | ||
| c5e6860595 | |||
| b5a3c34fc3 | |||
| 87c89cf828 | |||
|
|
8d57c9425e | ||
|
|
cfe97d81a7 | ||
| 2f13ad324a | |||
|
|
d203fc9d51 | ||
| bf279b6def | |||
| 87926f8d9b | |||
| 6b056f6072 | |||
| 823cdbc07f | |||
| 0f6157eb04 | |||
| 721fe614a7 | |||
| 5ea16d4653 | |||
| 900e6a8f85 | |||
| 16673de789 | |||
| c732a75184 | |||
|
|
96280e6e9b | ||
| 5ab0f89765 | |||
| d585d61537 | |||
| 746646ae55 | |||
|
|
6e69ec6410 | ||
| af123e5138 | |||
| 3879289559 | |||
| 392628e733 | |||
| aa70eab5fb | |||
| e5311ca285 | |||
| d5618c9b5f | |||
| d091f5a88f | |||
| cb9195e3ad | |||
| c91cc387b6 | |||
| 083091ea46 | |||
| 7ff74f0e15 | |||
| 9d1f62fcca | |||
| a563e82e33 | |||
| 62ff7836e7 | |||
| 88cb573027 | |||
| 82772d8208 | |||
|
|
240035569c | ||
|
|
9697c200f9 | ||
| fd11f9966b | |||
| 722b3c0cde | |||
| 4fcb9d9741 | |||
| fc232f26f7 | |||
| 8b078309cf | |||
| 5a8f990e52 | |||
| c76c5d08b0 | |||
| b2857e226c | |||
| dfbac0c736 | |||
| fdd713908c | |||
| 60210c9bec | |||
| eaf8d2bdca | |||
| cc00055626 | |||
|
|
567de68844 | ||
|
|
ed0b229757 | ||
| c8b6243c0b | |||
|
|
21a92eb145 | ||
| 8ec317f582 | |||
|
|
42201d8b68 | ||
|
|
0c003ae5b9 | ||
| d383031ec8 | |||
|
|
fa5e5f16da | ||
| f82396236e | |||
| b127c2514d | |||
|
|
b06ac3bc0f | ||
|
|
7e4ea90a05 | ||
|
|
d264a33d21 | ||
| 224ee56461 | |||
|
|
8147490c65 | ||
|
|
c6d501347a | ||
|
|
d8044f2b6a | ||
|
|
1b3fe6d12e | ||
| 76b66d8c61 | |||
| 9c8644de17 | |||
| 120345b562 | |||
| 8accd4a60b | |||
| 8fb03660ad | |||
| 8b2dc74f2a | |||
| 8fa63e63bb | |||
| 4ca5b63b75 | |||
| 5a59872377 | |||
| 38419eda28 | |||
| fc85dbaa6c | |||
| 250e7f5666 | |||
| 8f96922033 | |||
| 4c4de2dc26 | |||
| b8c163e028 | |||
| 0a974c2a17 | |||
| fd8d72ab38 | |||
| 0908a23231 | |||
| 2e070eed83 | |||
| e22762255d | |||
| 093f58f129 | |||
| 9b6e39b4af | |||
|
|
6f1e1a0416 | ||
| 36e0f36e06 | |||
| e2c37d29e8 | |||
| 78716fa8ce | |||
| 81e9b20eb6 | |||
|
|
94e58b307b | ||
| 98aca096a9 | |||
| 121e31c7d4 | |||
| f6bcd10ac5 | |||
| 619c772fcc | |||
| 746d44151c | |||
| b9585209be | |||
| 930dcf00c4 | |||
| bb8e3bba56 | |||
| 6431c2e6dc | |||
| 248eca1ae6 | |||
| 4b1ab2e1b8 | |||
| c0f537439b | |||
| 9ab132d37c | |||
| 2b9ddc232b | |||
| 1a244ce0b1 | |||
| fdc0f45b23 | |||
| 3fa90eef3b | |||
| 7ea7c12f0b | |||
| f76492b942 | |||
| 7947340663 | |||
| 300c48b1e9 | |||
| 772527cc66 |
@@ -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,9 @@ indent_size = 1
|
||||
indent_size = 1
|
||||
indent_style = tab
|
||||
|
||||
[{local/bin/*,**/*.sh,**/zshrc,config/*}]
|
||||
[{local/bin/*,**/*.sh,**/zshrc,config/*,scripts/*}]
|
||||
indent_size = 2
|
||||
tab_width = 2
|
||||
shell_variant = bash # --language-variant
|
||||
binary_next_line = true
|
||||
switch_case_indent = true # --case-indent
|
||||
@@ -31,5 +39,5 @@ function_next_line = true # --func-next-line
|
||||
# such as "shfmt -l -w .". When formatting files directly,
|
||||
# like "shfmt -w third_party/foo.sh" or "shfmt --filename=third_party/foo.sh",
|
||||
# the ignore logic is applied only when the --apply-ignore flag is given.
|
||||
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**}]
|
||||
[{tools/**,local/bin/asdf/**,config/cheat/cheatsheets/**,config/tmux/plugins/**}]
|
||||
ignore = true
|
||||
|
||||
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -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
|
||||
|
||||
|
||||
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* @ivuorinen
|
||||
10
.github/README.md
vendored
10
.github/README.md
vendored
@@ -6,10 +6,10 @@ aware of yet. As I find more interesting tools, configs and other stuff,
|
||||
this repository will live accordingly.
|
||||
|
||||
Please for the love of everything good do not use these 1:1 as your own dotfiles,
|
||||
fork or download the repo as a zip and go from there with your own configs.
|
||||
fork or download the repository as a zip and go from there with your own configs.
|
||||
|
||||
It would be nice if you'd add an issue linking to your fork or repo so I can
|
||||
see what interesing stuff you've done with it. Sharing is caring.
|
||||
see what interesting stuff you've done with it. Sharing is caring.
|
||||
|
||||
## Setup
|
||||
|
||||
@@ -28,9 +28,9 @@ see what interesing stuff you've done with it. Sharing is caring.
|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
## Interesting files and locations
|
||||
|
||||
@@ -52,7 +52,7 @@ see what interesing stuff you've done with it. Sharing is caring.
|
||||
| `local/` | `.local/` | XDG Base folder: `bin`, `share` and `state` |
|
||||
| `ssh/` | `.ssh/` | SSH Configurations. |
|
||||
|
||||
### dfm - the dotfiles manager
|
||||
### `dfm` - the dotfiles manager
|
||||
|
||||
[`.local/bin/dfm`][dfm] is a shell script that has some tools that help with dotfiles management.
|
||||
|
||||
|
||||
1
.github/workflows/changelog.yml
vendored
1
.github/workflows/changelog.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Debug Changelog # Workflow name displayed on GitHub
|
||||
on:
|
||||
workflow_dispatch: # Trigger manually
|
||||
|
||||
1
.github/workflows/linters.yml
vendored
1
.github/workflows/linters.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: reviewdog
|
||||
on: [push]
|
||||
jobs:
|
||||
|
||||
16
.github/workflows/new-release.yml
vendored
16
.github/workflows/new-release.yml
vendored
@@ -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
|
||||
|
||||
24
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
24
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: Pre-commit autoupdate
|
||||
on:
|
||||
schedule:
|
||||
# At 04:00 on Monday and Thursday.
|
||||
- cron: "0 4 * * 1,4"
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
auto-update:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5.4.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.
|
||||
1
.github/workflows/semantic-pr.yml
vendored
1
.github/workflows/semantic-pr.yml
vendored
@@ -1,3 +1,4 @@
|
||||
---
|
||||
name: Semantic PR
|
||||
|
||||
on:
|
||||
|
||||
23
.github/workflows/sync-labels.yml
vendored
Normal file
23
.github/workflows/sync-labels.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Sync labels
|
||||
|
||||
# yamllint disable-line rule:truthy
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- .github/workflows/sync-labels.yml
|
||||
- .github/labels.yml
|
||||
schedule:
|
||||
- cron: "34 5 * * *"
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
SyncLabels:
|
||||
permissions:
|
||||
issues: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: ivuorinen/actions/sync-labels@main
|
||||
13
.github/workflows/update-submodules.yml
vendored
13
.github/workflows/update-submodules.yml
vendored
@@ -1,13 +1,16 @@
|
||||
---
|
||||
name: Update submodules
|
||||
on:
|
||||
schedule: [{ cron: 0 3 * * * }]
|
||||
schedule:
|
||||
# At 04:00 on Monday and Thursday.
|
||||
- cron: "0 4 * * 1,4"
|
||||
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
|
||||
|
||||
41
.gitignore
vendored
41
.gitignore
vendored
@@ -1,28 +1,35 @@
|
||||
Brewfile.lock.json
|
||||
config/nvim/lazy-lock.json
|
||||
*.log
|
||||
!.gitkeep
|
||||
*-secret
|
||||
*.bak
|
||||
*.log
|
||||
*.socket
|
||||
*cache
|
||||
.env
|
||||
.idea
|
||||
.nfs*
|
||||
.vscode
|
||||
Brewfile.lock.json
|
||||
antidote_plugins.zsh
|
||||
config/alacritty/theme-active.toml
|
||||
config/cheat/cheatsheets/pure-bash-bible/*
|
||||
config/cheat/cheatsheets/tldr/*
|
||||
config/git/credentials
|
||||
config/gnupg/S.*
|
||||
config/gnupg/private-keys-v1.d
|
||||
config/gnupg/s
|
||||
config/iterm2/AppSupport
|
||||
config/npm/npmrc
|
||||
config/nvim/lazy-lock.json
|
||||
config/nvim/spell/*
|
||||
!config/nvim/spell/.gitkeep
|
||||
config/zed/*
|
||||
!config/zed/settings.json
|
||||
config/zsh/.zcompdump
|
||||
config/alacritty/theme-active.toml
|
||||
iTermServer-*
|
||||
lazy-lock.json
|
||||
local/share/fonts/*
|
||||
local/bin/asdf/plugins/*
|
||||
lock
|
||||
node_modules
|
||||
ssh/local.d/*
|
||||
!ssh/local.d/.gitkeep
|
||||
!.gitkeep
|
||||
.env
|
||||
local/share/fonts/*
|
||||
node_modules
|
||||
.nfs*
|
||||
*.socket
|
||||
iTermServer-*
|
||||
lock
|
||||
config/iterm2/AppSupport
|
||||
config/gnupg/S.*
|
||||
config/gnupg/s
|
||||
config/gnupg/private-keys-v1.d
|
||||
|
||||
|
||||
38
.gitmodules
vendored
38
.gitmodules
vendored
@@ -1,4 +1,4 @@
|
||||
# vim: set expandtab:
|
||||
# vim: noexpandtab filetype=gitconfig
|
||||
[submodule "dotbot"]
|
||||
path = tools/dotbot
|
||||
url = https://github.com/anishathalye/dotbot.git
|
||||
@@ -23,47 +23,69 @@
|
||||
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
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-sessionist"]
|
||||
path = config/tmux/plugins/tmux-sessionist
|
||||
url = https://github.com/tmux-plugins/tmux-sessionist.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-yank"]
|
||||
path = config/tmux/plugins/tmux-yank
|
||||
url = https://github.com/tmux-plugins/tmux-yank.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-window-name"]
|
||||
path = config/tmux/plugins/tmux-window-name
|
||||
url = https://github.com/ivuorinen/tmux-window-name.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "dotbot-pip"]
|
||||
path = tools/dotbot-pip
|
||||
url = https://github.com/sobolevn/dotbot-pip.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-suspend"]
|
||||
path = config/tmux/plugins/tmux-suspend
|
||||
url = https://github.com/MunifTanjim/tmux-suspend.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-mode-indicator"]
|
||||
path = config/tmux/plugins/tmux-mode-indicator
|
||||
url = https://github.com/MunifTanjim/tmux-mode-indicator.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-current-pane-hostname"]
|
||||
path = config/tmux/plugins/tmux-current-pane-hostname
|
||||
url = https://github.com/soyuka/tmux-current-pane-hostname.git
|
||||
ignore = dirty
|
||||
|
||||
[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
|
||||
ignore = dirty
|
||||
|
||||
[submodule "tmux/tmux-dark-notify"]
|
||||
path = config/tmux/plugins/tmux-dark-notify
|
||||
url = https://github.com/erikw/tmux-dark-notify.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "asdf"]
|
||||
path = local/bin/asdf
|
||||
url = https://github.com/asdf-vm/asdf.git
|
||||
ignore = dirty
|
||||
|
||||
[submodule "antidote"]
|
||||
path = tools/antidote
|
||||
url = https://github.com/mattmc3/antidote.git
|
||||
shallow = true
|
||||
ignore = dirty
|
||||
|
||||
[submodule "dotbot-asdf"]
|
||||
path = tools/dotbot-asdf
|
||||
url = https://github.com/sobolevn/dotbot-asdf
|
||||
ignore = dirty
|
||||
|
||||
5
.ignore
5
.ignore
@@ -1,6 +1,7 @@
|
||||
.git/**
|
||||
config/cheat/cheatsheets/community/**
|
||||
tools/dotbot/**
|
||||
node_modules
|
||||
tools/antidote/**
|
||||
tools/dotbot-brew/**
|
||||
tools/dotbot-include/**
|
||||
node_modules
|
||||
tools/dotbot/**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"diagnostics.globals": [
|
||||
"vim"
|
||||
]
|
||||
}
|
||||
"diagnostics.globals": [
|
||||
"vim"
|
||||
]
|
||||
}
|
||||
|
||||
59
.pre-commit-config.yaml
Normal file
59
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,59 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v5.0.0
|
||||
hooks:
|
||||
- id: requirements-txt-fixer
|
||||
- id: detect-aws-credentials
|
||||
- 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.44.0
|
||||
hooks:
|
||||
- id: markdownlint
|
||||
args: [-c, .markdownlint.json, --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.7
|
||||
hooks:
|
||||
- id: actionlint
|
||||
|
||||
- repo: https://github.com/renovatebot/pre-commit-hooks
|
||||
rev: 39.169.3
|
||||
hooks:
|
||||
- id: renovate-config-validator
|
||||
|
||||
- repo: https://github.com/JohnnyMorganz/StyLua
|
||||
rev: v2.0.2
|
||||
hooks:
|
||||
- id: stylua # or stylua-system / stylua-github
|
||||
@@ -1,12 +1,14 @@
|
||||
# vim: ft=gitignore
|
||||
.mypy_cache/*
|
||||
Brewfile.lock.json
|
||||
config/cheat/cheatsheets/community
|
||||
config/cheat/cheatsheets/tldr
|
||||
config/fzf/*
|
||||
config/nvim-kickstart/*
|
||||
config/nvim/*
|
||||
config/tmux/plugins/*
|
||||
config/zsh/*
|
||||
lazy-lock.json
|
||||
local/bin/antigen.zsh
|
||||
local/bin/asdf
|
||||
tools/antidote/*
|
||||
tools/dotbot*
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
module.exports = {
|
||||
plugins: ['prettier-plugin-sh'],
|
||||
...require('@ivuorinen/prettier-config'),
|
||||
trailingComma: 'all',
|
||||
// Add custom options below:
|
||||
|
||||
@@ -1 +1 @@
|
||||
3.12.6
|
||||
3.13.2
|
||||
|
||||
@@ -24,3 +24,7 @@ disable=SC1091
|
||||
# SC2174: When used with -p, -m only applies to the deepest directory.
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2174
|
||||
disable=SC2174
|
||||
|
||||
# SC2016: Expressions don't expand in single quotes, use double quotes for that.
|
||||
# https://www.shellcheck.net/wiki/SC2016
|
||||
disable=SC2016
|
||||
|
||||
0
.yamlignore
Normal file
0
.yamlignore
Normal file
@@ -9,9 +9,8 @@ git submodule add --name dotbot-include \
|
||||
-f https://gitlab.com/gnfzdz/dotbot-include.git tools/dotbot-include
|
||||
git submodule add --name dotbot-pip \
|
||||
-f https://github.com/sobolevn/dotbot-pip.git tools/dotbot-pip
|
||||
|
||||
git submodule add --name nvim-kickstart \
|
||||
-f https://github.com/ivuorinen/kickstart.nvim config/nvim-kickstart
|
||||
git submodule add --name dotbot-asdf \
|
||||
-f https://github.com/sobolevn/dotbot-asdf tools/dotbot-asdf
|
||||
|
||||
# other repos
|
||||
git submodule add --name cheat-community \
|
||||
@@ -20,14 +19,15 @@ git submodule add --name cheat-tldr \
|
||||
-f https://github.com/ivuorinen/cheatsheet-tldr.git config/cheat/cheatsheets/tldr
|
||||
git submodule add --name asdf \
|
||||
-f https://github.com/asdf-vm/asdf.git local/bin/asdf
|
||||
git submodule add --name antidote \
|
||||
--depth 1 \
|
||||
-f https://github.com/mattmc3/antidote.git tools/antidote
|
||||
|
||||
# tmux plugin manager and plugins
|
||||
git submodule add --name tmux/tmux-continuum \
|
||||
-f https://github.com/tmux-plugins/tmux-continuum config/tmux/plugins/tmux-continuum
|
||||
git submodule add --name tmux/tmux-mode-indicator \
|
||||
-f https://github.com/MunifTanjim/tmux-mode-indicator.git config/tmux/plugins/tmux-mode-indicator
|
||||
git submodule add --name tmux/tmux-resurrect \
|
||||
-f https://github.com/tmux-plugins/tmux-resurrect config/tmux/plugins/tmux-resurrect
|
||||
git submodule add --name tmux/tmux-sensible \
|
||||
-f https://github.com/tmux-plugins/tmux-sensible.git config/tmux/plugins/tmux-sensible
|
||||
git submodule add --name tmux/tmux-sessionist \
|
||||
@@ -45,12 +45,18 @@ git submodule add --name tmux/tmux-dark-notify \
|
||||
|
||||
# Takes submodules and sets them to ignore all changes
|
||||
for MODULE in $(git config --file .gitmodules --get-regexp path | awk '{ print $2 }'); do
|
||||
git config "submodule.${MODULE}.ignore" all
|
||||
echo "Ignoring submodule changes for submodule.${MODULE}..."
|
||||
git config "submodule.${MODULE}.ignore" "dirty"
|
||||
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
|
||||
|
||||
12
base/bashrc
12
base/bashrc
@@ -7,6 +7,10 @@ export SHARED_SCRIPTS_SOURCED=0
|
||||
|
||||
source "$DOTFILES/config/shared.sh"
|
||||
|
||||
if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
|
||||
builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash"
|
||||
fi
|
||||
|
||||
# shellcheck source=../config/fzf/fzf.bash
|
||||
[ -f "${DOTFILES}/config/fzf/fzf.bash" ] &&
|
||||
source "${DOTFILES}/config/fzf/fzf.bash"
|
||||
@@ -14,10 +18,10 @@ source "$DOTFILES/config/shared.sh"
|
||||
# Import ssh keys in keychain
|
||||
ssh-add -A 2>/dev/null
|
||||
|
||||
x-have oh-my-posh && {
|
||||
eval "$(oh-my-posh init bash --config "$DOTFILES/config/omp/own.toml")"
|
||||
}
|
||||
|
||||
x-have antidot && {
|
||||
eval "$(antidot init)"
|
||||
}
|
||||
|
||||
PROMPT_DIRTRIM=3
|
||||
PROMPT_COMMAND='PS1_CMD1=$(git branch --show-current 2>/dev/null)'
|
||||
PS1='\[\e[95m\]\u\[\e[0m\]@\[\e[38;5;22;2m\]\h\[\e[0m\] \[\e[38;5;33m\]\w\[\e[0m\] \[\e[92;2m\]${PS1_CMD1}\n\[\e[39m\]➜\[\e[0m\] '
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
use node
|
||||
use asdf
|
||||
|
||||
6
base/ignore
Normal file
6
base/ignore
Normal file
@@ -0,0 +1,6 @@
|
||||
Applications/
|
||||
Library/
|
||||
Movies/
|
||||
Music/
|
||||
Pictures/
|
||||
Google Drive/
|
||||
1
base/nvmrc
Normal file
1
base/nvmrc
Normal file
@@ -0,0 +1 @@
|
||||
lts/*
|
||||
@@ -1,32 +1,19 @@
|
||||
1password-cli 2.30.0
|
||||
age 1.2.0
|
||||
asdf-plugin-manager 1.3.1
|
||||
bottom 0.10.2
|
||||
direnv 2.34.0
|
||||
golang 1.23.4
|
||||
rust 1.83.0
|
||||
direnv 2.35.0
|
||||
fd 10.2.0
|
||||
1password-cli 2.30.3
|
||||
age 1.2.1
|
||||
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.64.0
|
||||
hadolint 2.12.0
|
||||
kubectl 1.31.0
|
||||
lazygit 0.43.1
|
||||
markdownlint-cli2 0.13.0
|
||||
nodejs 22.8.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.32.0
|
||||
pre-commit 4.0.1
|
||||
ripgrep 14.1.1
|
||||
shellcheck 0.10.0
|
||||
shfmt 3.9.0
|
||||
terragrunt 0.67.1
|
||||
tf-summarize 0.3.10
|
||||
vault 1.17.5+ent
|
||||
shfmt 3.10.0
|
||||
terragrunt 0.71.1
|
||||
tf-summarize 0.3.14
|
||||
yamllint 1.35.1
|
||||
yq 4.44.3
|
||||
bats 1.11.0
|
||||
gitleaks 8.18.4
|
||||
yq 4.44.6
|
||||
|
||||
89
base/zshrc
Executable file → Normal file
89
base/zshrc
Executable file → Normal 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,18 @@ 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"
|
||||
}
|
||||
if [[ -n $GHOSTTY_RESOURCES_DIR ]]; then
|
||||
source "$GHOSTTY_RESOURCES_DIR"/shell-integration/zsh/ghostty-integration
|
||||
fi
|
||||
|
||||
main "$@"
|
||||
source_fzf_config
|
||||
setup_tmux_window_name_plugin
|
||||
x-have antidot && eval "$(antidot init)"
|
||||
|
||||
autoload -Uz compinit bashcompinit
|
||||
compinit -d $ZSH_COMPDUMP
|
||||
bashcompinit
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
||||
export P10K_CONFIG="$DOTFILES/config/zsh/p10k.zsh"
|
||||
[[ ! -f "$P10K_CONFIG" ]] || source "$P10K_CONFIG"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
--container-architecture linux/amd64
|
||||
-P ubuntu-latest=catthehacker/ubuntu:act-latest
|
||||
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
|
||||
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
|
||||
|
||||
244
config/aerospace/aerospace.toml
Normal file
244
config/aerospace/aerospace.toml
Normal file
@@ -0,0 +1,244 @@
|
||||
# Start AeroSpace at login
|
||||
start-at-login = false
|
||||
|
||||
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
||||
enable-normalization-flatten-containers = true
|
||||
enable-normalization-opposite-orientation-for-nested-containers = true
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
|
||||
# The 'accordion-padding' specifies the size of accordion padding
|
||||
# You can set 0 to disable the padding feature
|
||||
accordion-padding = 10
|
||||
|
||||
# Possible values: tiles|accordion
|
||||
default-root-container-layout = 'tiles'
|
||||
|
||||
# Possible values: horizontal|vertical|auto
|
||||
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
|
||||
# tall monitor (anything higher than wide) gets vertical orientation
|
||||
default-root-container-orientation = 'auto'
|
||||
|
||||
# Mouse follows focus when focused monitor changes
|
||||
# Drop it from your config, if you don't like this behavior
|
||||
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
|
||||
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
|
||||
# Fallback value (if you omit the key): on-focused-monitor-changed = []
|
||||
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
|
||||
|
||||
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
|
||||
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
|
||||
# Also see: https://nikitabobko.github.io/AeroSpace/goodness#disable-hide-app
|
||||
automatically-unhide-macos-hidden-apps = true
|
||||
|
||||
# [[on-window-detected]]
|
||||
# if.app-id = 'com.apple.systempreferences'
|
||||
# if.app-name-regex-substring = 'settings'
|
||||
# if.window-title-regex-substring = 'substring'
|
||||
# if.workspace = 'workspace-name'
|
||||
# if.during-aerospace-startup = true
|
||||
# check-further-callbacks = true
|
||||
# run = ['layout floating', 'move-node-to-workspace S'] # The callback itself
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-name-regex-substring = 'settings' # All settings
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.systempreferences' # macOS System Preferences
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.1password.1password' # 1Password
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'org.ferdium.ferdium-app' # Ferdium, has WhatsApp etc.
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.jetbrains.PhpStorm' # PhpStorm
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.finder' # Finder
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.Preview' # Preview
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.mail' # Mail
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.DanPristupov.Fork' # Fork
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.flexibits.fantastical2.mac' # Fantastical
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'org.whispersystems.signal-desktop' # Signal
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.tidal.desktop' # TIDAL
|
||||
run = ['layout floating', 'move-node-to-workspace 2'] # Float and move to workspace 2
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.TV' # Apple TV app
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.setapp.DesktopClient' # Setapp
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.electron.dockerdesktop' # Docker Desktop
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.tinyspeck.slackmacgap' # Slack
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'md.obsidia' # Obsidian
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.todoist.mac.Todoist' # Todoist
|
||||
run = ['layout floating']
|
||||
|
||||
[[on-window-detected]]
|
||||
if.app-id = 'com.apple.backup.launcher' # TimeMachine
|
||||
run = ['layout floating']
|
||||
|
||||
|
||||
# Possible values: (qwerty|dvorak)
|
||||
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
|
||||
[key-mapping]
|
||||
preset = 'qwerty'
|
||||
|
||||
# Gaps between windows (inner-*) and between monitor edges (outer-*).
|
||||
# Possible values:
|
||||
# - Constant: gaps.outer.top = 8
|
||||
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
|
||||
# In this example, 24 is a default value when there is no match.
|
||||
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
|
||||
[gaps]
|
||||
inner.horizontal = 5
|
||||
inner.vertical = 5
|
||||
outer.top = [{ monitor.'^built-in retina display$' = 0 }, 0]
|
||||
outer.right = 0
|
||||
outer.bottom = 0
|
||||
outer.left = 0
|
||||
|
||||
# 'main' binding mode declaration
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||
# 'main' binding mode must be always presented
|
||||
# Fallback value (if you omit the key): mode.main.binding = {}
|
||||
[mode.main.binding]
|
||||
|
||||
cmd-h = [] # Disable "hide application"
|
||||
cmd-alt-h = [] # Disable "hide others"
|
||||
|
||||
# All possible keys:
|
||||
# - Letters. a, b, c, ..., z
|
||||
# - Numbers. 0, 1, 2, ..., 9
|
||||
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
|
||||
# - F-keys. f1, f2, ..., f20
|
||||
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,
|
||||
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab
|
||||
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
|
||||
# keypadMinus, keypadMultiply, keypadPlus
|
||||
# - Arrows. left, down, up, right
|
||||
|
||||
# All possible modifiers: cmd, alt, ctrl, shift
|
||||
|
||||
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
|
||||
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3)
|
||||
# alt-enter = '''exec-and-forget osascript -e '
|
||||
# tell application "Terminal"
|
||||
# do script
|
||||
# activate
|
||||
# end tell'
|
||||
# '''
|
||||
|
||||
# alt-cmd-shift-f = 'fullscreen'
|
||||
# alt-shift-f = 'layout floating'
|
||||
# alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
|
||||
alt-h = 'focus left'
|
||||
alt-j = 'focus down'
|
||||
alt-k = 'focus up'
|
||||
alt-l = 'focus right'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
|
||||
alt-shift-1 = 'workspace 1' # Main
|
||||
alt-shift-2 = 'workspace 2' # Media
|
||||
ctrl-shift-1 = 'move-node-to-workspace 1' # Move node to Main
|
||||
ctrl-shift-2 = 'move-node-to-workspace 2' # Move node to Media
|
||||
|
||||
alt-shift-tab = 'workspace-back-and-forth' # Switch between workspaces
|
||||
ctrl-shift-tab = 'move-workspace-to-monitor --wrap-around prev'
|
||||
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||
alt-a = 'mode apps'
|
||||
alt-s = 'mode service'
|
||||
alt-m = 'mode move'
|
||||
|
||||
# ╭──────────────────────────────────────────────────────────╮
|
||||
# │ alt-m │
|
||||
# ╰──────────────────────────────────────────────────────────╯
|
||||
[mode.move.binding]
|
||||
esc = ['reload-config', 'mode main']
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
|
||||
1 = ['move-node-to-workspace 1 --focus-follows-window']
|
||||
2 = ['move-node-to-workspace 2 --focus-follows-window']
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
||||
h = 'move left'
|
||||
j = 'move down'
|
||||
k = 'move up'
|
||||
l = 'move right'
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#join-with
|
||||
shift-h = 'join-with left'
|
||||
shift-j = 'join-with down'
|
||||
shift-k = 'join-with up'
|
||||
shift-l = 'join-with right'
|
||||
# https://nikitabobko.github.io/AeroSpace/commands#resize
|
||||
ctrl-h = 'resize smart -70'
|
||||
ctrl-l = 'resize smart +70'
|
||||
shift-left = 'resize smart +70'
|
||||
shift-right = 'resize smart -70'
|
||||
# https://nikitabobko.github.io/AeroSpace/commands#flatten-workspace-tree
|
||||
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||
|
||||
# ╭──────────────────────────────────────────────────────────╮
|
||||
# │ alt-a │
|
||||
# ╰──────────────────────────────────────────────────────────╯
|
||||
[mode.apps.binding]
|
||||
esc = ['reload-config', 'mode main']
|
||||
b = ['exec-and-forget open -a /Applications/Brave Browser.app', 'mode main'] # Browser
|
||||
c = ['exec-and-forget open -a /Applications/Ferdium.app', 'mode main'] # Chat
|
||||
g = ['exec-and-forget open -a /Applications/Ghostty.app', 'mode main'] # Ghostty
|
||||
o = ['exec-and-forget open -a /Applications/Obsidian.app', 'mode main'] # Obsidian
|
||||
s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main'] # Slack
|
||||
t = ['exec-and-forget open -a /Applications/TIDAL.app', 'mode main'] # Tidal
|
||||
w = ['exec-and-forget open -a /Applications/WezTerm.app', 'mode main'] # WezTerm
|
||||
|
||||
# ╭──────────────────────────────────────────────────────────╮
|
||||
# │ alt-s │
|
||||
# ╰──────────────────────────────────────────────────────────╯
|
||||
[mode.service.binding]
|
||||
esc = ['reload-config', 'mode main'] # reload config
|
||||
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
||||
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
|
||||
backspace = ['close-all-windows-but-current', 'mode main']
|
||||
69
config/alias
69
config/alias
@@ -12,16 +12,27 @@ alias ..="cd .."
|
||||
alias ...="cd ../.."
|
||||
alias ....="cd ../../.."
|
||||
|
||||
# Get git repository root path
|
||||
get_git_root()
|
||||
{
|
||||
# check that we are in a git repository
|
||||
if git rev-parse --is-inside-work-tree &> /dev/null; then
|
||||
git rev-parse --show-toplevel
|
||||
else
|
||||
>&2 msgr err "Not in a git repository"
|
||||
fi
|
||||
}
|
||||
|
||||
# cd to git root directory
|
||||
alias cdgr='cd "$(git root)"'
|
||||
alias cdgr='cd "$(get_git_root)"'
|
||||
|
||||
# interesting folders, and shortcuts
|
||||
alias .="cd $HOME"
|
||||
alias .b="cd $XDG_BIN_HOME"
|
||||
alias .c="cd $HOME/Code"
|
||||
alias .d="cd $DOTFILES"
|
||||
alias .dx="cd $DOTFILES;ks"
|
||||
alias .l="cd $HOME/.local"
|
||||
alias .='cd $HOME'
|
||||
alias .b='cd $XDG_BIN_HOME'
|
||||
alias .c='cd $HOME/Code'
|
||||
alias .d='cd $DOTFILES'
|
||||
alias .l='cd $HOME/.local'
|
||||
alias .o='cd $HOME/Code/ivuorinen/obsidian/'
|
||||
|
||||
# Shortcuts for listing
|
||||
alias ll="ls -la"
|
||||
@@ -31,13 +42,10 @@ alias l="ls -a"
|
||||
alias cd..="cd .."
|
||||
alias sl="ls"
|
||||
|
||||
# List only directories
|
||||
alias lsd="ls -lF | grep '^d'"
|
||||
|
||||
# IP addresses
|
||||
alias x-ip="dig +short myip.opendns.com @resolver1.opendns.com"
|
||||
alias localip="ipconfig getifaddr en1"
|
||||
alias ips="ifconfig -a | grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\|[a-fA-F0-9:]\+\)' | sed -e 's/inet6* //'"
|
||||
alias ips="ifconfig -a | grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\|[a-fA-F0-9:]\+\)' | sed -e 's/inet6* //' | sort"
|
||||
|
||||
# Show/hide hidden files in Finder
|
||||
alias show="defaults write com.apple.finder AppleShowAllFiles -bool true; killall Finder"
|
||||
@@ -52,14 +60,14 @@ alias flush="dscacheutil -flushcache"
|
||||
# Update locatedb
|
||||
alias updatedb="sudo /usr/libexec/locate.updatedb"
|
||||
|
||||
# tmux: automatically attach or create session with name 'main'
|
||||
alias tmux='tmux new-session -A -s main'
|
||||
# tmux: attach or create new session
|
||||
alias ta='tmux attach || tmux'
|
||||
# Date helpers
|
||||
alias isodate="date +'%Y-%m-%d'"
|
||||
alias x-datetime="date +'%Y-%m-%d %H:%M:%S'"
|
||||
alias x-timestamp="date +'%s'"
|
||||
|
||||
# nvim
|
||||
alias nvim-ks='NVIM_APPNAME="nvim-kickstart" nvim'
|
||||
alias ks='NVIM_APPNAME="nvim-kickstart" nvim'
|
||||
# nvim aliases
|
||||
alias vi='nvim'
|
||||
alias vim='nvim'
|
||||
|
||||
# xdg-ninja aliases for better experience
|
||||
alias xdg='xdg-ninja --skip-ok --skip-unsupported'
|
||||
@@ -72,8 +80,6 @@ alias zapds='find . -name ".DS_Store" -print -delete'
|
||||
alias zappyc="find . -type f -name '*.pyc' -ls -delete"
|
||||
# Run all zaps
|
||||
alias zapall="zapds && zappyc"
|
||||
# tail with follow flag on
|
||||
alias t='tail -f'
|
||||
# directory usage, return only the total
|
||||
alias dn='du -chd1'
|
||||
# Mirror site with wget
|
||||
@@ -81,6 +87,7 @@ alias mirror_site='wget -m -k -K -E -e robots=off'
|
||||
# Mirror stdout to stderr, useful for seeing data going through a pipe
|
||||
alias peek='tee >(cat 1>&2)'
|
||||
|
||||
# Runs Gitlab code quality scanner
|
||||
alias code_scanner='docker run
|
||||
--env SOURCE_CODE="$PWD"
|
||||
--volume "${PWD}":/code
|
||||
@@ -88,20 +95,25 @@ alias code_scanner='docker run
|
||||
registry.gitlab.com/gitlab-org/ci-cd/codequality:"${CODEQUALITY_VERSION:-latest}"
|
||||
/code'
|
||||
|
||||
# Runs trivy container image scanner
|
||||
alias trivy_scan='docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy'
|
||||
|
||||
# Opens dotfiles with $EDITOR
|
||||
alias zedit='$EDITOR ~/.dotfiles'
|
||||
# Open irssi with my configurations
|
||||
alias irssi='irssi --config=$XDG_CONFIG_HOME/irssi/config --home=$XDG_CONFIG_HOME/irssi'
|
||||
# Configures wget to use correct wget-hsts file
|
||||
alias wget='wget --hsts-file=$XDG_DATA_HOME/wget-hsts'
|
||||
# Configures svn to use correct config directory
|
||||
alias svn='svn --config-dir $XDG_CONFIG_HOME/subversion'
|
||||
|
||||
alias irssi="irssi --config=$XDG_CONFIG_HOME/irssi/config --home=$XDG_CONFIG_HOME/irssi"
|
||||
# Laravel artisan shortcut
|
||||
alias art='[ -f artisan ] && php artisan || php vendor/bin/artisan'
|
||||
|
||||
alias wget="wget --hsts-file=$XDG_DATA_HOME/wget-hsts"
|
||||
alias svn="svn --config-dir $XDG_CONFIG_HOME/subversion"
|
||||
# Laravel Sail shortcut
|
||||
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
|
||||
|
||||
if [[ $(uname) == 'Darwin' ]]; then
|
||||
|
||||
# Laravel Sail shortcut
|
||||
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
|
||||
|
||||
# Flush Directory Service cache
|
||||
alias flushdns="sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder"
|
||||
|
||||
@@ -122,6 +134,7 @@ X_ALIAS_FILES=(
|
||||
"$HOME/.config/alias-$(hostname)-secret"
|
||||
)
|
||||
for aliasFile in "${X_ALIAS_FILES[@]}"; do
|
||||
[ -f "$aliasFile" ] && source "$aliasFile" && msg "Sourced $aliasFile"
|
||||
# shellcheck source=$HOME/.config/alias-secret
|
||||
[ -f "$aliasFile" ] && source "$aliasFile" && msgr ok "Sourced $aliasFile"
|
||||
done
|
||||
unset X_ALIAS_FILES
|
||||
|
||||
3
config/asdf-direnv/zshrc
Normal file
3
config/asdf-direnv/zshrc
Normal 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)"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,32 +1,20 @@
|
||||
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
|
||||
age https://github.com/threkk/asdf-age.git 4df80a0
|
||||
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git dfb44cb
|
||||
bats https://github.com/timgluz/asdf-bats.git 299551f
|
||||
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
|
||||
gitleaks https://github.com/jmcvetta/asdf-gitleaks.git 0cc0d7e
|
||||
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 c36e6f0
|
||||
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 66200ff
|
||||
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
|
||||
terragrunt https://github.com/ohmer/asdf-terragrunt.git 4a6651a
|
||||
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
|
||||
vault https://github.com/asdf-community/asdf-hashicorp.git f1602b6
|
||||
yamllint https://github.com/ericcornelissen/asdf-yamllint.git d8c041a
|
||||
yq https://github.com/sudermanjr/asdf-yq.git 772992f
|
||||
1password-cli https://github.com/NeoHsu/asdf-1password-cli.git f5d5aab
|
||||
age https://github.com/threkk/asdf-age.git 396bdf6
|
||||
asdf-plugin-manager https://github.com/asdf-community/asdf-plugin-manager.git b5862c1
|
||||
direnv https://github.com/asdf-community/asdf-direnv.git 6ff3dbe
|
||||
dotenv-linter https://github.com/wesleimp/asdf-dotenv-linter.git 1369f53
|
||||
editorconfig-checker https://github.com/gabitchov/asdf-editorconfig-checker.git 585c1d5
|
||||
fd https://gitlab.com/wt0f/asdf-fd.git 17d56e0
|
||||
github-cli https://github.com/bartlomiejdanek/asdf-github-cli.git e0605b7
|
||||
golang https://github.com/asdf-community/asdf-golang.git e2527a3
|
||||
hadolint https://github.com/devlincashman/asdf-hadolint.git c8eb88b
|
||||
kubectl https://github.com/asdf-community/asdf-kubectl.git 2fb3b57
|
||||
pre-commit https://github.com/jonathanmorley/asdf-pre-commit.git 26bfc42
|
||||
ripgrep https://gitlab.com/wt0f/asdf-ripgrep.git e836665
|
||||
rust https://github.com/code-lever/asdf-rust.git 95acf4f
|
||||
shellcheck https://github.com/luizm/asdf-shellcheck.git 66200ff
|
||||
shfmt https://github.com/luizm/asdf-shfmt.git a42c5ff
|
||||
terragrunt https://github.com/ohmer/asdf-terragrunt.git 29f2935
|
||||
tf-summarize https://github.com/adamcrews/asdf-tf-summarize.git 880ad26
|
||||
yamllint https://github.com/ericcornelissen/asdf-yamllint.git e4cfb17
|
||||
yq https://github.com/sudermanjr/asdf-yq.git 772992f
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
ansible
|
||||
pipenv
|
||||
neovim
|
||||
libtmux
|
||||
|
||||
73
config/cheat/cheatsheets/personal/printf
Normal file
73
config/cheat/cheatsheets/personal/printf
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
tags: [printf, bash, zsh]
|
||||
---
|
||||
|
||||
# printf
|
||||
|
||||
The printf command accepts the following syntax:
|
||||
|
||||
`printf [-v var] [format specifiers] [arguments]`
|
||||
|
||||
- [-v var]
|
||||
The optional -v flag assigns the output to the [var]
|
||||
variable instead of printing it in standard output.
|
||||
|
||||
- [format specifiers]
|
||||
Format specifiers are strings that determine the methods of
|
||||
formatting specifiers. The following section includes a
|
||||
list of accepted specifiers.
|
||||
|
||||
- [arguments]
|
||||
Arguments can be any value or variable, and the [format specifiers]
|
||||
point to the [arguments]. If there are more arguments than format
|
||||
specifiers, the format string is reused until it interprets
|
||||
the last argument.
|
||||
|
||||
If there are fewer format specifiers than arguments, number formats
|
||||
are set to zero (0), while string formats are set to null (empty).
|
||||
|
||||
## printf Specifiers
|
||||
|
||||
Format Description
|
||||
------ -----------
|
||||
%c Treat the arguments as a single character.
|
||||
%d Treat the input as a decimal (integer) number (base 10).
|
||||
%e Treats the input as an exponential floating-point number.
|
||||
%f Treat the input as a floating-point number.
|
||||
%i Treat the input as an integer number (base 10).
|
||||
%o Treats the input as an octal number (base 8).
|
||||
%s Treat the input as a string of characters.
|
||||
%u Treat the input as an unsigned decimal (integer) number.
|
||||
%x Treats the input as a hexadecimal number (base 16).
|
||||
%% Print a percent sign.
|
||||
%Wd Print the W integer X digits wide.
|
||||
%(format)T Outputs a date-time string resulting from using format as a
|
||||
format string for strftime. The corresponding argument can
|
||||
be the number of seconds since Epoch (January 1, 1970, 00:00),
|
||||
-1 (the current time), or -2 (shell startup time).
|
||||
Not specifying an argument uses the current time as the default value.
|
||||
\% Print a percent sign.
|
||||
\n Prints a newline character.
|
||||
\t Print a tab character.
|
||||
|
||||
Some format specifiers accept format modifiers that modify their actions.
|
||||
Enter the modifiers between the % character and the character that
|
||||
specifies the format.
|
||||
|
||||
Available format modifiers are:
|
||||
|
||||
<N>. Enter a number that specifies a minimum field width.
|
||||
If the output text is shorter, it's padded with spaces.
|
||||
If the text is longer, the field expands.
|
||||
. (dot). When used with a field width modifier, the field doesn't
|
||||
expand for longer text. Instead, the text is truncated.
|
||||
-. Left-aligns the printed text. The default alignment is right.
|
||||
0. Pads the numbers with zeros instead of spaces.
|
||||
<space>. Pads a positive number with a space, and a negative
|
||||
number with a minus (-).
|
||||
+. Prints all numbers signed (+ for positive, - for negative).
|
||||
'. For decimal conversions, applies the thousands grouping
|
||||
separator to the integer portion of the output according
|
||||
to the current LC_NUMERIC file.
|
||||
|
||||
|
||||
@@ -61,12 +61,6 @@ cheatpaths:
|
||||
path: ~/.config/cheat/cheatsheets/community
|
||||
tags: [community]
|
||||
readonly: true
|
||||
# If you have personalized cheatsheets, list them last. They will take
|
||||
# precedence over the more global cheatsheets.
|
||||
- name: personal
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
||||
tags: [personal]
|
||||
readonly: false
|
||||
- name: pure-bash-bible
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/pure-bash-bible
|
||||
tags: [pure-bash-bible]
|
||||
@@ -75,6 +69,13 @@ cheatpaths:
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/tldr/tldr
|
||||
tags: [tldr]
|
||||
readonly: true
|
||||
# If you have personalized cheatsheets, list them last. They will take
|
||||
# precedence over the more global cheatsheets.
|
||||
- name: personal
|
||||
path: ~/.dotfiles/config/cheat/cheatsheets/personal
|
||||
tags: [personal]
|
||||
readonly: false
|
||||
|
||||
# While it requires no configuration here, it's also worth noting that
|
||||
# cheat will automatically append directories named '.cheat' within the
|
||||
# current working directory to the 'cheatpath'. This can be very useful if
|
||||
|
||||
@@ -1,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"
|
||||
|
||||
204
config/exports
204
config/exports
@@ -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
|
||||
@@ -288,8 +281,8 @@ export LESSHISTFILE="$XDG_STATE_HOME"/less/history
|
||||
# export LESS_TERMCAP_md="$ORANGE"
|
||||
|
||||
# zsh autoloaded terminfo
|
||||
export TERMINFO="${XDG_DATA_HOME}/terminfo"
|
||||
export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
|
||||
# export TERMINFO="${XDG_DATA_HOME}/terminfo"
|
||||
# export TERMINFO_DIRS="${XDG_DATA_HOME}/terminfo":/usr/share/terminfo
|
||||
|
||||
# Don't clear the screen after quitting a manual page
|
||||
export MANPAGER="less -X"
|
||||
@@ -301,15 +294,44 @@ 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)
|
||||
|
||||
# Antigen configuration
|
||||
# https://github.com/zsh-users/antigen/wiki/Configuration
|
||||
msg "Setting up Antigen configuration"
|
||||
export ADOTDIR="$XDG_DATA_HOME/antigen"
|
||||
export ANTIGEN_CACHE="$XDG_CACHE_HOME/antigen"
|
||||
export ANTIGEN_SYSTEM_RECEIPT_F=".local/share/antigen/antigen_system_lastupdate"
|
||||
export ANTIGEN_PLUGIN_RECEIPT_F=".local/share/antigen/antigen_plugin_lastupdate"
|
||||
# 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"
|
||||
|
||||
# Ansible configuration
|
||||
# https://docs.ansible.com/ansible/latest/reference_appendices/config.html
|
||||
@@ -320,26 +342,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 +388,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 +413,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 +440,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 +465,22 @@ 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_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf"
|
||||
export TMUX_TMPDIR="$XDG_STATE_HOME/tmux"
|
||||
export TMUX_CONF_DIR="$XDG_CONFIG_HOME/tmux"
|
||||
export TMUX_PLUGINS="$TMUX_CONF_DIR/plugins"
|
||||
export TMUX_CONF="$TMUX_CONF_DIR/tmux.conf"
|
||||
## These settings are for zsh-tmux
|
||||
export ZSH_TMUX_AUTOSTART=false
|
||||
export ZSH_TMUX_CONFIG="$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 +489,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 +499,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
|
||||
|
||||
15
config/ghostty/config
Normal file
15
config/ghostty/config
Normal file
@@ -0,0 +1,15 @@
|
||||
# vim: ft=ghostty
|
||||
theme = "light:tokyonight-day,dark:tokyonight-storm"
|
||||
font-family = "JetBrainsMono Nerd Font Mono"
|
||||
|
||||
background-blur-radius = 15
|
||||
background-opacity = 0.95
|
||||
|
||||
clipboard-read = allow
|
||||
clipboard-write = allow
|
||||
cursor-style = bar
|
||||
custom-shader-animation = true
|
||||
gtk-single-instance = true
|
||||
mouse-hide-while-typing = true
|
||||
shell-integration-features = true
|
||||
window-theme = system
|
||||
@@ -11,3 +11,5 @@
|
||||
[include]
|
||||
path = ~/.config/git/overrides/config
|
||||
|
||||
[advice]
|
||||
detachedHead = false
|
||||
|
||||
@@ -20,3 +20,4 @@ auth.json
|
||||
dfm.sh
|
||||
.scannerwork
|
||||
.phpactor.json
|
||||
.zsh_history
|
||||
|
||||
@@ -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
|
||||
|
||||
6
config/glow/glow.yml
Normal file
6
config/glow/glow.yml
Normal file
@@ -0,0 +1,6 @@
|
||||
# mouse support (TUI-mode only)
|
||||
mouse: false
|
||||
# use pager to display markdown
|
||||
pager: true
|
||||
# word-wrap at width
|
||||
width: 80
|
||||
@@ -13,9 +13,12 @@ tap "jesseduffield/lazygit"
|
||||
tap "k8sgpt-ai/k8sgpt"
|
||||
tap "keith/formulae"
|
||||
tap "mongodb/brew"
|
||||
tap "nikitabobko/tap"
|
||||
tap "pantheon-systems/external"
|
||||
tap "reviewdog/tap"
|
||||
tap "shivammathur/extensions"
|
||||
tap "shivammathur/php"
|
||||
tap "snyk/tap"
|
||||
tap "teamookla/speedtest"
|
||||
tap "xwmx/taps"
|
||||
# Run your GitHub Actions locally
|
||||
@@ -26,6 +29,8 @@ brew "age"
|
||||
brew "ca-certificates"
|
||||
# Mozilla CA bundle for Python
|
||||
brew "certifi"
|
||||
# Cryptography and SSL/TLS Toolkit
|
||||
brew "openssl@3"
|
||||
# Cryptographic recipes and primitives for Python
|
||||
brew "cryptography"
|
||||
# YAML Parser
|
||||
@@ -56,28 +61,32 @@ brew "apr"
|
||||
brew "apr-util"
|
||||
# Password hashing library and CLI utility
|
||||
brew "argon2"
|
||||
# Automatic configure script builder
|
||||
brew "autoconf"
|
||||
# Tool for generating GNU Standards-compliant Makefiles
|
||||
brew "automake"
|
||||
# GNU multiple precision arithmetic library
|
||||
brew "gmp"
|
||||
# GNU File, Shell, and Text utilities
|
||||
brew "coreutils"
|
||||
# Extendable version manager with support for Ruby, Node.js, Erlang & more
|
||||
brew "asdf"
|
||||
# Spell checker with better logic than ispell
|
||||
brew "aspell"
|
||||
# Automatic configure script builder
|
||||
brew "autoconf"
|
||||
# Collection of over 500 reusable autoconf macros
|
||||
brew "autoconf-archive"
|
||||
# Manage compile and link flags for libraries
|
||||
brew "pkg-config"
|
||||
# GNU multiple precision arithmetic library
|
||||
brew "gmp"
|
||||
# Package compiler and linker metadata toolkit
|
||||
brew "pkgconf"
|
||||
# Automated text file generator
|
||||
brew "autogen"
|
||||
# Tool for generating GNU Standards-compliant Makefiles
|
||||
brew "automake"
|
||||
# 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"
|
||||
# GNU File, Shell, and Text utilities
|
||||
brew "coreutils"
|
||||
# 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
|
||||
@@ -86,6 +95,8 @@ brew "fontconfig"
|
||||
brew "gettext"
|
||||
# Core application library for C
|
||||
brew "glib"
|
||||
# Prevent cloud misconfigurations during build-time for IaC tools
|
||||
brew "checkov"
|
||||
# Human-friendly and fast alternative to cut and (sometimes) awk
|
||||
brew "choose-rust"
|
||||
# Cross-platform make
|
||||
@@ -112,6 +123,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
|
||||
@@ -132,18 +151,10 @@ brew "gnutls"
|
||||
brew "gnupg"
|
||||
# Library access to GnuPG
|
||||
brew "gpgme"
|
||||
# Open source suite of directory software
|
||||
brew "openldap"
|
||||
# Manage your GnuPG keys with ease!
|
||||
brew "gpg-tui"
|
||||
# Image manipulation
|
||||
brew "netpbm"
|
||||
# C/C++ and Java libraries for Unicode and globalization
|
||||
brew "icu4c"
|
||||
# OpenType text shaping engine
|
||||
brew "harfbuzz"
|
||||
# Framework for layout and rendering of i18n text
|
||||
brew "pango"
|
||||
# Library to render SVG files using Cairo
|
||||
brew "librsvg"
|
||||
# Graph visualization software from AT&T and Bell Labs
|
||||
@@ -152,6 +163,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 +175,28 @@ 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"
|
||||
# Package manager for the Lua programming language
|
||||
brew "luarocks"
|
||||
# LZMA-based compression program similar to gzip or bzip2
|
||||
@@ -184,18 +205,26 @@ 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"
|
||||
# Open source suite of directory software
|
||||
brew "openldap"
|
||||
# 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"
|
||||
# General-purpose scripting language
|
||||
brew "php@8.2"
|
||||
# General-purpose scripting language
|
||||
brew "php@8.3"
|
||||
# Python version management
|
||||
brew "pyenv"
|
||||
# Migrate pip packages from one Python version to another
|
||||
@@ -208,10 +237,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,14 +265,20 @@ 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
|
||||
brew "doron-cohen/tap/antidot"
|
||||
# lets you quickly switch between multiple git user profiles
|
||||
brew "gesquive/tap/git-user"
|
||||
# Terminus is Pantheon's Command-line Interface (CLI)
|
||||
brew "pantheon-systems/external/terminus"
|
||||
# Automated code review tool integrated with any code analysis tools regardless of programming language.
|
||||
brew "reviewdog/tap/reviewdog"
|
||||
# Igbinary PHP extension
|
||||
brew "shivammathur/extensions/igbinary@8.3"
|
||||
# Imagick PHP extension
|
||||
brew "shivammathur/extensions/imagick@8.3"
|
||||
# Mcrypt PHP extension
|
||||
@@ -259,13 +294,15 @@ brew "shivammathur/extensions/uuid@8.3"
|
||||
# Yaml PHP extension
|
||||
brew "shivammathur/extensions/yaml@8.3"
|
||||
# General-purpose scripting language
|
||||
brew "shivammathur/php/php"
|
||||
# General-purpose scripting language
|
||||
brew "shivammathur/php/php-debug"
|
||||
# Command-line interface for 1Password
|
||||
cask "1password-cli"
|
||||
# GPU-accelerated terminal emulator
|
||||
cask "alacritty"
|
||||
# General-purpose scripting language
|
||||
brew "shivammathur/php/php@7.4"
|
||||
# General-purpose scripting language
|
||||
brew "shivammathur/php/php@8.0", link: true
|
||||
# Find & fix known vulnerabilities in open-source dependencies
|
||||
brew "snyk/tap/snyk"
|
||||
# AeroSpace is an i3-like tiling window manager for macOS
|
||||
cask "aerospace"
|
||||
# Text editor
|
||||
cask "coda"
|
||||
# Universal database tool and SQL client
|
||||
@@ -274,6 +311,9 @@ 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-open-sans"
|
||||
# GIT client
|
||||
cask "fork"
|
||||
# HTTP and GraphQL Client
|
||||
@@ -284,18 +324,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 +360,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 +370,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
53
config/htop/htoprc
Normal 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
73
config/ideavim/ideavimrc
Normal 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
|
||||
Submodule config/nvim-kickstart deleted from 7fb183eee3
20
config/nvim/.editorconfig
Normal file
20
config/nvim/.editorconfig
Normal 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
|
||||
11
config/nvim/.gitignore
vendored
11
config/nvim/.gitignore
vendored
@@ -1,8 +1,3 @@
|
||||
tt.*
|
||||
.tests
|
||||
doc/tags
|
||||
debug
|
||||
.repro
|
||||
foo.*
|
||||
*.log
|
||||
data
|
||||
spell/*
|
||||
!spell/.gitkeep
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"diagnostics.globals": ["vim"]
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"neodev": {
|
||||
"library": {
|
||||
"enabled": true,
|
||||
"plugins": true
|
||||
}
|
||||
},
|
||||
"neoconf": {
|
||||
"plugins": {
|
||||
"lua_ls": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -1,2 +1,71 @@
|
||||
-- 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.uv.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,
|
||||
},
|
||||
dev = {
|
||||
path = '~/Code/nvim', -- Load wip plugins from this path
|
||||
},
|
||||
install = {
|
||||
colorscheme = { vim.g.colors_theme },
|
||||
},
|
||||
profiling = {
|
||||
loader = true,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
require('nvm-default').setup()
|
||||
|
||||
require 'keymaps'
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -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": "6520"
|
||||
},
|
||||
"version": 6
|
||||
}
|
||||
108
config/nvim/lua/autogroups.lua
Normal file
108
config/nvim/lua/autogroups.lua
Normal file
@@ -0,0 +1,108 @@
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ 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,
|
||||
-- .ssh/shared.d/*, .ssh/local.d/*
|
||||
autocmd({ 'BufRead', 'BufNewFile' }, {
|
||||
desc = 'Set filetype for SSH config directory',
|
||||
pattern = {
|
||||
'*/?.ssh/{config|shared|local}.d/*',
|
||||
'*/?.ssh/config.local',
|
||||
'*/?.ssh/config.work',
|
||||
},
|
||||
command = 'set filetype=sshconfig',
|
||||
})
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
@@ -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
|
||||
@@ -1,16 +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.add({
|
||||
{ "<Leader>bc", group = "□ Comment box" },
|
||||
{ "<Leader>bcb", "<Cmd>CBccbox<CR>", desc = "Box Title" },
|
||||
{ "<Leader>bcd", "<Cmd>CBd<CR>", desc = "Remove a box" },
|
||||
{ "<Leader>bcl", "<Cmd>CBline<CR>", desc = "Simple Line" },
|
||||
{ "<Leader>bcm", "<Cmd>CBllbox14<CR>", desc = "Marked" },
|
||||
{ "<Leader>bct", "<Cmd>CBllline<CR>", desc = "Titled Line" },
|
||||
})
|
||||
@@ -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",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -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
|
||||
182
config/nvim/lua/keymaps.lua
Normal file
182
config/nvim/lua/keymaps.lua
Normal file
@@ -0,0 +1,182 @@
|
||||
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=130 :
|
||||
|
||||
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' })
|
||||
|
||||
-- ── ToggleTerm ──────────────────────────────────────────────────────
|
||||
K.d('<F1>', 'n', ':FloatermToggle<CR>', 'Toggle Floaterm')
|
||||
K.d('<F1>', 'i', '<Esc>:FloatermToggle<CR>', 'Toggle Floaterm')
|
||||
K.d('<F1>', 't', '<C-\\><C-n>:FloatermToggle<CR>', 'Toggle Floaterm')
|
||||
|
||||
-- ── Test operations ─────────────────────────────────────────────────
|
||||
K.nl('an', ':silent TestNearest<CR>', 'Test Nearest')
|
||||
K.nl('af', ':silent TestFile<CR>', 'Test File')
|
||||
K.nl('as', ':silent TestSuite<CR>', 'Test Suite')
|
||||
K.nl('al', ':silent TestLast<CR>', 'Test Last')
|
||||
K.nl('av', ':silent TestVisit<CR>', 'Test Visit')
|
||||
|
||||
-- ── PHPActor Operations ─────────────────────────────────────────────
|
||||
K.nl('apm', ':PhpactorContextMenu<cr>', 'PHPactor: Context Menu')
|
||||
K.nl('apn', ':PhpactorClassNew<cr>', 'PHPactor: Class New')
|
||||
K.nl('aps', ':PhpactorClassSearch<cr>', 'PHPactor: Class Search')
|
||||
K.nl('apt', ':PhpactorTransform<cr>', 'PHPactor: Transform')
|
||||
|
||||
-- ── 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
|
||||
|
||||
local b = function() return require 'telescope.builtin' end
|
||||
local lws = function() return b().lsp_workspace_symbols() end
|
||||
local ldws = function() return b().lsp_dynamic_workspace_symbols() end
|
||||
|
||||
K.n('<C-l>', ':lua vim.lsp.buf.signature_help()<CR>', { desc = 'Signature' })
|
||||
K.n('K', ':lua vim.lsp.buf.hover()<CR>', { desc = 'Hover Documentation' })
|
||||
K.ld('ca', 'n', ':lua vim.lsp.buf.code_action()<CR>', 'Code Action')
|
||||
K.ld('cci', 'n', function() b().lsp_incoming_calls() end, 'Incoming calls')
|
||||
K.ld('cco', 'n', function() b().lsp_outgoing_calls() end, 'Outgoing calls')
|
||||
K.ld('cd', 'n', function() b().lsp_definitions() end, 'Definitions')
|
||||
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', function() b().lsp_implementations() end, 'Implementations')
|
||||
K.ld('cp', 'n', function() b().lsp_type_definitions() end, 'Type Definition')
|
||||
K.ld('cr', 'n', vim.lsp.buf.rename, 'Rename')
|
||||
K.ld('cs', 'n', ':Telescope lsp_document_symbols<CR>', 'LSP Document Symbols')
|
||||
K.ld('ct', 'n', function() b().treesitter() end, 'treesitter')
|
||||
K.ld('cws', 'n', function() lws() end, 'Workspace Symbols')
|
||||
K.ld('cwd', 'n', function() ldws() end, 'Dynamic Workspace Symbols')
|
||||
|
||||
-- ── 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
|
||||
|
||||
local fuzzy_search = function()
|
||||
require('telescope.builtin').find_files(
|
||||
require('telescope.themes').get_dropdown {
|
||||
winblend = 20,
|
||||
previewer = true,
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
local lazy_plugins = function()
|
||||
return require('telescope').extensions.lazy_plugins.lazy_plugins()
|
||||
end
|
||||
|
||||
K.nl('f', ':Telescope fd --hidden=true<cr>', 'Find Files')
|
||||
K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers')
|
||||
K.nl('/', function() fuzzy_search() 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', function() lazy_plugins() end, 'Lazy Plugins')
|
||||
K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix')
|
||||
K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter')
|
||||
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 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')
|
||||
|
||||
-- ── Flash.nvim keymaps ──────────────────────────────────────────────
|
||||
local nxo = { 'n', 'x', 'o' }
|
||||
local fj = function() return require('flash').jump() end
|
||||
local ft = function() return require('flash').treesitter() end
|
||||
local fx = function() return require('flash').toggle() end
|
||||
K.d('zk', nxo, fj, { desc = 'Flash' })
|
||||
K.d('Zk', nxo, ft, { desc = 'Flash Treesitter' })
|
||||
K.d('<m-s>', 'c', fx, { desc = 'Toggle Flash Search' })
|
||||
|
||||
-- That concludes the keymaps section of the config.
|
||||
122
config/nvim/lua/nvm-default/init.lua
Normal file
122
config/nvim/lua/nvm-default/init.lua
Normal file
@@ -0,0 +1,122 @@
|
||||
-- Get nvm default version and use it in node_host_prog
|
||||
-- and g.copilot_node_command.
|
||||
--
|
||||
-- This module automatically configures Neovim to use the default Node.js version
|
||||
-- from NVM. It requires a working NVM installation and 'default' alias to be set,
|
||||
-- and also neovim npm package to be installed.
|
||||
--
|
||||
-- You can install the neovim package by running:
|
||||
-- npm i --global neovim
|
||||
--
|
||||
-- Usage:
|
||||
-- require('nvm-default').setup({
|
||||
-- add_to_path = true, -- optional: add NVM bin directory to PATH
|
||||
-- nvm_path = "~/.nvm", -- optional: custom NVM installation path
|
||||
-- notify_level = "info" -- optional: notification level
|
||||
-- })
|
||||
|
||||
local M = {}
|
||||
|
||||
M.name = 'nvm-default.nvim'
|
||||
M.version = '0.1.0' -- x-release-please-version
|
||||
|
||||
-- Helper function to run a shell command
|
||||
---@param cmd string Run a shell command
|
||||
---@return string? Return the result of the command
|
||||
local function run_command(cmd)
|
||||
local result = vim.fn.system(cmd)
|
||||
return vim.v.shell_error == 0 and result:gsub('%s+$', '') or nil
|
||||
end
|
||||
|
||||
-- Helper function to show a notification
|
||||
---@param msg string Show a message
|
||||
---@param level "info"|"warn"|"error"|"trace" Notification level
|
||||
local function n(msg, level)
|
||||
if msg == nil then msg = M.name .. ': No message provided' end
|
||||
if level == nil then level = 'trace' end
|
||||
|
||||
local log_level = vim.log.levels.INFO
|
||||
|
||||
if level == 'info' then
|
||||
log_level = vim.log.levels.INFO
|
||||
elseif level == 'warn' then
|
||||
log_level = vim.log.levels.WARN
|
||||
elseif level == 'error' then
|
||||
log_level = vim.log.levels.ERROR
|
||||
elseif level == 'trace' then
|
||||
log_level = vim.log.levels.TRACE
|
||||
end
|
||||
|
||||
vim.notify(M.name .. ': ' .. msg, log_level)
|
||||
end
|
||||
|
||||
---@class NvmDefaultOptions
|
||||
---@field add_to_path boolean Add found NVM bin directory to PATH
|
||||
---@field nvm_path string Where nvm installation is located
|
||||
---@field notify_level number|"info"|"warn"|"error"|"trace" Notification level filter
|
||||
|
||||
-- Default options
|
||||
---@type NvmDefaultOptions
|
||||
M.defaults = {
|
||||
add_to_path = vim.g.nvm_default_add_to_path or true,
|
||||
nvm_path = vim.fn.expand(os.getenv 'NVM_DIR' or '~/.nvm'),
|
||||
notify_level = vim.g.nvm_default_notify_level or 'info',
|
||||
}
|
||||
|
||||
-- Fetch the NVM default version or fallback to node version
|
||||
---@param opts? NvmDefaultOptions Plugin options
|
||||
function M.setup(opts)
|
||||
local options = vim.tbl_deep_extend('force', M.defaults, opts or {})
|
||||
|
||||
local nvm_path = options.nvm_path
|
||||
local node_version = run_command(
|
||||
string.format('. %s/nvm.sh && nvm version default', nvm_path)
|
||||
) or run_command(string.format('. %s/nvm.sh && nvm version node', nvm_path))
|
||||
|
||||
if node_version and node_version:match '^v' then
|
||||
-- Set vim.g.node_host_prog and vim.g.copilot_node_command
|
||||
local current_nvm_version_path =
|
||||
string.format('%s/versions/node/%s', nvm_path, node_version)
|
||||
local current_nvm_node_bin_path =
|
||||
string.format('%s/bin', current_nvm_version_path)
|
||||
local current_nvm_node_bin =
|
||||
string.format('%s/node', current_nvm_node_bin_path)
|
||||
local neovim_node_host_bin_path =
|
||||
string.format('%s/neovim-node-host', current_nvm_node_bin_path)
|
||||
|
||||
-- Collect missing files and directories errors for error output
|
||||
local missing = {}
|
||||
|
||||
-- If node_dir isn't there, stop and show error
|
||||
if not vim.fn.isdirectory(current_nvm_version_path) then
|
||||
table.insert(missing, 'Node.js directory: ' .. current_nvm_version_path)
|
||||
end
|
||||
|
||||
-- If node_bin isn't there, stop and show error
|
||||
if not vim.fn.filereadable(current_nvm_node_bin) then
|
||||
table.insert(missing, 'Node.js binary: ' .. current_nvm_node_bin)
|
||||
end
|
||||
|
||||
if not vim.fn.filereadable(neovim_node_host_bin_path) then
|
||||
table.insert(missing, 'Neovim host binary: ' .. neovim_node_host_bin_path)
|
||||
end
|
||||
|
||||
if #missing > 0 then
|
||||
n('Missing required files:\n- ' .. table.concat(missing, '\n- '), 'error')
|
||||
return
|
||||
end
|
||||
|
||||
-- Add to PATH if requested. Can be turned off by setting if it messes with
|
||||
-- other tools.
|
||||
if options.add_to_path then
|
||||
vim.env.PATH = current_nvm_node_bin_path .. ':' .. vim.env.PATH
|
||||
end
|
||||
|
||||
vim.g.node_host_prog = neovim_node_host_bin_path
|
||||
vim.g.copilot_node_command = current_nvm_node_bin
|
||||
else
|
||||
n('Unable to determine the Node.js version from nvm.', 'error')
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
66
config/nvim/lua/options.lua
Normal file
66
config/nvim/lua/options.lua
Normal file
@@ -0,0 +1,66 @@
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ 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
|
||||
local a = vim.api -- A table to store API functions
|
||||
|
||||
-- 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.confirm = true -- Confirm before closing unsaved buffers
|
||||
o.ignorecase = true -- Ignore case in search patterns
|
||||
o.inccommand = 'split' -- Preview substitutions live, as you type!
|
||||
o.list = true -- Show invisible characters
|
||||
o.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
|
||||
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 = 8 -- Show context around cursor
|
||||
o.sidescrolloff = 8 -- Show context around cursor
|
||||
o.signcolumn = 'yes' -- 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
|
||||
|
||||
-- Session options
|
||||
-- This is a comma separated list of options that will be
|
||||
-- saved when a session ends.
|
||||
local so = 'buffers,curdir,folds,tabpages,winsize,winpos,terminal,localoptions'
|
||||
o.sessionoptions = so
|
||||
|
||||
o.wildmode = 'longest:full,full' -- Command-line completion mode
|
||||
|
||||
-- Enable the colorcolumn
|
||||
a.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'
|
||||
o.clipboard = c
|
||||
end)
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
128
config/nvim/lua/plugins/blink.lua
Normal file
128
config/nvim/lua/plugins/blink.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
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,
|
||||
},
|
||||
},
|
||||
|
||||
{ 'L3MON4D3/LuaSnip', version = 'v2.*', build = 'make install_jsregexp' },
|
||||
|
||||
-- Set of preconfigured snippets for different languages.
|
||||
-- https://github.com/rafamadriz/friendly-snippets
|
||||
{
|
||||
'rafamadriz/friendly-snippets',
|
||||
config = function() require('luasnip.loaders.from_vscode').lazy_load() end,
|
||||
},
|
||||
|
||||
-- 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'
|
||||
opts = {
|
||||
snippets = { preset = 'luasnip' },
|
||||
-- '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 = {
|
||||
'lazydev',
|
||||
'lsp',
|
||||
'snippets',
|
||||
'copilot',
|
||||
'path',
|
||||
'buffer',
|
||||
},
|
||||
providers = {
|
||||
copilot = {
|
||||
name = 'copilot',
|
||||
module = 'blink-cmp-copilot',
|
||||
},
|
||||
lazydev = {
|
||||
name = 'LazyDev',
|
||||
module = 'lazydev.integrations.blink',
|
||||
-- make lazydev completions top priority (see `:h blink.cmp`)
|
||||
score_offset = 100,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- 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' },
|
||||
},
|
||||
}
|
||||
211
config/nvim/lua/plugins/code.lua
Normal file
211
config/nvim/lua/plugins/code.lua
Normal file
@@ -0,0 +1,211 @@
|
||||
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' },
|
||||
},
|
||||
|
||||
-- Terminal manager for (neo)vim
|
||||
-- https://github.com/voldikss/vim-floaterm
|
||||
{
|
||||
'voldikss/vim-floaterm',
|
||||
cmd = { 'FloatermToggle' },
|
||||
init = function()
|
||||
vim.g.floaterm_width = 0.8
|
||||
vim.g.floaterm_height = 0.8
|
||||
end,
|
||||
},
|
||||
|
||||
-- Run your tests at the speed of thought
|
||||
-- https://github.com/vim-test/vim-test
|
||||
{
|
||||
'vim-test/vim-test',
|
||||
dependencies = { 'voldikss/vim-floaterm' },
|
||||
config = function()
|
||||
vim.cmd [[
|
||||
function! PhpUnitTransform(cmd) abort
|
||||
return join(map(split(a:cmd), 'v:val == "--colors" ? "--colors=always" : v:val'))
|
||||
endfunction
|
||||
|
||||
let g:test#custom_transformations = {'phpunit': function('PhpUnitTransform')}
|
||||
let g:test#transformation = 'phpunit'
|
||||
|
||||
" let test#php#phpunit#options = '--colors=always'
|
||||
let test#php#pest#options = '-v'
|
||||
let test#javascript#jest#options = '--color'
|
||||
|
||||
function! FloatermStrategy(cmd)
|
||||
execute 'silent FloatermSend q'
|
||||
execute 'silent FloatermKill'
|
||||
execute 'FloatermNew! '.a:cmd.' | less -X'
|
||||
endfunction
|
||||
|
||||
let g:test#custom_strategies = {'floaterm': function('FloatermStrategy')}
|
||||
let g:test#strategy = 'floaterm'
|
||||
]]
|
||||
end,
|
||||
},
|
||||
|
||||
-- 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 = '=.+',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- projectionist.vim: Granular project configuration
|
||||
-- https://github.com/tpope/vim-projectionist
|
||||
{
|
||||
'tpope/vim-projectionist',
|
||||
dependencies = 'tpope/vim-dispatch',
|
||||
config = function()
|
||||
vim.g.projectionist_heuristics = {
|
||||
artisan = {
|
||||
['*'] = {
|
||||
start = 'php artisan serve',
|
||||
console = 'php artisan tinker',
|
||||
},
|
||||
['app/*.php'] = {
|
||||
type = 'source',
|
||||
alternate = {
|
||||
'tests/Unit/{}Test.php',
|
||||
'tests/Feature/{}Test.php',
|
||||
},
|
||||
},
|
||||
['tests/Feature/*Test.php'] = {
|
||||
type = 'test',
|
||||
alternate = 'app/{}.php',
|
||||
},
|
||||
['tests/Unit/*Test.php'] = {
|
||||
type = 'test',
|
||||
alternate = 'app/{}.php',
|
||||
},
|
||||
['app/Models/*.php'] = {
|
||||
type = 'model',
|
||||
},
|
||||
['app/Http/Controllers/*.php'] = {
|
||||
type = 'controller',
|
||||
},
|
||||
['routes/*.php'] = {
|
||||
type = 'route',
|
||||
},
|
||||
['database/migrations/*.php'] = {
|
||||
type = 'migration',
|
||||
},
|
||||
},
|
||||
['src/&composer.json'] = {
|
||||
['src/*.php'] = {
|
||||
type = 'source',
|
||||
alternate = {
|
||||
'tests/{}Test.php',
|
||||
},
|
||||
},
|
||||
['tests/*Test.php'] = {
|
||||
type = 'test',
|
||||
alternate = 'src/{}.php',
|
||||
},
|
||||
},
|
||||
['app/&composer.json'] = {
|
||||
['app/*.php'] = {
|
||||
type = 'source',
|
||||
alternate = {
|
||||
'tests/{}Test.php',
|
||||
},
|
||||
},
|
||||
['tests/*Test.php'] = {
|
||||
type = 'test',
|
||||
alternate = 'app/{}.php',
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- A vim text object for XML/HTML attributes.
|
||||
-- https://github.com/whatyouhide/vim-textobj-xmlattr
|
||||
{
|
||||
'whatyouhide/vim-textobj-xmlattr',
|
||||
dependencies = { 'kana/vim-textobj-user' },
|
||||
},
|
||||
|
||||
-- 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
|
||||
},
|
||||
|
||||
-- Mainly a PHP Language Server with more features than you can shake a stick at
|
||||
-- https://github.com/phpactor/phpactor
|
||||
{
|
||||
'phpactor/phpactor',
|
||||
build = 'composer install --no-dev --optimize-autoloader',
|
||||
ft = 'php',
|
||||
},
|
||||
}
|
||||
@@ -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 },
|
||||
}
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
170
config/nvim/lua/plugins/folke.lua
Normal file
170
config/nvim/lua/plugins/folke.lua
Normal file
@@ -0,0 +1,170 @@
|
||||
return {
|
||||
-- A collection of small QoL plugins for Neovim
|
||||
-- https://github.com/folke/snacks.nvim
|
||||
{
|
||||
'folke/snacks.nvim',
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
opts = {
|
||||
bigfile = { enabled = true },
|
||||
gitbrowse = { 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
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Highly experimental plugin that completely
|
||||
-- replaces the UI for messages, cmdline and the popupmenu.
|
||||
-- https://github.com/folke/noice.nvim
|
||||
{
|
||||
'folke/noice.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
lsp = {
|
||||
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
|
||||
override = {
|
||||
['vim.lsp.util.convert_input_to_markdown_lines'] = true,
|
||||
['vim.lsp.util.stylize_markdown'] = true,
|
||||
['cmp.entry.get_documentation'] = true, -- requires hrsh7th/nvim-cmp
|
||||
},
|
||||
},
|
||||
-- you can enable a preset for easier configuration
|
||||
presets = {
|
||||
bottom_search = true, -- use a classic bottom cmdline for search
|
||||
command_palette = true, -- position the cmdline and popupmenu together
|
||||
long_message_to_split = true, -- long messages will be sent to a split
|
||||
inc_rename = false, -- enables an input dialog for inc-rename.nvim
|
||||
lsp_doc_border = false, -- add a border to hover docs and signature help
|
||||
},
|
||||
routes = {
|
||||
{
|
||||
filter = {
|
||||
event = 'msg_show',
|
||||
kind = '',
|
||||
find = 'written',
|
||||
},
|
||||
opts = { skip = true },
|
||||
},
|
||||
{
|
||||
filter = {
|
||||
event = 'msg_show',
|
||||
any = {
|
||||
{ find = '%d+L, %d+B' },
|
||||
{ find = '; after #%d+' },
|
||||
{ find = '; before #%d+' },
|
||||
{ find = "' added to" },
|
||||
},
|
||||
},
|
||||
view = 'mini',
|
||||
},
|
||||
{
|
||||
filter = {
|
||||
event = 'lsp',
|
||||
kind = 'progress',
|
||||
cond = function(message)
|
||||
local client = vim.tbl_get(message.opts, 'progress', 'client')
|
||||
return client == 'lua_ls'
|
||||
end,
|
||||
},
|
||||
opts = { skip = true },
|
||||
},
|
||||
},
|
||||
views = {
|
||||
cmdline_popup = {
|
||||
border = {
|
||||
style = 'none',
|
||||
padding = { 1, 2 },
|
||||
},
|
||||
filter_options = {},
|
||||
win_options = {
|
||||
winhighlight = 'NormalFloat:NormalFloat,FloatBorder:FloatBorder',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
dependencies = {
|
||||
-- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
|
||||
'MunifTanjim/nui.nvim',
|
||||
-- OPTIONAL:
|
||||
-- `nvim-notify` is only needed, if you want to use the notification view.
|
||||
-- If not available, we use `mini` as the fallback
|
||||
'rcarriga/nvim-notify',
|
||||
},
|
||||
},
|
||||
|
||||
-- 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,
|
||||
cmd = 'Trouble',
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
opts = {
|
||||
auto_preview = true,
|
||||
auto_fold = true,
|
||||
auto_close = true,
|
||||
use_lsp_diagnostic_signs = true,
|
||||
keys = {
|
||||
j = 'next',
|
||||
k = 'prev',
|
||||
},
|
||||
modes = {
|
||||
diagnostics = {
|
||||
auto_open = true,
|
||||
},
|
||||
test = {
|
||||
mode = 'diagnostics',
|
||||
preview = {
|
||||
type = 'split',
|
||||
relative = 'win',
|
||||
position = 'right',
|
||||
size = 0.3,
|
||||
},
|
||||
},
|
||||
cascade = {
|
||||
mode = 'diagnostics', -- inherit from diagnostics mode
|
||||
filter = function(items)
|
||||
local severity = vim.diagnostic.severity.HINT
|
||||
for _, item in ipairs(items) do
|
||||
severity = math.min(severity, item.severity)
|
||||
end
|
||||
return vim.tbl_filter(
|
||||
function(item) return item.severity == severity end,
|
||||
items
|
||||
)
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Navigate your code with search labels, enhanced
|
||||
-- character motions and Treesitter integration
|
||||
-- https://github.com/folke/flash.nvim
|
||||
{
|
||||
'folke/flash.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {},
|
||||
},
|
||||
}
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
353
config/nvim/lua/plugins/lsp.lua
Normal file
353
config/nvim/lua/plugins/lsp.lua
Normal file
@@ -0,0 +1,353 @@
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ LSP Setup and configuration │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
require 'utils'
|
||||
|
||||
-- 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 = {
|
||||
init_options = {
|
||||
licenceKey = GetIntelephenseLicense(),
|
||||
},
|
||||
},
|
||||
jsonls = {},
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
completion = {
|
||||
callSnippet = 'Replace',
|
||||
},
|
||||
diagnostics = {
|
||||
globals = {
|
||||
'vim',
|
||||
},
|
||||
disable = {
|
||||
-- Ignore lua_ls noisy `missing-fields` warnings
|
||||
'missing-fields',
|
||||
},
|
||||
},
|
||||
hint = {
|
||||
enable = true,
|
||||
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,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- Mason tools to automatically install and configure.
|
||||
-- These are automatically configured by WhoIsSethDaniel/mason-tool-installer.nvim
|
||||
local mason_tools = {
|
||||
'actionlint',
|
||||
'editorconfig-checker',
|
||||
'goimports',
|
||||
'gotests',
|
||||
'phpcbf',
|
||||
'phpmd',
|
||||
'phpstan',
|
||||
'pint',
|
||||
'prettierd',
|
||||
'semgrep',
|
||||
'shellcheck',
|
||||
'shfmt',
|
||||
'staticcheck',
|
||||
'stylua',
|
||||
'trivy',
|
||||
'vint',
|
||||
'yamlfmt',
|
||||
}
|
||||
|
||||
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' } },
|
||||
-- load assert and describe paths
|
||||
{ path = 'luassert/library', words = { 'assert' } },
|
||||
{ path = 'busted/library', words = { 'describe' } },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Meta type definitions for the Lua platform Luvit.
|
||||
-- https://github.com/Bilal2453/luvit-meta
|
||||
{ 'Bilal2453/luvit-meta', lazy = true },
|
||||
|
||||
-- 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 = mason_tools,
|
||||
},
|
||||
},
|
||||
|
||||
-- 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' },
|
||||
|
||||
-- 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',
|
||||
opts = {
|
||||
default_mappings = false,
|
||||
servers = lsp_servers,
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('lazydev').setup()
|
||||
require('lsp-setup').setup(opts)
|
||||
local cmp = require 'blink.cmp'
|
||||
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 = 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 },
|
||||
},
|
||||
}
|
||||
|
||||
-- Diagnostic configuration
|
||||
local signs = {
|
||||
{ name = 'DiagnosticSignError', text = '' }, -- Error icon
|
||||
{ name = 'DiagnosticSignWarn', text = '' }, -- Warning icon
|
||||
{ name = 'DiagnosticSignHint', text = '' }, -- Hint icon
|
||||
{ name = 'DiagnosticSignInfo', text = '' }, -- Information icon
|
||||
}
|
||||
|
||||
local function ensure_sign_defined(name, sign_opts)
|
||||
if vim.tbl_isempty(vim.fn.sign_getdefined(name)) then
|
||||
vim.fn.sign_define(name, sign_opts)
|
||||
end
|
||||
end
|
||||
|
||||
for _, sign in ipairs(signs) do
|
||||
ensure_sign_defined(sign.name, {
|
||||
text = sign.text,
|
||||
texthl = sign.texthl or sign.name,
|
||||
numhl = sign.numhl or sign.name,
|
||||
})
|
||||
end
|
||||
|
||||
---@type vim.diagnostic.Opts
|
||||
local diagnostics_config = {
|
||||
signs = {
|
||||
active = signs, -- show signs
|
||||
},
|
||||
update_in_insert = false,
|
||||
underline = true,
|
||||
severity_sort = true,
|
||||
virtual_text = true,
|
||||
}
|
||||
|
||||
vim.diagnostic.config(diagnostics_config)
|
||||
|
||||
-- end of junnplus/lsp-setup config
|
||||
end,
|
||||
},
|
||||
|
||||
-- Lightweight yet powerful formatter plugin for Neovim
|
||||
-- https://github.com/stevearc/conform.nvim
|
||||
{
|
||||
'stevearc/conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
opts = {
|
||||
notify_on_error = false,
|
||||
---@type nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts
|
||||
format_on_save = function(bufnr)
|
||||
-- Disable "format_on_save lsp_fallback" for languages that don't
|
||||
-- have a well standardized coding style. You can add additional
|
||||
-- languages here or re-enable it for the disabled ones.
|
||||
local disable_filetypes = { c = true, cpp = true }
|
||||
local lsp_format_opt
|
||||
if disable_filetypes[vim.bo[bufnr].filetype] then
|
||||
lsp_format_opt = 'never'
|
||||
else
|
||||
lsp_format_opt = 'fallback'
|
||||
end
|
||||
|
||||
-- Disable autoformat for files in a certain paths
|
||||
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
||||
if bufname:match '/node_modules|vendor/' then return end
|
||||
|
||||
return {
|
||||
timeout_ms = 500,
|
||||
lsp_format = lsp_format_opt,
|
||||
}
|
||||
end,
|
||||
formatters_by_ft = {
|
||||
lua = { 'stylua' },
|
||||
sh = { 'shfmt' },
|
||||
bash = { 'shfmt' },
|
||||
php = { 'phpcbf' },
|
||||
-- Conform can also run multiple formatters sequentially
|
||||
-- python = { "isort", "black" },
|
||||
--
|
||||
-- You can use 'stop_after_first' to run the first available formatter from the list
|
||||
-- javascript = { "prettierd", "prettier", stop_after_first = true },
|
||||
},
|
||||
},
|
||||
init = function()
|
||||
-- If you want the formatexpr, here is the place to set it
|
||||
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
||||
end,
|
||||
},
|
||||
-- Automatically install formatters registered with conform.nvim via mason.nvim
|
||||
-- https://github.com/zapling/mason-conform.nvim
|
||||
{ 'zapling/mason-conform.nvim', opts = {} },
|
||||
}
|
||||
241
config/nvim/lua/plugins/mini.lua
Normal file
241
config/nvim/lua/plugins/mini.lua
Normal file
@@ -0,0 +1,241 @@
|
||||
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>a', desc = '+Automation' },
|
||||
{ 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()
|
||||
|
||||
-- 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 = 9999 }
|
||||
local diagnostics = sl.section_diagnostics { trunc_width = 9999 }
|
||||
local filename = sl.section_filename { trunc_width = 9999 }
|
||||
local fileinfo = sl.section_fileinfo { trunc_width = 9999 }
|
||||
local location = sl.section_location { trunc_width = 9999 }
|
||||
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,
|
||||
},
|
||||
}
|
||||
107
config/nvim/lua/plugins/neotree.lua
Normal file
107
config/nvim/lua/plugins/neotree.lua
Normal file
@@ -0,0 +1,107 @@
|
||||
-- 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,
|
||||
hide_root_node = true,
|
||||
popup_border_style = 'rounded',
|
||||
enable_git_status = true,
|
||||
enable_diagnostics = true,
|
||||
sources = {
|
||||
'filesystem',
|
||||
'buffers',
|
||||
'document_symbols',
|
||||
},
|
||||
source_selector = {
|
||||
winbar = true,
|
||||
statusline = false,
|
||||
separator = { left = '', right = '' },
|
||||
show_separator_on_edge = true,
|
||||
highlight_tab = 'SidebarTabInactive',
|
||||
highlight_tab_active = 'SidebarTabActive',
|
||||
highlight_background = 'StatusLine',
|
||||
highlight_separator = 'SidebarTabInactiveSeparator',
|
||||
highlight_separator_active = 'SidebarTabActiveSeparator',
|
||||
},
|
||||
event_handlers = {
|
||||
{
|
||||
event = 'file_opened',
|
||||
handler = function(file_path)
|
||||
require('neo-tree.command').execute { action = 'close' }
|
||||
end,
|
||||
},
|
||||
},
|
||||
default_component_configs = {
|
||||
indent = {
|
||||
padding = 0,
|
||||
},
|
||||
name = {
|
||||
use_git_status_colors = true,
|
||||
highlight_opened_files = 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',
|
||||
['<cr>'] = 'open_with_window_picker',
|
||||
},
|
||||
},
|
||||
filtered_items = {
|
||||
hide_dotfiles = false,
|
||||
hide_hidden = true, -- only works on Windows for hidden files/directories
|
||||
never_show = {
|
||||
'.DS_Store',
|
||||
},
|
||||
hide_by_name = {
|
||||
'node_modules',
|
||||
'.git',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -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,
|
||||
},
|
||||
},
|
||||
}
|
||||
44
config/nvim/lua/plugins/other.lua
Normal file
44
config/nvim/lua/plugins/other.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
return {
|
||||
{
|
||||
'rmagatti/auto-session',
|
||||
lazy = false,
|
||||
version = '*',
|
||||
opts = {
|
||||
suppressed_dirs = {
|
||||
'/',
|
||||
'~/',
|
||||
'~/Downloads',
|
||||
'~/Library',
|
||||
},
|
||||
bypass_save_filetypes = {
|
||||
'PlenaryTestPopup',
|
||||
'alpha',
|
||||
'checkhealth',
|
||||
'dashboard',
|
||||
'dbout',
|
||||
'gitsigns.blame',
|
||||
'grug-far',
|
||||
'help',
|
||||
'lspinfo',
|
||||
'man',
|
||||
'neo-tree',
|
||||
'neotest-output',
|
||||
'neotest-output-panel',
|
||||
'neotest-summary',
|
||||
'notify',
|
||||
'qf',
|
||||
'spectre_panel',
|
||||
'startuptime',
|
||||
'trouble',
|
||||
'tsplayground',
|
||||
},
|
||||
-- log_level = 'debug',
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
'nvim-lua/plenary.nvim',
|
||||
version = '*',
|
||||
lazy = false,
|
||||
},
|
||||
}
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
105
config/nvim/lua/plugins/telescope.lua
Normal file
105
config/nvim/lua/plugins/telescope.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
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'
|
||||
|
||||
local open_with_trouble = require('trouble.sources.telescope').open
|
||||
local add_to_trouble = require('trouble.sources.telescope').add
|
||||
|
||||
-- [[ 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,
|
||||
['<C-t>'] = open_with_trouble,
|
||||
['<C-q>'] = add_to_trouble,
|
||||
},
|
||||
n = {
|
||||
['<C-t>'] = open_with_trouble,
|
||||
['<C-q>'] = add_to_trouble,
|
||||
},
|
||||
},
|
||||
},
|
||||
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,
|
||||
}
|
||||
@@ -1,23 +1,67 @@
|
||||
-- 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',
|
||||
},
|
||||
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,
|
||||
}
|
||||
|
||||
@@ -1,135 +1,56 @@
|
||||
-- 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" },
|
||||
|
||||
-- The fastest Neovim colorizer
|
||||
-- https://github.com/catgoose/nvim-colorizer.lua
|
||||
{
|
||||
'catgoose/nvim-colorizer.lua',
|
||||
opts = {
|
||||
user_default_options = {
|
||||
names = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- 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 = {} },
|
||||
}
|
||||
|
||||
4
config/nvim/lua/plugins/wakatime.lua
Normal file
4
config/nvim/lua/plugins/wakatime.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
-- Vim plugin for automatic time tracking and metrics
|
||||
-- generated from your programming activity.
|
||||
-- https://github.com/wakatime/vim-wakatime
|
||||
return { 'wakatime/vim-wakatime', lazy = false, enabled = true }
|
||||
104
config/nvim/lua/utils.lua
Normal file
104
config/nvim/lua/utils.lua
Normal file
@@ -0,0 +1,104 @@
|
||||
-- These are my utility functions
|
||||
-- I use to make my life bit easier
|
||||
|
||||
local function file_exists(name)
|
||||
if type(name) ~= 'string' then return false end
|
||||
return os.rename(name, name) and true or false
|
||||
end
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ 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
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
-- │ LSP Related helper functions │
|
||||
-- ╰─────────────────────────────────────────────────────────╯
|
||||
|
||||
-- Get the license key for intelephense
|
||||
---@return string|nil -- The license key for intelephense
|
||||
function GetIntelephenseLicense()
|
||||
local p = os.getenv 'HOME' .. '/intelephense/license.txt'
|
||||
|
||||
if not file_exists(p) then return nil end
|
||||
|
||||
local f = assert(io.open(p, 'rb'))
|
||||
local content = f:read '*a'
|
||||
f:close()
|
||||
return string.gsub(content, '%s+', '')[1] or nil
|
||||
end
|
||||
462
config/nvim/snippets/javascript.json
Normal file
462
config/nvim/snippets/javascript.json
Normal file
@@ -0,0 +1,462 @@
|
||||
{
|
||||
"While ..": {
|
||||
"body": [
|
||||
"while (${1:condition}) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "while .."
|
||||
},
|
||||
"argv (node)": {
|
||||
"body": "const argv = process.argv.slice(2);",
|
||||
"description": "Arguments from the command line. [0] is the node executable path, [1] the path of the file being executed, making [2] the first positional argument.",
|
||||
"prefix": "argv (node)"
|
||||
},
|
||||
"cast (JSDoc)": {
|
||||
"body": "/** @type {${1:string}} */ (${2:bracketedVar})",
|
||||
"prefix": "cast (JSDoc)"
|
||||
},
|
||||
"class (JSDoc) + typedef (JSDoc)": {
|
||||
"body": [
|
||||
"/** @typedef {Object} ${1:name}",
|
||||
" * @property {${2:string}} ${3:prop1}",
|
||||
" */"
|
||||
],
|
||||
"description": "https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#typedef-callback-and-param",
|
||||
"prefix": [
|
||||
"class (JSDoc)",
|
||||
"typedef (JSDoc)"
|
||||
]
|
||||
},
|
||||
"do .. while ..": {
|
||||
"body": [
|
||||
"do {",
|
||||
"\t$0",
|
||||
"} while (${1:condition});"
|
||||
],
|
||||
"prefix": [
|
||||
"do .. while",
|
||||
"repeat until"
|
||||
]
|
||||
},
|
||||
"ec (export const)": {
|
||||
"body": "export const ${1:CONSTANT}",
|
||||
"prefix": "ec (export const)"
|
||||
},
|
||||
"ef (export function)": {
|
||||
"body": [
|
||||
"export function ${1:name}($2) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "ef (export function)"
|
||||
},
|
||||
"filter ( => )": {
|
||||
"body": "filter(${1:item} => ${1:item}$0)",
|
||||
"prefix": "filter ( => )"
|
||||
},
|
||||
"for (i++)": {
|
||||
"body": [
|
||||
"for (let i = 0; i < ${1:array}.length; i++) {",
|
||||
"\tconst ${2:element} = ${1:array}[i];",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "for (i++)"
|
||||
},
|
||||
"for (i--)": {
|
||||
"body": [
|
||||
"for (let i = ${1:array}.length - 1; i >= 0; i--) {",
|
||||
"\tconst ${2:element} = ${1:array}[i];",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "for (i--)"
|
||||
},
|
||||
"for (key, value)": {
|
||||
"body": [
|
||||
"for (const [key, value] of Object.entries(${1:dict})) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "for (key, value)"
|
||||
},
|
||||
"for .. in (key)": {
|
||||
"body": [
|
||||
"for (const ${1:key} in ${2:object}) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "for .. in (key)"
|
||||
},
|
||||
"for .. of (array)": {
|
||||
"body": [
|
||||
"for (const ${1:iterator} of ${2:array}) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "for .. of (array)"
|
||||
},
|
||||
"forEach": {
|
||||
"body": [
|
||||
"forEach(${1:item} => {",
|
||||
"\t$0",
|
||||
"});"
|
||||
],
|
||||
"prefix": "forEach =>"
|
||||
},
|
||||
"function_trad": {
|
||||
"body": [
|
||||
"function ${1:name}() {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "function"
|
||||
},
|
||||
"if ..": {
|
||||
"body": [
|
||||
"if (${1:condition}) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"prefix": "if"
|
||||
},
|
||||
"if .. else": {
|
||||
"body": [
|
||||
"if (${1:condition}) {",
|
||||
"\t$0",
|
||||
"} else {",
|
||||
"\t",
|
||||
"}"
|
||||
],
|
||||
"prefix": "if .. else"
|
||||
},
|
||||
"ignore (biome formatter)": {
|
||||
"body": "// biome-ignore format: ${1:explanation}",
|
||||
"description": "Ignores the next block of code.",
|
||||
"prefix": "ignore (biome formatter)"
|
||||
},
|
||||
"ignore file (TypeScript) + nocheck (TypeScript)": {
|
||||
"body": "// @ts-nocheck",
|
||||
"prefix": [
|
||||
"ignore file (TypeScript)",
|
||||
"nocheck (TypeScript)"
|
||||
]
|
||||
},
|
||||
"map ( () => {} )": {
|
||||
"body": [
|
||||
"map(${1:item} => {",
|
||||
"\t$0",
|
||||
"\treturn;",
|
||||
"})"
|
||||
],
|
||||
"prefix": "map ( () => {} )"
|
||||
},
|
||||
"map ( => )": {
|
||||
"body": "map(${1:item} => ${1:item}$0)",
|
||||
"prefix": "map ( => )"
|
||||
},
|
||||
"reduce()": {
|
||||
"body": [
|
||||
".reduce((acc, ${1:item}) => {",
|
||||
"\t$0",
|
||||
"\treturn acc;",
|
||||
"}, ${2:initialValue})"
|
||||
],
|
||||
"prefix": "reduce()"
|
||||
},
|
||||
"relative date": {
|
||||
"body": [
|
||||
"/**",
|
||||
" * @param {string} absoluteDate string to be converted to a date",
|
||||
" * @return {string} relative date",
|
||||
" */",
|
||||
"function relativeDate(absoluteDate) {",
|
||||
"\tconst deltaSecs = (+new Date() - +new Date(absoluteDate)) / 1000;",
|
||||
"\t/** @type {\"year\"|\"month\"|\"week\"|\"day\"|\"hour\"|\"minute\"|\"second\"} */",
|
||||
"\tlet unit;",
|
||||
"\tlet delta;",
|
||||
"\tif (deltaSecs < 60) {",
|
||||
"\t\tunit = \"second\";",
|
||||
"\t\tdelta = deltaSecs;",
|
||||
"\t} else if (deltaSecs < 60 * 60) {",
|
||||
"\t\tunit = \"minute\";",
|
||||
"\t\tdelta = Math.ceil(deltaSecs / 60);",
|
||||
"\t} else if (deltaSecs < 60 * 60 * 24) {",
|
||||
"\t\tunit = \"hour\";",
|
||||
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60);",
|
||||
"\t} else if (deltaSecs < 60 * 60 * 24 * 7) {",
|
||||
"\t\tunit = \"day\";",
|
||||
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24);",
|
||||
"\t} else if (deltaSecs < 60 * 60 * 24 * 7 * 4) {",
|
||||
"\t\tunit = \"week\";",
|
||||
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24 / 7);",
|
||||
"\t} else if (deltaSecs < 60 * 60 * 24 * 7 * 4 * 12) {",
|
||||
"\t\tunit = \"month\";",
|
||||
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24 / 7 / 4);",
|
||||
"\t} else {",
|
||||
"\t\tunit = \"year\";",
|
||||
"\t\tdelta = Math.ceil(deltaSecs / 60 / 60 / 24 / 7 / 4 / 12);",
|
||||
"\t}",
|
||||
"\tconst formatter = new Intl.RelativeTimeFormat(\"en\", { style: \"long\", numeric: \"auto\" });",
|
||||
"\treturn formatter.format(-delta, unit);",
|
||||
"}"
|
||||
],
|
||||
"prefix": "relative date"
|
||||
},
|
||||
"replace": {
|
||||
"body": "replace(/${1:regexp}/, \"$2\")",
|
||||
"prefix": "replace"
|
||||
},
|
||||
"sort ( () => {} )": {
|
||||
"body": [
|
||||
"sort((a, b) => {",
|
||||
"\treturn ${1:b - a};",
|
||||
"})"
|
||||
],
|
||||
"description": "Sort Array with basic a-b-comparator function",
|
||||
"prefix": "sort ( () => {} )"
|
||||
},
|
||||
"split by \\n": {
|
||||
"body": ".split(\"\\n\")",
|
||||
"prefix": ".split by \\n"
|
||||
},
|
||||
"split by \\r": {
|
||||
"body": ".split(\"\\r\")",
|
||||
"description": "required for output from app.doShellScript()",
|
||||
"prefix": ".split by \\r"
|
||||
},
|
||||
"switch .. case": {
|
||||
"body": [
|
||||
"switch (${1:key}) {",
|
||||
"\tcase ${2:value}:",
|
||||
"\t\t$0",
|
||||
"\t\tbreak;",
|
||||
"\tdefault:",
|
||||
"}"
|
||||
],
|
||||
"prefix": "switch .. case"
|
||||
},
|
||||
"ternary": {
|
||||
"body": "${1:condition} ? ${2:value1} : ${3:value2}",
|
||||
"prefix": "ternary"
|
||||
},
|
||||
"thousand separator": {
|
||||
"body": ".toLocaleString(\"de-DE\")",
|
||||
"description": "insert thousand separator into a digit string",
|
||||
"prefix": "thousand separator"
|
||||
},
|
||||
"timeout + delay": {
|
||||
"body": [
|
||||
"setTimeout(() => {",
|
||||
"\t$0",
|
||||
"}, ${1:timeoutMs});"
|
||||
],
|
||||
"prefix": [
|
||||
"timeout",
|
||||
"delay"
|
||||
]
|
||||
},
|
||||
"today as ISO 8601 string": {
|
||||
"body": "new Date().toISOString().slice(0, 10);",
|
||||
"prefix": "ISO date"
|
||||
},
|
||||
"today's date": {
|
||||
"body": "const today = new Date();",
|
||||
"prefix": [
|
||||
"today",
|
||||
"date"
|
||||
]
|
||||
},
|
||||
"tomorrow's date": {
|
||||
"body": [
|
||||
"const tomorrow = new Date();",
|
||||
"tomorrow.setDate(tomorrow.getDate() + 1);"
|
||||
],
|
||||
"prefix": [
|
||||
"tomorrow",
|
||||
"date"
|
||||
]
|
||||
},
|
||||
"try .. catch": {
|
||||
"body": [
|
||||
"try {",
|
||||
"\t$0",
|
||||
"} catch (_error) {",
|
||||
"\t",
|
||||
"}"
|
||||
],
|
||||
"description": "leading underscore so the variable is ignored by biome when not used.",
|
||||
"prefix": "try .. catch"
|
||||
},
|
||||
"type (JSDoc)": {
|
||||
"body": "/** @type {${1:string}} */",
|
||||
"prefix": "type (JSDoc)"
|
||||
},
|
||||
"type: Record (JSDoc)": {
|
||||
"body": "/** @type {Record<string, string>} */",
|
||||
"prefix": "type: Record (JSDoc)"
|
||||
},
|
||||
"unique items": {
|
||||
"body": "${1:arr} = [...new Set(${2:arr})];",
|
||||
"prefix": "unique items"
|
||||
},
|
||||
"Class": {
|
||||
"prefix": [
|
||||
"clax"
|
||||
],
|
||||
"body": [
|
||||
"export class $1 ${2:extends ${3:Parent} }{",
|
||||
"\tconstructor(${4:props}) {",
|
||||
"\t\tthis.$4 = $4;",
|
||||
"\t}",
|
||||
"",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"description": "Class definition template."
|
||||
},
|
||||
"test": {
|
||||
"prefix": [
|
||||
"it"
|
||||
],
|
||||
"body": [
|
||||
"it('${1:should ${2}}', async () => {",
|
||||
"\t$0",
|
||||
"});"
|
||||
],
|
||||
"description": "Test template"
|
||||
},
|
||||
"method": {
|
||||
"prefix": [
|
||||
"mtd"
|
||||
],
|
||||
"body": [
|
||||
"${1:async ${2:method}}(${3:params}) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"description": "method"
|
||||
},
|
||||
"function": {
|
||||
"prefix": [
|
||||
"fun"
|
||||
],
|
||||
"body": [
|
||||
"${1:async }${2:(${3:params})} => {$0}"
|
||||
],
|
||||
"description": "function"
|
||||
},
|
||||
"const": {
|
||||
"prefix": [
|
||||
"const"
|
||||
],
|
||||
"body": [
|
||||
"const $1 = $0;"
|
||||
],
|
||||
"description": "const"
|
||||
},
|
||||
"let": {
|
||||
"prefix": [
|
||||
"let"
|
||||
],
|
||||
"body": [
|
||||
"let $1 = $0;"
|
||||
],
|
||||
"description": "let"
|
||||
},
|
||||
"Console log": {
|
||||
"prefix": [
|
||||
"cl"
|
||||
],
|
||||
"body": [
|
||||
"console.log($0);"
|
||||
],
|
||||
"description": "Console log"
|
||||
},
|
||||
"Console debug": {
|
||||
"prefix": [
|
||||
"cd"
|
||||
],
|
||||
"body": [
|
||||
"console.debug($0);"
|
||||
],
|
||||
"description": "Console debug"
|
||||
},
|
||||
"Console log all": {
|
||||
"prefix": [
|
||||
"clj"
|
||||
],
|
||||
"body": [
|
||||
"console.log(JSON.stringify($0, null, 2));"
|
||||
],
|
||||
"description": "Console log whole object"
|
||||
},
|
||||
"Console debug all": {
|
||||
"prefix": [
|
||||
"cdj"
|
||||
],
|
||||
"body": [
|
||||
"console.debug(JSON.stringify($0, null, 2));"
|
||||
],
|
||||
"description": "Console debug whole object"
|
||||
},
|
||||
"If": {
|
||||
"prefix": [
|
||||
"if"
|
||||
],
|
||||
"body": [
|
||||
"if (${1:condition}) {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"description": "Console debug whole object"
|
||||
},
|
||||
"If-else": {
|
||||
"prefix": [
|
||||
"ifelse"
|
||||
],
|
||||
"body": [
|
||||
"if (${1:condition}) {",
|
||||
"\t$2",
|
||||
"} else {",
|
||||
"\t$0",
|
||||
"}"
|
||||
],
|
||||
"description": "Console debug whole object"
|
||||
},
|
||||
"docblock": {
|
||||
"prefix": [
|
||||
"/**"
|
||||
],
|
||||
"body": [
|
||||
"/**",
|
||||
" * $0",
|
||||
" */"
|
||||
]
|
||||
},
|
||||
"trycatch": {
|
||||
"prefix": [
|
||||
"tc"
|
||||
],
|
||||
"body": [
|
||||
"try {",
|
||||
"\t$0",
|
||||
"} catch (e) {",
|
||||
"\tthrow e;",
|
||||
"}"
|
||||
],
|
||||
"description": "Try catch block"
|
||||
},
|
||||
"Describe test": {
|
||||
"prefix": [
|
||||
"desc"
|
||||
],
|
||||
"body": [
|
||||
"describe('${1}', () => {",
|
||||
"\t$0",
|
||||
"})"
|
||||
],
|
||||
"description": "Describe test"
|
||||
}
|
||||
}
|
||||
262
config/nvim/snippets/lua.json
Normal file
262
config/nvim/snippets/lua.json
Normal file
@@ -0,0 +1,262 @@
|
||||
{
|
||||
"@class (LuaDoc)": {
|
||||
"body": [
|
||||
"---@class (exact) ${1:class_name}",
|
||||
"---@field ${2:field_name} string"
|
||||
],
|
||||
"description": "https://github.com/LuaLS/lua-language-server/wiki/Annotations#class",
|
||||
"prefix": "@class (LuaDoc)"
|
||||
},
|
||||
"@type (LuaDoc)": {
|
||||
"body": "---@type ${1:string}",
|
||||
"prefix": "@type (LuaDoc)"
|
||||
},
|
||||
"Record (type)": {
|
||||
"body": "---@type table<string, string>",
|
||||
"prefix": "Record (type)"
|
||||
},
|
||||
"count occurrences in string": {
|
||||
"body": "local _, count = ${1:str}:gsub(\"${2:find}\", \"\")",
|
||||
"prefix": "count occurrences in string"
|
||||
},
|
||||
"export module": {
|
||||
"body": [
|
||||
"local M = {}",
|
||||
"--------------------------------------------------------------------------------",
|
||||
"",
|
||||
"$0--------------------------------------------------------------------------------",
|
||||
"return M"
|
||||
],
|
||||
"prefix": "export module"
|
||||
},
|
||||
"find all in string": {
|
||||
"body": [
|
||||
"local ${1:matches} = {}",
|
||||
"for match in ${2:str}:gmatch(${3:pattern}) do",
|
||||
"\ttable.insert(${1:matches}, match)",
|
||||
"end"
|
||||
],
|
||||
"prefix": "find all in string"
|
||||
},
|
||||
"for each (list)": {
|
||||
"body": [
|
||||
"for _, ${1:v} in pairs(${2:table}) do",
|
||||
"\t$0",
|
||||
"end"
|
||||
],
|
||||
"prefix": "for each (list)"
|
||||
},
|
||||
"for each line (of file)": {
|
||||
"body": [
|
||||
"for line in io.lines(${1:filepath}) do",
|
||||
"\t$0",
|
||||
"end"
|
||||
],
|
||||
"prefix": [
|
||||
"for each line (file)",
|
||||
"read file (as lines)"
|
||||
]
|
||||
},
|
||||
"home": {
|
||||
"body": "os.getenv(\"HOME\")",
|
||||
"prefix": "home"
|
||||
},
|
||||
"if .. then .. else": {
|
||||
"body": [
|
||||
"if ${1:true} then",
|
||||
"\t$2",
|
||||
"else",
|
||||
"\t$0",
|
||||
"end"
|
||||
],
|
||||
"filetype": "lua",
|
||||
"prefix": "if .. then .. else"
|
||||
},
|
||||
"nodiscard": {
|
||||
"body": "---@nodiscard",
|
||||
"description": "Luadoc Annotation that a function's return value should not be discarded. https://github.com/LuaLS/lua-language-server/wiki/Annotations#nodiscard",
|
||||
"prefix": "nodiscard"
|
||||
},
|
||||
"path of this file": {
|
||||
"body": "local pathOfThisFile = debug.getinfo(1).source:sub(2)",
|
||||
"prefix": "path of this file"
|
||||
},
|
||||
"path separator (os-independent)": {
|
||||
"body": "local osPathSep = package.config:sub(1, 1)",
|
||||
"prefix": "path separator (os-independent)"
|
||||
},
|
||||
"pcall": {
|
||||
"body": [
|
||||
"local success = pcall(${1:func})",
|
||||
"if not success then",
|
||||
"\t$0",
|
||||
"\treturn",
|
||||
"end"
|
||||
],
|
||||
"prefix": [
|
||||
"try",
|
||||
"pcall"
|
||||
]
|
||||
},
|
||||
"read file": {
|
||||
"body": [
|
||||
"---@param filePath string",
|
||||
"---@return string? -- content or error message",
|
||||
"---@return boolean success",
|
||||
"local function readFile(filePath)",
|
||||
"\tlocal file, err = io.open(filePath, \"r\")",
|
||||
"\tif not file then return err, false end",
|
||||
"\tlocal content = file:read(\"*a\")",
|
||||
"\tfile:close()",
|
||||
"\treturn content, true",
|
||||
"end"
|
||||
],
|
||||
"prefix": "read file"
|
||||
},
|
||||
"redirect (metatable __index)": {
|
||||
"body": [
|
||||
"setmetatable(M, {",
|
||||
"\t__index = function(_, key)",
|
||||
"\t\treturn function(...)",
|
||||
"\t\t\trequire(${1:moduleToRedirectTo})[key](...)",
|
||||
"\t\tend",
|
||||
"\tend,",
|
||||
"})"
|
||||
],
|
||||
"prefix": "redirect (metatable __index)"
|
||||
},
|
||||
"round number": {
|
||||
"body": "local roundedNum = tonumber(string.format(\"%.${1:decimals}f\", exactNum))",
|
||||
"prefix": "round number"
|
||||
},
|
||||
"safe require": {
|
||||
"body": [
|
||||
"local ok, ${1:module} = require(\"${1:module}\")",
|
||||
"if not (ok and ${1:module}) then return end",
|
||||
"${1:module}.$0"
|
||||
],
|
||||
"prefix": "safe require"
|
||||
},
|
||||
"sort (table)": {
|
||||
"body": "table.sort(${1:table}, function(a, b) return ${2:a} > ${3:b} end)",
|
||||
"prefix": "sort (table)"
|
||||
},
|
||||
"split (gmatch)": {
|
||||
"body": [
|
||||
"local acc = {}",
|
||||
"for part in ${1:str}:gmatch(\"(.-)\" .. ${2:delimiter}) do",
|
||||
"\ttable.insert(acc, part)",
|
||||
"end"
|
||||
],
|
||||
"filetype": "lua",
|
||||
"prefix": "split (gmatch)"
|
||||
},
|
||||
"ternary": {
|
||||
"body": "${1:condition} and ${2:value1} or ${3:value2}",
|
||||
"prefix": "ternary"
|
||||
},
|
||||
"trim trailing line break": {
|
||||
"body": ":gsub(\"\\n$\", \"\")",
|
||||
"prefix": "trim"
|
||||
},
|
||||
"write file": {
|
||||
"body": [
|
||||
"---@param str string",
|
||||
"---@param filePath string",
|
||||
"---@return string|nil -- error message",
|
||||
"local function overwriteFile(filePath, str)",
|
||||
"\tlocal file, _ = io.open(filePath, \"w\")",
|
||||
"\tif not file then return end",
|
||||
"\tfile:write(str)",
|
||||
"\tfile:close()",
|
||||
"end"
|
||||
],
|
||||
"description": "Overwriting file, for appending use `a` instead of `w`.",
|
||||
"prefix": "write file"
|
||||
},
|
||||
"Create Auto Command": {
|
||||
"prefix": "autocmd",
|
||||
"body": [
|
||||
"vim.api.nvim_create_autocmd(\"${1:event}\", {",
|
||||
" group = vim.api.nvim_create_augroup(\"${2:group}\", { clear = true }),",
|
||||
" callback = function(ev)",
|
||||
" ${0}",
|
||||
" end",
|
||||
"})"
|
||||
]
|
||||
},
|
||||
"Create Auto Command Group": {
|
||||
"prefix": "augroup",
|
||||
"body": [
|
||||
"vim.api.nvim_create_augroup(\"${1:group}\", { clear = true })$0"
|
||||
]
|
||||
},
|
||||
"Current Win": {
|
||||
"prefix": "win",
|
||||
"body": "local win = vim.api.nvim_get_current_win()\n$0"
|
||||
},
|
||||
"Current Buf": {
|
||||
"prefix": "buf",
|
||||
"body": "local buf = vim.api.nvim_get_current_buf()\n$0"
|
||||
},
|
||||
"Buf Valid": {
|
||||
"prefix": "bufvalid",
|
||||
"body": "vim.api.nvim_buf_is_valid(${1:buf})"
|
||||
},
|
||||
"Win Valid": {
|
||||
"prefix": "winvalid",
|
||||
"body": "vim.api.nvim_win_is_valid(${1:win})"
|
||||
},
|
||||
"Win Call": {
|
||||
"prefix": "wincall",
|
||||
"body": [
|
||||
"vim.api.nvim_win_call(${1:win}, function(win)",
|
||||
" ${0}",
|
||||
"end)"
|
||||
]
|
||||
},
|
||||
"Buf Call": {
|
||||
"prefix": "bufcall",
|
||||
"body": [
|
||||
"vim.api.nvim_buf_call(${1:buf}, function(buf)",
|
||||
" ${0}",
|
||||
"end)"
|
||||
]
|
||||
},
|
||||
"Schedule": {
|
||||
"prefix": "schedule",
|
||||
"body": [
|
||||
"vim.schedule(function()",
|
||||
" ${0}",
|
||||
"end)"
|
||||
]
|
||||
},
|
||||
"Table Deep Extend": {
|
||||
"prefix": "deepextend",
|
||||
"body": "vim.tbl_deep_extend(\"force\", ${1:table}, ${2:table})$0"
|
||||
},
|
||||
"Table Filter": {
|
||||
"prefix": "filter",
|
||||
"body": [
|
||||
"vim.tbl_filter(function()",
|
||||
" $0",
|
||||
"end, ${1:table})"
|
||||
]
|
||||
},
|
||||
"Table Map": {
|
||||
"prefix": "map",
|
||||
"body": [
|
||||
"vim.tbl_map(function()",
|
||||
" $0",
|
||||
"end, ${1:table})"
|
||||
]
|
||||
},
|
||||
"Table Values": {
|
||||
"prefix": "values",
|
||||
"body": "vim.tbl_values(${1:table})"
|
||||
},
|
||||
"Table Keys": {
|
||||
"prefix": "keys",
|
||||
"body": "vim.tbl_keys(${1:table})"
|
||||
}
|
||||
}
|
||||
133
config/nvim/snippets/markdown.json
Normal file
133
config/nvim/snippets/markdown.json
Normal file
@@ -0,0 +1,133 @@
|
||||
{
|
||||
"Misc": {
|
||||
"body": "Miscellaneous",
|
||||
"prefix": "Misc"
|
||||
},
|
||||
"bash (Codeblock)": {
|
||||
"body": [
|
||||
"```bash",
|
||||
"$CLIPBOARD$0",
|
||||
"```"
|
||||
],
|
||||
"prefix": "bash (Codeblock)"
|
||||
},
|
||||
"caution (callout)": {
|
||||
"body": [
|
||||
"> [!CAUTION]",
|
||||
"> $0"
|
||||
],
|
||||
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
|
||||
"prefix": "caution (callout)"
|
||||
},
|
||||
"details & summary": {
|
||||
"body": [
|
||||
"<details>",
|
||||
"<summary>${1:Text}</summary>",
|
||||
"$0",
|
||||
"</details>"
|
||||
],
|
||||
"description": "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details",
|
||||
"prefix": [
|
||||
"toggle / fold",
|
||||
"details & summary"
|
||||
]
|
||||
},
|
||||
"ignore file (ltex)": {
|
||||
"body": "<!-- LTeX: enabled=false -->",
|
||||
"prefix": "ignore file (ltex)"
|
||||
},
|
||||
"image": {
|
||||
"body": "<img src=\"${1:image_path}\" alt=\"${2:alt text}\" width=\"${3:50%}\">",
|
||||
"description": "HTML syntax for images used to display images with reduced size",
|
||||
"prefix": "image"
|
||||
},
|
||||
"important (callout)": {
|
||||
"body": [
|
||||
"> [!IMPORTANT]",
|
||||
"> $0"
|
||||
],
|
||||
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
|
||||
"prefix": "important (callout)"
|
||||
},
|
||||
"insert table 2x2": {
|
||||
"body": [
|
||||
"| ${1:Column1} | ${2:Column2} |",
|
||||
"|--------------- | -------------- |",
|
||||
"| ${3:Item1.1} | ${4:Item2.1} |"
|
||||
],
|
||||
"prefix": "table (2x2)"
|
||||
},
|
||||
"insert toc": {
|
||||
"body": [
|
||||
"## Table of Content",
|
||||
"",
|
||||
"<!-- toc -->"
|
||||
],
|
||||
"description": "https://github.com/jonschlinkert/markdown-toc#tocinsert",
|
||||
"prefix": "insert toc"
|
||||
},
|
||||
"js (Codeblock)": {
|
||||
"body": [
|
||||
"```js",
|
||||
"$CLIPBOARD$0",
|
||||
"```"
|
||||
],
|
||||
"prefix": "js (Codeblock)"
|
||||
},
|
||||
"kbd": {
|
||||
"body": "<kbd>$0</kbd>",
|
||||
"description": "HTML tag for keys",
|
||||
"prefix": "kbd"
|
||||
},
|
||||
"lua (Codeblock)": {
|
||||
"body": [
|
||||
"```lua",
|
||||
"$CLIPBOARD$0",
|
||||
"```"
|
||||
],
|
||||
"prefix": "lua (Codeblock)"
|
||||
},
|
||||
"note (GitHub callout)": {
|
||||
"body": [
|
||||
"> [!NOTE]",
|
||||
"> $0"
|
||||
],
|
||||
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
|
||||
"prefix": [
|
||||
"info (callout)",
|
||||
"note (callout)"
|
||||
]
|
||||
},
|
||||
"py (Codeblock)": {
|
||||
"body": [
|
||||
"```py",
|
||||
"$CLIPBOARD$0",
|
||||
"```"
|
||||
],
|
||||
"prefix": "py (Codeblock)"
|
||||
},
|
||||
"tip (callout)": {
|
||||
"body": [
|
||||
"> [!TIP]",
|
||||
"> $0"
|
||||
],
|
||||
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
|
||||
"prefix": "tip (callout)"
|
||||
},
|
||||
"ts (Codeblock)": {
|
||||
"body": [
|
||||
"```ts",
|
||||
"$CLIPBOARD$0",
|
||||
"```"
|
||||
],
|
||||
"prefix": "ts (Codeblock)"
|
||||
},
|
||||
"warning (callout)": {
|
||||
"body": [
|
||||
"> [!WARNING]",
|
||||
"> $0"
|
||||
],
|
||||
"description": "https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts",
|
||||
"prefix": "warning (callout)"
|
||||
}
|
||||
}
|
||||
165
config/nvim/snippets/php.snippets
Normal file
165
config/nvim/snippets/php.snippets
Normal file
@@ -0,0 +1,165 @@
|
||||
snippet php "php"
|
||||
<?php
|
||||
${1}
|
||||
|
||||
snippet ec "ec"
|
||||
echo '${1}'${2};
|
||||
|
||||
snippet vd "vd"
|
||||
var_dump(${1});
|
||||
|
||||
# Includes and requires
|
||||
|
||||
snippet inc "inc"
|
||||
include_once '${1}';${2}
|
||||
|
||||
snippet req "req"
|
||||
require_once '${1}';${2}
|
||||
|
||||
# define(...)
|
||||
|
||||
snippet def "def"
|
||||
define('${1}'${2});${3}
|
||||
|
||||
# Doxygen comments
|
||||
|
||||
snippet d "/**"
|
||||
/**
|
||||
* ${1}
|
||||
*/${2}
|
||||
|
||||
snippet code "code"
|
||||
* @code
|
||||
* ${1}
|
||||
* @endcode
|
||||
|
||||
# Class
|
||||
|
||||
snippet cl "cl"
|
||||
class ${1} {
|
||||
${2}
|
||||
function ${3:__construct}(${4}) {
|
||||
${5}
|
||||
}
|
||||
}
|
||||
|
||||
snippet pubf "public method"
|
||||
public function ${1}(${2}): $3
|
||||
{
|
||||
${0}
|
||||
}
|
||||
|
||||
snippet prof "protected method"
|
||||
protected function ${1}(${2}): $3
|
||||
{
|
||||
${0}
|
||||
}
|
||||
|
||||
snippet prif "private method"
|
||||
protected function ${1}(${2}): $3
|
||||
{
|
||||
${0}
|
||||
}
|
||||
|
||||
snippet testt "test method (prefix)"
|
||||
public function test_${1}()
|
||||
{
|
||||
${0}
|
||||
}
|
||||
|
||||
snippet testa "test method (annotation)"
|
||||
/** @test */
|
||||
public function ${1}()
|
||||
{
|
||||
${0}
|
||||
}
|
||||
|
||||
# $this->
|
||||
|
||||
snippet . "$this->" i
|
||||
$this->
|
||||
|
||||
# If statement
|
||||
|
||||
snippet if "if"
|
||||
if (${1}) {
|
||||
${2}
|
||||
}
|
||||
|
||||
snippet ife "ife"
|
||||
if (${1}) {
|
||||
${2}
|
||||
} else {
|
||||
${3}
|
||||
}
|
||||
|
||||
snippet elif "elif"
|
||||
else if (${1}) {
|
||||
${2}
|
||||
}
|
||||
|
||||
snippet el "el"
|
||||
else {
|
||||
${1}
|
||||
}
|
||||
|
||||
# Switch
|
||||
|
||||
snippet sw "sw"
|
||||
switch (${1}) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
snippet case "case"
|
||||
case '${1}':
|
||||
${2}
|
||||
break;${3}
|
||||
|
||||
# Do-while loop
|
||||
|
||||
snippet do "do"
|
||||
do {
|
||||
${2}
|
||||
} while (${1});
|
||||
|
||||
# While loop
|
||||
|
||||
snippet wh "wh"
|
||||
while (${1}) {
|
||||
${2}
|
||||
}
|
||||
|
||||
# For loop
|
||||
|
||||
snippet for "for"
|
||||
for (${1}; ${2}; ${3}) {
|
||||
${4}
|
||||
}
|
||||
|
||||
snippet fore "fore"
|
||||
foreach (${1} as ${2}) {
|
||||
${3}
|
||||
}
|
||||
|
||||
# Functions and methods
|
||||
|
||||
snippet fun "fun"
|
||||
function ${1}(${2}) {
|
||||
${3}
|
||||
}
|
||||
|
||||
snippet met "met"
|
||||
${1}function ${2}(${3}) {
|
||||
${4}
|
||||
}
|
||||
|
||||
# Return
|
||||
|
||||
snippet r "return"
|
||||
return ${1}
|
||||
|
||||
# Todos
|
||||
|
||||
snippet todo "todo"
|
||||
// TODO ${1}
|
||||
334
config/nvim/snippets/sh.json
Normal file
334
config/nvim/snippets/sh.json
Normal file
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"PATH (export)": {
|
||||
"body": "export PATH=/usr/local/lib:/usr/local/bin:/opt/homebrew/bin/:\\$PATH",
|
||||
"description": "Extends PATH in a way that homebrew installed CLIs are recognized in ARM and Intel Macs.",
|
||||
"prefix": "PATH (export)"
|
||||
},
|
||||
"awk (get field)": {
|
||||
"body": "awk '{ print $${1:1} }'",
|
||||
"description": "Retrieve a field from the piped in string, with whitespace as the default field delimiter. `$n` means that the nth field will be used.",
|
||||
"prefix": "awk (field)"
|
||||
},
|
||||
"check device name": {
|
||||
"body": "scutil --get ComputerName | grep -q \"$0\"",
|
||||
"prefix": "device name"
|
||||
},
|
||||
"check if dark mode (macOS)": {
|
||||
"body": "defaults read -g AppleInterfaceStyle &>/dev/null; && echo 'isDark'",
|
||||
"prefix": "check if dark mode (macOS)"
|
||||
},
|
||||
"check if in git repo": {
|
||||
"body": "if ! git rev-parse --is-inside-work-tree &>/dev/null ; then print \"\\e[0;33mfile is not ins a git repository.\\e[0m\" && return 1 ; fi",
|
||||
"prefix": "check if in git repo"
|
||||
},
|
||||
"check if installed": {
|
||||
"body": [
|
||||
"if [[ ! -x \"\\$(command -v ${1:cli})\" ]]; then print \"\\e[0;33m${1:cli} not installed.\\e[0m\" && return 1; fi",
|
||||
"$0"
|
||||
],
|
||||
"description": "https://stackoverflow.com/a/26759734/22114136",
|
||||
"prefix": "check if installed"
|
||||
},
|
||||
"check if on macOS": {
|
||||
"body": "[[ \"\\$OSTYPE\" =~ \"darwin\" ]]",
|
||||
"prefix": "check if on macOS"
|
||||
},
|
||||
"check if process is running": {
|
||||
"body": "pgrep -xq \"${1:process}\" && $0",
|
||||
"prefix": "check if process is running"
|
||||
},
|
||||
"check if sudo user": {
|
||||
"body": "sudo -nv && ${1:some_sudo_action}",
|
||||
"prefix": "check if sudo user"
|
||||
},
|
||||
"confirmation prompt": {
|
||||
"body": [
|
||||
"# confirmation prompt",
|
||||
"print \"\\e[1;34m$0Proceed? (y/n)\\e[0m\"",
|
||||
"read -rk pressed",
|
||||
"echo",
|
||||
"if [[ \"\\$pressed\" != \"y\" ]]; then",
|
||||
"\techo \"Aborted.\"",
|
||||
"\treturn 1",
|
||||
"fi",
|
||||
"echo"
|
||||
],
|
||||
"prefix": "confirmation prompt"
|
||||
},
|
||||
"default value": {
|
||||
"body": "\\${${1:var}:-${2:default_value}}",
|
||||
"prefix": "default value"
|
||||
},
|
||||
"directory of script": {
|
||||
"body": "\"$(dirname \"$(readlink -f \"\\$0\")\")\"",
|
||||
"prefix": "directory of this script"
|
||||
},
|
||||
"elseif": {
|
||||
"body": "elif [[ ${1:condition} ]]; then\n\t${0}",
|
||||
"description": "Add an elseif to an if statement.",
|
||||
"prefix": "elseif"
|
||||
},
|
||||
"extension": {
|
||||
"body": "ext=${${1:file_name}##*.}",
|
||||
"prefix": "get extension"
|
||||
},
|
||||
"filename": {
|
||||
"body": "file_name=$(basename \"$${1:file_path}\")",
|
||||
"prefix": "filename"
|
||||
},
|
||||
"filename w/o ext": {
|
||||
"body": "${1:file_name}=${${1:file_name}%.*}",
|
||||
"prefix": "filename w/o ext"
|
||||
},
|
||||
"find & xargs": {
|
||||
"body": "find . -print0 | xargs -0 -I '{}'",
|
||||
"prefix": "find & xargs"
|
||||
},
|
||||
"find -exec": {
|
||||
"body": "find . $0 -exec open '{}' \\;",
|
||||
"prefix": "find -exec"
|
||||
},
|
||||
"for each file": {
|
||||
"body": [
|
||||
"for filename in *.txt; do",
|
||||
"\techo \"\\$filename\"",
|
||||
"done"
|
||||
],
|
||||
"prefix": "for each file"
|
||||
},
|
||||
"for each line (read)": {
|
||||
"body": [
|
||||
"while read -r line; do",
|
||||
"\techo \"\\$line\"$0",
|
||||
"done < \"\\$${1:input_file}\""
|
||||
],
|
||||
"prefix": "for each line (read)"
|
||||
},
|
||||
"for each line (variable)": {
|
||||
"body": [
|
||||
"echo \"\\$lines\" | while read -r line; do",
|
||||
"\techo \"\\$line\"",
|
||||
"done"
|
||||
],
|
||||
"prefix": "for each line (variable)"
|
||||
},
|
||||
"for i ..": {
|
||||
"body": [
|
||||
"for ((i = 0; i <= ${1:length}; i++)); do",
|
||||
" echo \\$i$0",
|
||||
"done"
|
||||
],
|
||||
"prefix": "for i .."
|
||||
},
|
||||
"function": {
|
||||
"body": "function ${1:name} {\n\t${0}\n}",
|
||||
"prefix": "function"
|
||||
},
|
||||
"get nth line from string": {
|
||||
"body": "line=$(echo \"\\$${1:str}\" | sed -n \"${2:n}p\")",
|
||||
"prefix": "get nth line from string"
|
||||
},
|
||||
"i++": {
|
||||
"body": "((${1:i}++))",
|
||||
"prefix": "i++"
|
||||
},
|
||||
"i--": {
|
||||
"body": "((${1:i}--))",
|
||||
"prefix": "i--"
|
||||
},
|
||||
"if (short)": {
|
||||
"body": "[[ \"\\$${1:var}\" ]] && $0",
|
||||
"prefix": "if (short)"
|
||||
},
|
||||
"if .. then": {
|
||||
"body": [
|
||||
"if [[ \"\\$${1:var}\" ]]; then",
|
||||
"\t$0",
|
||||
"fi"
|
||||
],
|
||||
"prefix": "if .. then"
|
||||
},
|
||||
"if .. then .. else": {
|
||||
"body": [
|
||||
"if [[ \"$${1:cond}\" ]]; then",
|
||||
"\t$0",
|
||||
"else",
|
||||
"\t",
|
||||
"fi"
|
||||
],
|
||||
"prefix": "if .. then .. else"
|
||||
},
|
||||
"input (stdin or $1)": {
|
||||
"body": [
|
||||
"if [[ $# -eq 0 ]]; then",
|
||||
"\tinput=$(< /dev/stdin)",
|
||||
"else",
|
||||
"\tinput=\"$1\"",
|
||||
"fi"
|
||||
],
|
||||
"description": "reads either from STDIN or $1. stdin may have unescaped newlines, which have to be removed, e.g. via `tr -d '\n'`.",
|
||||
"prefix": "input (stdin or $1)"
|
||||
},
|
||||
"notify (msg)": {
|
||||
"body": "osascript -e 'display notification \"\" with title \"${1:msg}\"'",
|
||||
"prefix": "notify (msg)"
|
||||
},
|
||||
"notify (var)": {
|
||||
"body": "osascript -e \"display notification \\\"\\\" with title \\\"$${1:var}\\\"\"",
|
||||
"prefix": "notify (var)"
|
||||
},
|
||||
"null (pipe)": {
|
||||
"body": "&> /dev/null",
|
||||
"prefix": "null (pipe)"
|
||||
},
|
||||
"osascript jxa (run script)": {
|
||||
"body": "osascript -l JavaScript \"${1:file}\"",
|
||||
"prefix": [
|
||||
"jxa (run script)",
|
||||
"osascript -l JavaScript"
|
||||
]
|
||||
},
|
||||
"plist: extract key": {
|
||||
"body": "plutil -extract name.childkey xml1 -o - example.plist | sed -n 4p | cut -d'>' -f2 | cut -d'<' -f1",
|
||||
"prefix": "plist: extract key"
|
||||
},
|
||||
"print in blue": {
|
||||
"body": "print \"\\e[1;34m$0\\e[0m\"",
|
||||
"prefix": "print in blue"
|
||||
},
|
||||
"progress bar": {
|
||||
"body": [
|
||||
"for _ in {1..100}; do",
|
||||
"\tprintf \"🬋\"",
|
||||
"\tsleep 0.5",
|
||||
"done"
|
||||
],
|
||||
"prefix": "progress bar"
|
||||
},
|
||||
"quicklook": {
|
||||
"body": "qlmanage -p \"${1:filepath}\"",
|
||||
"description": "QuickLook the file. MacOS only.",
|
||||
"prefix": "quicklook"
|
||||
},
|
||||
"redirect to stderr": {
|
||||
"body": ">&2",
|
||||
"prefix": "redirect to stderr"
|
||||
},
|
||||
"resolve home": {
|
||||
"body": "${1:path}=\"\\${${1:path}/#\\~/\\$HOME}\"",
|
||||
"prefix": "resolve home"
|
||||
},
|
||||
"restart app": {
|
||||
"body": [
|
||||
"killall \"${1:app_name}\"",
|
||||
"while pgrep -xq \"${1:app_name}\"; do sleep 0.1; done",
|
||||
"open -a \"${1:app_name}\""
|
||||
],
|
||||
"description": "safely restart app, avoiding race condition",
|
||||
"prefix": "restart app"
|
||||
},
|
||||
"sed substitution": {
|
||||
"body": "sed 's/$0//'",
|
||||
"prefix": "sed substitution"
|
||||
},
|
||||
"shebang": {
|
||||
"body": "#!/usr/bin/env zsh",
|
||||
"prefix": "shebang"
|
||||
},
|
||||
"slice": {
|
||||
"body": "${1:var}=\"${${1:var}:${2:from}:${3:to}}\"",
|
||||
"prefix": "slice"
|
||||
},
|
||||
"spinner": {
|
||||
"body": [
|
||||
"# spinner with 20s timeout",
|
||||
"spinner=\"⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏\"",
|
||||
"for i in {1..100}; do",
|
||||
"\tpos=\\$((i % \\${#spinner}))",
|
||||
"\tprintf \"\\r%s\" \"\\${spinner:\\$pos:1}\"",
|
||||
"\tsleep 0.2",
|
||||
"done",
|
||||
"printf \"\\r\" # remove spinner"
|
||||
],
|
||||
"prefix": "spinner"
|
||||
},
|
||||
"stderr (merge with stdout)": {
|
||||
"body": "2>&1",
|
||||
"prefix": "stderr (merge with stdout)"
|
||||
},
|
||||
"stdin": {
|
||||
"body": "stdin=\\$(< /dev/stdin)",
|
||||
"description": "$(cat) also works. See https://stackoverflow.com/questions/32363887/in-a-bash-function-how-do-i-get-stdin-into-a-variable",
|
||||
"prefix": "stdin"
|
||||
},
|
||||
"stdout is to a terminal": {
|
||||
"body": "[[ -t true ]]",
|
||||
"prefix": "stdout is to a terminal"
|
||||
},
|
||||
"substitute": {
|
||||
"body": "\\${${1:var}//${2:search}/${3:replace}}",
|
||||
"description": "one slash for single substitution, two for global",
|
||||
"prefix": "substitute (expansion)"
|
||||
},
|
||||
"suppress stderr": {
|
||||
"body": "2>/dev/null",
|
||||
"prefix": "suppress stderr"
|
||||
},
|
||||
"switch case": {
|
||||
"body": [
|
||||
"case $${1:var} in",
|
||||
"\"one\" | \"two\")",
|
||||
"\techo \"foo\"",
|
||||
"\t;;",
|
||||
"\"three\")",
|
||||
"\techo \"bar\"",
|
||||
"\t;;",
|
||||
"*)",
|
||||
"\techo \"default\"",
|
||||
"\t;;",
|
||||
"esac"
|
||||
],
|
||||
"description": "A case command first expands word, and tries to match it against each pattern in turn.",
|
||||
"prefix": "switch case"
|
||||
},
|
||||
"ternary": {
|
||||
"body": "\\$([[ \"${1:cond}\" ]] && echo \"${2:value1}\" || echo \"${3:value2}\")",
|
||||
"prefix": "ternary"
|
||||
},
|
||||
"then": {
|
||||
"body": "then\n\t$0\nfi",
|
||||
"prefix": "then .. fi"
|
||||
},
|
||||
"today (ISO date) + now": {
|
||||
"body": "${1:now}=\\$(date +\"%Y-%m-%d %H:%M:%S\")",
|
||||
"prefix": [
|
||||
"today (ISO date)",
|
||||
"now"
|
||||
]
|
||||
},
|
||||
"trim whitespace": {
|
||||
"body": "${1:text}=$(echo -n \"$${1:text}\" | sed -e 's/^ *//' -e 's/ *$//')",
|
||||
"prefix": "trim whitespace"
|
||||
},
|
||||
"urlEncode": {
|
||||
"body": "osascript -l JavaScript -e \"encodeURIComponent('${1:text}')\"",
|
||||
"prefix": "urlEncode"
|
||||
},
|
||||
"wait until app running": {
|
||||
"body": "while ! pgrep -xq \"${1:app_name}\"; do sleep 0.1; done",
|
||||
"prefix": "wait until app running"
|
||||
},
|
||||
"wait until app terminated": {
|
||||
"body": "while pgrep -xq \"${1:app_name}\"; do sleep 0.1; done",
|
||||
"prefix": "wait until app terminated"
|
||||
},
|
||||
"while": {
|
||||
"body": "while [[ ${1:condition} ]]; do\n\t${0}\ndone\n",
|
||||
"description": "A while loop by condition.",
|
||||
"prefix": "while"
|
||||
},
|
||||
"xargs (for each line)": {
|
||||
"body": "xargs -I {} ${1:some_cmd} '{}'",
|
||||
"prefix": "xargs (for each line)"
|
||||
}
|
||||
}
|
||||
7
config/nvim/snippets/yaml.json
Normal file
7
config/nvim/snippets/yaml.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"schema (modeline)": {
|
||||
"body": "# yaml-language-server: $$schema=${1:url}",
|
||||
"description": "https://github.com/redhat-developer/yaml-language-server#using-inlined-schema",
|
||||
"prefix": "schema (modeline)"
|
||||
}
|
||||
}
|
||||
0
config/nvim/spell/.gitkeep
Normal file
0
config/nvim/spell/.gitkeep
Normal file
@@ -1,3 +0,0 @@
|
||||
Plugins
|
||||
lua
|
||||
plugins
|
||||
@@ -1,3 +0,0 @@
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
column_width = 120
|
||||
@@ -1,7 +1,5 @@
|
||||
blade-formatter
|
||||
corepack
|
||||
editorconfig-checker
|
||||
github-release-notes
|
||||
neovim
|
||||
stylelint-lsp
|
||||
# $NVM_DIR/default-packages
|
||||
|
||||
yarn
|
||||
neovim
|
||||
corepack
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
{
|
||||
"type": "session",
|
||||
"style": "plain",
|
||||
"template": " {{ if .SSHSession }} {{ .UserName }}@{{ end }}{{ .HostName }}"
|
||||
"template": " {{ if .SSHSession }}\ueba9 {{ .UserName }}@{{ end }}{{ .HostName }}"
|
||||
},
|
||||
{
|
||||
"foreground": "cyan",
|
||||
@@ -27,14 +27,14 @@
|
||||
"template": " {{ .Path }} ",
|
||||
"type": "path",
|
||||
"mapped_locations": {
|
||||
"~/Code/*": "\uF09B"
|
||||
"~/Code/*": "\uf09b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "git",
|
||||
"style": "plain",
|
||||
"foreground": "lightGreen",
|
||||
"template": "{{ .UpstreamIcon }}{{ if or (.Staging.Changed) (.Working.Changed) }}({{if .Behind }}\u2193 {{ .Behind }} {{ end }}{{if .Staging.Changed }}\uF046 {{ .Staging.String }} {{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }}| {{ end }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}){{ end }}",
|
||||
"template": "{{ .UpstreamIcon }}{{ if or (.Staging.Changed) (.Working.Changed) }}({{if .Behind }}\u2193 {{ .Behind }} {{ end }}{{if .Staging.Changed }}\uf046 {{ .Staging.String }} {{ end }}{{ if and (.Staging.Changed) (.Working.Changed) }}| {{ end }}{{ if .Working.Changed }}\uf044 {{ .Working.String }}{{ end }}){{ end }}",
|
||||
"properties": {
|
||||
"fetch_status": true,
|
||||
"fetch_upstream_icon": true,
|
||||
@@ -100,7 +100,7 @@
|
||||
{
|
||||
"type": "php",
|
||||
"style": "plain",
|
||||
"template": " {{ .Full }} "
|
||||
"template": " \ue73d {{ .Full }} "
|
||||
}
|
||||
],
|
||||
"type": "prompt"
|
||||
|
||||
@@ -1,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
|
||||
|
||||
@@ -42,7 +42,7 @@ if ! declare -f msg > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg()
|
||||
{
|
||||
[ "$VERBOSE" -eq 1 ] && echo "$1"
|
||||
[ "$VERBOSE" -eq 1 ] && msgr msg "$1"
|
||||
return 0
|
||||
}
|
||||
msg "msg was not defined, defined it now"
|
||||
@@ -54,7 +54,7 @@ if ! declare -f msg_err > /dev/null; then
|
||||
# $1 - error message (string)
|
||||
msg_err()
|
||||
{
|
||||
echo "(!) ERROR: $1" >&2
|
||||
msgr err "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
@@ -65,7 +65,7 @@ if ! declare -f msg_done > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg_done()
|
||||
{
|
||||
echo "✓ $1"
|
||||
msgr done "$1"
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
@@ -76,7 +76,7 @@ if ! declare -f msg_run > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg_run()
|
||||
{
|
||||
echo "→ $1"
|
||||
msgr run "$1"
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
@@ -87,10 +87,29 @@ if ! declare -f msg_ok > /dev/null; then
|
||||
# $1 - message (string)
|
||||
msg_ok()
|
||||
{
|
||||
echo "✓ $1"
|
||||
msgr ok "$1"
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
|
||||
if ! declare -f array_diff > /dev/null; then
|
||||
# Function to compare two arrays and return the difference
|
||||
# Example: array_diff DIFFERENCE ARRAY1 ARRAY2
|
||||
# $1 - variable to store the difference
|
||||
# $2 - first array
|
||||
# $3 - second array
|
||||
# Output to $1 the difference between $2 and $3
|
||||
# Source: https://stackoverflow.com/a/42399479/594940
|
||||
array_diff()
|
||||
{
|
||||
# shellcheck disable=SC1083,SC2086
|
||||
eval local ARR1=\(\"\${$2[@]}\"\)
|
||||
# shellcheck disable=SC1083,SC2086
|
||||
eval local ARR2=\(\"\${$3[@]}\"\)
|
||||
local IFS=$'\n'
|
||||
mapfile -t "$1" < <(comm -23 <(echo "${ARR1[*]}" | sort) <(echo "${ARR2[*]}" | sort))
|
||||
}
|
||||
fi
|
||||
|
||||
source "$DOTFILES/config/exports"
|
||||
source "$DOTFILES/config/alias"
|
||||
|
||||
10
config/tms/config.toml
Normal file
10
config/tms/config.toml
Normal file
@@ -0,0 +1,10 @@
|
||||
default_session = "main"
|
||||
|
||||
[[search_dirs]]
|
||||
path = "~/Code"
|
||||
depth = 3
|
||||
|
||||
[picker_colors]
|
||||
highlight_color = "#21202e"
|
||||
highlight_text_color = "#86e1fc"
|
||||
border_color = "#524f67"
|
||||
1
config/tmux/.ignore
Normal file
1
config/tmux/.ignore
Normal file
@@ -0,0 +1 @@
|
||||
plugins/*
|
||||
37
config/tmux/config-keybinds.conf
Normal file
37
config/tmux/config-keybinds.conf
Normal file
@@ -0,0 +1,37 @@
|
||||
# ╭──────────────────────────────────────────────────────────╮
|
||||
# │ Bindings │
|
||||
# ╰──────────────────────────────────────────────────────────╯
|
||||
# bind flags
|
||||
# -r = repeatable, only needs prefix once
|
||||
# -n = doesn't need prefix
|
||||
# -t = binds to a certain key-table (root, copy-mode, prefix, etc.)
|
||||
|
||||
# Set <prefix> to Control + Space, keeping the default of C-b intact.
|
||||
# C-Space send-prefix line doubles the prefix when in nested tmux session.
|
||||
set -g prefix C-Space
|
||||
bind C-Space send-prefix
|
||||
|
||||
# Use Alt-arrow keys without prefix key to switch panes
|
||||
bind -n M-Left select-pane -L
|
||||
bind -n M-Right select-pane -R
|
||||
bind -n M-Up select-pane -U
|
||||
bind -n M-Down select-pane -D
|
||||
|
||||
# Easier switching between window
|
||||
bind C-n next-window
|
||||
bind C-p previous-window
|
||||
bind C-a last-window
|
||||
|
||||
# Reload tmux config with <prefix> + r
|
||||
unbind r
|
||||
bind r "source-file ~/.dotfiles/config/tmux/tmux.conf; display 'tmux cfg reloaded!'"
|
||||
|
||||
# copy mode using 'Esc'
|
||||
unbind [
|
||||
bind Escape copy-mode
|
||||
|
||||
# paste using 'p'
|
||||
unbind p
|
||||
bind p paste-buffer
|
||||
|
||||
# vim: ft=tmux ts=2 sw=2 et
|
||||
50
config/tmux/config-plugins.conf
Normal file
50
config/tmux/config-plugins.conf
Normal file
@@ -0,0 +1,50 @@
|
||||
# ╭──────────────────────────────────────────────────────────╮
|
||||
# │ Plugins │
|
||||
# ╰──────────────────────────────────────────────────────────╯
|
||||
|
||||
# ── Plugins related configurations ────────────────────────────────────
|
||||
|
||||
# Plugin that lets you suspend local tmux session,
|
||||
# so that you can work with nested remote tmux session painlessly.
|
||||
# https://github.com/MunifTanjim/tmux-suspend
|
||||
set -g @suspend_key 'F12'
|
||||
|
||||
## A plugin to name your tmux windows smartly.
|
||||
## https://github.com/ofirgall/tmux-window-name
|
||||
### Maximum name length of a window
|
||||
set -g @tmux_window_name_max_name_len "20"
|
||||
### Replace $HOME with ~ in window names
|
||||
set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']"
|
||||
set -g @tmux_window_name_ignored_programs "['sqlite3', 'antidote', 'direnv', 'md5']" # Default is []
|
||||
set -g @tmux_window_name_shells "['bash', 'fish', 'sh', 'zsh']"
|
||||
set -g @tmux_window_name_substitute_sets "[('.+ipython2', 'ipython2'), ('.+ipython3', 'ipython3'), ('.+\.local', '.local'), ('.+asdf', 'asdf')]"
|
||||
set -g @tmux_window_name_use_tilde "True"
|
||||
|
||||
# https://github.com/erikw/tmux-dark-notify
|
||||
set -g @dark-notify-theme-path-light "$TMUX_CONF_DIR/theme-light.conf"
|
||||
set -g @dark-notify-theme-path-dark "$TMUX_CONF_DIR/theme-dark.conf"
|
||||
|
||||
## https://github.com/MunifTanjim/tmux-mode-indicator
|
||||
set -g @mode_indicator_copy_mode_style 'bg=default,fg=yellow'
|
||||
set -g @mode_indicator_empty_mode_style 'bg=default,fg=#7aa2f7'
|
||||
set -g @mode_indicator_prefix_mode_style 'bg=default,fg=#7aa2f7'
|
||||
set -g @mode_indicator_sync_mode_style 'bg=default,fg=red'
|
||||
|
||||
# https://github.com/wfxr/tmux-fzf-url
|
||||
set -g @fzf-url-bind 'u'
|
||||
set -g @fzf-url-history-limit '2000'
|
||||
|
||||
# ── Sourcing the plugins ──────────────────────────────────────────────
|
||||
|
||||
run-shell "$TMUX_PLUGINS/tmux-sensible/sensible.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-window-name/tmux_window_name.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-mode-indicator/mode_indicator.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-suspend/suspend.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-continuum/continuum.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-sessionist/sessionist.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-yank/yank.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-current-pane-hostname/current_pane_hostname.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-dark-notify/main.tmux"
|
||||
run-shell "$TMUX_PLUGINS/tmux-fzf-url/fzf-url.tmux"
|
||||
|
||||
# vim: ft=tmux ts=2 sw=2 et
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user