Compare commits

...

42 Commits

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

* chore: del disabled plugins, do coderabbit fixes

* chore: tweak settings, remove duplication

* chore: next round of refactoring

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

* chore: cleanup, options and keymap stuff
2024-12-09 10:30:15 +02:00
ivuorinen
b88de0c3ae chore(git): Update submodules (automated)
antidote
dotbot v1.20.2
2024-12-09 03:20:33 +00:00
c5e6860595 chore(deps): updated yarn packages 2024-12-05 21:24:05 +02:00
b5a3c34fc3 chore(lint): dfm lints 2024-12-05 21:23:48 +02:00
87c89cf828 chore(config): "disable" pure exec time counter 2024-12-05 09:19:33 +02:00
renovate[bot]
8d57c9425e fix(container): update image python (3.13.0 → 3.13.1) (#47)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 09:15:53 +02:00
57 changed files with 3882 additions and 4970 deletions

View File

@@ -11,6 +11,9 @@ trim_trailing_whitespace = true
[*.md]
max_line_length = 100
[*.lua]
max_line_length = 120
[*.php]
indent_size = 4

View File

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

View File

@@ -2,10 +2,13 @@ repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: requirements-txt-fixer
- id: detect-private-key
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]
- id: check-case-conflict
- id: check-merge-conflict
- id: check-executables-have-shebangs
- id: check-shebang-scripts-are-executable
- id: check-symlinks
- id: check-toml
@@ -29,13 +32,8 @@ repos:
hooks:
- id: yamllint
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v4.0.0-alpha.8
hooks:
- id: prettier
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0.1
- repo: https://github.com/koalaman/shellcheck-precommit
rev: v0.10.0
hooks:
- id: shellcheck
@@ -48,3 +46,13 @@ repos:
rev: v1.7.4
hooks:
- id: actionlint
- repo: https://github.com/renovatebot/pre-commit-hooks
rev: 39.82.1
hooks:
- id: renovate-config-validator
- repo: https://github.com/JohnnyMorganz/StyLua
rev: v2.0.2
hooks:
- id: stylua # or stylua-system / stylua-github

View File

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

View File

@@ -1 +1 @@
3.13.0
3.13.1

View File

@@ -52,3 +52,7 @@ 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"

View File

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

View File

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

View File

@@ -0,0 +1,73 @@
---
tags: [printf, bash, zsh]
---
# printf
The printf command accepts the following syntax:
`printf [-v var] [format specifiers] [arguments]`
- [-v var]
The optional -v flag assigns the output to the [var]
variable instead of printing it in standard output.
- [format specifiers]
Format specifiers are strings that determine the methods of
formatting specifiers. The following section includes a
list of accepted specifiers.
- [arguments]
Arguments can be any value or variable, and the [format specifiers]
point to the [arguments]. If there are more arguments than format
specifiers, the format string is reused until it interprets
the last argument.
If there are fewer format specifiers than arguments, number formats
are set to zero (0), while string formats are set to null (empty).
## printf Specifiers
Format Description
------ -----------
%c Treat the arguments as a single character.
%d Treat the input as a decimal (integer) number (base 10).
%e Treats the input as an exponential floating-point number.
%f Treat the input as a floating-point number.
%i Treat the input as an integer number (base 10).
%o Treats the input as an octal number (base 8).
%s Treat the input as a string of characters.
%u Treat the input as an unsigned decimal (integer) number.
%x Treats the input as a hexadecimal number (base 16).
%% Print a percent sign.
%Wd Print the W integer X digits wide.
%(format)T Outputs a date-time string resulting from using format as a
format string for strftime. The corresponding argument can
be the number of seconds since Epoch (January 1, 1970, 00:00),
-1 (the current time), or -2 (shell startup time).
Not specifying an argument uses the current time as the default value.
\% Print a percent sign.
\n Prints a newline character.
\t Print a tab character.
Some format specifiers accept format modifiers that modify their actions.
Enter the modifiers between the % character and the character that
specifies the format.
Available format modifiers are:
<N>. Enter a number that specifies a minimum field width.
If the output text is shorter, it's padded with spaces.
If the text is longer, the field expands.
. (dot). When used with a field width modifier, the field doesn't
expand for longer text. Instead, the text is truncated.
-. Left-aligns the printed text. The default alignment is right.
0. Pads the numbers with zeros instead of spaces.
<space>. Pads a positive number with a space, and a negative
number with a minus (-).
+. Prints all numbers signed (+ for positive, - for negative).
'. For decimal conversions, applies the thousands grouping
separator to the integer portion of the output according
to the current LC_NUMERIC file.

View File

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

View File

@@ -13,6 +13,7 @@ tap "jesseduffield/lazygit"
tap "k8sgpt-ai/k8sgpt"
tap "keith/formulae"
tap "mongodb/brew"
tap "nikitabobko/tap"
tap "reviewdog/tap"
tap "shivammathur/extensions"
tap "shivammathur/php"
@@ -21,6 +22,20 @@ tap "teamookla/speedtest"
tap "xwmx/taps"
# Run your GitHub Actions locally
brew "act"
# Simple, modern, secure file encryption
brew "age"
# Mozilla CA certificate store
brew "ca-certificates"
# Mozilla CA bundle for Python
brew "certifi"
# Cryptographic recipes and primitives for Python
brew "cryptography"
# YAML Parser
brew "libyaml"
# Automate deployment, configuration, and upgrading
brew "ansible"
# Checks ansible playbooks for practices and behaviour
brew "ansible-lint"
# Generic-purpose lossless compression algorithm by Google
brew "brotli"
# Library and utilities for processing GIFs
@@ -31,6 +46,8 @@ brew "highway"
brew "imath"
# JPEG image codec that aids compression and decompression
brew "jpeg-turbo"
# Library for manipulating PNG images
brew "libpng"
# Zstandard is a real-time compression algorithm
brew "zstd"
# New file format for still image compression
@@ -39,32 +56,38 @@ brew "jpeg-xl"
brew "aom"
# Apache Portable Runtime library
brew "apr"
# Mozilla CA certificate store
brew "ca-certificates"
# Cryptography and SSL/TLS Toolkit
brew "openssl@3"
# Companion library to apr, the Apache Portable Runtime library
brew "apr-util"
# Password hashing library and CLI utility
brew "argon2"
# Spell checker with better logic than ispell
brew "aspell"
# Automatic configure script builder
brew "autoconf"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# Cryptographic recipes and primitives for Python
brew "cryptography"
# Official Amazon AWS command-line interface
brew "awscli"
# Bourne-Again SHell, a UNIX command interpreter
brew "bash"
# Tool for generating GNU Standards-compliant Makefiles
brew "automake"
# GNU multiple precision arithmetic library
brew "gmp"
# GNU File, Shell, and Text utilities
brew "coreutils"
# Extendable version manager with support for Ruby, Node.js, Erlang & more
brew "asdf"
# Spell checker with better logic than ispell
brew "aspell"
# Collection of over 500 reusable autoconf macros
brew "autoconf-archive"
# Package compiler and linker metadata toolkit
brew "pkgconf"
# Automated text file generator
brew "autogen"
# Official Amazon AWS command-line interface
brew "awscli"
# Bourne-Again SHell, a UNIX command interpreter
brew "bash"
# Clone of cat(1) with syntax highlighting and Git integration
brew "bat"
# Bash Automated Testing System
brew "bats-core"
# Parser generator
brew "bison"
# Software library to render fonts
brew "freetype"
# XML-based font configuration API for X Windows
@@ -73,18 +96,32 @@ brew "fontconfig"
brew "gettext"
# Core application library for C
brew "glib"
# Mozilla CA bundle for Python
brew "certifi"
# Human-friendly and fast alternative to cut and (sometimes) awk
brew "choose-rust"
# Cross-platform make
brew "cmake"
# Get a file from an HTTP, HTTPS or FTP server
brew "curl"
# Lightweight DNS forwarder and DHCP server
brew "dnsmasq"
# Spellchecker wrapping library
brew "enchant"
# Perl lib for reading and writing EXIF metadata
brew "exiftool"
# Banner-like program prints strings as ASCII art
brew "figlet"
# Lock file during command
brew "flock"
# Libraries to talk to Microsoft SQL Server and Sybase databases
brew "freetds"
# Monitor a directory for changes and run a shell command
brew "fswatch"
# Command-line fuzzy finder written in Go
brew "fzf"
# Graphics library to dynamically manipulate images
brew "gd"
# Disk usage analyzer with console interface written in Go
brew "gdu"
# GitHub command-line tool
brew "gh"
# OpenType text shaping engine
@@ -95,22 +132,40 @@ brew "libb2"
brew "pango"
# Distributed revision control system
brew "git"
# Enable transparent encryption/decryption of files in a git repo
brew "git-crypt"
# Small git utilities
brew "git-extras"
# See your latest local git branches, formatted real fancy
brew "git-recent"
# Render markdown on the CLI
brew "glow"
# GNU implementation of the famous stream editor
brew "gnu-sed"
# Validating, recursive, caching DNS resolver
brew "unbound"
# GNU Transport Layer Security (TLS) Library
brew "gnutls"
# GNU Pretty Good Privacy (PGP) package
brew "gnupg"
# Library access to GnuPG
brew "gpgme"
# Open source suite of directory software
brew "openldap"
# Manage your GnuPG keys with ease!
brew "gpg-tui"
# Image manipulation
brew "netpbm"
# Library to render SVG files using Cairo
brew "librsvg"
# Graph visualization software from AT&T and Bell Labs
brew "graphviz"
# GNU grep, egrep and fgrep
brew "grep"
# Popular GNU data compression program
brew "gzip"
# Text-based UI library
brew "ncurses"
# Improved top (interactive process viewer)
brew "htop"
# Portable abstraction of the hierarchical topology of modern architectures
@@ -121,6 +176,8 @@ brew "libheif"
brew "imagemagick"
# Modular IRC client
brew "irssi"
# Image manipulation library
brew "jpeg"
# Lightweight and flexible command-line JSON processor
brew "jq"
# JSON parser for C
@@ -129,40 +186,76 @@ brew "json-c"
brew "krb5"
# Tool to detect/remediate misconfig and security risks of GitHub/GitLab assets
brew "legitify"
# BSD-style licensed readline alternative
brew "libedit"
# Conversion library
brew "libiconv"
# Postgres C API library
brew "libpq"
# Version of the SSL/TLS protocol forked from OpenSSL
brew "libressl"
# Multi-platform support library with a focus on asynchronous I/O
brew "libuv"
# YAML Parser
brew "libyaml"
# GNOME XML library
brew "libxml2"
# C library for reading, creating, and modifying zip archives
brew "libzip"
# Package manager for the Lua programming language
brew "luarocks"
# LZMA-based compression program similar to gzip or bzip2
brew "lzip"
# Swiss Army Knife for macOS
brew "m-cli"
# Collection of tools that nobody wrote when UNIX was young
brew "moreutils"
# NCurses Disk Usage
brew "ncdu"
# HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
brew "nginx"
# Port scanning utility for large networks
brew "nmap"
# Libraries for security-enabled client and server applications
brew "nss"
# Open source suite of directory software
brew "openldap"
# General-purpose scripting language
brew "php"
# Cryptography and SSL/TLS Toolkit
brew "openssl@1.1"
# ISO-C API and CLI for generating UUIDs
brew "ossp-uuid"
# General-purpose scripting language
brew "php@8.2"
# Manage compile and link flags for libraries
brew "pkg-config"
# General-purpose scripting language
brew "php@8.3", link: true
# Python version management
brew "pyenv"
# Migrate pip packages from one Python version to another
brew "pyenv-pip-migrate"
# Pyenv plugin to manage virtualenv
brew "pyenv-virtualenv"
# Interpreted, interactive, object-oriented programming language
brew "python@3.11"
# Install various Ruby versions and implementations
brew "ruby-build"
# Ruby version manager
brew "rbenv"
# Generate C-based recognizers from regular expressions
brew "re2c"
# Static analysis and lint tool, for (ba)sh scripts
brew "shellcheck"
# Send macOS User Notifications from the command-line
brew "terminal-notifier"
# Tool which checks for the support of TLS/SSL ciphers and flaws
brew "testssl"
# Terraform version manager inspired by rbenv
brew "tfenv"
# Linter for Terraform files
brew "tflint"
# Static analysis security scanner for your terraform code
brew "tfsec"
# Terminal multiplexer
brew "tmux"
# Display directories as trees (with optional color/HTML output)
brew "tree"
# Tool for creating isolated virtual python environments
brew "virtualenv"
# Command-line interface to the WakaTime api
brew "wakatime-cli"
# Executes a program periodically, showing output fullscreen
@@ -171,10 +264,16 @@ brew "watch"
brew "wget"
# Check your $HOME for unwanted files and directories
brew "xdg-ninja", args: ["HEAD"]
# General-purpose lossless data-compression library
brew "zlib"
# Watcher for macOS 10.14+ light/dark mode changes
brew "cormacrelf/tap/dark-notify"
# Igbinary PHP extension
brew "shivammathur/extensions/igbinary@8.3"
# Cleans up your $HOME from those pesky dotfiles
brew "doron-cohen/tap/antidot"
# lets you quickly switch between multiple git user profiles
brew "gesquive/tap/git-user"
# Automated code review tool integrated with any code analysis tools regardless of programming language.
brew "reviewdog/tap/reviewdog"
# Imagick PHP extension
brew "shivammathur/extensions/imagick@8.3"
# Mcrypt PHP extension
@@ -190,9 +289,15 @@ brew "shivammathur/extensions/uuid@8.3"
# Yaml PHP extension
brew "shivammathur/extensions/yaml@8.3"
# General-purpose scripting language
brew "shivammathur/php/php", link: false
# General-purpose scripting language
brew "shivammathur/php/php-debug"
# Find & fix known vulnerabilities in open-source dependencies
brew "snyk/tap/snyk"
# Command-line interface for 1Password
cask "1password-cli"
# AeroSpace is an i3-like tiling window manager for macOS
cask "aerospace"
# Text editor
cask "coda"
# Universal database tool and SQL client
@@ -206,10 +311,7 @@ cask "font-jetbrains-mono-nerd-font"
cask "font-lato"
cask "font-open-sans"
cask "font-roboto"
cask "font-source-code-pro"
cask "font-source-code-pro-for-powerline"
cask "font-source-sans-pro"
cask "font-source-serif-pro"
# GIT client
cask "fork"
# HTTP and GraphQL Client

View File

@@ -5,7 +5,7 @@
-- ── Install lazylazy ────────────────────────────────────────────────
-- https://github.com/folke/lazy.nvim
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not (vim.uv or vim.loop).fs_stat(lazypath) then
if not vim.loop.fs_stat(lazypath) then
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
local out = vim.fn.system {
'git',
@@ -58,4 +58,8 @@ require('lazy').setup(
}
)
require('nvm-default').setup()
require 'keymaps'
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -5,7 +5,7 @@
local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group
local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
-- ── Highlight on yank ───────────────────────────────────────────────
-- Highlight on yank
-- See `:help vim.highlight.on_yank()`
autocmd('TextYankPost', {
callback = function() vim.highlight.on_yank() end,
@@ -13,7 +13,21 @@ autocmd('TextYankPost', {
pattern = '*',
})
-- ── Windows to close with "q" ───────────────────────────────────────
-- Set the numberwidth to the maximum line number.
--
-- This fixes the issue where the line numbers jump
-- around when moving between lines relative line numbers enabled.
autocmd({ 'BufEnter', 'BufWinEnter', 'TabEnter' }, {
callback = function()
local max_line_count = vim.fn.line '$'
-- Only adjust if the file is large enough to matter
if max_line_count > 99 then
vim.opt.numberwidth = #tostring(max_line_count) + 1
end
end,
})
-- Windows to close with "q"
autocmd('FileType', {
group = augroup('close_with_q', { clear = true }),
pattern = {
@@ -44,33 +58,49 @@ autocmd('FileType', {
end,
})
-- ── make it easier to close man-files when opened inline ────────────
-- make it easier to close man-files when opened inline
autocmd('FileType', {
group = augroup('man_unlisted', { clear = true }),
pattern = { 'man' },
callback = function(event) vim.bo[event.buf].buflisted = false end,
})
-- ── wrap and check for spell in text filetypes ──────────────────────
vim.api.nvim_create_autocmd('FileType', {
-- wrap and check for spell in text filetypes
autocmd('FileType', {
group = augroup('wrap_spell', { clear = true }),
pattern = { 'text', 'plaintex', 'typst', 'gitcommit', 'markdown' },
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 ─────────────────────────────────
vim.api.nvim_create_autocmd({ 'FileType' }, {
-- 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,
})
vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, {
-- Set filetype for SSH config directory
-- Pattern handles directories with files like:
-- .dotfiles/ssh/config.d/*, .ssh/config.local, .ssh/config.work
autocmd({ 'BufRead', 'BufNewFile' }, {
desc = 'Set filetype for SSH config directory',
pattern = '*/?.ssh/{config|shared}.d/*',
pattern = {
'*/?.ssh/{config|shared}.d/*',
'*/?.ssh/config.local',
'*/?.ssh/config.work',
},
command = 'set filetype=sshconfig',
})

156
config/nvim/lua/keymaps.lua Normal file
View File

@@ -0,0 +1,156 @@
-- vim: set ft=lua ts=2 sw=2 tw=0 et cc=120 :
require 'utils'
-- ╭─────────────────────────────────────────────────────────╮
-- │ Keymaps │
-- ╰─────────────────────────────────────────────────────────╯
-- ── Disable arrow keys in normal mode ───────────────────────────────
K.n('<left>', ':echo "Use h to move!!"<CR>')
K.n('<right>', ':echo "Use l to move!!"<CR>')
K.n('<up>', ':echo "Use k to move!!"<CR>')
K.n('<down>', ':echo "Use j to move!!"<CR>')
-- ── Splits ──────────────────────────────────────────────────────────
K.n('<C-w>,', ':vertical resize -10<CR>', { desc = 'V Resize -' })
K.n('<C-w>.', ':vertical resize +10<CR>', { desc = 'V Resize +' })
K.n('<C-w>-', ':resize -10<CR>', { desc = 'H Resize -' })
K.n('<C-w>+', ':resize +10<CR>', { desc = 'H Resize +' })
K.n('<C-w>=', '<C-w>=', { desc = 'Equal Size Splits' })
-- ── Deal with word wrap ─────────────────────────────────────────────
K.n(
'k',
"v:count == 0 ? 'gk' : 'k'",
{ desc = 'Move up', noremap = true, expr = true }
)
K.n(
'j',
"v:count == 0 ? 'gj' : 'j'",
{ desc = 'Move down', noremap = true, expr = true }
)
-- ── Text manipulation ───────────────────────────────────────────────
K.d('<', { 'n', 'v' }, '<gv', 'Indent Left')
K.d('>', { 'n', 'v' }, '>gv', 'Indent Right')
K.d('<C-k>', { 'n', 'v' }, ":m '<-2<CR>gv=gv", 'Move Block Up')
K.d('<C-j>', { 'n', 'v' }, ":m '>+1<CR>gv=gv", 'Move Block Down')
-- ── Other operations ────────────────────────────────────────────────
K.nl('o', function() require('snacks').gitbrowse() end, 'Open repo in browser')
K.n('<C-s>', ':w!<cr>', { desc = 'Save', noremap = true })
K.n('<esc><esc>', ':nohlsearch<cr>', { desc = 'Clear Search Highlighting' })
-- ── Buffer operations ───────────────────────────────────────────────
-- Mappings for buffer management operations like switching, deleting, etc.
-- Convention: All mappings start with 'b' followed by the operation
K.nl('ba', ':%bd|e#|bd#<cr>', 'Close all except current')
K.nl('bd', ':lua MiniBufremove.delete()<CR>', 'Delete')
K.nl('bh', ':bprev<cr>', 'Prev')
K.nl('bj', ':bfirst<cr>', 'First')
K.nl('bk', ':blast<cr>', 'Last')
K.nl('bl', ':bnext<cr>', 'Next')
K.nl('bw', ':lua MiniBufremove.wipeout()<CR>', 'Wipeout')
-- ── Code & LSP operations ───────────────────────────────────────────
-- Mappings for code and LSP operations like code actions, formatting, etc.
-- Convention: All mappings start with 'c' followed by the operation
-- unless it's a generic operation like signature help or hover
K.n('<C-l>', ':lua vim.lsp.buf.signature_help()<CR>', { desc = 'Signature' })
K.n('K', ':Lspsaga hover_doc<cr>', { desc = 'Hover Documentation' })
K.ld('ca', 'n', ':Lspsaga code_action<cr>', 'Code Action')
K.ld('cci', 'n', ':Lspsaga incoming_calls<cr>', 'Incoming Calls')
K.ld('cco', 'n', ':Lspsaga outgoing_calls<cr>', 'Outgoing Calls')
K.ld('cd', 'n', ':Lspsaga show_line_diagnostics<cr>', 'Line Diagnostics')
-- K.ld('cf', { 'n', 'x' }, ':lua vim.lsp.buf.format()<CR>', 'Format')
K.ld('cg', 'n', ':lua require("neogen").generate()<CR>', 'Generate annotations')
K.ld('ci', 'n', ':Lspsaga implement<cr>', 'Implementations')
K.ld('cl', 'n', ':Lspsaga show_cursor_diagnostics<cr>', 'Cursor Diagnostics')
K.ld('cp', 'n', ':Lspsaga peek_definition<cr>', 'Peek Definition')
K.ld('cr', 'n', ':Lspsaga rename<cr>', 'Rename')
K.ld('cR', 'n', ':Lspsaga rename ++project<cr>', 'Rename Project wide')
K.ld('cs', 'n', ':Telescope lsp_document_symbols<CR>', 'LSP Document Symbols')
K.ld('ct', 'n', ':Lspsaga peek_type_definition<cr>', 'Peek Type Definition')
K.ld('cT', 'n', ':Telescope lsp_type_definitions<CR>', 'LSP Type Definitions')
K.ld('cu', 'n', ':Lspsaga preview_definition<cr>', 'Preview Definition')
K.ld('cv', 'n', ':Lspsaga diagnostic_jump_prev<cr>', 'Diagnostic Jump Prev')
K.ld('cw', 'n', ':Lspsaga diagnostic_jump_next<cr>', 'Diagnostic Jump Next')
-- ── CommentBox operations ───────────────────────────────────────────
-- Mappings for creating and managing comment boxes
-- Convention: All mappings start with 'cb' followed by the box type
K.nl('cbb', '<Cmd>CBccbox<CR>', 'CB: Box Title')
K.nl('cbd', '<Cmd>CBd<CR>', 'CB: Remove a box')
K.nl('cbl', '<Cmd>CBline<CR>', 'CB: Simple Line')
K.nl('cbm', '<Cmd>CBllbox14<CR>', 'CB: Marked')
K.nl('cbt', '<Cmd>CBllline<CR>', 'CB: Titled Line')
-- ── Telescope operations ────────────────────────────────────────────
-- Mappings for Telescope operations like finding files, buffers, etc.
-- Convention: All mappings start with 's' followed by the operation
-- unless it's a generic operation like searching or finding buffers
K.nl('f', ':Telescope find_files<cr>', 'Find Files')
K.nl(',', ':Telescope buffers<cr>', 'Find existing buffers')
K.nl(
'/',
function()
require('telescope.builtin').current_buffer_fuzzy_find(
require('telescope.themes').get_dropdown {
winblend = 20,
previewer = true,
}
)
end,
'Fuzzily search in current buffer'
)
K.nl('sc', ':Telescope commands<cr>', 'Commands')
K.nl('sd', ':Telescope diagnostics<cr>', 'Search Diagnostics')
K.nl('sg', ':Telescope live_grep<cr>', 'Search by Grep')
K.nl('sh', ':Telescope help_tags<cr>', 'Help tags')
K.nl('sk', ':Telescope keymaps<cr>', 'Search Keymaps')
K.nl('sl', ':Telescope luasnip<CR>', 'Search LuaSnip')
K.nl('so', ':Telescope oldfiles<CR>', 'Old Files')
K.nl(
'sp',
':lua require("telescope").extensions.lazy_plugins.lazy_plugins()<cr>',
'Lazy Plugins'
)
K.nl('sq', ':Telescope quickfix<cr>', 'Quickfix')
K.nl('ss', ':Telescope treesitter<cr>', 'Treesitter')
K.nl('st', ':TodoTelescope<cr>', 'Search Todos')
K.nl('sw', ':Telescope grep_string<cr>', 'Grep String')
K.nl('sx', ':Telescope import<cr>', 'Telescope: Import')
-- ── Trouble operations ──────────────────────────────────────────────
-- Convention is 'x' followed by the operation
K.nl('xd', ':Trouble document_diagnostics<cr>', 'Document Diagnostics')
K.nl('xl', ':Trouble loclist<cr>', 'Location List')
K.nl('xq', ':Trouble quickfix<cr>', 'Quickfix')
K.nl('xw', ':Trouble workspace_diagnostics<cr>', 'Workspace Diagnostics')
K.nl('xx', ':Trouble diagnostics<cr>', 'Diagnostic')
-- ── Toggle settings ─────────────────────────────────────────────────
-- Convention is 't' followed by the operation
K.nl('tc', ':CloakToggle<cr>', 'Cloak: Toggle')
K.nl('te', ':Neotree toggle<cr>', 'Toggle Neotree')
K.nl('tl', ToggleBackground, 'Toggle Light/Dark Mode')
K.nl('tn', ':Noice dismiss<cr>', 'Noice: Dismiss Notification')
-- ── Quit operations ─────────────────────────────────────────────────
-- Convention is 'q' followed by the operation
K.nl('qf', ':q<CR>', 'Quicker close split')
K.nl('qq', function()
if vim.fn.confirm('Force save and quit?', '&Yes\n&No', 2) == 1 then
vim.cmd 'wq!'
end
end, 'Quit with force saving')
K.nl('qw', ':wq<CR>', 'Write and quit')
K.nl('qQ', function()
if vim.fn.confirm('Force quit without saving?', '&Yes\n&No', 2) == 1 then
vim.cmd 'q!'
end
end, 'Force quit without saving')
-- That concludes the keymaps section of the config.

View File

@@ -0,0 +1,122 @@
-- Get nvm default version and use it in node_host_prog
-- and g.copilot_node_command.
--
-- This module automatically configures Neovim to use the default Node.js version
-- from NVM. It requires a working NVM installation and 'default' alias to be set,
-- and also neovim npm package to be installed.
--
-- You can install the neovim package by running:
-- npm i --global neovim
--
-- Usage:
-- require('nvm-default').setup({
-- add_to_path = true, -- optional: add NVM bin directory to PATH
-- nvm_path = "~/.nvm", -- optional: custom NVM installation path
-- notify_level = "info" -- optional: notification level
-- })
local M = {}
M.name = 'nvm-default.nvim'
M.version = '0.1.0' -- x-release-please-version
-- Helper function to run a shell command
---@param cmd string Run a shell command
---@return string? Return the result of the command
local function run_command(cmd)
local result = vim.fn.system(cmd)
return vim.v.shell_error == 0 and result:gsub('%s+$', '') or nil
end
-- Helper function to show a notification
---@param msg string Show a message
---@param level "info"|"warn"|"error"|"trace" Notification level
local function n(msg, level)
if msg == nil then msg = M.name .. ': No message provided' end
if level == nil then level = 'trace' end
local log_level = vim.log.levels.INFO
if level == 'info' then
log_level = vim.log.levels.INFO
elseif level == 'warn' then
log_level = vim.log.levels.WARN
elseif level == 'error' then
log_level = vim.log.levels.ERROR
elseif level == 'trace' then
log_level = vim.log.levels.TRACE
end
vim.notify(M.name .. ': ' .. msg, log_level)
end
---@class NvmDefaultOptions
---@field add_to_path boolean Add found NVM bin directory to PATH
---@field nvm_path string Where nvm installation is located
---@field notify_level number|"info"|"warn"|"error"|"trace" Notification level filter
-- Default options
---@type NvmDefaultOptions
M.defaults = {
add_to_path = vim.g.nvm_default_add_to_path or true,
nvm_path = vim.fn.expand(os.getenv 'NVM_DIR' or '~/.nvm'),
notify_level = vim.g.nvm_default_notify_level or 'info',
}
-- Fetch the NVM default version or fallback to node version
---@param opts? NvmDefaultOptions Plugin options
function M.setup(opts)
local options = vim.tbl_deep_extend('force', M.defaults, opts or {})
local nvm_path = options.nvm_path
local node_version = run_command(
string.format('. %s/nvm.sh && nvm version default', nvm_path)
) or run_command(string.format('. %s/nvm.sh && nvm version node', nvm_path))
if node_version and node_version:match '^v' then
-- Set vim.g.node_host_prog and vim.g.copilot_node_command
local current_nvm_version_path =
string.format('%s/versions/node/%s', nvm_path, node_version)
local current_nvm_node_bin_path =
string.format('%s/bin', current_nvm_version_path)
local current_nvm_node_bin =
string.format('%s/node', current_nvm_node_bin_path)
local neovim_node_host_bin_path =
string.format('%s/neovim-node-host', current_nvm_node_bin_path)
-- Collect missing files and directories errors for error output
local missing = {}
-- If node_dir isn't there, stop and show error
if not vim.fn.isdirectory(current_nvm_version_path) then
table.insert(missing, 'Node.js directory: ' .. current_nvm_version_path)
end
-- If node_bin isn't there, stop and show error
if not vim.fn.filereadable(current_nvm_node_bin) then
table.insert(missing, 'Node.js binary: ' .. current_nvm_node_bin)
end
if not vim.fn.filereadable(neovim_node_host_bin_path) then
table.insert(missing, 'Neovim host binary: ' .. neovim_node_host_bin_path)
end
if #missing > 0 then
n('Missing required files:\n- ' .. table.concat(missing, '\n- '), 'error')
return
end
-- Add to PATH if requested. Can be turned off by setting if it messes with
-- other tools.
if options.add_to_path then
vim.env.PATH = current_nvm_node_bin_path .. ':' .. vim.env.PATH
end
vim.g.node_host_prog = neovim_node_host_bin_path
vim.g.copilot_node_command = current_nvm_node_bin
else
n('Unable to determine the Node.js version from nvm.', 'error')
end
end
return M

View File

@@ -2,36 +2,48 @@
-- │ neovim configuration options │
-- ╰─────────────────────────────────────────────────────────╯
-- See `:help vim.opt`
-- `:help vim.g`
-- For more options, you can see `:help option-list`
-- Enables the experimental nvim 0.5 features
vim.loader.enable()
local g = vim.g -- A table to store global variables
local o = vim.opt -- A table to store global options
-- Map leader and local leader
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- vim.global
g.mapleader = ' ' -- Space as the leader key
g.maplocalleader = ' ' -- Space as the local leader key
-- Set the colorscheme and variants
vim.g.colors_theme = 'tokyonight'
vim.g.colors_variant_light = 'tokyonight-day'
vim.g.colors_variant_dark = 'tokyonight-storm'
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
-- Make sure editorconfig support is enabled
vim.g.editorconfig = true
g.editorconfig = true -- Make sure editorconfig support is enabled
g.loaded_perl_provider = 0 -- Disable perl provider
g.loaded_ruby_provider = 0 -- Disable ruby provider
g.loaded_java_provider = 0 -- Disable java provider
-- vim.options
-- Most of the good defaults are provided by `mini.basics`
-- See: lua/plugins/mini.lua
o.ignorecase = true -- Ignore case in search patterns
o.inccommand = 'split' -- Preview substitutions live, as you type!
o.number = true -- Show line numbers
o.numberwidth = 3 -- Set the width of the number column
o.relativenumber = true -- Show relative line numbers
o.scrolloff = 15 -- Show context around cursor
o.signcolumn = 'yes:3' -- Keep signcolumn on by default
o.spell = true -- Enable spell checking
o.spelllang = 'en_us' -- Set the spell checking language
o.splitbelow = true -- split to the bottom
o.splitright = true -- vsplit to the right
o.termguicolors = true -- Enable GUI colors
o.timeoutlen = 250 -- Decrease mapped sequence wait time
o.updatetime = 250 -- 250 ms = 2,5 seconds
o.sessionoptions =
'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions'
-- Enable the colorcolumn
vim.api.nvim_set_option_value('colorcolumn', '+1', { scope = 'global' })
-- Enable line numbers and relative line numbers
vim.opt.number = true
vim.opt.relativenumber = true
-- Enable mouse mode, can be useful for resizing splits for example!
vim.opt.mouse = 'a'
-- Don't show the mode, since it's already in the status line
vim.opt.showmode = false
-- Sync clipboard between OS and Neovim.
-- Schedule the setting after `UiEnter` because it can increase startup-time.
-- See `:help 'clipboard'`
@@ -40,95 +52,4 @@ vim.schedule(function()
vim.opt.clipboard = c
end)
vim.opt.breakindent = true -- Enable break indent
vim.opt.smartindent = true -- Insert indents automatically
-- Save undo history
vim.opt.undofile = true
-- Case-insensitive searching UNLESS \C or one or
-- more capital letters in the search term
vim.opt.ignorecase = true
vim.opt.smartcase = true
-- Keep signcolumn on by default
vim.opt.signcolumn = 'yes'
-- Decrease update time
vim.opt.updatetime = 250
vim.wo.signcolumn = 'yes'
-- Decrease mapped sequence wait time
-- Displays which-key popup sooner
vim.opt.timeoutlen = 250
-- Configure how new splits should be opened
vim.opt.splitright = true
vim.opt.splitbelow = true
-- Sets how neovim will display certain whitespace characters in the editor.
-- See `:help 'list'`
-- and `:help 'listchars'`
vim.opt.list = true
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '' }
-- Preview substitutions live, as you type!
vim.opt.inccommand = 'split'
-- Show which line your cursor is on
vim.opt.cursorline = true
-- Minimal number of screen lines to keep above and below the cursor.
vim.opt.scrolloff = 15
-- Set completeopt to have a better completion experience
vim.o.completeopt = 'menuone,noselect'
-- Fixes Notify opacity issues
vim.o.termguicolors = true
-- Set spell checking
vim.o.spell = true
vim.o.spelllang = 'en_us'
-- Tree-sitter settings
vim.g.loaded_perl_provider = 0
vim.g.loaded_ruby_provider = 0
-- kevinhwang91/nvim-ufo settings
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
vim.o.foldcolumn = '1' -- '0' is not bad
-- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
vim.o.foldenable = true
-- anuvyklack/windows.nvim settings
vim.o.winwidth = 15
vim.o.winminwidth = 10
vim.o.equalalways = false
-- folke/noice.nvim settings
vim.g.noice_ignored_filetypes = {
'fugitiveblame',
'fugitive',
'gitcommit',
'noice',
}
-- ── Deal with word wrap ───────────────────────────────────────────────────────
local m = vim.api.nvim_set_keymap
m(
'n',
'k',
"v:count == 0 ? 'gk' : 'k'",
{ desc = 'Move up', noremap = true, expr = true }
)
m(
'n',
'j',
"v:count == 0 ? 'gj' : 'j'",
{ desc = 'Move down', noremap = true, expr = true }
)
-- vim: ts=2 sts=2 sw=2 et

View File

@@ -0,0 +1,119 @@
return {
-- Performant, batteries-included completion plugin for Neovim
-- https:/github.com/saghen/blink.cmp
{
'saghen/blink.cmp',
version = '*',
lazy = false, -- lazy loading handled internally
dependencies = {
-- Compatibility layer for using nvim-cmp sources on blink.cmp
-- https://github.com/Saghen/blink.compat
{
'saghen/blink.compat',
version = '*',
-- lazy.nvim will automatically load the plugin when it's required by blink.cmp
opts = {
-- make sure to set opts so that lazy.nvim calls blink.compat's setup
impersonate_nvim_cmp = true,
},
},
-- Set of preconfigured snippets for different languages.
-- https://github.com/rafamadriz/friendly-snippets
{ 'rafamadriz/friendly-snippets' },
-- Lua plugin to turn github copilot into a cmp source
-- https://github.com/giuxtaposition/blink-cmp-copilot
{
'giuxtaposition/blink-cmp-copilot',
dependencies = {
-- Fully featured & enhanced replacement for copilot.vim complete
-- with API for interacting with Github Copilot
-- https://github.com/zbirenbaum/copilot.lua
{
'zbirenbaum/copilot.lua',
cmd = 'Copilot',
build = ':Copilot setup',
event = { 'InsertEnter', 'LspAttach' },
opts = {
fix_pairs = true,
suggestion = { enabled = false },
panel = { enabled = false },
filetypes = {
markdown = true,
},
},
},
},
},
},
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
-- 'default' for mappings similar to built-in completion
-- 'super-tab' for mappings similar to vscode (tab to accept, arrow keys to navigate)
-- 'enter' for mappings similar to 'super-tab' but with 'enter' to accept
-- see the "default configuration" section below for full documentation on how to define
-- your own keymap.
keymap = {
preset = 'super-tab',
-- Use Ctrl-x to trigger auto completion
['<C-x>'] = { 'show', 'show_documentation', 'hide_documentation' },
},
appearance = {
-- Sets the fallback highlight groups to nvim-cmp's highlight groups
-- Useful for when your theme doesn't support blink.cmp
-- will be removed in a future release
use_nvim_cmp_as_default = true,
-- Set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- Adjusts spacing to ensure icons are aligned
nerd_font_variant = vim.g.nerd_font_variant or 'mono',
},
completion = {
menu = {
draw = {
columns = {
{ 'label', 'label_description', gap = 1 },
{ 'kind_icon', 'kind', gap = 1 },
},
},
},
documentation = {
auto_show = true,
},
ghost_text = {
enabled = false,
},
},
-- default list of enabled providers defined so that you can extend it
-- elsewhere in your config, without redefining it, via `opts_extend`
sources = {
default = {
'lsp',
'copilot',
'path',
'snippets',
'buffer',
},
providers = {
copilot = {
name = 'copilot',
module = 'blink-cmp-copilot',
},
},
},
-- experimental auto-brackets support
-- completion = { accept = { auto_brackets = { enabled = true } } }
-- experimental signature help support
signature = { enabled = true },
},
-- allows extending the enabled_providers array elsewhere in your config
-- without having to redefine it
opts_extend = { 'sources.completion.enabled_providers' },
},
}

View File

@@ -1,235 +0,0 @@
-- Auto completion
-- https://github.com/hrsh7th/nvim-cmp
return {
{
'hrsh7th/nvim-cmp',
lazy = false,
version = false, -- Use the latest version of the plugin
event = 'InsertEnter',
dependencies = {
'hrsh7th/cmp-nvim-lsp',
-- ── LuaSnip Dependencies ────────────────────────────────────────────
-- Snippet Engine for Neovim written in Lua.
-- https://github.com/L3MON4D3/LuaSnip
{
'L3MON4D3/LuaSnip',
version = '*',
event = 'BufReadPre',
build = 'make install_jsregexp',
dependencies = {
-- luasnip completion source for nvim-cmp
-- https://github.com/saadparwaiz1/cmp_luasnip
'saadparwaiz1/cmp_luasnip',
'rafamadriz/friendly-snippets',
'molleweide/LuaSnip-snippets.nvim',
},
},
-- ── Adds other completion capabilities. ─────────────────────────────
-- ── nvim-cmp does not ship with all sources by default.
-- ── They are split into multiple repos for maintenance purposes.
{ 'hrsh7th/cmp-nvim-lsp' },
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/cmp-path' },
{ 'hrsh7th/cmp-nvim-lsp-signature-help' },
{ 'hrsh7th/cmp-emoji' },
{ 'hrsh7th/cmp-cmdline' },
-- cmp import and use all environment variables from .env.* and system
-- https://github.com/SergioRibera/cmp-dotenv
{ 'SergioRibera/cmp-dotenv' },
-- A dictionary completion source for nvim-cmp
-- https://github.com/uga-rosa/cmp-dictionary
{ 'uga-rosa/cmp-dictionary' },
-- An additional source for nvim-cmp to autocomplete packages and its versions
-- https://github.com/David-Kunz/cmp-npm
{
'David-Kunz/cmp-npm',
dependencies = { 'nvim-lua/plenary.nvim' },
ft = 'json',
opts = {},
},
-- https://github.com/chrisgrieser/cmp-nerdfont
{ 'chrisgrieser/cmp-nerdfont' },
-- ── Other deps ──────────────────────────────────────────────────────
-- vscode-like pictograms for neovim lsp completion items
-- https://github.com/onsails/lspkind.nvim
{ 'onsails/lspkind.nvim' },
-- Lua plugin to turn github copilot into a cmp source
-- https://github.com/zbirenbaum/copilot-cmp
{
'zbirenbaum/copilot-cmp',
dependencies = {
-- Fully featured & enhanced replacement for copilot.vim complete
-- with API for interacting with Github Copilot
-- https://github.com/zbirenbaum/copilot.lua
{
'zbirenbaum/copilot.lua',
cmd = 'Copilot',
build = ':Copilot setup',
event = { 'InsertEnter', 'LspAttach' },
opts = {
fix_pairs = true,
suggestion = { enabled = false },
panel = { enabled = false },
filetypes = {
markdown = true,
help = true,
},
},
},
},
config = function() require('copilot_cmp').setup() end,
},
},
config = function()
local cmp = require 'cmp'
local luasnip = require 'luasnip'
local lspkind = require 'lspkind'
luasnip.config.setup {}
luasnip.snippets = require('luasnip_snippets').load_snippets()
require('luasnip.loaders.from_vscode').lazy_load()
require('copilot_cmp').setup()
require('cmp_dictionary').setup {
paths = { '/usr/share/dict/words' },
exact_length = 2,
}
local has_words_before = function()
if vim.api.nvim_get_option_value('buftype', {}) == 'prompt' then
return false
end
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0
and vim.api
.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]
:match '^%s*$'
== nil
end
cmp.setup {
formatting = {
format = lspkind.cmp_format {
mode = 'symbol',
max_width = function() return math.floor(0.45 * vim.o.columns) end,
show_labelDetails = true,
symbol_map = {
Copilot = '',
Text = '',
Constructor = '',
},
},
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
view = {
width = function(_, _) return math.min(80, vim.o.columns) end,
-- entries = {
-- name = 'custom',
-- selection_order = 'near_cursor',
-- },
},
snippet = {
expand = function(args) luasnip.lsp_expand(args.body) end,
},
mapping = cmp.mapping.preset.insert {
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
-- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available.
['<C-c>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() and has_words_before() then
cmp.select_next_item { behavior = cmp.SelectBehavior.Select }
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
},
sources = {
-- function arg popups while typing
{ name = 'nvim_lsp_signature_help', group_index = 2 },
-- Copilot Source
{ name = 'copilot', group_index = 2 },
-- Other Sources
{ name = 'dictionary', keyword_length = 2, group_index = 2 },
{ name = 'npm', keyword_length = 4, group_index = 2 },
{ name = 'nvim_lsp', group_index = 2 },
{ name = 'luasnip', group_index = 2 },
{ name = 'dotenv', group_index = 2 },
{ name = 'path', group_index = 2 },
{ name = 'emoji', group_index = 2 },
{ name = 'nerdfont', group_index = 2 },
},
sorting = {
priority_weight = 2,
comparators = {
require('copilot_cmp.comparators').prioritize,
-- Below is the default comparator list and order for nvim-cmp
cmp.config.compare.offset,
cmp.config.compare.scopes, --this is commented in nvim-cmp too
cmp.config.compare.exact,
cmp.config.compare.score,
cmp.config.compare.recently_used,
cmp.config.compare.locality,
cmp.config.compare.kind,
cmp.config.compare.sort_text,
cmp.config.compare.length,
cmp.config.compare.order,
},
},
}
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' },
},
})
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
}, {
{ name = 'cmdline' },
}),
matching = { disallow_symbol_nonprefix_matching = false },
})
end,
},
-- Luasnip choice node completion source for nvim-cmp
-- https://github.com/doxnit/cmp-luasnip-choice
{
'doxnit/cmp-luasnip-choice',
config = function()
require('cmp_luasnip_choice').setup {
auto_open = true, -- Automatically open nvim-cmp on choice node (default: true)
}
end,
},
}

View File

@@ -0,0 +1,87 @@
return {
-- A better annotation generator.
-- Supports multiple languages and annotation conventions.
-- https://github.com/danymat/neogen
{
'danymat/neogen',
version = '*',
opts = { enabled = true, snippet_engine = 'luasnip' },
},
-- Cloak allows you to overlay *'s over defined patterns in defined files.
-- https://github.com/laytan/cloak.nvim
{
'laytan/cloak.nvim',
version = '*',
opts = {
enabled = true,
cloak_character = '*',
-- The applied highlight group (colors) on the cloaking, see `:h highlight`.
highlight_group = 'Comment',
patterns = {
{
-- Match any file starting with ".env".
-- This can be a table to match multiple file patterns.
file_pattern = {
'.env*',
'wrangler.toml',
'.dev.vars',
},
-- Match an equals sign and any character after it.
-- This can also be a table of patterns to cloak,
-- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
cloak_pattern = '=.+',
},
},
},
},
-- Describe the regexp under the cursor
-- https://github.com/bennypowers/nvim-regexplainer
{
'bennypowers/nvim-regexplainer',
event = 'BufEnter',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'MunifTanjim/nui.nvim',
},
opts = {
-- automatically show the explainer when the cursor enters a regexp
auto = true,
},
},
-- Clarify and beautify your comments using boxes and lines.
-- https://github.com/LudoPinelli/comment-box.nvim
{
'LudoPinelli/comment-box.nvim',
event = 'BufEnter',
opts = {},
},
-- Plugin to improve viewing Markdown files in Neovim
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
{
'MeanderingProgrammer/render-markdown.nvim',
event = 'BufEnter',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons',
},
ft = 'markdown',
opts = {},
},
{
'ray-x/go.nvim',
dependencies = { -- optional packages
'ray-x/guihua.lua',
'neovim/nvim-lspconfig',
'nvim-treesitter/nvim-treesitter',
},
config = function() require('go').setup() end,
event = { 'CmdlineEnter' },
ft = { 'go', 'gomod' },
build = ':lua require("go.install").update_all_sync()', -- if you need to install/update all binaries
},
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,85 @@
return {
-- A collection of small QoL plugins for Neovim
-- https://github.com/folke/snacks.nvim
{
'folke/snacks.nvim',
priority = 1000,
lazy = false,
---@type snacks.Config
opts = {
bigfile = { enabled = true },
gitbrowse = { enabled = true },
notifier = {
enabled = true,
timeout = 3000,
},
notify = { enabled = true },
quickfile = { enabled = true },
statuscolumn = {
enabled = true,
left = { 'mark', 'sign' }, -- priority of signs on the left (high to low)
right = { 'fold', 'git' }, -- priority of signs on the right (high to low)
folds = {
open = true, -- show open fold icons
git_hl = false, -- use Git Signs hl for fold icons
},
git = {
-- patterns to match Git signs
patterns = { 'GitSign', 'MiniDiffSign' },
},
refresh = 50, -- refresh at most every 50ms
},
words = { enabled = true },
styles = {
notification = {
wo = { wrap = true }, -- Wrap notifications
},
},
},
},
-- A pretty diagnostics, references, telescope results,
-- quickfix and location list to help you solve all the
-- trouble your code is causing.
-- https://github.com/folke/trouble.nvim
{
'folke/trouble.nvim',
lazy = false,
dependencies = { 'nvim-tree/nvim-web-devicons' },
---@type trouble.Config
opts = {
auto_preview = true,
auto_fold = true,
auto_close = true,
use_lsp_diagnostic_signs = true,
},
},
-- Navigate your code with search labels, enhanced
-- character motions and Treesitter integration
-- https://github.com/folke/flash.nvim
{
'folke/flash.nvim',
event = 'VeryLazy',
---@type Flash.Config
opts = {},
keys = {
{
'zk',
mode = { 'n', 'x', 'o' },
function() require('flash').jump() end,
desc = 'Flash',
},
{
'Zk',
mode = { 'n', 'x', 'o' },
function() require('flash').treesitter() end,
desc = 'Flash Treesitter',
},
{
'<m-s>',
mode = { 'c' },
function() require('flash').toggle() end,
desc = 'Toggle Flash Search',
},
},
},
}

View File

@@ -1,31 +0,0 @@
-- A small Neovim plugin for previewing definitions using floating windows.
-- https://github.com/rmagatti/goto-preview
return {
'rmagatti/goto-preview',
dependencies = {
{ 'nvim-telescope/telescope.nvim' },
},
opts = {
width = 120, -- Width of the floating window
height = 15, -- Height of the floating window
border = { '', '', '', '', '', '', '', '' }, -- Border characters of the floating window
default_mappings = true,
debug = false, -- Print debug information
opacity = nil, -- 0-100 opacity level of the floating window where 100 is fully transparent.
resizing_mappings = false, -- Binds arrow keys to resizing the floating window.
post_open_hook = nil, -- A function taking two arguments, a buffer and a window to be ran as a hook.
references = { -- Configure the telescope UI for slowing the references cycling window.
telescope = require('telescope.themes').get_dropdown {
hide_preview = false,
},
},
-- These two configs can also be passed down to the goto-preview definition
-- and implementation calls for one off "peak" functionality.
focus_on_open = true, -- Focus the floating window when opening it.
dismiss_on_move = false, -- Dismiss the floating window when moving the cursor.
force_close = true, -- passed into vim.api.nvim_win_close's second argument. See :h nvim_win_close
bufhidden = 'wipe', -- the bufhidden option to set on the floating window. See :h bufhidden
stack_floating_preview_windows = true, -- Whether to nest floating windows
preview_window_title = { enable = true, position = 'left' },
},
}

View File

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

View File

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

View File

@@ -1,239 +1,338 @@
-- ── Mason and LSPConfig integration ────────────────────────────────────
-- ─────────────────────────────────────────────────────────╮
-- │ LSP Setup and configuration │
-- ╰─────────────────────────────────────────────────────────╯
-- ── LSP settings. ───────────────────────────────────────────────
-- This function gets run when an LSP connects to a particular buffer.
-- 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
-- Make runtime files discoverable to the server
local runtime_path = vim.split(package.path, ';')
table.insert(runtime_path, 'lua/?.lua')
table.insert(runtime_path, 'lua/?/init.lua')
-- nvim-cmp supports additional completion capabilities
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Tell the server the capability of foldingRange,
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
capabilities.textDocument.foldingRange = {
dynamicRegistration = true,
lineFoldingOnly = true,
local lsp_servers = {
bashls = {},
-- csharp_ls = {},
diagnosticls = {},
gopls = {
settings = {
gopls = {
hints = {
rangeVariableTypes = true,
parameterNames = true,
constantValues = true,
assignVariableTypes = true,
compositeLiteralFields = true,
compositeLiteralTypes = true,
functionTypeParameters = true,
},
},
},
},
html = {},
intelephense = {},
jsonls = {},
lua_ls = {
settings = {
Lua = {
completion = {
callSnippet = 'Replace',
},
diagnostics = {
globals = {
'vim',
-- busted
'describe',
'it',
'before_each',
'after_each',
'assert',
},
disable = {
-- Ignore lua_ls noisy `missing-fields` warnings
'missing-fields',
},
},
hint = {
enable = false,
arrayIndex = 'Auto',
await = true,
paramName = 'All',
paramType = true,
semicolon = 'SameLine',
setType = false,
},
},
},
},
tailwindcss = {},
ts_ls = {
settings = {
typescript = {
inlayHints = {
includeInlayParameterNameHints = 'all',
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
includeInlayFunctionParameterTypeHints = true,
includeInlayVariableTypeHints = true,
includeInlayVariableTypeHintsWhenTypeMatchesName = false,
includeInlayPropertyDeclarationTypeHints = true,
includeInlayFunctionLikeReturnTypeHints = true,
includeInlayEnumMemberValueHints = true,
},
},
},
},
vimls = {},
volar = {
settings = {
typescript = {
inlayHints = {
enumMemberValues = {
enabled = true,
},
functionLikeReturnTypes = {
enabled = true,
},
propertyDeclarationTypes = {
enabled = true,
},
parameterTypes = {
enabled = true,
suppressWhenArgumentMatchesName = true,
},
variableTypes = {
enabled = true,
},
},
},
},
},
}
return {
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
-- https://github.com/folke/lazydev.nvim
{
'folke/neoconf.nvim',
cmd = 'Neoconf',
opts = {},
},
-- Portable package manager for Neovim that runs everywhere Neovim runs.
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
-- https://github.com/williamboman/mason.nvim
{
'williamboman/mason.nvim',
cmd = 'Mason',
run = ':MasonUpdate',
'folke/lazydev.nvim',
ft = 'lua',
opts = {
PATH = 'prepend',
-- Mason servers to install
-- See: https://mason-registry.dev/registry/list
ensure_installed = {
'clang-format',
'codespell',
'commitlint',
'editorconfig-checker',
'fixjson',
'jsonlint',
'luacheck',
'phpcbf',
'phpcs',
'phpmd',
'prettier',
'shellcheck',
'shfmt',
'stylua',
'yamllint',
},
},
},
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
-- https://github.com/williamboman/mason-lspconfig.nvim
{
'williamboman/mason-lspconfig.nvim',
opts = {
-- ── Enable the following language servers ───────────────────────────
-- :help lspconfig-all for all pre-configured LSPs
ensure_installed = {
'bashls',
-- 'csharp_ls',
'diagnosticls',
'gopls',
'html',
'intelephense',
'jsonls',
'lua_ls',
'tailwindcss',
'ts_ls',
'vimls',
'volar',
},
automatic_installation = true,
handlers = {
-- The first entry (without a key) will be the default handler
-- and will be called for each installed server that doesn't have
-- a dedicated handler.
function(server_name) -- default handler (optional)
require('lspconfig')[server_name].setup {
on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(
bufnr,
'Format',
function(_)
require('conform').format {
formatters = { 'injected' },
async = true,
lsp_fallback = true,
}
end,
{ desc = 'Format current buffer with LSP' }
)
end,
capabilities = capabilities,
}
end,
-- Next, you can provide targeted overrides for specific servers.
['lua_ls'] = function()
require('lspconfig')['lua_ls'].setup {
on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(
bufnr,
'Format',
function(_)
require('conform').format {
formatters = { 'injected' },
async = true,
lsp_fallback = true,
}
end,
{ desc = 'Format current buffer with LSP' }
)
end,
capabilities = capabilities,
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're
-- using (most likely LuaJIT)
version = 'LuaJIT',
-- Setup your lua path
path = runtime_path,
},
diagnostics = {
globals = { 'vim' },
disable = {
-- Ignore lua_ls noisy `missing-fields` warnings
'missing-fields',
},
},
workspace = {
library = vim.api.nvim_get_runtime_file('', true),
checkThirdParty = false,
},
-- Do not send telemetry data containing a randomized
-- but unique identifier
telemetry = { enable = false },
completion = {
callSnippet = 'Replace',
},
},
},
}
end,
['jsonls'] = function()
require('lspconfig')['jsonls'].setup {
on_attach = function(_, bufnr)
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(
bufnr,
'Format',
function(_)
require('conform').format {
formatters = { 'injected' },
async = true,
lsp_fallback = true,
}
end,
{ desc = 'Format current buffer with LSP' }
)
end,
capabilities = capabilities,
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
yaml = {
schemaStore = {
-- You must disable built-in SchemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.
enable = false,
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
url = '',
},
schemas = require('schemastore').yaml.schemas(),
validate = { enable = true },
},
},
}
end,
['ts_ls'] = function()
local mason_registry = require 'mason-registry'
local ts_plugin_location = mason_registry
.get_package('vue-language-server')
:get_install_path() .. '/node_modules/@vue/typescript-plugin'
require('lspconfig')['volar'].setup {
init_options = {
plugins = {
{
name = '@vue/typescript-plugin',
location = ts_plugin_location,
languages = { 'javascript', 'typescript', 'vue' },
},
},
},
filetypes = {
'typescript',
'javascript',
'javascriptreact',
'typescriptreact',
'vue',
},
}
end,
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
},
},
},
-- ── Misc ───────────────────────────────────────────────────
-- vscode-like pictograms for neovim lsp completion items
-- https://github.com/onsails/lspkind-nvim
{ 'onsails/lspkind.nvim', opts = {} },
-- JSON schemas for Neovim
-- https://github.com/b0o/SchemaStore.nvim
{ 'b0o/schemastore.nvim' },
-- Meta type definitions for the Lua platform Luvit.
-- https://github.com/Bilal2453/luvit-meta
{ 'Bilal2453/luvit-meta', lazy = true },
-- ── LSP ────────────────────────────────────────────────────
-- Quick start configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
{ 'neovim/nvim-lspconfig', dependencies = { 'folke/neoconf.nvim' } },
-- Garbage collector that stops inactive LSP clients to free RAM
-- https://github.com/Zeioth/garbage-day.nvim
-- improve neovim lsp experience
-- https://github.com/nvimdev/lspsaga.nvim
-- https://nvimdev.github.io/lspsaga/
{
'zeioth/garbage-day.nvim',
dependencies = 'neovim/nvim-lspconfig',
event = 'VeryLazy',
opts = {},
'nvimdev/lspsaga.nvim',
event = 'LspAttach',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons',
},
opts = {
code_action = {
show_server_name = true,
keys = {
quit = { 'q', '<ESC>' },
},
},
diagnostic = {
keys = {
quit = { 'q', '<ESC>' },
},
},
},
},
-- A simple wrapper for nvim-lspconfig and mason-lspconfig
-- to easily setup LSP servers.
-- https://github.com/junnplus/lsp-setup.nvim
{
'junnplus/lsp-setup.nvim',
dependencies = {
-- Quickstart configs for Nvim LSP
-- https://github.com/neovim/nvim-lspconfig
{ 'neovim/nvim-lspconfig' },
-- Portable package manager for Neovim that runs everywhere Neovim runs.
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
-- https://github.com/williamboman/mason.nvim
{
'williamboman/mason.nvim',
version = '*',
cmd = 'Mason',
run = ':MasonUpdate',
opts = {},
},
-- Extensible UI for Neovim notifications and LSP progress messages.
-- https://github.com/j-hui/fidget.nvim
{
'j-hui/fidget.nvim',
version = '*',
opts = {},
},
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
-- https://github.com/williamboman/mason-lspconfig.nvim
{ 'williamboman/mason-lspconfig.nvim' },
-- Install and upgrade third party tools automatically
-- https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim
{
'WhoIsSethDaniel/mason-tool-installer.nvim',
version = '*',
opts = {
auto_install = true,
auto_update = true,
ensure_installed = {
'actionlint',
'editorconfig-checker',
'goimports',
'gotests',
'phpcbf',
'pint',
'prettierd',
'shellcheck',
'shfmt',
'staticcheck',
'stylua',
'vint',
'yamlfmt',
},
},
},
-- JSON schemas for Neovim
-- https://github.com/b0o/SchemaStore.nvim
{ 'b0o/schemastore.nvim' },
-- Performant, batteries-included completion plugin for Neovim
-- https://github.com/saghen/blink.cmp
-- See lua/plugins/blink.lua for configs
{ 'saghen/blink.cmp' },
},
opts = {
default_mappings = false,
mappings = {
gd = 'lua require"telescope.builtin".lsp_definitions()',
gi = 'lua require"telescope.builtin".lsp_implementations()',
gr = 'lua require"telescope.builtin".lsp_references()',
},
inlay_hints = {
enabled = true,
},
servers = lsp_servers,
},
config = function(_, opts)
require('lazydev').setup()
require('lsp-setup').setup(opts)
local lspconfig = require 'lspconfig'
for server, config in pairs(opts.servers) do
-- passing config.capabilities to blink.cmp merges with the capabilities in your
-- `opts[server].capabilities, if you've defined it
config.capabilities =
require('blink.cmp').get_lsp_capabilities(config.capabilities)
lspconfig[server].setup(config)
end
lspconfig.lua_ls.on_init = function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
vim.loop.fs_stat(path .. '/.luarc.json')
or vim.loop.fs_stat(path .. '/.luarc.jsonc')
then
return
end
end
client.config.settings.Lua =
vim.tbl_deep_extend('force', client.config.settings.Lua, {
runtime = {
-- Tell the language server which version of Lua you're using
-- (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
},
-- Make the server aware of Neovim runtime files
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
},
},
})
end
lspconfig.jsonls.settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
},
yaml = {
schemaStore = {
-- You must disable built-in SchemaStore support if you want to use
-- this plugin and its advanced options like `ignore`.
enable = false,
-- Avoid TypeError: Cannot read properties of undefined (reading 'length')
url = '',
},
schemas = require('schemastore').yaml.schemas(),
validate = { enable = true },
},
}
end,
},
-- Lightweight yet powerful formatter plugin for Neovim
-- https://github.com/stevearc/conform.nvim
{
'stevearc/conform.nvim',
event = { 'BufWritePre' },
cmd = { 'ConformInfo' },
keys = {
{
'<leader>cf',
function()
require('conform').format { async = true, lsp_format = 'fallback' }
end,
mode = '',
desc = 'Format buffer',
},
},
opts = {
notify_on_error = false,
---@type nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts
format_on_save = function(bufnr)
-- Disable "format_on_save lsp_fallback" for languages that don't
-- have a well standardized coding style. You can add additional
-- languages here or re-enable it for the disabled ones.
local disable_filetypes = { c = true, cpp = true }
local lsp_format_opt
if disable_filetypes[vim.bo[bufnr].filetype] then
lsp_format_opt = 'never'
else
lsp_format_opt = 'fallback'
end
return {
timeout_ms = 500,
lsp_format = lsp_format_opt,
}
end,
formatters_by_ft = {
lua = { 'stylua' },
-- Conform can also run multiple formatters sequentially
-- python = { "isort", "black" },
--
-- You can use 'stop_after_first' to run the first available formatter from the list
-- javascript = { "prettierd", "prettier", stop_after_first = true },
},
},
},
-- Automatically install formatters registered with conform.nvim via mason.nvim
-- https://github.com/zapling/mason-conform.nvim
{ 'zapling/mason-conform.nvim', opts = {} },
}

View File

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

View File

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

View File

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

View File

@@ -31,18 +31,39 @@ return {
cmd = 'Neotree',
opts = {
close_if_last_window = true,
popup_border_style = 'rounded',
enable_git_status = true,
enable_diagnostics = true,
git_status = {
symbols = {
-- Change type
added = '',
modified = '',
deleted = '',
renamed = '󰁕',
-- Status type
untracked = '',
ignored = '',
unstaged = '󰄱',
staged = '',
conflict = '',
},
},
filesystem = {
window = {
mappings = {
['<Esc>'] = 'close_window',
['q'] = 'close_window',
},
},
filtered_items = {
hide_dotfiles = true,
hide_gitignored = true,
hide_hidden = true, -- only works on Windows for hidden files/directories
hide_by_name = {
never_show = {
'.DS_Store',
},
hide_by_name = {
'node_modules',
},
always_show = {
@@ -84,6 +105,7 @@ return {
'.*rc.*',
'.env*',
'.prettierrc*',
'.markdownlint*',
'.stylua.*',
},
},

View File

@@ -1,85 +0,0 @@
-- Highly experimental plugin that completely replaces the UI
-- for messages, cmdline and the popupmenu.
-- https://github.com/folke/noice.nvim
return {
'folke/noice.nvim',
lazy = false,
enabled = true,
dependencies = {
'MunifTanjim/nui.nvim',
-- A fancy, configurable, notification manager for NeoVim
-- https://github.com/rcarriga/nvim-notify
'rcarriga/nvim-notify',
'hrsh7th/nvim-cmp',
},
opts = {
lsp = {
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
override = {
['vim.lsp.util.convert_input_to_markdown_lines'] = true,
['vim.lsp.util.stylize_markdown'] = true,
['cmp.entry.get_documentation'] = true, -- requires hrsh7th/nvim-cmp
},
},
-- you can enable a preset for easier configuration
presets = {
bottom_search = false, -- use a classic bottom cmdline for search
command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- long messages will be sent to a split
inc_rename = false, -- enables an input dialog for inc-rename.nvim
lsp_doc_border = false, -- add a border to hover docs and signature help
},
routes = {
{
filter = {
event = 'msg_show',
any = {
{ find = '%d+L, %d+B' },
{ find = '; after #%d+' },
{ find = '; before #%d+' },
{ find = '%d fewer lines' },
{ find = '%d more lines' },
},
},
opts = { skip = true },
},
{
filter = {
event = 'notify',
find = 'No information available',
},
opts = { skip = true },
},
},
views = {
cmdline_popup = {
position = {
row = 5,
col = '50%',
},
size = {
width = 60,
height = 'auto',
},
},
popupmenu = {
relative = 'editor',
position = {
row = 8,
col = '50%',
},
size = {
width = 60,
height = 10,
},
border = {
style = 'rounded',
padding = { 0, 1 },
},
win_options = {
winhighlight = { Normal = 'Normal', FloatBorder = 'DiagnosticInfo' },
},
},
},
},
}

View File

@@ -0,0 +1,24 @@
return {
{
'rmagatti/auto-session',
lazy = false,
version = '*',
---@module "auto-session"
---@type AutoSession.Config
opts = {
suppressed_dirs = {
'/',
'~/',
'~/Downloads',
'~/Library',
},
-- log_level = 'debug',
},
},
{
'nvim-lua/plenary.nvim',
version = '*',
lazy = false,
},
}

View File

@@ -7,7 +7,9 @@ return {
dependencies = {
{ 'nvim-lua/plenary.nvim' },
{ 'nvim-telescope/telescope-symbols.nvim' },
{ 'folke/which-key.nvim' },
-- Telescope plugin for file browsing
{ 'nvim-telescope/telescope-file-browser.nvim' },
-- A Telescope picker to quickly access configurations
-- of plugins managed by lazy.nvim.
@@ -33,7 +35,6 @@ return {
config = function()
local t = require 'telescope'
local a = require 'telescope.actions'
local themes = require 'telescope.themes'
-- [[ Configure Telescope ]]
-- See `:help telescope` and `:help telescope.setup()`
@@ -80,7 +81,6 @@ return {
}
-- Load extensions
pcall(t.load_extension, 'harpoon')
pcall(t.load_extension, 'git_worktree')
pcall(t.load_extension, 'lazy_plugins')
pcall(t.load_extension, 'luasnip')
@@ -92,14 +92,5 @@ return {
-- [[ Telescope Keymaps ]]
-- See `:help telescope.builtin`
-- See `:help telescope.keymap`
vim.keymap.set('n', '<leader>/', function()
-- You can pass additional configuration to telescope to change theme, layout, etc.
require('telescope.builtin').current_buffer_fuzzy_find(
themes.get_dropdown {
winblend = 20,
previewer = true,
}
)
end, { desc = '[/] Fuzzily search in current buffer]' })
end,
}

View File

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

View File

@@ -12,130 +12,57 @@ return {
'nvim-treesitter/nvim-treesitter-context',
'JoosepAlviste/nvim-ts-context-commentstring',
},
config = function()
require('nvim-treesitter.configs').setup {
auto_install = true,
ignore_install = {},
sync_install = true,
modules = {},
---@type TSConfig
opts = {
auto_install = true, -- Auto install the parser generators
sync_install = false, -- Sync install the parser generators, install async
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = {
'bash',
'c',
'css',
'diff',
'go',
'html',
'javascript',
'jsdoc',
'json',
'jsonc',
'lua',
'luadoc',
'markdown',
'markdown_inline',
'python',
'query',
'regex',
'rust',
'sql',
'terraform',
'toml',
'tsx',
'typescript',
'vim',
'vimdoc',
'xml',
'yaml',
},
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = {
'bash',
'json',
'jsonc',
'lua',
'luadoc',
'markdown',
'markdown_inline',
'query',
'regex',
'vim',
'vimdoc',
'yaml',
},
refactor = {
navigation = {
enable = true,
-- Assign keymaps to false to disable them, e.g. `goto_definition = false`.
keymaps = {
goto_definition = '<leader>gnd',
list_definitions = '<leader>gnD',
list_definitions_toc = '<leader>gO',
goto_next_usage = '<a-*>',
goto_previous_usage = '<a-#>',
},
},
smart_rename = {
enable = true,
-- Assign keymaps to false to disable them, e.g. `smart_rename = false`.
keymaps = {
smart_rename = 'grr',
},
},
highlight_definitions = {
enable = true,
-- Set to false if you have an `updatetime` of ~100.
clear_on_cursor_move = true,
},
highlight_current_scope = { enable = false },
},
highlight = { enable = true },
indent = { enable = true },
incremental_selection = {
highlight = { enable = true },
indent = { enable = true },
textobjects = {
select = {
enable = true,
keymaps = {
init_selection = '<a-space>',
node_incremental = '<a-space>',
scope_incremental = '<c-s>',
node_decremental = '<c-backspace>',
},
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
keymaps = {
-- You can use the capture groups defined in textobjects.scm
['aa'] = '@parameter.outer',
['ia'] = '@parameter.inner',
['af'] = '@function.outer',
['if'] = '@function.inner',
['ac'] = '@class.outer',
['ic'] = '@class.inner',
['ii'] = '@conditional.inner',
['ai'] = '@conditional.outer',
['il'] = '@loop.inner',
['al'] = '@loop.outer',
['at'] = '@comment.outer',
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
[']f'] = '@function.outer',
[']]'] = '@class.outer',
},
goto_next_end = {
[']F'] = '@function.outer',
[']['] = '@class.outer',
},
goto_previous_start = {
['[f'] = '@function.outer',
['[['] = '@class.outer',
},
goto_previous_end = {
['[F'] = '@function.outer',
['[]'] = '@class.outer',
},
},
swap = {
enable = true,
swap_next = {
['<leader>cn'] = '@parameter.inner',
},
swap_previous = {
['<leader>cP'] = '@parameter.inner',
},
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
},
}
},
},
config = function(_, opts)
require('nvim-treesitter.configs').setup(opts)
vim.api.nvim_create_autocmd({ 'FileType' }, {
callback = function()
-- Set foldmethod to treesitter if available
if require('nvim-treesitter.parsers').has_parser() then
vim.opt.foldmethod = 'expr'
vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
else
-- Otherwise, set foldmethod to syntax
vim.opt.foldmethod = 'syntax'
end
vim.opt.foldlevel = 9 -- Open all folds by default
vim.opt.foldnestmax = 99 -- Maximum fold nesting
end,
})
end,
}

View File

@@ -1,15 +0,0 @@
-- A pretty diagnostics, references, telescope results,
-- quickfix and location list to help you solve all the
-- trouble your code is causing.
-- https://github.com/folke/trouble.nvim
return {
'folke/trouble.nvim',
lazy = false,
dependencies = { 'nvim-tree/nvim-web-devicons' },
opts = {
auto_preview = true,
auto_fold = true,
auto_close = true,
use_lsp_diagnostic_signs = true,
},
}

View File

@@ -1,130 +0,0 @@
-- Not UFO in the sky, but an ultra fold in Neovim.
-- https://github.com/kevinhwang91/nvim-ufo/
return {
'kevinhwang91/nvim-ufo',
version = '*',
dependencies = {
{ 'kevinhwang91/promise-async' },
{ 'nvim-treesitter/nvim-treesitter' },
{
-- Status column plugin that provides a configurable
-- 'statuscolumn' and click handlers.
-- https://github.com/luukvbaal/statuscol.nvim
'luukvbaal/statuscol.nvim',
config = function()
local builtin = require 'statuscol.builtin'
require('statuscol').setup {
relculright = true,
ft_ignore = {
'dashboard',
'NvimTree',
'help',
'vim',
'alpha',
'dashboard',
'neo-tree',
'Trouble',
'lazy',
'toggleterm',
},
bt_ignore = {
'help',
'vim',
'alpha',
'dashboard',
'neo-tree',
'Trouble',
'lazy',
'toggleterm',
},
segments = {
{
text = { builtin.foldfunc },
click = 'v:lua.ScFa',
},
{
sign = {
namespace = { 'diagnostic/signs' },
maxwidth = 2,
-- auto = true,
},
click = 'v:lua.ScSa',
},
{
text = { builtin.lnumfunc, ' ' },
click = 'v:lua.ScLa',
},
},
}
end,
},
},
config = function()
require('ufo').setup {
open_fold_hl_timeout = 150,
close_fold_kinds_for_ft = { 'imports', 'comment' },
preview = {
win_config = {
border = { '', '', '', '', '', '', '', '' },
winhighlight = 'Normal:Folded',
winblend = 0,
},
mappings = {
scrollU = '<C-u>',
scrollD = '<C-d>',
jumpTop = '[',
jumpBot = ']',
},
},
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
return { 'treesitter', 'indent' }
end,
-- fold_virt_text_handler
--
-- This handler is called when the fold text is too long to fit in the window.
-- It is expected to truncate the text and return a new list of virtual text.
--
---@param virtText table The current virtual text list.
---@param lnum number The line number of the first line in the fold.
---@param endLnum number The line number of the last line in the fold.
---@param width number The width of the window.
---@param truncate function Truncate function
---@return table
fold_virt_text_handler = function(
virtText,
lnum,
endLnum,
width,
truncate
)
local newVirtText = {}
local suffix = (' 󰁂 %d '):format(endLnum - lnum)
local sufWidth = vim.fn.strdisplaywidth(suffix)
local targetWidth = width - sufWidth
local curWidth = 0
for _, chunk in ipairs(virtText) do
local chunkText = chunk[1]
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
if targetWidth > curWidth + chunkWidth then
table.insert(newVirtText, chunk)
else
chunkText = truncate(chunkText, targetWidth - curWidth)
local hlGroup = chunk[2]
table.insert(newVirtText, { chunkText, hlGroup })
chunkWidth = vim.fn.strdisplaywidth(chunkText)
-- str width returned from truncate() may less than 2nd argument, need padding
if curWidth + chunkWidth < targetWidth then
suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth)
end
break
end
curWidth = curWidth + chunkWidth
end
table.insert(newVirtText, { suffix, 'MoreMsg' })
return newVirtText
end,
}
end,
}

View File

@@ -27,79 +27,10 @@ return {
},
},
-- Neovim plugin to animate the cursor with a smear effect in all terminals
-- https://github.com/sphamba/smear-cursor.nvim
{ 'sphamba/smear-cursor.nvim', opts = {} },
-- A neovim plugin that shows colorcolumn dynamically
-- https://github.com/Bekaboo/deadcolumn.nvim
{ 'Bekaboo/deadcolumn.nvim' },
-- vim dashboard
-- https://github.com/nvimdev/dashboard-nvim
{
'nvimdev/dashboard-nvim',
event = 'VimEnter',
config = function()
require('dashboard').setup {
theme = 'doom',
config = {
disable_move = true,
week_header = {
enable = true,
},
shortcut = {},
center = {
{
icon = '',
icon_hl = '@variable',
desc = 'Files',
group = 'Label',
action = 'Telescope find_files',
key = 'f',
},
{
icon = '',
desc = 'Marks',
group = 'DiagnosticHint',
action = 'Telescope harpoon marks',
key = 'a',
},
{
icon = '',
desc = 'TODO',
group = 'DiagnosticOptions',
action = 'TodoTelescope',
key = 't',
},
{
icon = '',
desc = 'Search',
group = 'Number',
action = 'Telescope live_grep',
key = 's',
},
{
icon = '󰊳 ',
desc = 'Lazy Update',
group = '@property',
action = 'Lazy update',
key = 'u',
},
{
icon = '',
desc = 'Quit',
group = 'DiagnosticError',
action = 'q',
key = 'q',
},
},
},
}
end,
dependencies = { { 'nvim-tree/nvim-web-devicons' } },
},
-- Remove all background colors to make nvim transparent
-- https://github.com/xiyaowong/nvim-transparent
{ 'xiyaowong/nvim-transparent', opts = {} },
@@ -108,86 +39,7 @@ return {
-- https://github.com/lukas-reineke/virt-column.nvim
{ 'lukas-reineke/virt-column.nvim', opts = {} },
-- ui components
{ 'MunifTanjim/nui.nvim', lazy = true },
-- Seamless navigation between tmux panes and vim splits
-- https://github.com/christoomey/vim-tmux-navigator
{
'christoomey/vim-tmux-navigator',
cmd = {
'TmuxNavigateLeft',
'TmuxNavigateDown',
'TmuxNavigateUp',
'TmuxNavigateRight',
'TmuxNavigatePrevious',
},
opts = {},
},
-- Cloak allows you to overlay *'s over defined patterns in defined files.
-- https://github.com/laytan/cloak.nvim
{
'laytan/cloak.nvim',
version = '*',
opts = {
enabled = true,
cloak_character = '*',
-- The applied highlight group (colors) on the cloaking, see `:h highlight`.
highlight_group = 'Comment',
patterns = {
{
-- Match any file starting with ".env".
-- This can be a table to match multiple file patterns.
file_pattern = {
'.env*',
'wrangler.toml',
'.dev.vars',
},
-- Match an equals sign and any character after it.
-- This can also be a table of patterns to cloak,
-- example: cloak_pattern = { ":.+", "-.+" } for yaml files.
cloak_pattern = '=.+',
},
},
},
},
-- Close buffer without messing up with the window.
-- https://github.com/famiu/bufdelete.nvim
{ 'famiu/bufdelete.nvim' },
-- Neovim plugin for locking a buffer to a window
-- https://github.com/stevearc/stickybuf.nvim
{ 'stevearc/stickybuf.nvim', opts = {} },
-- Describe the regexp under the cursor
-- https://github.com/bennypowers/nvim-regexplainer
{
'bennypowers/nvim-regexplainer',
event = 'BufEnter',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'MunifTanjim/nui.nvim',
},
opts = {
-- automatically show the explainer when the cursor enters a regexp
auto = true,
},
},
-- Clarify and beautify your comments using boxes and lines.
-- https://github.com/LudoPinelli/comment-box.nvim
{ 'LudoPinelli/comment-box.nvim', opts = {} },
-- Plugin to improve viewing Markdown files in Neovim
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
{
'MeanderingProgrammer/render-markdown.nvim',
dependencies = {
'nvim-treesitter/nvim-treesitter',
'nvim-tree/nvim-web-devicons',
},
ft = 'markdown',
opts = {},
},
}

View File

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

View File

@@ -1,553 +0,0 @@
-- Useful plugin to show you pending keybinds.
-- https://github.com/folke/which-key.nvim
return {
'folke/which-key.nvim',
lazy = false,
version = '*',
priority = 1001, -- Make sure to load this as soon as possible
dependencies = {
'nvim-lua/plenary.nvim',
'echasnovski/mini.icons',
},
config = function()
local wk = require 'which-key'
wk.setup()
wk.add {
-- ╭─────────────────────────────────────────────────────────╮
-- │ With leader │
-- ╰─────────────────────────────────────────────────────────╯
-- ── Buffer ──────────────────────────────────────────────────────────
{
'<leader>b',
group = '[b] Buffer',
-- Add the current buffers to the menu
expand = function() return require('which-key.extras').expand.buf() end,
},
{
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last' },
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First' },
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev' },
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next' },
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete' },
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout' },
},
-- ── Code ────────────────────────────────────────────────────────────
{ '<leader>c', group = '[c] Code' },
{
'<leader>ca',
'<cmd>lua vim.lsp.buf.code_action()<CR>',
desc = 'LSP: Code Action',
},
{
'<leader>cg',
'<cmd>lua require("neogen").generate()<CR>',
desc = 'Generate annotations',
},
-- ── Code: CommentBox ────────────────────────────────────────────────
{ '<leader>cb', group = 'CommentBox' },
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
{ '<leader>cbd', '<Cmd>CBd<CR>', desc = 'CommentBox: Remove a box' },
{ '<leader>cbl', '<Cmd>CBline<CR>', desc = 'CommentBox: Simple Line' },
{ '<leader>cbm', '<Cmd>CBllbox14<CR>', desc = 'CommentBox: Marked' },
{ '<leader>cbt', '<Cmd>CBllline<CR>', desc = 'CommentBox: Titled Line' },
-- ── Code: LSPSaga ───────────────────────────────────────────────────
-- See: lua/plugins/lsp.lua
{
'<C-a>',
'<cmd>Lspsaga term_toggle<cr>',
desc = 'LSPSaga: Open Floaterm',
},
{
'<leader>ca',
'<cmd>Lspsaga code_action<cr>',
desc = 'LSPSaga: Code Actions',
},
{
'<leader>cci',
'<cmd>Lspsaga incoming_calls<cr>',
desc = 'LSPSaga: Incoming Calls',
},
{
'<leader>cco',
'<cmd>Lspsaga outgoing_calls<cr>',
desc = 'LSPSaga: Outgoing Calls',
},
{
'<leader>cd',
'<cmd>Lspsaga show_line_diagnostics<cr>',
desc = 'LSPSaga: Show Line Diagnostics',
},
{
'<leader>cf',
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
mode = {},
desc = 'Format buffer with Conform',
},
{
'<leader>ci',
'<cmd>Lspsaga implement<cr>',
desc = 'LSPSaga: Implementations',
},
{
'<leader>cl',
'<cmd>Lspsaga show_cursor_diagnostics<cr>',
desc = 'LSPSaga: Show Cursor Diagnostics',
},
{
'<leader>cp',
'<cmd>Lspsaga peek_definition<cr>',
desc = 'LSPSaga: Peek Definition',
},
{ '<leader>cr', '<cmd>Lspsaga rename<cr>', desc = 'LSPSaga: Rename' },
{
'<leader>cR',
'<cmd>Lspsaga rename ++project<cr>',
desc = 'LSPSaga: Rename Project wide',
},
{
'<leader>cs',
'<cmd>Lspsaga signature_help<cr>',
desc = 'LSPSaga: Signature Documentation',
},
{
'<leader>ct',
'<cmd>Lspsaga peek_type_definition<cr>',
desc = 'LSPSaga: Peek Type Definition',
},
{
'<leader>cu',
'<cmd>Lspsaga preview_definition<cr>',
desc = 'LSPSaga: Preview Definition',
},
{
'<leader>cv',
'<cmd>Lspsaga diagnostic_jump_prev<cr>',
desc = 'LSPSaga: Diagnostic Jump Prev',
},
{
'<leader>cw',
'<cmd>Lspsaga diagnostic_jump_next<cr>',
desc = 'LSPSaga: Diagnostic Jump Next',
},
{
'<leader>cx',
'<cmd>Telescope import<cr>',
desc = 'Telescope import',
},
{
'<leader>f',
'<cmd>Telescope find_files<cr>',
desc = 'Find files',
},
-- ── Harpoon ─────────────────────────────────────────────────────────
-- See: lua/plugins/telescope.lua
{ '<leader>h', group = '[h] Harpoon' },
{
{
'<leader>ha',
'<cmd>lua require("harpoon"):list():add()<cr>',
desc = 'harpoon file',
},
{
'<leader>hn',
'<cmd>lua require("harpoon"):list():next()<cr>',
desc = 'harpoon to next file',
},
{
'<leader>hp',
'<cmd>lua require("harpoon"):list():prev()<cr>',
desc = 'harpoon to previous file',
},
{
'<leader>ht',
"<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>",
desc = 'DAP: Harpoon UI',
},
},
-- ── LSP ─────────────────────────────────────────────────────────────
{ '<leader>l', group = '[l] LSP' },
-- See: lua/plugins/lsp.lua
-- ── Quit ────────────────────────────────────────────────────────────
{ '<leader>q', group = '[q] Quit' },
{
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
},
-- ── Search ──────────────────────────────────────────────────────────
{ '<leader>s', group = '[s] Search' },
-- See: lua/plugins/telescope.lua
{
'<leader><space>',
'<cmd>Telescope buffers<cr>',
desc = 'Find existing buffers',
},
{
'<leader>sc',
'<cmd>Telescope commands<CR>',
desc = 'Telescope: Commands',
},
{
'<leader>sd',
'<cmd>Telescope diagnostics<cr>',
desc = 'Search Diagnostics',
},
{
'<leader>sf',
'<cmd>Telescope find_files<cr>',
desc = 'Find files',
},
{
'<leader>sg',
'<cmd>Telescope live_grep<cr>',
desc = 'Search by Grep',
},
{
'<leader>sh',
'<cmd>Telescope highlights<cr>',
desc = 'List highlights',
},
{
'<leader>sl',
'<cmd>Telescope luasnip<CR>',
desc = 'Search LuaSnip',
},
{
'<leader>sm',
'<cmd>Telescope harpoon marks<CR>',
desc = 'Harpoon Marks',
},
{
'<leader>sn',
"<cmd>lua require('telescope').extensions.notify.notify()<CR>",
desc = 'Show Notifications',
},
{
'<leader>so',
'<cmd>Telescope oldfiles<cr>',
desc = 'Find recently Opened files',
},
{
'<leader>sp',
"<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>",
desc = 'Find neovim/lazy configs',
},
{
'<leader>sq',
'<cmd>Telescope quickfix<cr>',
desc = 'Quickfix list',
},
{
'<leader>sr',
group = 'References',
{
'<leader>srd',
'<cmd>Telescope lsp_definitions<CR>',
desc = 'Definitions',
},
{
'<leader>sri',
'<cmd>Telescope lsp_implementations<CR>',
desc = 'Implementations',
},
{
'<leader>srp',
'<cmd>Telescope lsp_document_symbols<CR>',
desc = 'Document Symbols',
},
{
'<leader>srr',
'<cmd>Telescope lsp_references<CR>',
desc = 'LSP References',
},
{
'<leader>srt',
'<cmd>Telescope lsp_type_definitions<CR>',
desc = 'Type Definitions',
},
{
'<leader>srw',
'<cmd>Telescope lsp_workspace_symbols<CR>',
desc = 'Workspace Symbols',
},
},
{
'<leader>ss',
'<cmd>Telescope treesitter',
desc = 'Treesitter symbols',
},
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Show Todo' },
{
'<leader>sw',
'<cmd>Telescope grep_string<cr>',
desc = 'Search current Word',
},
-- ── Toggle ──────────────────────────────────────────────────────────
{ '<leader>t', group = '[t] Toggle' },
{
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
{
'<leader>tt',
'<cmd>TransparentToggle<CR>',
desc = 'Toggle Transparency',
},
{
'<leader>tl',
'<cmd>exec &bg=="light"? "set bg=dark" : "set bg=light"<CR>',
desc = 'Toggle Light/Dark Theme',
},
},
-- ── Workspace ───────────────────────────────────────────────────────
{ '<leader>w', group = '[w] Workspace' },
{
{
'<leader>wa',
'<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>',
desc = 'LSP: Workspace Add Folder',
},
{
'<leader>wl',
'<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>',
desc = 'LSP: Workspace List Folders',
},
{
'<leader>wr',
'<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>',
desc = 'LSP: Workspace Remove Folder',
},
{
'<leader>ws',
'<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>',
desc = 'LSP: Workspace Symbols',
},
},
-- ── Trouble ─────────────────────────────────────────────────────────
{ '<leader>x', group = '[x] Trouble' },
{
{
'<leader>xx',
'<cmd>Trouble diagnostics<cr>',
desc = 'Toggle Trouble Diagnostics',
},
{
'<leader>xw',
'<cmd>Trouble workspace_diagnostics<cr>',
desc = 'Toggle Workspace Diagnostics',
},
{
'<leader>xd',
'<cmd>Trouble document_diagnostics<cr>',
desc = 'Toggle Document Diagnostics',
},
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
},
-- ── Help ────────────────────────────────────────────────────────────
{ '<leader>?', group = '[?] Help & Cheat sheets' },
{
{
'<leader>?h',
'<cmd>Telescope help_tags<cr>',
desc = 'Help tags',
},
{
'<leader>?m',
'<cmd>Telescope man_pages<cr>',
desc = 'Man pages',
},
{
'<leader>?w',
'<cmd>lua require("which-key").show({global = true})<cr>',
desc = 'Buffer Local Keymaps (which-key)',
},
},
-- ── Misc ────────────────────────────────────────────────────────────
{
'<leader>D',
'<cmd>lua vim.lsp.buf.type_definition()<CR>',
desc = 'LSP: Type Definition',
},
{ '<leader>e', '<cmd>Neotree reveal<CR>', desc = 'NeoTree reveal' },
-- ╭─────────────────────────────────────────────────────────╮
-- │ Without leader │
-- ╰─────────────────────────────────────────────────────────╯
{ 'y', group = 'Yank & Surround' },
{ 'gp', group = 'Goto Preview' },
{
{
'gpd',
'<cmd>lua require("goto-preview").goto_preview_definition()<CR>',
desc = 'Goto: Preview Definition',
},
{
'gpi',
'<cmd>lua require("goto-preview").goto_preview_implementation()<CR>',
desc = 'Goto: Preview Implementation',
},
{
'gpP',
'<cmd>lua require("goto-preview").close_all_windows()<CR>',
desc = 'Goto: Close All Preview Windows',
},
},
-- ── tmux navigation ─────────────────────────────────────────────────
{
{
'<c-h>',
'<cmd><C-U>TmuxNavigateLeft<cr>',
desc = 'tmux: Navigate Left',
},
{
'<c-j>',
'<cmd><C-U>TmuxNavigateDown<cr>',
desc = 'tmux: Navigate Down',
},
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
{
'<c-l>',
'<cmd><C-U>TmuxNavigateRight<cr>',
desc = 'tmux: Navigate Right',
},
{
'<c-\\>',
'<cmd><C-U>TmuxNavigatePrevious<cr>',
desc = 'tmux: Navigate Previous',
},
},
-- ── Old habits ──────────────────────────────────────────────────────
{ '<C-s>', '<cmd>w!<CR>', desc = 'Save file' },
-- ── Text manipulation in visual mode ────────────────────────────────
{
mode = { 'v', 'n' },
{ '>', '>gv', desc = 'Indent Right' },
{ '<', '<gv', desc = 'Indent Left' },
{ 'J', "<cmd>m '>+1<CR>gv=gv", desc = 'Move Block Down' },
{ 'K', "<cmd>m '<-2<CR>gv=gv", desc = 'Move Block Up' },
},
-- ── LSP ─────────────────────────────────────────────────────────────
{
'<C-k>',
'<cmd>lua vim.lsp.buf.signature_help()<CR>',
desc = 'LSP: Signature Documentation',
},
{
'K',
'<cmd>Lspsaga hover_doc<cr>',
desc = 'LSPSaga: Hover Documentation',
},
{ 'd', group = 'Diagnostics' },
{
{
'dn',
'<cmd>lua vim.diagnostic.goto_next()<CR>',
desc = 'Diagnostic: Goto Next',
},
{
'dp',
'<cmd>lua vim.diagnostic.goto_prev()<CR>',
desc = 'Diagnostic: Goto Prev',
},
},
{
{ 'g', group = 'Goto' },
{
'gD',
'<cmd>lua vim.lsp.buf.declaration()<CR>',
desc = 'LSP: Goto Declaration',
},
{
'gI',
'<cmd>lua vim.lsp.buf.implementation()<CR>',
desc = 'LSP: Goto Implementation',
},
{
'gR',
'<cmd>Trouble lsp_references<cr>',
desc = 'Toggle LSP References',
},
{
'gd',
'<cmd>lua vim.lsp.buf.definition()<CR>',
desc = 'LSP: Goto Definition',
},
{
'gr',
'<cmd>lua require("telescope.builtin").lsp_references()<CR>',
desc = 'LSP: Goto References',
},
},
-- ── Misc keybinds ───────────────────────────────────────────────────
-- Sublime-like shortcut 'go to file' ctrl+p.
{
'<C-p>',
'<cmd>Telescope find_files<CR>',
desc = 'Search for files starting at current directory.',
},
{ 'QQ', '<cmd>q!<CR>', desc = 'Quit without saving' },
{ 'WW', '<cmd>w!<CR>', desc = 'Force write to file' },
{ 'ss', '<cmd>noh<CR>', desc = 'Clear Search Highlighting' },
{
'jj',
'<Esc>',
desc = 'Esc without touching esc in insert mode',
mode = 'i',
},
-- ── Splits ──────────────────────────────────────────────────────────
-- Use CTRL+<hjkl> to switch between windows in normal mode
-- See `:help wincmd` for a list of all window commands
{ '<C-h>', '<C-w><C-h>', desc = 'Move focus to the left window' },
{ '<C-l>', '<C-w><C-l>', desc = 'Move focus to the right window' },
{ '<C-j>', '<C-w><C-j>', desc = 'Move focus to the lower window' },
{ '<C-k>', '<C-w><C-k>', desc = 'Move focus to the upper window' },
-- Split resizing
{ '<C-w>,', '<cmd>vertical resize -10<CR>', desc = 'V Resize -' },
{ '<C-w>.', '<cmd>vertical resize +10<CR>', desc = 'V Resize +' },
-- ── Disable arrow keys in normal mode ───────────────────────────────
{ '<left>', '<cmd>echo "Use h to move!!"<CR>' },
{ '<right>', '<cmd>echo "Use l to move!!"<CR>' },
{ '<up>', '<cmd>echo "Use k to move!!"<CR>' },
{ '<down>', '<cmd>echo "Use j to move!!"<CR>' },
-- ── Terminal ────────────────────────────────────────────────────────
-- Exit terminal mode in the builtin terminal with a shortcut that is
-- a bit easier for people to discover. Otherwise, you normally need
-- to press <C-\><C-n>, which is not what someone will guess without
-- a bit more experience.
--
-- NOTE: This won't work in all terminal emulators/tmux/etc.
-- Try your own mapping or just use <C-\><C-n> to exit terminal mode.
{ '<Esc><Esc>', '<C-\\><C-n>', desc = 'Exit terminal mode', mode = 't' },
-- ── Search ──────────────────────────────────────────────────────────
-- :noh if you have search highlights
{ '<Esc><Esc>', '<cmd>noh<CR>', desc = 'Clear search highlights' },
}
end,
}

82
config/nvim/lua/utils.lua Normal file
View File

@@ -0,0 +1,82 @@
-- These are my utility functions
-- I use to make my life bit easier
-- ╭─────────────────────────────────────────────────────────╮
-- │ Function shortcuts for keymap set │
-- ╰─────────────────────────────────────────────────────────╯
-- Keymap set shortcut
--@type vim.keymap.set
local s = vim.keymap.set
-- Keymap shortcut functions
K = {}
-- Handle description
---@param desc string|table? Optional description. Can be a string or a table.
---@return table -- The description as a table.
local function handleDesc(desc)
if type(desc) == 'string' then
-- Convert string to table with `desc` as a key
-- If the string is empty, just return as an empty description
return { desc = desc }
elseif type(desc) == 'table' then
-- If desc doesn't have 'desc' key, combine it with
-- others with empty description
if not desc.desc then
desc.desc = '?'
return desc
end
-- Use the table as is
return desc
else
-- Default to an empty table if `desc` is nil or an unsupported type
return { desc = '?' }
end
end
-- Normal mode keymaps
---@param key string rhs, required
---@param cmd string|function lhs, required
---@param opts table? Options, optional
K.n = function(key, cmd, opts)
opts = handleDesc(opts or {})
s('n', key, cmd, opts)
end
-- Leader keymap shortcut function
-- It prepends '<leader>' to the key
---@param key string rhs, required, but will be prepended with '<leader>'
---@param cmd string|function lhs, required
---@param opts table|string? Options (or just description), optional
K.nl = function(key, cmd, opts)
opts = handleDesc(opts)
K.n('<leader>' .. key, cmd, opts)
end
-- Keymap shortcut function with mode defined, good for sorting by rhs
---@param key string rhs, required
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
---@param cmd string|function lhs, required
---@param opts string|table description, required
K.d = function(key, mode, cmd, opts)
opts = handleDesc(opts or {})
s(mode, key, cmd, opts)
end
-- Leader based keymap shortcut function with mode defined
---@param key string rhs, required, but will be prepended with '<leader>'
---@param mode string|string[] one of n, v, x, or table of modes { 'n', 'v' }
---@param cmd string|function lhs, required
---@param opts string|table description (or opts), required
K.ld = function(key, mode, cmd, opts)
opts = handleDesc(opts or {})
s(mode, '<leader>' .. key, cmd, opts)
end
-- ╭─────────────────────────────────────────────────────────╮
-- │ Options related helper functions │
-- ╰─────────────────────────────────────────────────────────╯
-- Toggle background between light and dark
function ToggleBackground() vim.o.bg = vim.o.bg == 'light' and 'dark' or 'light' end

View File

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

View File

@@ -23,6 +23,7 @@ zstyle ':omz:plugins:nvm' autoload yes
# Pure prompt settings
export PURE_PROMPT_SYMBOL='➜'
export PURE_GIT_UNTRACKED_DIRTY=0
export PURE_CMD_MAX_EXEC_TIME=86400 # 24 hours
zstyle ':prompt:pure:git:stash' show yes
zstyle ':prompt:pure:execution_time' show no
zstyle ':prompt:pure:user' color magenta

View File

@@ -10,9 +10,11 @@ zsh-users/zsh-completions kind:fpath path:src
getantidote/use-omz # handle OMZ dependencies
ohmyzsh/ohmyzsh path:lib # load OMZ's library
# Use pure prompt
mafredri/zsh-async
sindresorhus/pure
# Theme
# mafredri/zsh-async # for pure
# sindresorhus/pure # pure itself
romkatv/powerlevel10k
ohmyzsh/ohmyzsh path:plugins/colored-man-pages
ohmyzsh/ohmyzsh path:plugins/brew

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

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

View File

@@ -2,40 +2,214 @@
```txt
n <Space>/ * <Lua 398: ~/.config/nvim/lua/plugins/telescope.lua:95>
[/] Fuzzily search in current buffer]
n <Space>ht * <Lua 393: ~/.config/nvim/lua/plugins/harpoon.lua:43>
Open Harpoon Quick menu
n <Space>hw * <Lua 390: ~/.config/nvim/lua/plugins/harpoon.lua:37>
Open harpoon window with telescope
x # * <Lua 7: vim/_defaults.lua:0>
x <Space> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "<Space>"
n <Space> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "<Space>"
x " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after """
n " *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after """
x ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "'"
n ' *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "'"
x ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "`"
n ` *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "`"
x g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "g"
n g *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "g"
x z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "z"
n z *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "z"
n <C-W> *@~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Query keys after "<C-W>"
n <Esc><Esc> * :nohlsearch<CR>
Clear Search Highlighting
n <Space>qQ * :q!<CR>
Force quit without saving
n <Space>qw * :wq<CR>
Write and quit
n <Space>qq * :wq!<CR>
Quit with force saving
n <Space>qf * :q<CR>
Quicker close split
n <Space>tn * :Noice dismiss<CR>
Noice: Dismiss Notification
n <Space>tl * :lua vim.o.bg = vim.o.bg:get() == "light" and "dark" or "light"<CR>
Toggle Light/Dark Mode
n <Space>te * :Neotree toggle<CR>
Toggle Neotree
n <Space>tc * :CloakToggle<CR>
Cloak: Toggle
n <Space>o * ~/.config/nvim/lua/keymaps.lua
Open repo in browser
n <Space>xx * :Trouble diagnostics<CR>
Trouble: Diagnostic
n <Space>xw * :Trouble workspace_diagnostics<CR>
Trouble: Workspace Diagnostics
n <Space>xq * :Trouble quickfix<CR>
Trouble: Quickfix
n <Space>xl * :Trouble loclist<CR>
Trouble: Location List
n <Space>xd * :Trouble document_diagnostics<CR>
Trouble: Document Diagnostics
n <Space>sx * :Telescope import<CR>
Telescope: Import
n <Space>sw * :Telescope grep_string<CR>
Grep String
n <Space>st * :TodoTelescope<CR>
Search Todos
n <Space>ss * :Telescope treesitter<CR>
Treesitter
n <Space>sq * :Telescope quickfix<CR>
Quickfix
n <Space>sp * :lua require("telescope").extensions.lazy_plugins.lazy_plugins()<CR>
Lazy Plugins
n <Space>so * :Telescope oldfiles<CR>
Old Files
n <Space>sl * :Telescope luasnip<CR>
Search LuaSnip
n <Space>sk * :Telescope keymaps<CR>
Search Keymaps
n <Space>sh * :Telescope highlights<CR>
List Highlights
n <Space>sg * :Telescope live_grep<CR>
Search by Grep
n <Space>sd * :Telescope diagnostics<CR>
Search Diagnostics
n <Space>sc * :Telescope commands<CR>
Commands
n <Space>/ * ~/.config/nvim/lua/keymaps.lua
Fuzzily search in current buffer
n <Space>, * :Telescope buffers<CR>
Find existing buffers
n <Space>f * :Telescope find_files<CR>
Find Files
n <Space>cbt * <Cmd>CBllline<CR>
CB: Titled Line
n <Space>cbm * <Cmd>CBllbox14<CR>
CB: Marked
n <Space>cbl * <Cmd>CBline<CR>
CB: Simple Line
n <Space>cbd * <Cmd>CBd<CR>
CB: Remove a box
n <Space>cbb * <Cmd>CBccbox<CR>
CB: Box Title
n <Space>cw * :Lspsaga diagnostic_jump_next<CR>
Diagnostic Jump Next
n <Space>cv * :Lspsaga diagnostic_jump_prev<CR>
Diagnostic Jump Prev
n <Space>cu * :Lspsaga preview_definition<CR>
Preview Definition
n <Space>cT * :Telescope lsp_type_definitions<CR>
LSP Type Definitions
n <Space>ct * :Lspsaga peek_type_definition<CR>
Peek Type Definition
n <Space>cs * :Telescope lsp_document_symbols<CR>
LSP Document Symbols
n <Space>cR * :Lspsaga rename ++project<CR>
Rename Project wide
n <Space>cr * :Lspsaga rename<CR>
Rename
n <Space>cp * :Lspsaga peek_definition<CR>
Peek Definition
n <Space>cl * :Lspsaga show_cursor_diagnostics<CR>
Cursor Diagnostics
n <Space>ci * :Lspsaga implement<CR>
Implementations
x <Space>cf * :lua vim.lsp.buf.format()<CR>
Format
n <Space>cf * :lua vim.lsp.buf.format()<CR>
Format
n <Space>cd * :Lspsaga show_line_diagnostics<CR>
Line Diagnostics
n <Space>cco * :Lspsaga outgoing_calls<CR>
Outgoing Calls
n <Space>cci * :Lspsaga incoming_calls<CR>
Incoming Calls
n <Space>ca * :Lspsaga code_action<CR>
Code Action
n <Space>cg * :lua require("neogen").generate()<CR>
Generate annotations
n <Space>bw * :lua MiniBufremove.wipeout()<CR>
Wipeout
n <Space>bl * :bnext<CR>
Next
n <Space>bk * :blast<CR>
Last
n <Space>bj * :bfirst<CR>
First
n <Space>bh * :bprev<CR>
Prev
n <Space>bd * :lua MiniBufremove.delete()<CR>
Delete
x # * vim/_defaults.lua
:help v_#-default
o % <Plug>(MatchitOperationForward)
x % <Plug>(MatchitVisualForward)
n % <Plug>(MatchitNormalForward)
n & * :&&<CR>
:help &-default
x * * <Lua 3: vim/_defaults.lua:0>
x * * vim/_defaults.lua
:help v_star-default
o ; * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Repeat jump
x ; * <Cmd>lua MiniJump.jump()<CR>
Repeat jump
n ; * <Cmd>lua MiniJump.jump()<CR>
Repeat jump
v < * <gv
Indent Left
n < * <gv
Indent Left
v > * >gv
Indent Right
n > * >gv
Indent Right
n @ * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Execute macro without 'mini.clue' triggers
x @ * mode() == 'V' ? ':normal! @'.getcharstr().'<CR>' : '@'
:help v_@-default
o F * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump backward
x F * <Cmd>lua MiniJump.smart_jump(true, false)<CR>
Jump backward
n F * <Cmd>lua MiniJump.smart_jump(true, false)<CR>
Jump backward
n K * :Lspsaga hover_doc<CR>
Hover Documentation
n Q * ~/.local/share/nvim/lazy/mini.clue/lua/mini/clue.lua
Execute macro without 'mini.clue' triggers
x Q * mode() == 'V' ? ':normal! @<C-R>=reg_recorded()<CR><CR>' : 'Q'
:help v_Q-default
o R * <Lua 102: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Treesitter Search
x R * <Lua 99: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Treesitter Search
o T * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump backward till
x T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
Jump backward till
n T * <Cmd>lua MiniJump.smart_jump(true, true)<CR>
Jump backward till
n Y * y$
:help Y-default
n Zk * <Lua 98: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash Treesitter
o Zk * <Lua 96: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
x Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash Treesitter
x Zk * <Lua 95: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
o Zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash Treesitter
o [% <Plug>(MatchitOperationMultiBackward)
x [% <Plug>(MatchitVisualMultiBackward)
n [% <Plug>(MatchitNormalMultiBackward)
o [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
x [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
n [i * <Cmd>lua MiniIndentscope.operator('top', true)<CR>
Go to indent scope top
o [h * V<Cmd>lua MiniDiff.goto_hunk('prev')<CR>
Previous hunk
x [h * <Cmd>lua MiniDiff.goto_hunk('prev')<CR>
@@ -48,17 +222,17 @@ x [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
n [H * <Cmd>lua MiniDiff.goto_hunk('first')<CR>
First hunk
o [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
x [i * <Cmd>lua MiniIndentscope.operator('top')<CR>
Go to indent scope top
n [i * <Cmd>lua MiniIndentscope.operator('top', true)<CR>
Go to indent scope top
n [d * <Lua 15: vim/_defaults.lua:0>
n [d * vim/_defaults.lua
Jump to the previous diagnostic
o ]% <Plug>(MatchitOperationMultiForward)
x ]% <Plug>(MatchitVisualMultiForward)
n ]% <Plug>(MatchitNormalMultiForward)
o ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
x ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
n ]i * <Cmd>lua MiniIndentscope.operator('bottom', true)<CR>
Go to indent scope bottom
o ]H * V<Cmd>lua MiniDiff.goto_hunk('last')<CR>
Last hunk
x ]H * <Cmd>lua MiniDiff.goto_hunk('last')<CR>
@@ -71,62 +245,76 @@ x ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
n ]h * <Cmd>lua MiniDiff.goto_hunk('next')<CR>
Next hunk
o ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
x ]i * <Cmd>lua MiniIndentscope.operator('bottom')<CR>
Go to indent scope bottom
n ]i * <Cmd>lua MiniIndentscope.operator('bottom', true)<CR>
Go to indent scope bottom
n ]d * <Lua 14: vim/_defaults.lua:0>
n ]d * vim/_defaults.lua
Jump to the next diagnostic
x a% <Plug>(MatchitVisualTextObject)
o ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
Object scope with border
x ai * <Cmd>lua MiniIndentscope.textobject(true)<CR>
Object scope with border
o f * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump forward
x f * <Cmd>lua MiniJump.smart_jump(false, false)<CR>
Jump forward
n f * <Cmd>lua MiniJump.smart_jump(false, false)<CR>
Jump forward
n gR * :RegexplainerToggle<CR>
Toggle Regexplainer
o g% <Plug>(MatchitOperationBackward)
x g% <Plug>(MatchitVisualBackward)
n g% <Plug>(MatchitNormalBackward)
n gP * <Lua 454: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:132>
Close preview windows
n gpr * <Lua 453: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:114>
Preview references
n gpD * <Lua 452: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:105>
Preview declaration
n gpi * <Lua 451: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:91>
Preview implementation
n gpt * <Lua 450: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:77>
Preview type definition
n gpd * <Lua 449: ~/.local/share/nvim/lazy/goto-preview/lua/goto-preview.lua:63>
Preview definition
o gh * <Cmd>lua MiniDiff.textobject()<CR>
Hunk range textobject
x gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Reset hunks
n gH * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Reset hunks
x gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Apply hunks
n gh * ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua
Apply hunks
x gs * <Cmd>lua MiniOperators.sort('visual')<CR>
Sort selection
n gss ^gsg_
Sort line
n gs * v:lua.MiniOperators.sort()
Sort operator
x gr * <Cmd>lua MiniOperators.replace('visual')<CR>
Replace selection
n grr gr_
Replace line
n gr * v:lua.MiniOperators.replace()
Replace operator
x gm * <Cmd>lua MiniOperators.multiply('visual')<CR>
Multiply selection
n gmm gm_
Multiply line
n gm * v:lua.MiniOperators.multiply()
Multiply operator
n gxx gx_
Exchange line
x g= * <Cmd>lua MiniOperators.evaluate('visual')<CR>
Evaluate selection
n g== g=_
Evaluate line
n g= * v:lua.MiniOperators.evaluate()
Evaluate operator
x gS * :<C-U>lua MiniSplitjoin.toggle({ region = MiniSplitjoin.get_visual_region() })<CR>
Toggle arguments
n gS * v:lua.MiniSplitjoin.operator("toggle") . " "
Toggle arguments
o gh * <Cmd>lua MiniDiff.textobject()<CR>
Hunk range textobject
x gH * <Lua 417: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:960>
Reset hunks
n gH * <Lua 416: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:960>
Reset hunks
x gh * <Lua 415: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:958>
Apply hunks
n gh * <Lua 414: ~/.local/share/nvim/lazy/mini.diff/lua/mini/diff.lua:958>
Apply hunks
o gc * <Lua 13: vim/_defaults.lua:0>
o gc * <Cmd>lua MiniComment.textobject()<CR>
Comment textobject
n gcc * <Lua 12: vim/_defaults.lua:0>
Toggle comment line
x gc * <Lua 11: vim/_defaults.lua:0>
Toggle comment
n gc * <Lua 10: vim/_defaults.lua:0>
Toggle comment
x gx * <Lua 9: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
n gx * <Lua 8: vim/_defaults.lua:0>
Opens filepath or URI under cursor with the system handler (file explorer, web browser, …)
n gcc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
Comment line
x gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
Comment selection
n gc * ~/.local/share/nvim/lazy/mini.comment/lua/mini/comment.lua
Comment
x gx * <Cmd>lua MiniOperators.exchange('visual')<CR>
Exchange selection
n gx * v:lua.MiniOperators.exchange()
Exchange operator
o ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
Object scope
x ii * <Cmd>lua MiniIndentscope.textobject(false)<CR>
@@ -135,50 +323,78 @@ n j * v:count == 0 ? 'gj' : 'j'
Move down
n k * v:count == 0 ? 'gk' : 'k'
Move up
o r * <Lua 97: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
Remote Flash
n shn * <Lua 547: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n shn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Highlight next surrounding
n sFn * <Lua 546: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sFn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find next left surrounding
n sfn * <Lua 545: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sfn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find next right surrounding
n srn * <Lua 544: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n srn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Replace next surrounding
n sdn * <Lua 543: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sdn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Delete next surrounding
n shl * <Lua 542: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n shl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Highlight previous surrounding
n sFl * <Lua 541: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sFl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find previous left surrounding
n sfl * <Lua 540: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sfl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find previous right surrounding
n srl * <Lua 539: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n srl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Replace previous surrounding
n sdl * <Lua 538: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sdl * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Delete previous surrounding
x sa * :<C-U>lua MiniSurround.add('visual')<CR>
Add surrounding to selection
n sn * <Lua 537: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:895>
n sn * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Update `MiniSurround.config.n_lines`
n sh * <Lua 536: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sh * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Highlight surrounding
n sF * <Lua 535: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sF * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find left surrounding
n sf * <Lua 534: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sf * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Find right surrounding
n sr * <Lua 533: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sr * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Replace surrounding
n sd * <Lua 532: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sd * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Delete surrounding
n sa * <Lua 531: ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua:1260>
n sa * ~/.local/share/nvim/lazy/mini.surround/lua/mini/surround.lua
Add surrounding
n zk * <Lua 100: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
o t * ~/.local/share/nvim/lazy/mini.jump/lua/mini/jump.lua
Jump forward till
x t * <Cmd>lua MiniJump.smart_jump(false, true)<CR>
Jump forward till
n t * <Cmd>lua MiniJump.smart_jump(false, true)<CR>
Jump forward till
x zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash
o zk * <Lua 94: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
n zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash
x zk * <Lua 92: ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua:121>
o zk * ~/.local/share/nvim/lazy/lazy.nvim/lua/lazy/core/handler/keys.lua
Flash
n <C-W>= * <C-W>=
Equal Size Splits
n <C-W>+ * :resize +5<CR>
H Resize +
n <C-W>- * :resize -5<CR>
H Resize -
n <C-W>. * :vertical resize +10<CR>
V Resize +
n <C-W>, * :vertical resize -10<CR>
V Resize -
v <C-J> * :m '>+1<CR>gv=gv
Move Block Down
n <C-J> * :m '>+1<CR>gv=gv
Move Block Down
v <C-K> * :m '<-2<CR>gv=gv
Move Block Up
n <C-K> * :m '<-2<CR>gv=gv
Move Block Up
n <C-S> * :w!<CR>
Save
n <Down> * :echo "Use j to move!!"<CR>
n <Up> * :echo "Use k to move!!"<CR>
n <Right> * :echo "Use l to move!!"<CR>
n <Left> * :echo "Use h to move!!"<CR>
x <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward)
o <Plug>(MatchitOperationMultiForward) * :<C-U>call matchit#MultiMatch("W", "o")<CR>
o <Plug>(MatchitOperationMultiBackward) * :<C-U>call matchit#MultiMatch("bW", "o")<CR>
@@ -192,29 +408,29 @@ x <Plug>(MatchitVisualBackward) * :<C-U>call matchit#Match_wrapper('',0,'v')<CR
x <Plug>(MatchitVisualForward) * :<C-U>call matchit#Match_wrapper('',1,'v')<CR>:if col("''") != col("$") | exe ":normal! m'" | endif<CR>gv``
n <Plug>(MatchitNormalBackward) * :<C-U>call matchit#Match_wrapper('',0,'n')<CR>
n <Plug>(MatchitNormalForward) * :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
s <Plug>luasnip-jump-prev * <Lua 345: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:57>
LuaSnip: Jump to the previous node
s <Plug>luasnip-jump-next * <Lua 344: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:54>
LuaSnip: Jump to the next node
s <Plug>luasnip-prev-choice * <Lua 343: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:51>
LuaSnip: Change to the previous choice from the choiceNode
s <Plug>luasnip-next-choice * <Lua 342: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:48>
LuaSnip: Change to the next choice from the choiceNode
s <Plug>luasnip-expand-snippet * <Lua 341: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:45>
LuaSnip: Expand the current snippet
s <Plug>luasnip-expand-or-jump * <Lua 340: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:42>
LuaSnip: Expand or jump in the current snippet
<Plug>luasnip-expand-repeat * <Lua 338: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:35>
LuaSnip: Repeat last node expansion
n <Plug>luasnip-delete-check * <Lua 336: ~/.local/share/nvim/lazy/LuaSnip/plugin/luasnip.lua:28>
LuaSnip: Removes current snippet from jumplist
n <M-k> * <Cmd>lua MiniMove.move_line('up')<CR>
Move line up
n <M-j> * <Cmd>lua MiniMove.move_line('down')<CR>
Move line down
n <M-l> * <Cmd>lua MiniMove.move_line('right')<CR>
Move line right
n <M-h> * <Cmd>lua MiniMove.move_line('left')<CR>
Move line left
x <M-k> * <Cmd>lua MiniMove.move_selection('up')<CR>
Move up
x <M-j> * <Cmd>lua MiniMove.move_selection('down')<CR>
Move down
x <M-l> * <Cmd>lua MiniMove.move_selection('right')<CR>
Move right
x <M-h> * <Cmd>lua MiniMove.move_selection('left')<CR>
Move left
n <Plug>PlenaryTestFile * :lua require('plenary.test_harness').test_file(vim.fn.expand("%:p"))<CR>
n <C-W><C-D> <C-W>d
Show diagnostics under the cursor
n <C-W>d * <Lua 16: vim/_defaults.lua:0>
n <C-W>d * vim/_defaults.lua
Show diagnostics under the cursor
n <C-L> * <Cmd>nohlsearch|diffupdate|normal! <C-L><CR>
:help CTRL-L-default
n <C-L> * :lua vim.lsp.buf.signature_help()<CR>
Signature
```
- Generated on Fri 22 Nov 2024 15:30:39 EET
- Generated on Mon 9 Dec 2024 10:05:25 EET

View File

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

View File

@@ -1,3 +1,4 @@
# vim: ft=gitconfig sw=2 ts=2 et
[include]
path = ~/.dotfiles/config/git/shared
@@ -7,19 +8,19 @@
[user]
name = Ismo Vuorinen
email = ismo.vuorinen@vincit.fi
signingkey = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDLyOvkr1nRqMVv3UAizmk6C+q40H4khvw7qIXXXyOyFmzjwYx/Cuxoi4uZVjX+q4qFYJ+c312uu6YXiEtfyoCao3wub8r1cLBQ3eIvuyWp2K8Ixcd9JmFmLmoeiENpJxqyr0WPZLDkrCWUZCsQQh8zzGFnfciUdUdTiZ7s21AEhhmFRSdFlVfQSlGMFxU321psg1YilcP80bDwFd1FsL4TssSkwlbgP/twqnpZ4436TTo7kp0UnH/RZkfRdDWScKHaWgncBG0CZeQxGWnRp8fvZn/7gDnthcZhvnDALVBE7QFuZ90GxqVw3IGpHryV0mFO6EGQ9Ke9YX7pKVZPUXZjeCN4SVKsqFdVJ6AjaSJ9K7nL98rYK7qNzndT3cKqPNgPteyXWRulH68A51ecQqHrjTttZcdN9hKt9uBHpzuXsby2QObT+VB4MNjZapa+YYF/WgwJCml4lzn2xMFg1vYZD78pfoJ9e5f2cL1MMlUSDb0TNxmEXfDQ77H/pRpKDz0=
signingkey = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDLyOvkr1nRqMVv3UAizmk6C+q40H4khvw7qIXXXyOyFmzjwYx/Cuxoi4uZVjX+q4qFYJ+c312uu6YXiEtfyoCao3wub8r1cLBQ3eIvuyWp2K8Ixcd9JmFmLmoeiENpJxqyr0WPZLDkrCWUZCsQQh8zzGFnfciUdUdTiZ7s21AEhhmFRSdFlVfQSlGMFxU321psg1YilcP80bDwFd1FsL4TssSkwlbgP/twqnpZ4436TTo7kp0UnH/RZkfRdDWScKHaWgncBG0CZeQxGWnRp8fvZn/7gDnthcZhvnDALVBE7QFuZ90GxqVw3IGpHryV0mFO6EGQ9Ke9YX7pKVZPUXZjeCN4SVKsqFdVJ6AjaSJ9K7nL98rYK7qNzndT3cKqPNgPteyXWRulH68A51ecQqHrjTttZcdN9hKt9uBHpzuXsby2QObT+VB4MNjZapa+YYF/WgwJCml4lzn2xMFg1vYZD78pfoJ9e5f2cL1MMlUSDb0TNxmEXfDQ77H/pRpKDz0=
[gpg "ssh"]
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
allowedSignersFile = ~/.ssh/allowed_signers
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
allowedSignersFile = ~/.ssh/allowed_signers
[commit]
gpgsign = true
gpgsign = true
[credential "https://github.com"]
helper =
helper = !/opt/homebrew/bin/gh auth git-credential
helper =
helper = !/opt/homebrew/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper =
helper = !/opt/homebrew/bin/gh auth git-credential
helper =
helper = !/opt/homebrew/bin/gh auth git-credential

View File

@@ -25,9 +25,9 @@ git submodule update --init --recursive "${DOTBOT_DIR}"
if [ "${DOTBOT_HOST}" != "" ]; then
DOTBOT_HOST_CONFIG="${BASEDIR}/hosts/${DOTBOT_HOST}/${CONFIG}"
echo "-> Trying if host config can be found: ${DOTBOT_HOST_CONFIG}"
[ -r "$DOTBOT_HOST_CONFIG" ] && [ -f "$DOTBOT_HOST_CONFIG" ] \
&& echo "(!) Found $DOTBOT_HOST_CONFIG" \
&& "$DOTBOT_BIN_PATH" \
[ -r "$DOTBOT_HOST_CONFIG" ] && [ -f "$DOTBOT_HOST_CONFIG" ] &&
echo "(!) Found $DOTBOT_HOST_CONFIG" &&
"$DOTBOT_BIN_PATH" \
-d "$BASEDIR" \
--plugin-dir=tools/dotbot-brew \
--plugin-dir=tools/dotbot-include \

View File

@@ -35,10 +35,14 @@
glob: true
relink: true
path: config/*
exclude: [config/nvm]
exclude: [config/nvm, config/fzf]
~/.local/bin:
glob: true
path: local/bin/*
exclude: [local/bin/fzf]
~/.local/fzf:
glob: true
path: config/fzf/*
~/.local/man:
glob: true
path: local/man/**
@@ -55,5 +59,5 @@
- bash local/bin/dfm install all
- pipx:
file: tools/requirements-pipx.txt
stdout: false
stdout: true
stderr: true

View File

@@ -29,7 +29,9 @@ if ! declare -f msg_err > /dev/null; then
# $1 - error message (string)
msg_err()
{
# shellcheck disable=SC2317
echo "(!) ERROR: $1" >&2
# shellcheck disable=SC2317
exit 1
}
fi
@@ -39,7 +41,9 @@ if ! declare -f msg_done > /dev/null; then
# $1 - message (string)
msg_done()
{
# shellcheck disable=SC2317
echo "✓ $1"
# shellcheck disable=SC2317
return 0
}
fi
@@ -54,15 +58,15 @@ if ! declare -f array_diff > /dev/null; then
# 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
VERSION_NVM="v0.39.5"
# Loads configs for better installation experience
source "$DOTFILES/config/shared.sh"
@@ -148,13 +152,13 @@ section_install()
$0 install macos
$0 install fonts
$0 brew install
$0 install ohmyposh
#$0 install ohmyposh
$0 install asdf
$0 install composer
$0 install fzf
$0 install go
#$0 install go
$0 install cheat-databases
$0 install imagick
#$0 install imagick
$0 install nvm
$0 install npm
# $0 install ntfy
@@ -328,7 +332,8 @@ section_brew()
declare -a BREW_LIST_TRACKED_WITHOUT_DEPS
for f in "${BREW_LIST_ALL[@]}"; do
if [[ ! " ${BREW_LIST_DEPENDENCIES[@]} " =~ " ${f} " ]]; then
# shellcheck disable=SC2199
if [[ " ${BREW_LIST_DEPENDENCIES[@]} " != *" ${f} "* ]]; then
BREW_LIST_TRACKED_WITHOUT_DEPS+=("$f")
fi
done
@@ -416,7 +421,8 @@ section_helpers()
"env:Show environment variables"
"functions:Show functions"
"nvim:Show nvim keybindings"
"path:Show \$PATH dir by dir"
# shellcheck disable=SC2016
'path:Show $PATH dir by dir'
"tmux:Show tmux keybindings"
"wezterm:Show wezterm keybindings"
)
@@ -445,7 +451,29 @@ section_helpers()
esac
;;
"colors")
for i in {0..255}; do echo -en "\e[38;5;${i}m${i} "; done
max=255
start=0
while [ "$start" -le "$max" ]; do
for i in $(seq "$start" $((start + 9))); do
if [ "$i" -le "$max" ]; then
# Outputs colored number
# printf " \e[38;5;%sm%4s\e[0m" "$i" "$i"
# Outputs colored block with number inside
# printf " \e[48;5;%sm\e[38;5;15m%5s \e[0m" "$i" "$i"
# Outputs colored block and color number
# printf " \e[48;5;%sm \e[0m %3d" "$i" "$i"
# Outputs color number and colored block
printf "%3d \e[48;5;%sm \e[0m " "$i" "$i"
fi
done
printf "\n"
start=$((start + 10))
done
;;
"env")
env | sort
@@ -564,12 +592,12 @@ section_check()
case "$1" in
a | arch)
[[ "$2" = "" ]] && echo "$X_ARCH" && exit 0
[[ $X_ARCH = "$2" ]] && exit 0 || exit 1
[[ $2 == "" ]] && echo "$X_ARCH" && exit 0
[[ $X_ARCH == "$2" ]] && exit 0 || exit 1
;;
h | host | hostname)
[[ "$2" = "" ]] && echo "$X_HOSTNAME" && exit 0
[[ $X_HOSTNAME = "$2" ]] && exit 0 || exit 1
[[ $2 == "" ]] && echo "$X_HOSTNAME" && exit 0
[[ $X_HOSTNAME == "$2" ]] && exit 0 || exit 1
;;
*) menu_usage "$USAGE_PREFIX" "${MENU[@]}" ;;
esac

View File

@@ -19,8 +19,12 @@ main()
printf "\n\`\`\`\n\n- Generated on %s\n" "$(date)" >> "$DEST"
# Remove lines with "Last set from" from the file
sed -e '/^ Last set from/d' "$DEST" > "${DEST}.tmp" && mv "${DEST}.tmp" "$DEST"
# Remove unnecessary information from the output and the last line
sed -E \
-e 's/<Lua [^:]+: ([^:>]+):[0-9]+>/\1/' \
-e '/^ Last set from/d' "$DEST" \
> "${DEST}.tmp" \
&& mv "${DEST}.tmp" "$DEST"
msg "Neovim keybindings documentation generated at $DEST"
}

View File

@@ -4,7 +4,7 @@ indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferSingle"
call_parentheses = "None"
collapse_simple_statement = "Always"
collapse_simple_statement = "Never"
[sort_requires]
enabled = true

4205
yarn.lock

File diff suppressed because it is too large Load Diff